﻿$(function() {

	$.extend({

		/* ENTITY : Create trading */
		// currentCote : jsonTrading
		SetTrading: function(currentCote, success, failure) {
			$.AjaxCall("services/AjaxService.asmx/CreateTradingLight",
				"{'trading': " + JSON.stringify(currentCote) + "}",
				false,
				function(response) { if (success) success(response.d); },
				function() { if (failure) failure(); }
			);
		},

		/* ENTITY : User has free trading */
		// currentCote : jsonTrading
		HasFreeTrading: function(currentCote, success, failure) {
			$.AjaxCall("services/AjaxService.asmx/HasFreeTrading",
				"{'trading': " + JSON.stringify(currentCote) + "}",
				false,
				function(response) { if (success) success(response.d); },
				function() { if (failure) failure(); }
			);
		},

		/* JSON : Sauvegarde */
		// currentCote : jsonTrading
		MapCote: function(currentCote) {
			if ($("#txtDateMec").exists() && $("#txtDateMec").isValidDate()) { currentCote.dateMec = $.ToIsoDate($("#txtDateMec").val()); } else { currentCote.dateMec = ""; }
			if ($("#txtKilometrage").exists() && !isNaN($("#txtKilometrage").val())) { currentCote.mileAge = $.GetIntValue($("#txtKilometrage").val()); } else { currentCote.mileAge = 0; }
			if ($("#selectMakes").exists()) { currentCote.makeId = $.GetIntValue($("#selectMakes").val()); }
			if ($("#selectModels").exists()) { currentCote.modelId = $.GetIntValue($("#selectModels").val()); }
			if ($("#selectVersions").exists()) { currentCote.versionId = $.GetIntValue($("#selectVersions").val()); }
			if ($("#selectColors").exists()) { currentCote.colorId = $.GetIntValue($("#selectColors").val()); }
			if ($("#txtPuissance").exists() && !isNaN($("#txtPuissance").val())) { currentCote.power = $.GetIntValue($("#txtPuissance").val()); }
			if ($("#selectFuelTypes").exists()) { currentCote.fuelTypesId = $.GetIntValue($("#selectFuelTypes").val()); }
			if ($("#selectBodyTypes").exists()) { currentCote.bodyTypesId = $.GetIntValue($("#selectBodyTypes").val()); }
			if ($("#selectGearBoxTypes").exists()) { currentCote.gearBoxTypesId = $.GetIntValue($("#selectGearBoxTypes").val()); }
			if ($("#selectDoorsNumbers").exists()) { currentCote.doorsNumbersId = $.GetIntValue($("#selectDoorsNumbers").val()); }
			if ($("#typeCoteAchat").exists() && $("#typeCoteAchat").is(":checked")) { currentCote.tradingType = $.GetIntValue($("#typeCoteAchat").val()); }
			if ($("#typeCoteVente").exists() && $("#typeCoteVente").is(":checked")) { currentCote.tradingType = $.GetIntValue($("#typeCoteVente").val()); }
		},

		/* JSON : Get int value */
		// value : value
		GetIntValue: function(value) {
			if (value == "")
				value = 0;
			return parseInt(value);
		},

		/* JSON : RVOSearchCriteria */
		// currentCote : jsonTrading
		GetCriteria: function(currentCote) {
			$.MapCote(currentCote);
			return $.GetJsonCriteria(currentCote);
		},

		/* FORM : Initialisation formulaire */
		InitForm: function() {
			// empty txtDateMec, txtKilometrage
			$("#txtDateMec").val("");
			$("#txtKilometrage").val("");
			// disable selectMakes
			$("#selectMakes").disableAndEmpty();
			//  disable selectColors
			$("#selectColors").disableAndEmpty();
			// disable selectModels
			$("#selectModels").disableAndEmpty();
			// disable txtPuissance, selectFuelTypes, selectBodyTypes, selectGearBoxTypes, selectDoorsNumbers
			if ($("#txtPuissance").exists()) $("#txtPuissance").val("");
			if ($("#selectFuelTypes").exists()) $("#selectFuelTypes").disableAndEmpty();
			if ($("#selectBodyTypes").exists()) $("#selectBodyTypes").disableAndEmpty();
			if ($("#selectGearBoxTypes").exists()) $("#selectGearBoxTypes").disableAndEmpty();
			if ($("#selectDoorsNumbers").exists()) $("#selectDoorsNumbers").disableAndEmpty();
			// disable selectVersions
			$("#selectVersions").disableAndEmpty();
		},

		/* FORM : Clear du formulaire */
		ClearForm: function() {
			currentCote = {};
			$.FormHelper.Clear(cotationMapping);
			$.InitForm();
		},

		/* FORM : Post */
		// currentCote : jsonTrading
		PostCote: function(currentCote) {
			currentCote.status = 0;
			$.MapCote(currentCote);
			$.PostNewCote(currentCote);
		},

		/* FORM : Post */
		// tradingId : id trading
		// page : id page - 1 result - 2 identification
		/// remarks : save cote before post
		PostCoteId: function(page, tradingId) {
			if (page == 1) {
				location.href = "cote-resultat.aspx?tradingId=" + tradingId;
			} else if (page == 2) {
				location.href = "utilisateur-identification.aspx?tradingId=" + tradingId;
			}
		},

		/* FORM : Post */
		// trading : JSON.stringify(currentCote)
		PostNewCote: function(currentCote) {
			$.SetTrading(currentCote,
				function(response) {
					if (response.Key == 2) {
						location.href = ResolveUrl("~/cote-voiture-gratuite.aspx") + "?tradingId=" + response.Value;
					} else if (response.Key <= -2) {
						$.ModalAlert("Nous n'obtenons pas d'informations pour ce véhicule.");
					} else {
						$.ModalAlert("Le service est momentanément indisponible.");
					}
				},
				function() { $.ModalAlert("Le service est momentanément indisponible."); }
			);
		},

		/* ACTION : onBlur txtDateMec */
		TxtDateMecTextBlurCallback: function() {
			var objDateMec = $("#txtDateMec");
			var objMakes = $("#selectMakes");

			if (objDateMec.exists() && objDateMec.isValidDate()) {
				var newValue = $.ToIsoDate(objDateMec.val());
				if (currentCote.dateMec != newValue) {
					currentCote.dateMec = newValue;
					objDateMec.removeClass("InputError");
					objMakes.enableAndEmpty();
					objMakes.trigger("change");
				} else {
					if (!objMakes.is(':enabled')) {
						objMakes.enableAndEmpty();
						objMakes.trigger("change");
					} //else on fait rien
				}
			} else {
				if (currentCote.dateMec != "") {
					currentCote.dateMec = "";
					// disable selectMakes
					objMakes.disableAndEmpty();
					objMakes.trigger("change");
				}
				if (objDateMec.val() == "" || objDateMec.val() == "__/__/____") {
					$.ClearForm();
					objDateMec.removeClass("InputError");
				} else if (objDateMec.val().length == 10) {
					objDateMec.addClass("InputError");
				}
			}
		},

		/* ACTION : onBlur txtKilometrage */
		TxtKilometrageTextBlurCallback: function() {
			if ($("#txtKilometrage").val() != "" && isNaN($("#txtKilometrage").val())) {
				$("#txtKilometrage").addClass("InputError");
			} else if ($("#txtKilometrage").val() == "") {
				$("#txtKilometrage").removeClass("InputError");
			} else if ($("#txtKilometrage").val() == 0) {
				$("#txtKilometrage").addClass("InputError");
			} else {
				$("#txtKilometrage").removeClass("InputError");
			}
		},

		/* ACTION : onChange selectMakes */
		SelectMakesTextChangeCallback: function() {
			if ($("#selectMakes").val() != "") {
				// fill and enable selectModels
				$.GetList("Models", "'makeId': " + $("#selectMakes").val(), true, null, null, null, null);
				$("#selectModels").enableAndEmpty();
			}
			else {
				//disable selectModels
				$("#selectModels").disableAndEmpty();
				// disable selectFuelTypes, selectBodyTypes, selectGearBoxTypes, selectDoorsNumbers
				$("#selectFuelTypes").disableAndEmpty();
				$("#selectBodyTypes").disableAndEmpty();
				$("#selectGearBoxTypes").disableAndEmpty();
				$("#selectDoorsNumbers").disableAndEmpty();
			}
			// trigger change selectModels
			$("#selectModels").trigger("change");
		},

		/* ACTION : onChange selectModels */
		SelectModelsTextChangeCallback: function() {
			if ($("#selectModels").val() != "") {
				// fill and enable selectVersions
				$.GetList("Versions", "'crit': " + $.GetCriteria(currentCote), true, null, null, null, null);
				$("#selectVersions").enableAndEmpty();
			}
			else {
				//disable selectVersions
				$("#selectVersions").disableAndEmpty();
			}
			// trigger change selectVersions
			$("#selectVersions").trigger("change");
		},

		/* ACTION : onChange selectVersions */
		SelectVersionsTextChangeCallback: function() {
			if ($("#selectVersions").val() != "") {
				// enable selectColors
				$("#selectColors").enable();
			}
			else {
				//disable selectColors
				$("#selectColors").disable();
			}
		},

		/* ACTION : onSubmit form */
		ValidateCotation: function() {
			var validation = $.FormHelper.Validate(cotationMapping);
			if (validation.isValid()) {
				$.PostCote(currentCote);
			}
			else {
				var options = { "showHighLights": true, "showInputErrorMessage": false };
				$.FormError("Cotation", "CotationError", validation.getMessages("; "), validation.getErrorFields(), options);
			}
		}

	});

});
