var models = new Array();
var originalsModels = new Array();
var loaded = false;
var blockUIEnabled = false;
var wdStarted = false;

$(document).ready(function()
{
  // On garde en mémoire l'ensemble des modèles actuellement en liste
  saveModels();
  // On charge via une méthode AJAX tous les modèles en fonction de la marque
  loadModels();
  // Si le filtre a déjà une marque sélectionné, il faut afficher uniquement les bons modèles
  sortModels();
  // Attribution d'un listener sur le changement de marque
  $('#vehicle_filters_make_id').change(makeIdChange);
});

function makeIdChange()
{    
  // Cette fonction attend que les modèles aient bien été
  // chargés avant d'effectuer du trie
  if(!loaded)
  {    
    // Affichage d'un BlockUI (pour faire comprendre qu'on est en attente)
    if(!blockUIEnabled)
    {
      $('form').block({message: '<h3><img src="/images/lightbox/lightbox-ico-loading.gif" style="height: 15px" /> Chargement des modèles en cours</h3>', css: {width: '90%', padding: '5px'}});
      setTimeout(wdUnblockForm,4000);
      blockUIEnabled = true;
    }
    if(!wdStarted) 
      setTimeout(makeIdChange,500); // Rappel la fonction makeIdChange après 500 millisecondes

    return;
  }
  // Supperssion du BlockUI s'il y était
  if(blockUIEnabled)
  {
    $('form').unblock();
    blockUIEnabled = false;
  }
  // Si on est là c'est que le tableau models est chargé
  // On peut donc effectuer notre tri de modèles
  // Sélection de l'objet à la base de nos manipulations
  sortModels();
}

function wdUnblockForm()
{
  if(blockUIEnabled && !wdStarted)
  {
    wdStarted = true;
    setTimeout(wdUnblockForm,1010);
    return;
  }
  
  if(blockUIEnabled)
  {
     $('form').unblock();
     blockUIEnabled = false;
     wdStarted = false;
  }
}

function sortModels()
{
  if(!loaded)
  {
    setTimeout(sortModels,500); // Rappel la fonction makeIdChange après 500 millisecondes
    return;
  }
  _sortModels();
}

function _sortModels()
{
  // On récupère la valeur actuellement sélectionnée
  var model_id = $('#vehicle_filters_model_id').val();

  // On supprime toutes les options actuelles
  $('#vehicle_filters_model_id')
          .find('option').remove().end()
          // On ajoute tout le temps l'option "Tous"
          .append('<option value="">Tous</option>');
          
  // On redonne la bonne taille au select :
  $('#vehicle_filters_model_id').width($('#vehicle_filters_make_id').width());
  // Ajout de tous les modèles associés à la marque choisie
  var make_id = $('#vehicle_filters_make_id').val();
  if(make_id=='')
  {
    // Re-affichage de tous les modèles avec sélection de l'ancien modèle
    for(var i=0; i<originalsModels.length; i++)
    {
      if(model_id==originalsModels[i][0])
        $('#vehicle_filters_model_id').append('<option selected="selected" value="'+originalsModels[i][0]+'">'+originalsModels[i][1]+'</option>');
      else
        $('#vehicle_filters_model_id').append('<option value="'+originalsModels[i][0]+'">'+originalsModels[i][1]+'</option>');
    }
  }
  else if(models[make_id]!=null)
  {
    // Affichage des modèles associés à la marque sélectionnée
    for(var i=0; i<models[make_id].length; i++)
    {
      if(model_id==models[make_id][i][0])
        $('#vehicle_filters_model_id').append('<option selected="selected" value="'+models[make_id][i][0]+'">'+models[make_id][i][1]+'</option>');
      else
        $('#vehicle_filters_model_id').append('<option value="'+models[make_id][i][0]+'">'+models[make_id][i][1]+'</option>');
    }
  }
}

function saveModels()
{
  var index = 0;
  $('#vehicle_filters_model_id').find('option').each(function()
  {
    if($(this).val()!='')
    {
      originalsModels[index] = new Array();
      originalsModels[index][0] = $(this).val();
      originalsModels[index][1] = $(this).text();
      index++;
    }
  });
}

function loadModels()
{
  if(!loaded)
  {    
    $.getJSON('/liste-modeles-json', function(data)
    {
     $.each(data.items, function(index)
      {
        var make_id = this.make_id;
        $.each(this.models, function(model)
        {          
          if(models[make_id]==undefined)
            models[make_id] = new Array();
          models[make_id][models[make_id].length] = new Array();
          models[make_id][models[make_id].length-1][0] = this.value;
          models[make_id][models[make_id].length-1][1] = this.name;
        });
      });
      loaded = true;
    });
  }
}

