/* objets requis :
 * vitrine_select_rubriques (Array)
 * vitrine_select_chassis (Array)
 * vitrine_chassis_libelle (Array)
 */

// Rempli les options d'un <select> à l'aide des données du tableau vitrine_select_rubriques
function fillSelect(objSelect, rubriqueValue)
{
   objSelect.empty().append('<option value="">Tous</option>');

   jQuery.each(vitrine_select_rubriques, function()
   {
      if (this.parent_id == rubriqueValue)
         objSelect.append('<option value="' + this.value + '">' + this.display + '</option>');
   });
}

function fillSelectChassis(rubriqueValue, fromSelect)
{
   //console.log(rubriqueValue, fromSelect);
   // param dépendant du HTML
   var vitrine_chassis_id = "select_chassis";
   var select_ids = ["select_univers", "select_marque", "select_modele", "select_sous-modele"];

   var chassis = jQuery("#"+vitrine_chassis_id);
   var chassis_value = chassis.val();

   // Recherche de la position du select appelant
   var select_id = 0;
   for(var i in select_ids)
   {
      if (select_ids[i] == fromSelect)
         select_id = i;
   }

   // On récupère la valeur de la rubrique de plus haut niveau avec une valeur différente de "Tous"
   while (rubriqueValue == "" && select_id > 0)
   {
      select_id--;
      rubriqueValue = jQuery("#"+select_ids[select_id]).val();
   }

   // On remplit le <select> avec les options
   chassis.empty().append('<option value="">Tous</option>');
   jQuery.each(vitrine_select_chassis, function()
   {
      if (this.rub_id == rubriqueValue)
         chassis.append('<option value="' + this.cha_id + '">' +
                        vitrine_chassis_libelle[this.cha_id] + '</option>');
   });

   // Restoration de la valeur précédemment sélectionnée
   chassis.attr("value", chassis_value);

   // Si le <select> contient plus d'une option (plus "Tous"), on l'affiche, sinon on le cache
   if (chassis[0].length > 2)
      chassis.parent().show();
   else
      chassis.parent().hide();
}

// Lie 2 éléments 'select' pour que les options du fils dépendent de l'option sélectionnée du père
function dependentSelect(parentId, childId)
{
   jQuery("#"+parentId).change(function()
   {
      var triggerChassis = true;
      var child = jQuery("#"+childId);
      var rubrique = this.value;
      var selectedValues = Array.prototype.slice.call(arguments); // Converti les param en tableau
      selectedValues.shift(); // supprime l'objet event du tableau

      if (rubrique != "") // Si une valeur autre que "Tous" a été sélectionnée
      {
         fillSelect(child, rubrique);

         // Si le <select> fils n'est pas vide, on l'affiche, sinon on le cache
         if (child[0].length > 1)
            child.parent().show();
         else
            child.parent().hide();

         if (selectedValues.length > 0)
         {  // Trigger change appelé avec des paramètres
            child.attr("value", selectedValues[0]); // sélection de l'option du select fils
            child.trigger("change", selectedValues.slice(1));
            triggerChassis = false;
         }
         else
         {
            child.attr("value", "");
            child.change();
         }
      }
      else // "Tous" selectionné
      {
         child.attr("value", "");
         child.parent().hide();
         child.change();
      }
      // Met à jour le <select> chassis
      if (triggerChassis)
         fillSelectChassis(rubrique, parentId);
   })
}

// Positionne les select avec les valeurs choisies
// Paramètres : id du select le plus haut, tableau des valeurs
function selectValues(select_id, arrayValues)
{
   jQuery("#"+select_id).attr("value", arrayValues[0]).trigger("change",arrayValues.slice(1));
   fillSelectChassis(arrayValues[arrayValues.length-1]);
}

function initSelects()
{
   dependentSelect("select_univers", "select_marque");
   dependentSelect("select_marque", "select_modele");
   dependentSelect("select_modele", "select_sous-modele");
   fillSelect(jQuery("#select_univers"),"");
}
