$(document).ready(function() {
	
	// ########## Sélection d'une catégorie
	$('#searchEngine #moteur_categorie').change(function() {
		// Mise à jour de la liste des marques
		selectedCategorie = $(this).val();
		updateMarques(selectedCategorie);

		// Mise à jour de la liste des marques
		$('#searchEngine #moteur_marque').val(0);
		// Mise à jour de la liste des modèles
		$('#searchEngine #moteur_modele').attr('disabled', 'disabled');
		$('#searchEngine #moteur_modele').val(0);
//		selectedMarque = ($('#searchEngine #moteur_marque').val() != '')? $('#searchEngine #moteur_marque').val() : 0;
//		updateModeles(selectedCategorie, selectedMarque);
		
		// On regarde si la liste des versions est affichée et on la met à jour si c'est le cas
		if($('#searchEngine #moteur_version').size() > 0) {
			$('#searchEngine #moteur_version').attr('disabled', 'disabled');
			$('#searchEngine #moteur_version').val(0);
			// Mise à jour de la liste des versions
//			selectedModele = ($('#searchEngine #moteur_modele').val() != '')? $('#searchEngine #moteur_modele').val() : 0;
//			updateVersions(selectedCategorie, 0, 0);
		}
	});
	
	// ########## Sélection d'une marque
	$('#searchEngine #moteur_marque').change(function() {
		// Mise à jour de la liste des modèles
		selectedCategorie = ($('#searchEngine #moteur_categorie').val() != '')? $('#searchEngine #moteur_categorie').val() : 0;
		selectedMarque = $(this).val();
		// Si la marque sélectionnée est "Toutes les marques", on grise les selects des modèles au lieu de la mettre à jour
		if(selectedMarque != 0) {
			updateModeles(selectedCategorie, selectedMarque);
			$('#searchEngine #moteur_modele').attr('disabled', '');
		} else {
			$('#searchEngine #moteur_modele').attr('disabled', 'disabled');
			$('#searchEngine #moteur_modele').val(0);
		}
		
		// On regarde si la liste des versions est affichée et on la met à jour si c'est le cas
		if($('#searchEngine #moteur_version').size() > 0) {
			$('#searchEngine #moteur_version').attr('disabled', 'disabled');
			$('#searchEngine #moteur_version').val(0);
			// Mise à jour de la lsite des versions
//			selectedModele = ($('#searchEngine #moteur_modele').val() != '')? $('#searchEngine #moteur_modele').val() : 0;
//			updateVersions(selectedCategorie, selectedMarque, 0);
		}
	});
	
	
	// La mise à jour de la liste des versions lors d'un éventuel changement de la liste des modèles ne ce fait que dans le cas ou une liste des versions existe
	if($('#searchEngine #moteur_version').size() > 0) {
		// ########## Sélection d'un modèle
		$('#searchEngine #moteur_modele').change(function() {
			$('#searchEngine #moteur_version').attr('disabled', '');
			// Mise à jour de la lsite des versions
			selectedCategorie = ($('#searchEngine #moteur_categorie').val() != '')? $('#searchEngine #moteur_categorie').val() : 0;
			selectedMarque = ($('#searchEngine #moteur_marque').val() != '')? $('#searchEngine #moteur_marque').val() : 0;
			selectedModele = $(this).val();
			
			if(selectedModele != 0) {
				updateVersions(selectedCategorie, selectedMarque, selectedModele);
			} else {
				$('#searchEngine #moteur_version').attr('disabled', 'disabled');
				$('#searchEngine #moteur_version').val(0);
			}
		});
	}
	
	
	// ##############################################################################
	// ############									SLIDER
	// ##############################################################################

	// Bornes minimums / maximums
	var prixMiniBase = parseInt($('span#prixMiniBase').text());
	var prixMaxiBase = parseInt($('span#prixMaxiBase').text());
	var consoMiniBase = parseInt($('span#consoMiniBase').text());
	var consoMaxiBase = parseInt($('span#consoMaxiBase').text());
	var kmMiniBase = parseInt($('span#kmMiniBase').text());
	var kmMaxiBase = parseInt($('span#kmMaxiBase').text());
	var anneeMiniBase = parseInt($('span#anneeMiniBase').text());
	var anneeMaxiBase = parseInt($('span#anneeMaxiBase').text());
	// Valeurs de départ
	var prixMiniStart = parseInt($('input#moteur_prixMini').val());
	var prixMaxiStart = parseInt($('input#moteur_prixMaxi').val());
	var consoMiniStart = parseInt($('input#moteur_consoMini').val());
	var consoMaxiStart = parseInt($('input#moteur_consoMaxi').val());
	var kmMiniStart = parseInt($('input#moteur_kmMini').val());
	var kmMaxiStart = parseInt($('input#moteur_kmMaxi').val());
	var anneeMiniStart = parseInt($('input#moteur_anneeMini').val());
	var anneeMaxiStart = parseInt($('input#moteur_anneeMaxi').val());
	
	// Préremplissage des spans d'affichage
	$("#homeSearchPrixMiniLib").text(prixMiniStart);
	$("#homeSearchPrixMaxiLib").text(prixMaxiStart+"+");
	$("#homeSearchConsommationMiniLib").text(consoMiniStart);
	$("#homeSearchConsommationMaxiLib").text(consoMaxiStart);
	$("#homeSearchKmMiniLib").text(kmMiniStart);
	$("#homeSearchKmMaxiLib").text(kmMaxiStart+"+");
	$("#homeSearchAnneeMiniLib").text(anneeMiniStart);
	$("#homeSearchAnneeMaxiLib").text(anneeMaxiStart);
	// Préremplissage des inputs
	$('input#moteur_prixMini').val(prixMiniStart);
	$('input#moteur_prixMaxi').val(prixMaxiStart+"+");
	$('input#moteur_consoMini').val(consoMiniStart);
	$('input#moteur_consoMaxi').val(consoMaxiStart);
	$('input#moteur_kmMini').val(kmMiniStart);
	$('input#moteur_kmMaxi').val(kmMaxiStart+"+");
	$('input#moteur_anneeMini').val(anneeMiniStart);
	$('input#moteur_anneeMaxi').val(anneeMaxiStart);

	
	// Déclaration des sliders
	$("#slider-range-euro").slider({
		range: true,
		step: 1000,
		min: prixMiniBase,
		max: prixMaxiBase,
		values: [prixMiniStart, prixMaxiStart],
		slide: function(event, ui) {
			minVal = ui.values[0];
			maxVal = ui.values[1]
			// Libellés
			if(minVal != 0 && minVal == prixMiniBase)
				$("#homeSearchPrixMiniLib").text(minVal+'+');
			else
				$("#homeSearchPrixMiniLib").text(minVal);
			if(maxVal != 0 && maxVal == prixMaxiBase)
				$("#homeSearchPrixMaxiLib").text(maxVal+'+');
			else
				$("#homeSearchPrixMaxiLib").text(maxVal);
			// Inputs
			$('input#moteur_prixMini').val(minVal);
			$('input#moteur_prixMaxi').val(maxVal);
		}
	});
	
	$("#slider-range-conso").slider({
		range: true,
		min: consoMiniBase,
		max: consoMaxiBase,
		values: [consoMiniStart, consoMaxiStart],
		slide: function(event, ui) {
			minVal = ui.values[0];
			maxVal = ui.values[1]
			// 	Libellés
			if(minVal != 0 && minVal == consoMiniBase)
				$("#homeSearchConsommationMiniLib").text(minVal+'-');
			else
				$("#homeSearchConsommationMiniLib").text(minVal);
			if(maxVal != 0 && maxVal == consoMaxiBase)
				$("#homeSearchConsommationMaxiLib").text(maxVal+'+');
			else
				$("#homeSearchConsommationMaxiLib").text(maxVal);
			// Inputs
			$('input#moteur_consoMini').val(minVal);
			$('input#moteur_consoMaxi').val(maxVal);
		}
	});
	
	$("#slider-range-km").slider({
		range: true,
		step: 5000,
		min: kmMiniBase,
		max: kmMaxiBase,
		values: [kmMiniStart, kmMaxiStart],
		slide: function(event, ui) {
			minVal = ui.values[0];
			maxVal = ui.values[1]
			// 	Libellés
   			if(minVal != 0 && minVal == kmMiniBase)
				$("#homeSearchKmMiniLib").text(minVal+'-');
			else
				$("#homeSearchKmMiniLib").text(minVal);
			if(maxVal != 0 && maxVal == kmMaxiBase)
				$("#homeSearchKmMaxiLib").text(maxVal+'+');
			else
				$("#homeSearchKmMaxiLib").text(maxVal);
			// Inputs
			$('input#moteur_kmMini').val(minVal);
			$('input#moteur_kmMaxi').val(maxVal);
		}
	});
	
	$("#slider-range-annee").slider({
		range: true,
		min: anneeMiniBase,
		max: anneeMaxiBase,
		values: [anneeMiniStart, anneeMaxiStart],
		slide: function(event, ui) {
			minVal = ui.values[0];
			maxVal = ui.values[1]
			// 	Libellés
   			if(minVal != 0 && minVal == anneeMiniBase)
				$("#homeSearchAnneeMiniLib").text(minVal+'-');
			else
				$("#homeSearchAnneeMiniLib").text(minVal);
			if(maxVal != 0 && maxVal == anneeMaxiBase)
				$("#homeSearchAnneeMaxiLib").text(maxVal+'+');
			else
				$("#homeSearchAnneeMaxiLib").text(maxVal);
			// Inputs
			$('input#moteur_anneeMini').val(minVal);
			$('input#moteur_anneeMaxi').val(maxVal);
		}
	});
	
});



// ##############################################################################
// ############				FONCTIONS DE RECUPERATION DES DONNEES POUR LES LISTES
// ##############################################################################
// Mise à jour de la liste des marques
var updateMarques = function(selectedCategorie) {
	$.ajax({
		type: "POST",
		url: "/retrieveMarques/"+selectedCategorie,
		success: function(data) {
			// On récupère le libellé de la première option
			lib = $('#searchEngine #moteur_marque option:first').html();
			// On récupère l'option sélectionnée
			selectedMarque=  $('#searchEngine #moteur_marque').val();
			// On vide la liste
			$('#searchEngine #moteur_marque').empty();
			// On ajoute le libellé déjà existant
			$('#searchEngine #moteur_marque').append('<option>'+lib+'</option>');
			// On ajoute toutes les marques récupérées
			$('#searchEngine #moteur_marque').append(data);
//			for(i in data.marques) {
//				$('#searchEngine #moteur_marque').append('<option value="'+data.marques[i].id+'">'+data.marques[i].name+'</option>');
//			}
			// On resélectionne la marque précedemment sélectionnée si elle est toujours dans la liste
			$('#searchEngine #moteur_marque').val(0);
			$('#searchEngine #moteur_marque').val(selectedMarque);
		}
	});
}

//Mise à jour de la liste des modèles
var updateModeles = function(selectedCategorie, selectedMarque) {
	$.ajax({
		type: "POST",
		url: "/retrieveModeles/"+selectedCategorie+'/'+selectedMarque,
		success: function(data) {
			// On récupère le libellé de la première option
			lib = $('#searchEngine #moteur_modele option:first').html();
			// On récupère l'option sélectionnée
			selectedModele =  $('#searchEngine #moteur_modele').val();
			// On vide la liste
			$('#searchEngine #moteur_modele').empty();
			// On ajoute le libellé déjà existant
			$('#searchEngine #moteur_modele').append('<option>'+lib+'</option>');
			// On ajoute tous les modèles récupérés
			$('#searchEngine #moteur_modele').append(data);
//			for(i in data.modeles) {
//				$('#searchEngine #moteur_modele').append('<option value="'+data.modeles[i].id+'">'+data.modeles[i].name+'</option>');
//			}
			// On resélectionne le modèle précedemment sélectionné si il est toujours dans la liste
			$('#searchEngine #moteur_modele').val(0);
			$('#searchEngine #moteur_modele').val(selectedModele);
		}
	});
}

//Mise à jour de la liste des versions
var updateVersions = function(selectedCategorie, selectedMarque, selectedModele) {
	$.ajax({
		type: "POST",
		url: "/retrieveVersions/"+selectedCategorie+'/'+selectedMarque+'/'+selectedModele,
		success: function(data) {
			// On récupère le libellé de la première option
			lib = $('#searchEngine #moteur_version option:first').html();
			// On récupère l'option sélectionnée
			selectedVersion =  $('#searchEngine #moteur_version').val();
			// On vide la liste
			$('#searchEngine #moteur_version').empty();
			// On ajoute le libellé déjà existant
			$('#searchEngine #moteur_version').append('<option>'+lib+'</option>');
			// On ajoute toutes les versions récupérés
			$('#searchEngine #moteur_version').append(data);
//			var tmp;
//			for(i in data.versions) {
//				// $('#searchEngine #moteur_version').append('<option value="'+data.versions[i].id+'">'+data.versions[i].name+'</option>');
//				tmp += '<option value="'+data.versions[i].id+'">'+data.versions[i].name+'</option>';
//			}
//			$('#searchEngine #moteur_version').append(tmp);
			// On resélectionne la marque précedemment sélectionnée si elle est toujours dans la liste
			$('#searchEngine #moteur_version').val(0);
			$('#searchEngine #moteur_version').val(selectedVersion);
		}
	});
}