﻿$(function() {

	/*****************************************************************************/
	/* Fonctions */
	/*****************************************************************************/
	$.extend({

		/* RVOSEARCHCRITERIA : Ajouter un critère de recherche */
		// criteriaString : string à modifier
		// comboName : nom de la combo
		// criterionName : nom du critère
		AddComboCriterion: function(criteriaString, comboName, criterionName) {
			var id = $("#" + comboName + "").val();
			if (id != undefined && id != '') {
				if (criteriaString != '') criteriaString += ",";
				criteriaString += "'" + criterionName + "':'" + id + "'";
			}
			return criteriaString;
		},

		/* RVOSEARCHCRITERIA : Générer la liste des critères de recherche rvo */
		GetJsonComboCriteria: function() {
			var crit = "";
			if (!$("#txtDateMec").isEmpty()) {
				var date = $.ToIsoDate($("#txtDateMec").val()); // Date MEC
				//if (date != "") crit = "'DateMec':'" + date + "','EcartDateMec':'0'";
				if (date != "") crit = "'DateMec':'" + date + "'";
			}
			if (!$("#txtAnneeModele").isEmpty()) {
				var date = $.ToIsoDate($("#txtAnneeModele").val()); // Annee Modele
				if (date != "") crit = "'DateModele.Start':'" + date;
			}
			if (!$("#txtPuissance").isEmpty()) crit += ",'PuissanceFiscale':'" + $("#txtPuissance").val() + "'"; // Puissance
			if ($("#selectMakes").exists()) { crit = $.AddComboCriterion(crit, "selectMakes", "MarqueID"); } // Marque
			if ($("#selectModels").exists()) { crit = $.AddComboCriterion(crit, "selectModels", "ModeleID"); } // Modele
			if ($("#selectVersions").exists()) { crit = $.AddComboCriterion(crit, "selectVersions", "GuidVersion"); } // Modele
			if ($("#selectFuelTypes").exists()) { crit = $.AddComboCriterion(crit, "selectFuelTypes", "EnergieID"); } else if ($("#selectLibFuelTypes").exists()) { crit = $.AddComboCriterion(crit, "selectLibFuelTypes", "EnergieID"); } // Energie
			if ($("#selectGearBoxTypes").exists()) { crit = $.AddComboCriterion(crit, "selectGearBoxTypes", "TypeBoiteID"); } else if ($("#selectLibGearBoxTypes").exists()) { crit = $.AddComboCriterion(crit, "selectLibGearBoxTypes", "TypeBoiteID"); } // Boite
			if ($("#selectBodyTypes").exists()) { crit = $.AddComboCriterion(crit, "selectBodyTypes", "CarrosserieGeneriqueID"); } else if ($("#selectLibBodyTypes").exists()) { crit = $.AddComboCriterion(crit, "selectLibBodyTypes", "CarrosserieGeneriqueID"); } // Carrosserie
			if ($("#selectDoorsNumbers").exists()) { crit = $.AddComboCriterion(crit, "selectDoorsNumbers", "NbPortes"); } // Nb de portes
			return "{" + crit + "}";
		},

		/* RVOSEARCHCRITERIA : Générer la liste des critères de recherche rvo */
		// currentCote : jsonTrading
		// withoutVersion : get criteria whithout versionId
		GetJsonCriteria: function(currentCote, withVersion) {
			var crit = "";
			if (withVersion && currentCote.versionId > 0)
				crit += "'GuidVersion':'" + currentCote.versionId + "'"; // Version
			else {
				//if (currentCote.dateMec != "") { crit = "'DateMec':'" + currentCote.dateMec + "','EcartDateMec':'0'"; }
				if (currentCote.dateMec != "") { crit = "'DateMec':'" + currentCote.dateMec + "'"; }
				if (currentCote.power > 0) { crit += ",'PuissanceFiscale':'" + currentCote.power + "'"; }
				if (currentCote.makeId > 0) { crit += ",'MarqueID':'" + currentCote.makeId + "'"; } // Marque
				if (currentCote.modelId > 0) { crit += ",'ModeleID':'" + currentCote.modelId + "'"; } // Modele
				if (currentCote.fuelTypesId > 0) { crit += ",'EnergieID':'" + currentCote.fuelTypesId + "'"; } // Energie
				if (currentCote.gearBoxTypesId > 0) { crit += ",'TypeBoiteID':'" + currentCote.gearBoxTypesId + "'"; } // Boite
				if (currentCote.bodyTypesId > 0) { crit += ",'CarrosserieGeneriqueID':'" + currentCote.bodyTypesId + "'"; } // Carrosserie
				if (currentCote.doorsNumbersId > 0) { crit += ",'NbPortes':'" + currentCote.doorsNumbersId + "'"; } // Nb de portes
			}
			return "{" + crit + "}";
		},

		/* SERVICE RVO : Récupérer la liste */
		// combo : nom de la liste
		// parametres : liste des parametres
		// sync : type de synchronisation
		FnGetList: function(combo, parametres, sync, success, failure) {
			$.AjaxCall("services/VehicleRepositoryService.asmx/Get" + combo,
			"{" + parametres + "}",
			sync,
			function(response) {
				if (success) success(response);
			},
			function(error) {
				if (failure) failure(error);
			});
		},

		/* SERVICE RVO : Générer une comboBox rempli */
		// select : nom du champs
		// combo : nom de la liste
		// parametres : liste des parametres
		// sync : type de synchronisation
		// value : valeur sélectionnée
		// firstline : première option (value="")
		GetListSelect: function(select, combo, parametres, sync, value, firstline, success, failure) {
			if ($(select + combo + " option").length <= 1 || ($(select + combo + " option").length > 1 && parametres != "")) {
				var currentlyDisabled = false;
				// disable selectCombo if not disabled
				if (!$(select + combo).attr("disabled") == "disabled") {
					$(select + combo).disableAndEmpty();
					currentlyDisabled = true;
				}
				// Récupérer la liste et générer la comboBox
				$.FnGetList(combo, parametres, sync,
				function(response) {
					// keep whiteline and reset
					if (!firstline && $(select + combo + " option").filter(":first").html()) { firstline = $(select + combo + " option").filter(":first").html(); }
					if (firstline && firstline != "") { $(select + combo).empty(); $("<option value=''>" + firstline + "</option>").appendTo(select + combo); }
					// fill selectCombo
					if (response.d.length > 0)// full list
						$.each(response.d, function(index, item) {
							//$("<option value='" + item.Key + "' selected='selected'>" + item.Value + "</option>").appendTo(select + combo);
							// keep selected value
							if (value && value == item.Key) $("<option value='" + item.Key + "' selected='selected'>" + item.Value + "</option>").appendTo(select + combo); else $("<option value='" + item.Key + "'>" + item.Value + "</option>").appendTo(select + combo);
						});
					else if (combo == "Versions") // empty versions list
						$("<option value=''>--- pas de versions disponible à cette date ---</option>").appendTo(select + combo);
					else // empty list
						$("<option value=''>--- pas d'éléments ---</option>").appendTo(select + combo);
					// keep selected value
					if (combo == "Models" && value && $(select + combo).val() != value) $("<option value='" + value + "' selected='selected'>Autres</option>").appendTo(select + combo);
					if (currentlyDisabled == true) $(select + combo).enableAndEmpty(); // enable if disabled currently
					if (success) success();
				},
				function(error) {
					$.ModalAlert("Le service est momentanément indisponible!\n");
					if (failure) failure();
				});
			} else {
				if (success) success();
			}
		},

		/* SERVICE RVO : Générer une comboBox rempli */
		// combo : nom de la liste
		// parametres : liste des parametres
		// sync : type de synchronisation
		// value : valeur sélectionnée
		// firstline : première option (value="")
		GetList: function(combo, parametres, sync, value, firstline, success, failure) {
			$.GetListSelect("#select", combo, parametres, sync, value, firstline, success, failure);
		},

		/* SERVICE RVO : Générer une comboBox rempli */
		// combo : nom de la liste
		// parametres : liste des parametres
		// sync : type de synchronisation
		// value : valeur sélectionnée
		// firstline : première option (value="")
		GetListAd: function(combo, parametres, sync, value, firstline, success, failure) {
			$.GetListSelect("#selectAd", combo, parametres, sync, value, firstline, success, failure);
		},

		/* SERVICE RVO : Récupérer le vo */
		// detail : précisions sur le nom de la fonction
		// guid : guid version
		// dateMec : date mec
		FnGetByGuid: function(detail, guid, dateMec, success, failure) {
			$.AjaxCall("services/VehicleRepositoryService.asmx/Get" + detail + "ByGuid",
			"{'guid':" + guid + ",'dateMec':'" + dateMec + "'}",
			true,
			function(response) {
				if (success) success(response);
			},
			function(error) {
				if (failure) failure(error);
			});
		},

		/* SERVICE RVO : Récupérer le vo */
		// guid : guid version
		// dateMec : date mec
		FnGetVersionByGuid: function(guid, dateMec, success, failure) {
			$.FnGetByGuid("Version", guid, dateMec, success, failure);
		},

		/* SERVICE RVO : Récupérer le vo */
		// guid : guid version
		// dateMec : date mec
		FnGetDetailVersionByGuid: function(guid, dateMec, success, failure) {
			$.FnGetByGuid("DetailVersion", guid, dateMec, success, failure);
		},

		/* SERVICE RVO : Récupérer le vo */
		// guid : guid version
		// dateMec : date mec
		FnGetVersionStandardFittings: function(guid, success, failure) {
			$.AjaxCall("services/VehicleRepositoryService.asmx/GetVersionStandardFittings",
				"{'guid':" + guid + "}",
				true,
				function(response) {
					if (success) success(response);
				},
				function(error) {
					if (failure) failure(error);
				});
		},

		/* SERVICE RVO : Récupérer la liste des véhicules */
		// criteres : RVOSEARCHCRITERIA GetJsonComboCriteria ou GetJsonCriteria
		// page_index : current page index
		FnGetListVersions: function(criteres, page_index, success, failure) {
			$.AjaxCall("services/VehicleRepositoryService.asmx/GetListVersions",
            "{'crit': " + criteres + ",'pageIndex':" + page_index + ",'itemPerPage':10}",
            true,
            function(response) {
            	if (success) success();
            },
            function(error) {
            	$.ModalAlert("Le service est momentanément indisponible!\n");
            	if (failure) failure();
            });
		},

		/* SERVICE RVO : Générer un tableau de véhicules */
		// criteres : RvoSearchCriteria > GetJsonComboCriteria ou GetJsonCriteria
		// page_index : current page index
		GetListVersions: function(criteres, page_index, success, failure) {
			$.AjaxCall("services/VehicleRepositoryService.asmx/GetListVersions",
            "{'crit': " + criteres + ",'pageIndex':" + page_index + ",'itemPerPage':10}",
            true,
            function(response) {
            	$('#tblVersionsBody').empty();
            	var i = 0;
            	$.each(response.d, function(index, item) {
            		var row = $("<tr id='" + item.guid + "'></tr>");
            		var items = [item.name, item.bodyType, item.validity, item.maxPowerDin, item.gearBox, item.doorsNumber];
            		for (j = 0; j < 6; j++) { $("<td>" + items[j] + "</td>").appendTo(row); }
            		$("<td><a href='#'>Coter</a></td>").appendTo(row);
            		$(row).bind("click", function() {
            			$(this).parent().find('.trSelected').removeClass('trSelected');
            			$(this).addClass("trSelected");
            		}).appendTo("#tblVersions");
            		i++;
            	});
            	$('#tblVersions tbody tr:odd').addClass('trAlt');
            },
            function(error) {
            	$.ModalAlert("Le service est momentanément indisponible!\n");
            });
		},

		/* SERVICE RVO : Compter le nombre de véhicules */
		// criteres : RvoSearchCriteria > GetJsonComboCriteria ou GetJsonCriteria
		FnGetNbVersions: function(criteres, success, failure) {
			$.AjaxCall("services/VehicleRepositoryService.asmx/CountVersions",
            "{'crit': " + criteres + "}",
            true,
            function(response) {
            	if (success) success(response);
            },
            function(error) {
            	$.ModalAlert("Le service est momentanément indisponible!\n");
            	if (failure) failure(error);
            });
		}

	});

});
