/** $Id */
EKS.Search = function ()
{
};

EKS.Search.prototype.init = function () {
  var me = this;
  jQuery("#vehiclePickup").tabs({
    spinner: EKS.SPINNER,
    cache: true
  });
  jQuery("#vehiclePickup").tabs("select" , jQuery("#initiallySelectedTab").val());

  // Search tabs and select the active context
  jQuery("#searchTabs").tabs({
    spinner: EKS.SPINNER,
    cache: true,
    load: function(event, ui) {
      jQuery(".pagination-status").hide();
      EKS.initShadowbox(true);
    }
  });
  var selectedTabId = jQuery("#searchTabs").attr("rel");
  jQuery("#searchTabs").tabs("select", selectedTabId);

   // Listen for pagination within search
  jQuery("#searchTabs div.pagination a").die("click");
  jQuery("#searchTabs div.pagination a").live("click", function(e) {
    e.preventDefault();
    var t = jQuery(e.target);
    if(!t.attr("href"))
    {
      t = t.parent("a");
    }

    // Update the currently selected tab-url and fire
    jQuery(".pagination-status").html(EKS.SPINNER);
    jQuery(".pagination-status").show();
    var selected = jQuery("#searchTabs").tabs("option", "selected");
    jQuery("#searchTabs").tabs("url", selected, t.attr("href"));
    jQuery("#searchTabs").tabs("load", selected);
  });

  // Listen to form submission in vehicle search
  jQuery("#formCurrentTypeByKey").submit(function(e) {
    e.preventDefault();

    var form = jQuery(e.target);
    var data = form.serialize();
    me.typeByKeyBegin();
    jQuery("#currentTypeElemByKey").load(form.attr("action"), data, function() {
      me.typeByKeyComplete();
    });
  });
  jQuery("#formSelectType").submit(function(e) {
    e.preventDefault();
    me.loadManufacturers();
  });

  // Special case when no vehicle type can be chosen
  if(me.isVehicleTypeSelected()) {
    me.loadManufacturers();
  }

  jQuery('#kba_part1').keyup(function(e) {
    me.jumpNext();
  });

  // Perhaps there is a kba-code preselected?
  var url = window.location.href;
  if(url.search(/kba/) != -1 && jQuery("#kba_part1").val() != '' && jQuery("#kba_part2").val() != '')
  {
    jQuery("#formCurrentTypeByKey").trigger("submit");
  }
};

/**
 * Check if the type of the vehicle is pre-selected
 */
EKS.Search.prototype.isVehicleTypeSelected = function()
{
  return jQuery("input[type=hidden]#currentType").length > 0;
};

/**
 * Load the manufacturers depending on the selected type
 */
EKS.Search.prototype.loadManufacturers = function() {
  var me = this;

  var form = jQuery("#formSelectType");
  var data = form.serialize();
  me.findManufacturersBegin();

  jQuery("#currentManufacturerElem").load(form.attr("action"), data, function() {
    me.findManufacturersComplete();
  });
};

/**
 * Jump to the next kba-part-edit-box
 */
EKS.Search.prototype.jumpNext = function () {
  if (jQuery('#kba_part1') && 4 == jQuery("#kba_part1").val().length)
  {
    jQuery("#kba_part2").val("");
    jQuery("#kba_part2").focus();
  }
};

/**
 * User selected a model from the dropdown-list
 * @param {Object} modelID
 */
EKS.Search.prototype.selectModel = function (modelID) {
  if(modelID <= 0)
  {
    alert("Bitte selektieren Sie eine Modell aus der Liste.");
    return;
  }

  var url = Base + 'search/currentType';
  var params = 'currentObject=' + modelID;

  // Prepare loading
  jQuery("#progressSearchByManufacturer").show("fast");
  jQuery("#currentTypeElem").hide("fast");

  // Load the data
  jQuery("#currentTypeElem").load(url, params, function() {
    jQuery("#progressSearchByManufacturer").hide("fast");
    jQuery("#currentTypeElem").show("fast");

    // Scroll to bottom
    var scrollElem = $('viaManufacturer');
    window.scroll (0, scrollElem.scrollHeight);
  });
};

/**
 *
 * @param {Object} modelTypeID
 */
EKS.Search.prototype.selectModelType = function (modelTypeID) {
  var url = Base + 'search/completeSelection';
  var params = 'currentType=' + modelTypeID;

  if(typeof pageTracker != "undefined" && (jQuery('#trackingUrl').length == 1 && pageTracker))
  {
    pageTracker._trackPageview(jQuery('#trackingUrl').val() + 'tecdoc-type/' + modelTypeID);
  }

  window.location = Base + 'catalog/index/type/' + modelTypeID;
};

/**
 * User selected the manufacturer from the list
 */
EKS.Search.prototype.selectManufacturer = function () {
  if(jQuery("#currentManufacturer").val() <= 0)
  {
    alert("Bitte selektieren Sie einen Hersteller aus der Liste.");
    return;
  }

  // Build parameters
  var url = EKS.Base + 'search/currentObject';
  var params = 'currentManufacturer=' + jQuery("#currentManufacturer").val();

  // Prepare loading
  jQuery('#progressSearchByManufacturer').show("fast");
  jQuery("#currentObjectElem").hide("fast");
  jQuery("#currentTypeElem").hide("fast");

  jQuery("#currentObjectElem").load(url, params, function() {
    // Loading is complete
    jQuery('#progressSearchByManufacturer').hide("fast");
    jQuery("#currentTypeElem").hide("fast");
    jQuery("#currentObjectElem").show("fast");
    if(typeof (instanceConfig.searchModelSize) != 'undefinied')
    {
      jQuery("select#model").attr("size", instanceConfig.searchModelSize);
    }

    // Scroll to bottom
    var scrollElem = $('viaManufacturer');
    window.scroll (0, scrollElem.scrollHeight);
  });
};

/**
 * Load by key started
 * @param json
 */
EKS.Search.prototype.typeByKeyBegin = function() {
  jQuery("#progresscurrentTypeElemByKey").show("fast");
  jQuery("#currentTypeElemByKey").hide('fast');
};

/**
 * Load be key is complete
 * @param json
 */
EKS.Search.prototype.typeByKeyComplete = function() {
  jQuery("#progresscurrentTypeElemByKey").hide("fast");
  jQuery("#currentTypeElemByKey").show('fast');

  // Click the first row if only one match is found
  if(1 == jQuery("#currentTypeElemByKey table.grid.selectable tr.selectable").length)
  {
    var elem = jQuery("#currentTypeElemByKey table.grid.selectable tr.selectable:first");
    elem.trigger("click");
  }
};

/**
 * Search for manufacturers started
 */
EKS.Search.prototype.findManufacturersBegin = function() {
  jQuery("#progressSearchByManufacturer").show();
  jQuery("#currentManufacturerElem").hide("fast");
  jQuery("#currentObjectElem").hide("fast");
  jQuery("#currentTypeElem").hide("fast");
};

/**
 * Search for manufactures completed
 */
EKS.Search.prototype.findManufacturersComplete = function() {
  jQuery("#progressSearchByManufacturer").hide();
  jQuery("#currentManufacturerElem").show("fast");
  if(typeof (instanceConfig.searchManufacturerSize) != 'undefinied')
  {
    jQuery("select#currentManufacturer").attr("size", instanceConfig.searchManufacturerSize);
  }
};

/// Create instance and add init-call
EKS.SearchInst = new EKS.Search ();
jQuery(function() {
  EKS.SearchInst.init();
});