﻿var overlayOptions = { top: 150, expose: { color: 'Gray', loadSpeed: 200, opacity: 0.6, maskId: 'maskmodalOptions' }, closeOnClick: true, closeOnEsc: true, api: true };
var noError = { "CodeRetour": 1 };
var webServiceError = { "CodeRetour": 0 };
var connexionMapping = [
	{ "id": "#login", "property": "Mail", "validationsRules": ["required", "email"], "validationsMessages":["Veuillez saisir votre email","Verifiez votre email, il doit etre de la forme identifiant@exemple.com"]},
	{ "id": "#password", "property": "MotPasse", "validationsRules": ["required", "password"], "validationsMessages":["Veuillez saisir votre mot de passe","Verifiez votre mot de passe"]}
];
var forgotPasswordMapping = [
	{ "id": "#login", "property": "Mail", "validationsRules": ["required", "email"], "validationsMessages": ["Veuillez saisir votre email", "Verifiez votre email, il doit etre de la forme identifiant@exemple.com"] }
];

var inscriptionMapping = [
	{ "id": "#selCivilite", "property": "CiviliteId", "validationsRules": ["required"], "validationsMessages":["Cette information est obligatoire"]},
	{ "id": "#txtNom", "property": "Nom", "validationsRules": ["required"], "validationsMessages":["Cette information est obligatoire"]},
	{ "id": "#txtPrenom", "property": "Prenom", "validationsRules": ["required"], "validationsMessages":["Cette information est obligatoire"]},
	{ "id": "#txtAdresse", "property": "Adresse" },
	{ "id": "#txtCodePostal", "property": "CodePostal", "validationsRules": ["required", "codepostal"], "validationsMessages": ["Cette information est obligatoire", "Format de code postal incorrect"] },
	{ "id": "#txtVille", "property": "Ville", "validationsRules": ["required"], "validationsMessages": ["Cette information est obligatoire"] },
	{ "id": "#selectVille", "property": "IdVille" },
	{ "id": "#txtTelephone", "property": "Telephone", "validationsRules": ["telephone"], "validationsMessages": ["Format de telephone incorrect"] },
	{ "id": "#txtMobile", "property": "Mobile", "validationsRules": ["telephone"], "validationsMessages":["Format de telephone incorrect"]},
	{ "id": "#txtMail", "property": "Mail", "validationsRules": ["required", "email"], "validationsMessages":["Cette information est obligatoire","Verifiez votre email, il doit etre de la forme identifiant@exemple.com"]},
	{ "id": "#txtConfirmMail", "validationsRules": [{ "equals": "#txtMail"}], "validationsMessages":["Verifiez votre email de confirmation"]},
	{ "id": "#txtPwd", "property": "MotPasse", "validationsRules": ["required", "password"], "validationsMessages":["Cette information est obligatoire","Verifiez votre mot de passe"]},
	{ "id": "#txtConfirmPwd", "validationsRules": [{ "equals": "#txtPwd"}], "validationsMessages": ["Verifiez votre mot de passe de confirmation"] },
	{ "id": "#txtDateNaiss", "property": "AnneeNaissance", "validationsRules": ["required","number"], "validationsMessages": ["Cette information est obligatoire","AAAA attendu!"] },
	{ "id": "input:radio[name='chkOptIn']", "property": "OptIn", "validationsRules": ["required"], "validationsMessages": ["Cette information est obligatoire"] },
	{ "id": "#TradingId", "Property": "TradingId"},
	{ "id": "#CarAdId", "property": "CarAdId" },
	{ "id": "#ReturnUrl", "property": "ReturnUrl" }
];
var modificationMapping = [
	{ "id": "#selCivilite", "property": "CiviliteId", "validationsRules": ["required"], "validationsMessages": ["Cette information est obligatoire"] },
	{ "id": "#txtNom", "property": "Nom", "validationsRules": ["required"], "validationsMessages": ["Cette information est obligatoire"] },
	{ "id": "#txtPrenom", "property": "Prenom", "validationsRules": ["required"], "validationsMessages": ["Cette information est obligatoire"] },
	{ "id": "#txtAdresse", "property": "Adresse" },
	{ "id": "#txtCodePostal", "property": "CodePostal", "validationsRules": ["required", "codepostal"], "validationsMessages": ["Cette information est obligatoire", "Format de code postal incorrect"] },
	{ "id": "#txtVille", "property": "Ville", "validationsRules": ["required"], "validationsMessages": ["Cette information est obligatoire"] },
	{ "id": "#selectVille", "property": "IdVille" },
	{ "id": "#txtTelephone", "property": "Telephone", "validationsRules": ["telephone"], "validationsMessages": ["Format de telephone incorrect"] },
	{ "id": "#txtMobile", "property": "Mobile", "validationsRules": ["telephone"], "validationsMessages": ["Format de telephone incorrect"] },
	{ "id": "#txtMail", "property": "Mail", "validationsRules": ["required", "email"], "validationsMessages": ["Cette information est obligatoire", "Verifiez votre email, il doit etre de la forme identifiant@exemple.com"] },
	{ "id": "#txtConfirmMail", "validationsRules": [{ "equals": "#txtMail"}], "validationsMessages": ["Verifiez votre email de confirmation"] },
	{ "id": "#txtPwd", "property": "MotPasse", "validationsRules": ["password"], "validationsMessages": ["Verifiez votre mot de passe"] },
	{ "id": "#txtConfirmPwd", "validationsRules": [{ "equals": "#txtPwd"}], "validationsMessages": ["Verifiez votre mot de passe de confirmation"] },
	{ "id": "#txtDateNaiss", "property": "AnneeNaissance", "validationsRules": ["required", "number"], "validationsMessages": ["Cette information est obligatoire", "AAAA attendu!"] },
	{ "id": "input:radio[name='chkOptIn']", "property": "OptIn", "validationsRules": ["required"], "validationsMessages": ["Cette information est obligatoire"] },
	{ "id": "#txtUserId", "property": "UserId", "validationsRules": ["required"] }
];

var inscriptionUrlMapping = [
	{ "id": "TradingId", "Property": "TradingId" },
	{ "id": "CarAdId", "property": "CarAdId" },
	{ "id": "ReturnUrl", "property": "ReturnUrl" }
];
var hiddenFieldsFromQueryString = ["TradingId", "CarAdId", "ReturnUrl"];
var connexionErrorOptions = {
	"showErrorMessage": true,
	"showInputErrorMessage": false
};
var connexionSettings = {
	"ManageConnexion": true,
	"ManageInscription": true,
	"ManageDeconnexion": true
}
var inscriptionErrorOptions = {
	"clearHighLights": true,
	"showHighLights": true,
	"clearErrorMessage": true,
	"showErrorMessage": true,
	"showInputErrorMessage": false
};
$(function() {
	$.extend({
		/*****************************************************************************/
		/* Appel WebServices */
		/*****************************************************************************/
		AjaxCall: function(callUrl, callData, callAsync, successMethod, failMethod) {
			callUrl = "~/" + callUrl;
			if (ResolveUrl) callUrl = ResolveUrl(callUrl);
			$.ajax({ type: "POST", url: callUrl, async: callAsync, data: callData, contentType: "application/json; charset=utf-8", dataType: "json",
				success: successMethod,
				error: function(xhr, ajaxOptions, thrownError) {
					if (failMethod) failMethod();
					$.ModalAlert(xhr.status + ", " + xhr.responseText);
				}
			});
		},
		CheckToken: function(Success, Failure) {
			var result = { 'Connected': 'false', 'ErrorText': '', 'HighlightIt': '', 'CodeRetour': '0' };
			var token = $.GetToken();
			if (token == null || typeof token == 'undefined') {
				$.Deconnexion();
				result.Connected = false;
				result.CodeRetour = -6;
				if (Failure) Failure(result);
			} else {
				$.AjaxCall("services/AjaxService.asmx/CheckToken",
					"{}", false,
					function(msg) {
						if (msg.d) {
							result.Connected = true;
							result.CodeRetour = 1;
							if (Success) Success(result);
							$(document).trigger("ConnectionChecked");
						} else {
							$.Deconnexion();
							result.Connected = false;
							result.CodeRetour = -5;
							if (Failure) Failure(result);
						}
					},
					function(msg) {
						$.Deconnexion();
						result.Connected = false;
						result.CodeRetour = 0;
						if (Failure) Failure(result);
					});
			}
		},
		Connexion: function(login, password, Success, Failure) {
			var result = { 'Connected': 'false', 'ErrorText': '', 'HighlightIt': '', 'CodeRetour': '0' };
			$.AjaxCall("services/AjaxService.asmx/Connexion",
				"{ 'login':'" + login + "', 'password':'" + password + "'}", true,
				function(msg) {
					var connexionResult = msg.d;
					if (connexionResult.CodeRetour == '1') {
						//On stock le Token pour les prochains appel Jquery
						$.SetToken(connexionResult.Token);
						result.Connected = true;
						result.CodeRetour = 1;
						if (Success) Success(result);
					} else {
						result.Connected = false;
						result.CodeRetour = connexionResult.CodeRetour;
						$.ClearToken();
						if (Failure) Failure(result);
					}
				},
				function(msg) {
					$.ClearToken();
					result.Connected = false;
					result.CodeRetour = 0;
					if (Failure) Failure(result);
				});
		},
		Deconnexion: function() {
			var fctFinally = function(msg) {
				$.ClearToken();
				$.ToggleConnected(false, true, true);
				$.HideMessageBienvenue();
				$(document).trigger("Disconnected");
				//$.HideLoading();
			};
			//$.ShowLoading();
			$.AjaxCall("services/AjaxService.asmx/Deconnexion", "{}", false, fctFinally, fctFinally);
		},
		GetCurrentUser: function(Success, Failure) {
			$.AjaxCall("services/AjaxService.asmx/GetCurrentUser",
			"{}", false,
			function(msg) {
				var User = msg.d;
				if (User.CodeRetour == 1) {
					if (Success) Success(User);
				}
				else {
					if (Failure) Failure(User);
				}
			},
			function() { if (Failure) Failure(noError); }
			);
		},
		CreateUser: function(user, Success, Failure) {
			$.AjaxCall("services/AjaxService.asmx/CreateUser",
				"{'user': " + JSON.stringify(user) + "}",
				false,
				function(msg) {
					var retUser = msg.d;
					if (retUser.CodeRetour == 3) {
						$(document).trigger("UserCreated", retUser);
						if (Success) Success(retUser, user);
					}
					else {
						if (Failure) Failure(retUser, user);
					}
				},
				function() { if (Failure) Failure(webServiceError); }
			);
		},
		UpdateUser: function(user, Success, Failure) {
			$.AjaxCall("services/AjaxService.asmx/UpdateUser",
				"{'user': " + JSON.stringify(user) + "}",
				false,
				function(msg) {
					var retUser = msg.d;
					if (retUser.CodeRetour == 5) {
						if (Success) Success(retUser, user);
					}
					else {
						if (Failure) Failure(retUser, user);
					}
				},
				function() { if (Failure) Failure(webServiceError); }
			);
		},
		SendEmailPassword: function(email, Success, Failure) {
			$.AjaxCall("services/AjaxService.asmx/SendEmailPassword",
				"{'email': '" + email + "'}",
				false,
				function(msg) {
					var retUser = msg.d;
					if (retUser == 2) {
						$.ModalAlert('Votre mot de passe vient de vous être envoyé sur votre adresse email.');
						if (Success) Success(retUser);
					}
					else {
						if (Failure) Failure(retUser);
					}
				},
				function() { if (Failure) Failure(webServiceError); }
			);
		},
		/*****************************************************************************/
		/* Fonctions */
		/*****************************************************************************/
		/* TOKEN */
		GetToken: function(token) { return $.cookie("Token"); },
		SetToken: function(token) { $.cookie("Token", token, { expires: 1 }); },
		ClearToken: function(token) { $.cookie("Token", null); },

		/* VALIDATION DE FORMULAIRE */
		ValidateLogin: function() {
			var validationResult = ($.FormHelper) ? $.FormHelper.Validate(connexionMapping) : null;
			if (validationResult && validationResult.isValid()) {
				$.FormError('Connexion', 'ConnexionError');
				return true;
			} else {
				var errorFields = (validationResult) ? validationResult.getErrorFields() : [];
				var messages = (validationResult) ? validationResult.getMessages("<br/>") : "";
				$.FormError('Connexion', 'ConnexionError', messages, errorFields, connexionErrorOptions);
				return false;
			}
		},
		ValidateInscription: function() {
			var validationResult = ($.FormHelper) ? $.FormHelper.Validate(inscriptionMapping) : null;
			if (validationResult && validationResult.isValid()) {
				$.FormError('Inscription', 'InscriptionError');
				return true;
			} else {
				var message = '';
				var errorFields = (validationResult) ? validationResult.getErrorFields() : [];
				$.FormError('Inscription', 'InscriptionError', message, errorFields);
				return false;
			}
		},
		ValidateModification: function() {
			var validationResult = ($.FormHelper) ? $.FormHelper.Validate(modificationMapping) : null;
			if (validationResult && validationResult.isValid()) {
				$.FormError('Modification', 'ModificationError');
				return true;
			} else {
				var message = '';
				var errorFields = (validationResult) ? validationResult.getErrorFields() : [];
				$.FormError('Modification', 'ModificationError', message, errorFields);
				return false;
			}
		},

		/* GESTION D'ERREUR */
		GestionConnexionError: function(msg) {
			if ($("#Connexion")) {
				switch (msg.CodeRetour) {
					case 1:
						$.ClearConnexion();
						return true;
					case -1:
						msg.ErrorText = 'Veuillez saisir votre identifiant';
						msg.HighlightIt = '#login'
						break;
					case -2:
						msg.ErrorText = 'Veuillez saisir votre mot de passe';
						msg.HighlightIt = '#password'
						break;
					case -3:
						msg.ErrorText = 'Veuillez vérifier votre identifiant';
						msg.HighlightIt = '#login'
						break;
					case -4:
						msg.ErrorText = 'Mot de passe erroné';
						msg.HighlightIt = '#password'
						break;
					case -5:
						msg.ErrorText = 'Session expirée';
						msg.HighlightIt = ''
						break;
					case -6:
						//Cookie absent
						msg.ErrorText = '';
						msg.HighlightIt = ''
						break;
					case -7:
						//Cookie absent
						msg.ErrorText = 'Vous possédez plusieurs comptes, veuillez contacter le service client.';
						msg.HighlightIt = ''
						break;
					case 3:
						msg.ErrorText = 'Vous devez confirmer votre inscription.(cliquez sur le lien du mail d\'inscription)';
						msg.HighlightIt = ''
						break;
					default:
						msg.ErrorText = 'Connexion Actuellement Impossible';
						msg.HighlightIt = ''
						break;
				}
				var formErrorOptions = {
					"clearHighLights": true,
					"showHighLights": true,
					"clearErrorMessage": true,
					"showErrorMessage": true,
					"showInputErrorMessage": false
				};
				$.FormError('Connexion', 'ConnexionErreur', msg ? msg.ErrorText : null, (msg && msg.HighlightIt ? [{ "field": msg.HighlightIt, "message": msg.ErrorText}] : null), formErrorOptions);
			}
		},
		ClearInscription: function() {
			if ($.FormHelper) $.FormHelper.Clear(inscriptionMapping);
			if ($.FormError) $.FormError('Inscription', 'InscriptionError');
		},
		ClearConnexion: function() {
			if ($('#Connexion').exists()) {
				if ($.FormHelper) $.FormHelper.Clear(connexionMapping);
				if ($.FormError) $.FormError('Connexion', 'ConnexionErreur');
			}
		},
		VerificationConnexion: function(Success, Failure) {
			//$.ShowLoading();
			$.ShowBtnDeconnexion(
				function(msg) {//Success
					$("#Connexion").hide();
					$.GestionConnexionError(msg);
					if (Success) Success();
					//$.HideLoading();
				}, function(msg) {//Failure
					$("#Connexion").show();
					$.GestionConnexionError(msg);
					if (Failure) Failure();
					//$.HideLoading();
				}
			);

		},
		ShowBtnDeconnexion: function(Success, Failure) {
			//$.ShowLoading();
			$.CheckToken(
				function(msg) {//Success
					$.ToggleConnected(true, true, true);
					if (Success) Success(msg);
					$.ShowMessageBienvenue();
					//$.HideLoading();
				}, function(msg) {//Failure
					$.ToggleConnected(false, true, true);
					if (Failure) Failure(msg);
					$.HideMessageBienvenue();
					//$.HideLoading();
				}
			);

		},
		/*ShowConnexion: function(Success, Failure) {
		$.ShowLoading();
		$.CheckToken(
		function(msg) {//Success
		$("#InscriptionError").remove();
		$("#Inscription").hide();
		$.ToggleConnected(true, true, true);
		if (Success) Success(msg);
		$.HideLoading();
		}, function(msg) {//Failure
		$.ToggleConnected(false, true, true);
		if (Failure) Failure(msg);
		$.HideLoading();
		}
		);
		},*/
		ShowInscriptionStep: function() {
			var currentParams = $.FormHelper.GetObjectFromQueryString();
			if (currentParams.tradingId && currentParams.tradingId.length > 0)
				$("#step-img").show(0);
		},
		ShowMessageBienvenue: function(CurrentUser) {
			if (!CurrentUser) $.GetCurrentUser(function(user) { CurrentUser = user; });
			var nomprenom = CurrentUser ? 'Bienvenue ' + (CurrentUser.Prenom ? CurrentUser.Prenom : '') + ' ' + (CurrentUser.Nom ? CurrentUser.Nom : '') : '';
			$("#MessageBienvenue").html(nomprenom);
		},
		HideMessageBienvenue: function(CurrentUser) {
			$("#MessageBienvenue").html('');
		},
		ToggleConnected: function(isConnected, clearConnexion, clearInscription) {
			if (clearConnexion && clearConnexion == true && $('#Connexion').exists()) $.ClearConnexion();
			if (clearInscription && clearInscription == true && $('#Inscription').exists()) $.ClearInscription();
			$("#btnDeconnexion").toggle(isConnected);
			$('#Connexion').toggle(!isConnected);
			$("#Inscription").toggle(!isConnected);
		},
		ManageConnexion: function(options) {
			var settings = $.extend(connexionSettings, options);
			var connected = function() {
				if (settings.ManageDeconnexion && $('#btnDeconnexion').length) {
					$('#btnDeconnexion').show();
				}
				if (settings.ManageConnexion && $('#Connexion').length) {
					$.ClearConnexion();
					$('#Connexion').hide();
				}
				if (settings.ManageDeconnexion && $('#Inscription').length) {
					$('#Inscription').hide();
				}
				$.HideLoading();
			};
			var disconnected = function() {
				if (settings.ManageDeconnexion && $('#btnDeconnexion').length) {
					$('#btnDeconnexion').hide();
				}
				if (settings.ManageConnexion && $('#Connexion').length) {
					$.ClearConnexion();
					$('#Connexion').show();
				}
				if (settings.ManageDeconnexion && $('#Inscription').length) {
					$('#Inscription').show();
					$.ShowInscriptionStep();
				}
				$.HideLoading();
			};
			$.ShowLoading();
			$.CheckToken(connected, disconnected);
		},
		ClickConnexion: function() {
			var userLoaded = function(user) {
				$.ManageConnexion();
				$(document).trigger("Connected", user);
				$.HideLoading();
			};
			//Connexion réussie
			var connexionReussie = function(msg) {
				$.ShowLoading();
				$.GestionConnexionError(msg);
				$.GetCurrentUser(userLoaded, connexionEchouee);
			};
			//Connexion echouée
			var connexionEchouee = function(msg) {//Connexion echouée
				$.GestionConnexionError(msg);
				$.HideLoading();
			};
			$.ShowLoading();
			if ($.ValidateLogin()) {
				$.ShowLoading();
				$.Connexion($('#login').val(), $('#password').val(), connexionReussie, connexionEchouee);
			} else {
				$.HideLoading();
			}
		},
		ClickInscription: function() {
			var inscriptionReussie = function(msg) {
				$.HideLoading();
			}
			var inscriptionEchouee = function(user) {
				$.FormError('Inscription', 'InscriptionError', user.InscriptionMessage, null, inscriptionErrorOptions);
				$.HideLoading();
			}
			$.ShowLoading();
			inscriptionUrlMapping
			var user = null;
			if ($.FormHelper) {
				user = $.FormHelper.GetObjectFromQueryString(inscriptionUrlMapping);
				user = $.extend(user, $.FormHelper.Get(inscriptionMapping));
			}
			if ($.ValidateInscription()) {
				$.ShowLoading();
				$.FormError('Inscription', 'InscriptionError', "", null, inscriptionErrorOptions);
				if (user) $.CreateUser(user, inscriptionReussie, inscriptionEchouee);
			} else {
				$.HideLoading();
			}
		},
		ClickModification: function() {
			var modificationReussie = function(msg) {
				$("#modif-msg").html("Vos informations ont correctement été modifiées.");
				$.HideLoading();
			}
			var modificationEchouee = function(user) {
				$.FormError('Modification', 'ModificationError', user.InscriptionMessage, null, inscriptionErrorOptions);
				$.HideLoading();
			}
			$.ShowLoading();
			var user = null;
			if ($.FormHelper) {
				user = $.extend(user, $.FormHelper.Get(modificationMapping));
			}
			if ($.ValidateModification()) {
				$.ShowLoading();
				$.FormError('Modification', 'ModificationError', "", null, inscriptionErrorOptions);
				if (user) $.UpdateUser(user, modificationReussie, modificationEchouee);
			} else {
				$.HideLoading();
			}
		},
		ForgotPassword: function() {
			var mailOK = function(codeErreur) {
				$.FormError('Connexion', 'ConnexionError');
				$.HideLoading();
			};
			var mailKO = function(codeErreur) {
				$.GestionConnexionError({ CodeRetour: codeErreur });
				$.HideLoading();
			};
			$.ShowLoading();
			var validationResult = ($.FormHelper) ? $.FormHelper.Validate(forgotPasswordMapping) : null;
			if (validationResult && validationResult.isValid()) {
				$.SendEmailPassword($('#login').val(), mailOK, mailKO);
			} else {
				var message = '';
				var errorFields = (validationResult) ? validationResult.getErrorFields() : [];
				$.FormError('Connexion', 'ConnexionError', message, errorFields);
				$.HideLoading();
				return false;
			}

		}
	});

	/*****************************************************************************/
	/* Evenementiel */
	/*****************************************************************************/
	if ($("#btnConnexion").length) $("#btnConnexion").click($.ClickConnexion);
	if ($("#btnDeconnexion").length) $("#btnDeconnexion").click($.Deconnexion);
	if ($("#btnModification").length) $("#btnModification").click($.ClickModification);
	if ($("#btnInscription").length) $("#btnInscription").click($.ClickInscription);
	if ($("#btnClearInscription").length) $("#btnClearInscription").click($.ClearInscription);
	if ($("#ForgotPassword").length) $("#ForgotPassword").click($.ForgotPassword);

	/*****************************************************************************/
	/* Demarrage */
	/*****************************************************************************/
	$.ShowMessageBienvenue();
});
