﻿var ShowLoadingCounter = 0;
$(function() {
	$.extend({
		urlParam: function(name) {
			var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.search.substring(1));
			if (!results) { return 0; }
			return results[1] || 0;
		},
		GetUrlParams: function() {
			var urlParams = {};
			var e,
				q = window.location.search.substring(1),
				r = /([^&=]+)=([^&]+)/g;

			while (e = r.exec(q))
				urlParams[decodeURIComponent(e[1])] = decodeURIComponent(e[2]);
			return urlParams;
		},

		//*********************************
		// Alerte Modale
		//*********************************
		ModalAlert: function(message, confirmation, onCloseFunction) {
			$("#AlertMessage").html(message);
			$("#Alert").overlay(overlayOptions).load();
			$("#Alert .close").focus();
			if (confirmation) {
				$("#btnAlertClose").click(onCloseFunction);
			}
		},
		FastMessage: function(message, selector, fadeInTime, fadeOutTime, append) {
			if (!append) append = false;
			selector = selector ? selector : "#principal";
			fadeInTime = fadeInTime ? fadeInTime : 1000;
			fadeOutTime = fadeOutTime ? fadeOutTime : 1500;
			var messageContainer = $("<div>" + message + "</div>");
			if (!append) $(selector).prepend(messageContainer);
			else $(selector).append(messageContainer);
			messageContainer.show();
			messageContainer.fadeIn(fadeInTime).fadeOut(fadeOutTime, function() { messageContainer.remove() }); ;
		},
		ShowLoading: function() {
			if (ShowLoadingCounter <= 0) {
				$("#centerScreenLoading").center().show();
				$('body').css('cursor', 'wait');
			}
			ShowLoadingCounter++;
		},
		HideLoading: function() {
			//ShowLoadingCounter--;
			//if (ShowLoadingCounter <= 0) {
			$("#centerScreenLoading").hide();
			//$('body').css('cursor', 'default');
			setTimeout(function() { $('body').css('cursor', 'default'); }, 0);
			ShowLoadingCounter = 0;
			//}
		},
		HideLoadingForced: function() {
			ShowLoadingCounter = 0;
			$("#centerScreenLoading").hide();
			//$('body').css('cursor', 'default'); 
			setTimeout(function() { $('body').css('cursor', 'default'); }, 0);
		},
		//*********************************
		// Affichage d'erreur
		//*********************************
		FormError: function(containerId, messageContainerId, message, errorFields, options) {
			var settings = {
				"highLightClass": "InputError",
				"errorMessageClass": "ErrorMessage",
				"inputErrorMessageClass": "InputErrorMessage",
				"clearHighLights": true,
				"showHighLights": true,
				"clearErrorMessage": true,
				"showErrorMessage": false,
				"showInputErrorMessage": true,
				"insertBefore": "#" + containerId + " .form"
			};
			settings = $.extend(settings, options);
			if (containerId && containerId != '') {
				if (settings.clearErrorMessage) {
					if (messageContainerId && messageContainerId != '') $("#" + messageContainerId).remove();
					$("#" + containerId + ' .' + settings.errorMessageClass).remove();
					$("#" + containerId + ' .' + settings.inputErrorMessageClass).remove();
				}
				if (settings.clearHighLights) $("#" + containerId + " ." + settings.highLightClass).removeClass(settings.highLightClass);
				if (settings.showErrorMessage && message != '') {
					$("#" + containerId).show();
					var messageContainer = $("<div " + ((messageContainerId && messageContainerId != '') ? "class='" + settings.errorMessageClass + "' id='" + messageContainerId + "'" : "") + "></div>");
					$(messageContainer).html(message);
					$(messageContainer).insertBefore(settings.insertBefore);
				}
				if (errorFields && errorFields.length > 0) {
					for (var i = 0; i < errorFields.length; i++) {
						$.ShowInputError(errorFields[i], settings);
					}
				}
			}
		},


		//*********************************
		// Affichage des messages d'erreur
		//*********************************
		ShowInputError: function(currentError, options) {
			var settings = {
				"highLightClass": "InputError",
				"inputErrorMessageClass": "InputErrorMessage",
				"clearHighLights": true,
				"showHighLights": true,
				"showInputErrorMessage": true
			};
			settings = $.extend(settings, options);
			var secondOnly = (currentError.errorType == "equals") ? true : false;
			$(currentError.field).each(function(index) {
				if (settings.showHighLights) $(this).addClass(settings.highLightClass).focus();
				if (settings.showInputErrorMessage && currentError.message != '' && (!secondOnly || index == 1)) $(this).after('<div class="' + settings.inputErrorMessageClass + '">' + currentError.message + '</div>');
			});
		},


		//*********************************
		// Validation de Formulaire
		//*********************************
		Validate: function(options) {
			var defaultSettings = {
				"required": [],
				"email": [],
				"date": [],
				"equals": [],
				"messages": {
					"required": "Cette information est obligatoire.",
					"equals": "Les champs doivent etre identiques.",
					"email": "Verifiez votre email, il doit etre de la forme identifiant@exemple.com.",
					"date": "Format de date non valide."
				}
			};
			options = $.extend({}, defaultSettings, options);
			var result = {
				"ErrorFields": [],
				isValid: function() { return this.ErrorFields.length == 0; },
				getErrorFields: function() {
					return this.ErrorFields;
				},
				getAllErrorMessages: function(separator) {
					var messages = '';
					for (var i = 0; i < this.ErrorFields.length; i++) {
						messages += this.ErrorFields[i].message + separator;
					}
					return messages;
				},
				getErrorFieldsString: function(separator) {
					var fields = '';
					for (var i = 0; i < this.ErrorFields.length; i++) {
						fields += this.ErrorFields[i].field + ", ";
					}
					return fields;
				}
			};
			//required
			if (options.required && options.required.length > 0) {
				$(options.required.join(", ")).each(function(index) {
					if ($(this) && $(this).getLength({ "valueRequired": true }) == 0)
						result.ErrorFields.push({ "field": options.required[index], "message": options.messages.required, "errorType": "required" })

				});
			}
			//equals
			if (options.equals && options.equals.length > 0) {
				for (var i = 0; i < options.equals.length; i++) {
					var fields = options.equals[i].fields;
					$(fields).each(function(index) {
						if (index > 0 && previous != $(this).val()) {
							result.ErrorFields.push({ "field": fields, "message": options.equals[i].message, "errorType": "equals" })
							return false;
						}
						previous = $(this).val();
					});
				}
			}
			//email
			var emailpattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
			if (options.email && options.email.length > 0) {
				$(options.email.join(", ")).each(function(index) {
					if ($(this).val() != '' && !emailpattern.test($(this).val()))
						result.ErrorFields.push({ "field": options.email[index], "message": options.messages.email, "errorType": "email" })
				});
			}
			//date
			var datepattern = /^\d\d?\/\d\d?\/\d\d\d\d$/;
			if (options.date && options.date.length > 0) {
				$(options.date.join(", ")).each(function(index) {
					if ($(this).val() != '' && !datepattern.test($(this).val()))
						result.ErrorFields.push({ "field": options.date[index], "message": options.messages.date, "errorType": "date" })
				});
			}
			return result;
		},


		//*********************************
		// Vérifier la validité d'une date
		//*********************************
		IsDateValid: function(frenchDate) {
			if (!frenchDate.match(/^\d\d?\/\d\d?\/\d\d\d\d$/)) return false;
			var thedate = frenchDate.split("/");
			if ((frenchDate.length != 10) ||
			(thedate.length != 3) ||
			(isNaN(parseInt(thedate[0]))) ||
			(isNaN(parseInt(thedate[1]))) ||
			(isNaN(parseInt(thedate[2]))) ||
			(thedate[2].length < 4) ||
			(thedate[1].length < 2) ||
			(thedate[0].length < 2)) return false;
			var an = eval(thedate[2]);
			var mo = eval(thedate[1]);
			var jo = eval(thedate[0]);
			var onedate = new Date(an, mo - 1, jo);
			an = onedate.getYear();
			if (an.length < 4) an = an + 1900;
			if ((onedate.getDate() != jo) ||
			(onedate.getMonth() != mo - 1) ||
			(onedate.getYear() != an)) return false;
			return true;
		},
		isTimeValid: function(mytime) {
			var thetime = mytime.split(':');
			if ((mytime.length != 5 && mytime.length != 8) ||
			(thetime.length < 2) ||
			(isNaN(parseInt(thetime[0]))) ||
			(isNaN(parseInt(thetime[1]))) ||
			(thetime.length == 3 && isNaN(parseInt(thetime[2]))) ||
			(thetime[0].length < 2) ||
			(thetime[1].length < 2) ||
			(thetime.length == 3 && thetime[2].length < 2)) return false;
			var he = eval(thetime[0]);
			var mi = eval(thetime[1]);
			var se = (thetime.length == 3) ? eval(thetime[2]) : 0;
			var onetime = new Date(1901, 0, 1, he, mi, se);
			if ((onetime.getHours() != he) ||
			(onetime.getMinutes() != mi) ||
			(onetime.getSeconds() != se)) return false;
			return true;
		},

		//*********************************
		// Convertir une chaine en date
		//*********************************
		ToIsoDate: function(frenchDate) {
			if ($.IsDateValid(frenchDate)) {
				var elements = frenchDate.split('/');
				return elements[2] + '-' + elements[1] + '-' + elements[0];
			}
		},


		//*********************************
		// Convertir une date en chaine
		//*********************************
		ToDateIso: function(frenchDate) {
			if (frenchDate != undefined) {
				var elements = frenchDate.split('-');
				return elements[2] + '/' + elements[1] + '/' + elements[0];
			}
		},
		JsonToIsoDateString: function(JsonDate) {
			function f(n) {
				// Format integers to have at least two digits.
				return n < 10 ? '0' + n : n;
			}
			var date = new Date(parseInt(JsonDate.substr(6)));
			return date.getYear() + '-' +
                 f(date.getMonth() + 1) + '-' +
                 f(date.getDate())
		},


		//*********************************
		// Gestion du menu
		//*********************************
		HighLightMenu: function() {
			var found = false;
			var path = document.location.pathname;
			$("*").find("a[href='" + path.substring(path.lastIndexOf("/")) + "']").each(function() {
				$(this).addClass("a-hover");
				found = true;
			})
			if (!found) {
				if (document.location.pathname.lastIndexOf("/") == document.location.pathname.length - 1)
					$("#menu-accueil").addClass("a-hover");
				else if (document.location.pathname.lastIndexOf("cote") > 0)
					$("#menu-cote").addClass("a-hover");
				else if (document.location.pathname.lastIndexOf("achat") > 0)
					$("#menu-achat").addClass("a-hover");
				else if (document.location.pathname.lastIndexOf("vente") > 0)
					$("#menu-vente").addClass("a-hover");
				else if (document.location.pathname.lastIndexOf("annonce") > 0)
					$("#menu-annonces").addClass("a-hover");
				else if (document.location.pathname.lastIndexOf("service") > 0)
					$("#menu-services").addClass("a-hover");
			}
		},

		//*********************************
		// Envoyer cette page à un ami
		//*********************************
		UrlEmail: function(object) {
			var chaine_mailto = 'mailto:';
			chaine_mailto += '?subject= ' + encodeURIComponent(document.title);
			chaine_mailto += '&body= Un ami vous recommande la page suivante : ' + encodeURIComponent(document.title);
			chaine_mailto += ' consultable a l\'adresse suivante : ' + encodeURIComponent(window.location.href);
			return chaine_mailto;
		},

		//*********************************
		// Créer l'url pour une fiche véhicule
		//*********************************
		UrlFicheVehicule: function(annonceid, marque, modele, version) {
			return chaine_url = ResolveUrl("~/annonce-occasion/")
			+ $.UrlCodeSpecialChar(marque, '-') + "/"
			+ $.UrlCodeSpecialChar(modele, '-') + "/"
			+ $.UrlCodeSpecialChar(version, '-') + "/f-"
			+ annonceid + ".aspx";
		},

		//*********************************
		// Créer l'url pour une fiche véhicule
		//*********************************
		VehiculeScreenVersion: function(annonce) {
			if (annonce.ScreenVersion && annonce.ScreenVersion.length > 0) return annonce.ScreenVersion;
			if (annonce.Version && annonce.Version.length > 0) return annonce.Version;
			return '';
		},
		UrlFicheVehiculeByAnnonce: function(annonce) {
			return $.UrlFicheVehicule(annonce.CarAdId, annonce.Marque.Libelle, annonce.Modele.Libelle, $.VehiculeScreenVersion(annonce));
		},
		TitreFicheVehicule: function(annonce) {
			return annonce.Marque.Libelle + " " + annonce.Modele.Libelle + " " + $.VehiculeScreenVersion(annonce);
		},

		TitreFicheVehiculeCourt: function(annonce) {
			return $.TitreFicheVehicule(annonce);
		},


		//*********************************
		// Transformer les caractères spéciaux
		//*********************************
		// Parce qu'un simple replace ne fonctionne pas (par ex. avec espace inseccable)
		UrlCodeSpecialChar: function(chaine_url, caractere) {
			var url = chaine_url;
			if (chaine_url && (chaine_url != "undefined")) {
				var tab = chaine_url.split('');
				url = '';
				for (i = 0; i < tab.length; i++) {
					// Changer les cararcteres non alphanumérique
					url = url + ((chaine_url.charCodeAt(i) >= 48 && chaine_url.charCodeAt(i) <= 57) || (chaine_url.charCodeAt(i) >= 65 && chaine_url.charCodeAt(i) <= 90) || (chaine_url.charCodeAt(i) >= 97 && chaine_url.charCodeAt(i) <= 122) ? tab[i] : caractere);
				}
			}
			return url;
		}

	});
	$.fn.extend({
		AutoFill: function(binding, data) {
			//		binding: [
			//		{ method: 'src', selector: '.Photo img', item: 'photo' },
			//		{ method: 'html', selector: '.Titre', item: 'marqueModele' },
			//		{ method: 'html', selector: '.SousTitre', item: 'version' },
			//		{ method: 'html', selector: '.Prix', item: 'prix' },
			//		{ method: 'append', selector: '.Caracteristiques', item: 'garantie' },
			//		{ method: 'append', selector: '.Caracteristiques', item: 'energie' },
			//		{ method: 'append', selector: '.Caracteristiques', item: 'km' },
			//		{ method: 'append', selector: '.Caracteristiques', item: 'annee' },
			//		{ method: 'append', selector: '.Caracteristiques', item: 'departement' },
			//		{ method: 'href', selector: '.Actions .VoirAnnonce', item: 'url' }
			//	],
			var objReferer = $(this);
			for (var j = 0; j < binding.length; j++) {
				var objSelected = $(binding[j]['selector'], objReferer);
				var dataItem = data[binding[j]['item']];
				var sep = binding[j]['sep']; if (!sep) sep = '&nbsp;';
				switch (binding[j]['method']) {
					case 'attr':
						objSelected.attr(binding[j]['attr'], dataItem);
					case 'src':
						objSelected.attr('src', dataItem);
						break;
					case 'href':
						objSelected.attr('href', dataItem);
						break;
					case 'html':
						objSelected.html(dataItem);
						break;
					case 'append':
						if (dataItem != '') {
							var content = '<span>' + dataItem + '</span>';
							if (!objSelected.is(':empty')) content = sep + content;
							objSelected.append(content);
						}
						break;
					default:
						objSelected.attr(binding[j]['method'], dataItem);
						break;
				}
			}
		},
		//*********************************
		// Centrage
		//*********************************
		center: function(options) {
			var options = $.extend({ transition: 300, minX: 0, minY: 0 }, options);
			return this.each(function() {
				$(this).css('position', 'absolute');
				var top = ($(window).height() - $(this).outerHeight()) / 2 + $(window).scrollTop();
				var left = ($(window).width() - $(this).outerWidth()) / 2 + $(window).scrollLeft();
				$(this).animate({
					top: (top > options.minY ? top : options.minY) + 'px',
					left: (left > options.minX ? left : options.minX) + 'px'
				}, options.transition);
				return $(this);
			});
		},
		autoSize: function(options) {
			$(this).outerHeight($(this).children().outerHeight());
		},
		//*********************************
		// Indique si le champ de formulaire est "checkable"
		//*********************************
		checkable: function() {
			return /radio|checkbox/i.test(this.type);
		},
		//*********************************
		// Indique si un champs existe
		//*********************************
		exists: function() {
			return this.length > 0;
		},
		//*********************************
		// Renvoi la taille d'un champ
		// - Nombre d'éléments séléctionnés pour un SELECT
		// - Nombre d'éléments checkés pour un RADIO/CHECKBOX
		// - Nombre de caractères pour les TEXT/PASSWORD/HIDDEN/...
		//*********************************
		getLength: function(options) {
			switch (this[0].nodeName.toLowerCase()) {
				case 'select':
					if (options.valueRequired) return $("option:selected", this).val().length;
					return $("option:selected", this).length;
				case 'input':
					if (this.checkable())
						return $("input[name='" + this[0].name + "']").filter(':checked').length;
			}
			return this.val().length;
		},
		//*********************************
		// Rends le champs inutilisable
		//*********************************
		disable: function() {
			$(this).attr("disabled", "disabled");
		},
		//*********************************
		// Rends le champs utilisable
		//*********************************
		enable: function() {
			$(this).removeAttr("disabled");
		},
		//*********************************
		// Champs inutilisable et vide
		//*********************************
		disableAndEmpty: function() {
			$(this).attr("disabled", "disabled");
			$(this).val("");
		},
		//*********************************
		// Champs utilisable et à zéro
		//*********************************
		enableAndEmpty: function() {
			$(this).val("");
			$(this).removeAttr("disabled");
		},
		disableShowLoading: function() {
			$(this).attr("disabled", "disabled");
			$.ShowLoading();
		},
		enableHideLoading: function() {
			$(this).removeAttr("disabled");
			$.HideLoading();
		}

	});

});
/*
* jQuery scrollbarWidth - v0.2 - 2/11/2009
* http://benalman.com/projects/jquery-misc-plugins/
* 
* Copyright (c) 2010 "Cowboy" Ben Alman
* Dual licensed under the MIT and GPL licenses.
* http://benalman.com/about/license/
*/
(function($, b, a) { $.scrollbarWidth = function() { var c, d; if (a === b) { c = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo("body"); d = c.children(); a = d.innerWidth() - d.height(99).innerWidth(); c.remove() } return a } })(jQuery);
