var selected_type, selected_make, selected_year, selected_model, selected_version, selected_tyre;
var selected_type2, selected_width, selected_aspect, selected_diameter;
var cfg;
var ie6;

var settings = 
{
  "fi_FI":
  {
    "text_select": "Valitse",
    "result_url": "/tyreselector_results",
    "default_tyre_type": 1
  },

  "en_US": 
  {
    "text_select": "Select",
    "result_url": "/tyre-selector-results",
    "default_tyre_type": 2
  },

  "fr_FR": 
  {
    "text_select": "Sélectionner",
    "result_url": "/tyre-selector-results-fr",
    "default_tyre_type": 2
  },

  "cs_CZ":
  {
    "text_select": "Vybrat",
    "result_url": "/vyhledavac-pneumatik-results",
    "default_tyre_type": 2
  },

  "de_DE":
  {
    "text_select": "Wählen",
    "result_url": "/reifensucher-results",
    "default_tyre_type": 2
  },

  "ru_KZ":
  {
    "text_select": "Выбрать",
    "result_url": "/tyre-selector-results-kzru",
    "default_tyre_type": 1
  },

  "nn_NO": 
  {
    "text_select": "Velg",
    "result_url": "/tyre-selector-results-no",
    "default_tyre_type": 1
  },

  "ru_RU": 
  {
    "text_select": "Выбрать",
    "result_url": "/tyre-selector-results-ru",
    "default_tyre_type": 1
  },

  "de_CH": 
  {
    "text_select": "Wählen",
    "result_url": "/reifensucher-results-chde",
    "default_tyre_type": 2
  },

  "sv_SE":
  {
    "text_select": "Välj",
    "result_url": "/tyre-selector-results-se",
    "default_tyre_type": 1
  },

  "uk_UA":
  {
    "text_select": "Обрати",
    "result_url": "/tyre-selector-results-ua",
    "default_tyre_type": 1
  }
}


$(document).ready( function () {

  if (!$("#tyreselector").length) return;

  var urlvars = getUrlVars();
  
  cfg = (settings[ globalsitelang ] ? settings[ globalsitelang ] : settings[ 'en_US' ]);
  ie6 = ($.browser.msie && $.browser.version < 7 ? true : false);

  $("#tyreselector_car input:submit").attr("disabled", "disabled").css("opacity", 0.5);

  var selectedvalues = $.cookie("tyreselector");
  if (selectedvalues)
  {
    var tmp = selectedvalues.split("|");
    selected_type = tmp[0];
    selected_make = tmp[1];
    selected_year = tmp[2];
    selected_model = tmp[3];
    selected_version = tmp[4];
    selected_tyre = tmp[5]
    selected_type2 = tmp[6];
    selected_width = tmp[7];
    selected_aspect = tmp[8];
    selected_diameter = tmp[9];

    // Set size-form parameters only if GET-parameters are not defined
    if (selected_width && !urlvars[ 'width' ]) $("#tyre_width").val( selected_width );
    if (selected_aspect && !urlvars[ 'height' ]) $("#tyre_aspect").val( selected_aspect );
    if (selected_diameter && !urlvars[ 'radius' ]) $("#wheel_diameter").val( selected_diameter );
    
    debug("Type: "+ selected_type);
    debug("Make: "+ selected_make);
    debug("Year: "+ selected_year);
    debug("Model: "+ selected_model);
    debug("Version: "+ selected_version);
    debug("Tyre: "+ selected_tyre);
    debug("Type2: "+ selected_type2);
    debug("Width: "+ selected_width);
    debug("Aspect: "+ selected_aspect);
    debug("Diameter: "+ selected_diameter);
  }

  // Set tyre type    
  if (selected_type) $("#tyreselector_car [@value="+ selected_type +"]").attr("checked", "checked");
  else if (cfg[ "default_tyre_type" ]) $("#tyreselector_car [@name=tyre_type]:eq("+ (cfg[ 'default_tyre_type' ] - 1) +")").attr("checked", "checked");
  else $("#tyreselector_car [@name=tyre_type]:last").attr("checked", "checked");

  if (selected_type2) $("#tyreselector_size [@value="+ selected_type2 +"]").attr("checked", "checked");
  else if (cfg[ "default_tyre_type" ]) $("#tyreselector_size [@name=tyre_type]:eq("+ (cfg[ 'default_tyre_type' ] - 1) +")").attr("checked", "checked");
  else $("#tyreselector_size [@name=tyre_type]:last").attr("checked", "checked");

  // GET-parameters defined, submit size-form
  if (urlvars[ 'width' ] && urlvars[ 'height' ] && urlvars[ 'radius' ])
    $("#tyreselector_size").searchBySize();
    
  // Load makes
  getdata("make");

  if (selected_make) 
  {
    if (ie6) setTimeout( function () { $("#make").val( selected_make ) }, 1);
    else $("#make").val( selected_make );
    getdata("year");
  }

  if (selected_year) 
  {
    if (ie6) setTimeout( function () { $("#year").val( selected_year ) }, 1);
    else $("#year").val( selected_year );
    getdata("model");
  }
  
  if (selected_model) 
  {
    if (ie6) setTimeout( function () { $("#model").val( selected_model ) }, 1);
    else $("#model").val( selected_model );
    getdata("version");
  }

  if (selected_version) 
  {
    if (ie6) setTimeout( function () { $("#version").val( selected_version ) }, 1);
    else $("#version").val( selected_version );
    getdata("tyres");
  }

  if (selected_tyre)
  {
    if (ie6) setTimeout( function () { $("#tyre_size").val( selected_tyre ) }, 1);
    else $("#tyre_size").val( selected_tyre );

    if (!ie6 && !urlvars[ 'width' ] && !urlvars[ 'height' ] && !urlvars[ 'radius' ])
      $("#tyreselector_car").searchByCar();
  }

  // Load years  
  $("#make").change( function () {
    selected_make = $(this).val();
    selected_year = '';
    selected_model = '';
    selected_version = '';
    getdata("year");
  });

  // Load models
  $("#year").change( function () {
    selected_year = $(this).val();
    selected_model = '';
    selected_version = '';
    getdata("model");
  });

  // Load versions
  $("#model").change( function () {
    selected_model = $(this).val();
    selected_version = '';
    getdata("version");
  });

  // Load tyres
  $("#version").change( function () {
    selected_version = $(this).val();
    getdata("tyres");
  });

  // Tyre size selected
  $("#tyre_size").change( function () {
    selected_tyre = $(this).val();
    $("#tyreselector_car").searchByCar();
  });

  // Search by car -form
  $("#tyreselector_car").submit( function (e) {
    e.preventDefault();
    $(this).searchByCar();
  });

  // Search by size -form
  $("#tyreselector_size").submit( function (e) {
    e.preventDefault();
    $(this).searchBySize();
  });

});


$.fn.searchByCar = function () 
{
  if (!this.length) return;

  $(".ajax_loader").show(500);

  var tyretype = $(this).find("[@name=tyre_type]:checked").val();
  var tyresize = '';
  if ($("#tyre_size").val())
    tyresize = $("#tyre_size").val().split("/");
  else return;

  var params = {
    "tyre_type": tyretype,
    "tyre_width": tyresize[0],
    "tyre_aspect": tyresize[1],
    "wheel_diameter": tyresize[3]
  };

  storeSelectedValues();

  $.get(cfg['result_url'], params, function (html) 
  {
    $(".ajax_loader").fadeOut(500);
    $("#tyreselector_results").html(html);
  }, "html");
  
  if (ie6) pngFix();
}


$.fn.searchBySize = function () 
{
  if (!this.length) return;
  
  $(".ajax_loader").show(500);

  var tyretype = $(this).find("[@name=tyre_type]:checked").val();
  var params = {
    "tyre_type": tyretype, 
    "tyre_width": $("#tyre_width").val(),
    "tyre_aspect": $("#tyre_aspect").val(),
    "wheel_diameter": $("#wheel_diameter").val()
  };

  storeSelectedValues();

  $.get(cfg['result_url'], params, function (html) 
  {
    $(".ajax_loader").fadeOut(500);
    $("#tyreselector_results").html(html);
  }, "html");
  
  if (ie6) pngFix();
}


function getdata (mode)
{
  var url = '';
  var params = {};

  if (mode == 'make')
  {
    url = '/tyreinfo_makes.xml';
  }

  if (mode == 'year')
  {
    url = '/tyreinfo_years.xml';
    params['make'] = selected_make;
  }

  if (mode == 'model')
  {
    url = '/tyreinfo_models.xml';
    params['make'] = selected_make;
    params['year'] = selected_year;
  }

  if (mode == 'version')
  {
    url = '/tyreinfo_versions.xml';
    params['make'] = selected_make;
    params['year'] = selected_year;
    params['model'] = selected_model;
  }

  if (mode == 'tyres')
  {
    url = '/tyreinfo_tyres.xml';
    params['tyres'] = selected_version;
  }
 
  $.ajax({
    "type": "POST",
    "url": url,
    "data": params,
    "async": false,
    "success": function (xml) 
    {
      if (mode == 'make')
      {
        $("#make").append('<option disabled="disabled">'+ cfg['text_select'] +'</option>');
        $(xml).find("make").each( function () {
          $("#make").append('<option value="'+ $(this).attr("id") +'">'+ $(this).text() +'</option>');
        });
       
        if (!selected_make) 
        {
          if (ie6) setTimeout( function () { $("#make option:first").attr("selected", "selected") }, 1);
          else $("#make option:first").attr("selected", "selected");
        }

        $("#year option").remove()
        $("#model option").remove();
        $("#version option").remove();
        $("#tyre_size option").remove();
      }

      if (mode == 'year')
      {
        $("#year option").remove();

        $("#year").append('<option disabled="disabled">'+ cfg['text_select'] +'</option>');
        $(xml).find("year").each( function () {
          $("#year").append('<option value="'+ $(this).text() +'">'+ $(this).text() +'</option>');
        });
        
        if (!selected_year)
        {
          if (ie6) setTimeout( function () { $("#year option:first").attr("selected", "selected") }, 1);
          else $("#year option:first").attr("selected", "selected");
        }
         
        $("#year").removeAttr("disabled");

        $("#model option").remove();
        $("#version option").remove();
        $("#tyre_size option").remove();
      }
      
      if (mode == 'model')
      {
        $("#model option").remove();

        $("#model").append('<option disabled="disabled">'+ cfg['text_select'] +'</option>');
        $(xml).find("model").each( function () {
          $("#model").append('<option value="'+ $(this).attr("id") +'">'+ $(this).text() +'</option>');
        });
        
        if (!selected_model)
        {
          if (ie6) setTimeout( function () { $("#model option:first").attr("selected", "selected") }, 1);
          else $("#model option:first").attr("selected", "selected");
        }

        $("#model").removeAttr("disabled");

        $("#version option").remove();
        $("#tyre_size option").remove();
      }
    
      if (mode == 'version')
      {
        $("#version option").remove();

        $("#version").append('<option disabled="disabled">'+ cfg['text_select'] +'</option>');
        $(xml).find("version").each( function () {
          $("#version").append('<option value="'+ $(this).attr("tyres") +'">'+ $(this).text() +'</option>');
        });
        
        if (!selected_version) 
        {
          if (ie6) setTimeout( function () { $("#version option:first").attr("selected", "selected") }, 1);
          else $("#version option:first").attr("selected", "selected");
        }

        $("#version").removeAttr("disabled");

        $("#tyre_size option").remove();
      }
    
      if (mode == 'tyres')
      {
        $("#tyre_size option").remove();

        $("#tyre_size").append('<option disabled="disabled">'+ cfg['text_select'] +'</option>');

        var tyresizes = {};
        $("tyre", xml).each( function () {
          var tmp = $(this).text().split("\\");
          tyresizes[ tmp[0] ]++;
          tyresizes[ tmp[1] ]++;
        });
        $.each(tyresizes, function (size, n) {
          var tmp = size.split("/");
          var sizestring = tmp[0] +"/"+ tmp[1] + tmp[2] + tmp[3];
          $("#tyre_size").append('<option value="'+ size +'">'+ sizestring +'</option>');
        });
    
        if (!selected_tyre) 
        {
          if (ie6) setTimeout( function () { $("#tyre_size option:first").attr("selected", "selected") }, 1);
          else $("#tyre_size option:first").attr("selected", "selected");
        }

        $("#tyre_size").removeAttr("disabled");

        $("#tyreselector input:submit").removeAttr("disabled").css("opacity", 1.0);
      }
      else
      {
        $("#tyreselector_car input:submit").attr("disabled", "disabled").css("opacity", 0.5);
      }
    }
  });
}


/*
function selectValue (select, value)
{
  if (value)
  {
    if (ie6) setTimeout( function () { select.val( value ) }, 1);
    else select.val( value );
  }
}
*/


function storeSelectedValues ()
{
  var selectedvalues = [
    $("#tyreselector_car").find("[@name=tyre_type]:checked").val(),
    $("#make").val(),
    $("#year").val(),
    $("#model").val(),
    $("#version").val(),
    $("#tyre_size").val(),
    $("#tyreselector_size").find("[@name=tyre_type]:checked").val(),
    $("#tyre_width").val(),
    $("#tyre_aspect").val(),
    $("#wheel_diameter").val() 
  ];
  $.cookie("tyreselector", selectedvalues.join("|"), {"path": "/"});
}


function debug (s)
{
  return;
  $("#debug").append(s +"<br />");
}


function getUrlVars ()
{
  var vars = [], hash;
  var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
  for (var i = 0; i < hashes.length; i++)
  {
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    vars[hash[0]] = hash[1];
  }
  return vars;
}


function pngFix ()
{
  setTimeout( function () {
    $("#tyreselector_results").find("img[src$='.png'], input[src$='.png']").each( function () {
      $(this).css({
        "height": this.height,
        "width": this.width,
        "behavior": "url('/files/nokiantyres/js/iepngfix.htc')"
      });
    });
  }, 500);
}


