function JSC_strTrim_String(str)
{
	str = str.replace(/^\s+/g, "");
	str = str.replace(/\s+$/g, "");
	return str;
}
function JSC_isEmpty_String(str)
{
	return (JSC_strTrim_String(str).length == 0);
}
function JSC_isTel_String(str)
{
	if (str.search(/[^0-9\(\)+\-. ]/gi) != -1) // Y a-t-il des caractères
		// autres que "0" à "9", "(",
		// ")", "+", "-", " " et "." ?
		return false; // -> ce n'est pas un numéro de téléphone
	else
		return true;
}
function JSC_isNumber_String(str, hasComma)
{
	str = JSC_strTrim_String(str); // Enlevons les espaces inutiles !
	intFCT_virgules = 0; // Nombre de séparateurs décimaux trouvés
	// On accepte les caractères "+" et "-" uniquement en début de chaîne
	if (str.charAt(0) == "-" || str.charAt(0) == "+")
		str = str.substring(1, str.length); // On
	// se
	// débarasse
	// du
	// signe
	for (i = 0; i < str.length; i++)
		if (str.charAt(i) == "." || (hasComma && str.charAt(i) == ","))
			intFCT_virgules++; // Et
		// un
		// séparateur
		// décimal,
		// un !
		else
			if (str.charAt(i) < "0" || str.charAt(i) > "9") // Pas numérique
				// ?
				return false; // -> ce n'est pas un nombre
	if (intFCT_virgules > 1) // Plus d'un séparateur décimal ?
		return false; // -> ce n'est pas un nombre
	return true;
}
function JSC_isEmail_String(str)
{
	if (str.indexOf("'") != -1) // "'" refusé
		return false;
	if (str.indexOf(" ") != -1) // " " refusé
		return false;
	if (str.indexOf('"') != -1) // '"' refusé
		return false;
	if (str.indexOf("#") != -1) // "#" refusé
		return false;
	if (str.indexOf("(") != -1) // "(" refusé
		return false;
	if (str.indexOf(")") != -1) // ")" refusé
		return false;
	if (str.indexOf("/") != -1) // "/" refusé
		return false;
	if (str.indexOf("\\") != -1) // "\" refusé
		return false;
	if (str.indexOf("?") != -1) // "?" refusé
		return false;
	if (str.indexOf(":") != -1) // ":" refusé
		return false;
	if (str.indexOf(";") != -1) // ";" refusé
		return false;
	if (str.indexOf("+") != -1) // "+" refusé
		return false;
	if (str.indexOf("=") != -1) // "=" refusé
		return false;
	if (str.indexOf("<") != -1) // "<" refusé
		return false;
	if (str.indexOf(">") != -1) // ">" refusé
		return false;
	if (str.indexOf("*") != -1) // "*" refusé
		return false;
	if (str.indexOf("%") != -1) // "%" refusé
		return false;
	if (str.indexOf("&") != -1) // "&" refusé
		return false;
	if (str.indexOf(".@") != -1) // "*.@*" refusé
		return false;
	if (str.indexOf("@.") != -1) // "*@.*" refusé
		return false;
	if (".@".indexOf(str.charAt(0)) != -1) // "@*" et ".*" refusés
		return false;
	if (".@".indexOf(str.charAt(str.length - 1)) != -1) // "*@" et "*." refusés
		return false;
	if (str.search(/@.*@/g) != -1) // "*@*@*" et "*@@*" refusés
		return false;
	if (str.indexOf("..") != -1) // "*..*" refusé
		return false;
	if (str.search(/@.*\./g) == -1) // On refuse s'il n'y a pas de point à
		// droite de "@"
		return false;
	if (str.length > 5 + str.lastIndexOf(".")) // On refuse les extensions de
		// plus de 4 caractères
		return false;
	str = str.substr(str.lastIndexOf("."), 5);
	return (str.length > 1 && !JSC_isNumber_String(str, false));
}
/**
 * Tableau des éléments masqués/affichés
 */
var fadeElements = new Array();
/**
 * Fonction permettant de faire afficher/masquer la zone d'un élément HTML
 * 
 * @param $_elementId string l'id de l'élément à massquer/afficher
 * @return void
 */
function fadeElement($_elementId)
{
	if ($('#' + $_elementId))
	{
		if (typeof fadeElements[$_elementId] == 'undefined')
			fadeElements[$_elementId] = 'fadeIn';
		if (fadeElements[$_elementId] == 'fadeOut')
		{
			$('#' + $_elementId).fadeOut('salw');
			$('#' + $_elementId).addClass('fadeOut');
			$('#' + $_elementId).removeClass('fadeIn');
			fadeElements[$_elementId] = 'fadeIn';
		}
		else
		{
			$('#' + $_elementId).fadeIn('salw');
			$('#' + $_elementId).addClass('fadeIn');
			$('#' + $_elementId).removeClass('fadeOut');
			fadeElements[$_elementId] = 'fadeOut';
		}
	}
}
/**
 * Variable permettant de savoir si la fenêtre est affichée ou non
 * @var bool
 */
var modalWindowDisplayed = new Array();
/**
 * Fonction permettant de faire afficher une fenêtre de dialogue dans la page
 * 
 * @param $_content string contenu de la fenêtre
 * @param $_options Object les options à redéfinir 
 * 						- disabled 
 * 						- autoOpen : true=>affiche la fenêtre dès sa configuration (appel de dialog)
 * 						- buttons 
 * 						- closeOnEscape 
 * 						- closeText 
 * 						- dialogClass 
 * 						- draggable 
 * 						- height : valeur du type 300
 * 						- maxHeight 
 * 						- maxWidth 
 * 						- minHeight 
 * 						- minWidth 
 * 						- modal 
 * 						- resizable 
 * 						- show 
 * 						- stack 
 * 						- title 
 * 						- width : valeur du type 500
 * 						- zIndex
 * @param $_flashInfos Object les données relatives au flash à afficher
 * 						- file
 * 						- width
 * 						- height
 * 						- version
 * 						- expressInstallSwfurl
 * 						- flashvars
 * 						- params
 * 						- attributes
 * Exemple :
 * varflashinfos = {'file':'medias/flash/banner.swf',
 * 					'width':'446',
                    'height':'251',
                    'version':'9.0.0',
                    'expressInstallSwfurl':false,
                    'flashvars':{'dataPath':'medias/flash/data.xml'},
                    'params':{'quality':'high','wmode':'transparent','menu':'false'},
                    'attributes':{}}
   showModalWindow('',{'width':455,'height':280},flashinfos);
 * @return void
 */
function showModalWindow($_content, $_options, $_flashInfos)
{
	/**
	 * Id du conteneur de la fenêtre de dialogue
	 */
	var modalWindowId = 'modalWindowContainer';
	/**
	 * Id du lien de fermeture de la fenêtre
	 */
	var closeId = 'close_modal';
	/**
	 * Id du conteneur du flash
	 */
	var conteneurFlashId = 'modal_content_flash';
	/**
	 * Si la fenêtre est déjà affichée mais que l'on demande une nouvelle fenêtre,
	 * on la détruit pour afficher la nouvelle
	 */
	if (modalWindowDisplayed['displayed'] == true)
		$('#' + closeId).click();
	/**
	 * Options par défaut de la fenêtre de dialogue
	 */
	var defaultOptions =
	{
		'width' : 465,
		'height' : 465,
		'resizable' : false,
		'draggable' : false,
		'modal' : true
	};
	/**
	 * Liste des options possibles
	 */
	var possibleOptions = new Array('disabled', 'autoOpen', 'buttons', 'closeOnEscape', 'closeText', 'dialogClass', 'draggable', 'height', 'maxHeight', 'maxWidth', 'modal', 'resizable', 'show', 'stack', 'title', 'width', 'zIndex');
	/**
	 * Liste des options qui vont être passées à la construction de la fenêtre de dialogue
	 */
	var options = new Array();
	/**
	 * Parcoure des propriétés définissables
	 */
	for ( var index in possibleOptions)
	{
		var optionName = possibleOptions[index];
		/**
		 * Option passée en paramètre ?
		 */
		if (typeof $_options != 'undefined' && typeof $_options[optionName] != 'undefined')
			options[optionName] = $_options[optionName];
		else
		{
			/**
			 * Option par défaut définie ?
			 */
			if (typeof defaultOptions[optionName] != 'undefined')
				options[optionName] = defaultOptions[optionName];
		}
	}
	/**
	 * Conteneur existant ?
	 */
	if (!document.getElementById(modalWindowId))
	{
		var conteneur = document.createElement('div');
		conteneur.setAttribute('id', modalWindowId);
		conteneur.setAttribute('class', 'modal_block');
		document.getElementsByTagName('body')[0].appendChild(conteneur);
	}
	/**
	 * Contenu ajouté à la fenêtre modale (si pas iPhone)
	 */
	if (typeof NO_FLASH_CONTENT != 'undefined' && typeof $_flashInfos != 'undefined')
		$_content = '<div id="' + conteneurFlashId + '">&nbsp;</div>';
	var contenu = '';
	contenu += '<div class="modal_close">';
	contenu += '	<a title="Fermer" href="#" id="' + closeId + '" onclick="return false;">Fermer</a>';
	contenu += '</div>';
	contenu += '<div class="modal_content" id="modal_content">';
	contenu += '	' + $_content;
	contenu += '</div>';
	/**
	 * Définition du contenu de la fenêtre modale
	 */
	$('#' + modalWindowId).html(contenu);
	/**
	 * Si flash à afficher, alors on le configure (si pas iPhone)
	 */
	if (typeof NO_FLASH_CONTENT != 'undefined' && typeof $_flashInfos != 'undefined' && $_flashInfos != undefined)
	{
		/**
		 * Flash non installé, on lui propose
		 */
		if (swfobject.getFlashPlayerVersion().major <= 0)
			$('#' + conteneurFlashId).html(NO_FLASH_CONTENT);
		else
		{
			var file = $_flashInfos['file'];
			var width = $_flashInfos['width'];
			var height = $_flashInfos['height'];
			var version = $_flashInfos['version'] ? $_flashInfos['version'] : '9.0.0';
			var expressInstallSwfurl = $_flashInfos['expressInstallSwfurl'] ? $_flashInfos['expressInstallSwfurl'] : false;
			var flashvars = $_flashInfos['flashvars'] ? $_flashInfos['flashvars'] : {};
			var params = $_flashInfos['params'] ? $_flashInfos['params'] : {};
			var attributes = $_flashInfos['attributes'] ? $_flashInfos['attributes'] : {};
			/**
			 * Cas d'un flv
			 */
			if (file.match(/\.flv/))
			{
				flashvars['file'] = file;
				swfobject.embedSWF('/_ressources/mediaplayer/player.swf', conteneurFlashId, width, height, version, expressInstallSwfurl, flashvars, params, attributes);
			}
			else
				swfobject.embedSWF(file, conteneurFlashId, width, height, version, expressInstallSwfurl, flashvars, params, attributes);
			modalWindowDisplayed['flash'] = true;
		}
	}
	else
		modalWindowDisplayed['flash'] = false;
	/**
	 * Gestion de l'action de fermeture de la fenetre
	 */
	$("#close_modal").click(function()
	{
		/**
		 * Suppression fenêtre modale
		 */
		$("#" + modalWindowId).dialog('destroy');
		/**
		 * La fenêtre n'est plus affichée
		 */
		modalWindowDisplayed['displayed'] = false;
		/**
		 * Si flash, alors il faut le supprimer agalement pour IE
		 */
		if (modalWindowDisplayed['flash'])
		{
			swfobject.removeSWF(conteneurFlashId);
			modalWindowDisplayed['flash'] = false;
		}
	});
	/**
	 * Configuration de la fenêtre modale (et affichage si premier appel)
	 */
	$('#' + modalWindowId).dialog(options);
	/**
	 * Si déjà dans la page, il faut lui demander de se montrer :)
	 */
	if (typeof conteneur == 'undefined')
		$('#' + modalWindowId).dialog('open');
	/**
	 * On indique que la fenêtre est affichée
	 */
	modalWindowDisplayed['displayed'] = true;
}
/**
 * Fonction permettant de formatter le numéro de téléphone d'un champ
 * @param $_element HTMLInputElement l'élément HTML dans lequel la valeur est mise à jour
 * @return void
 */
function updatePhoneNumber($_element)
{
	var p = $_element.value;
	var pL = p.length;
	var pM = '';
	var j = 0;
	p = p.replace(/^(\+[\d]{0,2} 0)/, '0').replace(/^(\+[\d]{0,2}0)/, '0').replace(/^(\+[\d]{0,2})/, '0').replace(/^(\+[\d]{0,2}\.)/, '0').replace(/^(\+[\d]{0,2})/, '');
	for ( var i = 0; i < pL; i++)
	{
		var pS = p.substr(i, 1);
		if (pS && !isNaN(pS) && pS != '' && pS != ' ' && pS != '	')
		{
			pM += (j > 0 && j % 2 == 0 ? ' ' : '') + pS;
			j++;
		}
	}
	/**
	 * On met à jour la valeur du champ
	 */
	$_element.value = pM;
	$_element.setAttribute('value', pM);
}
/**
 * Fonction permettant de faire afficher la fenêtre de tip a friend 
 * à partir du moment où le contenu de la fenêtre est bien défini
 * @return
 */
function showTipAFriend()
{
	if (typeof TIP_A_FRIEND_CONTENT != 'undefined')
	{
		/**
		 * Appel xiti
		 */
		Xt_param = 's=' + xtsite + '&s2=&di=&p=' + xttaf;
		if (window.xtparam != null)
			Xt_param += xtparam;
		try
		{
			Xt_r = top.document.referrer;
		}
		catch (e)
		{
			Xt_r = document.referrer;
		}
		Xt_h = new Date();
		Xt_i = xtsd + '.xiti.com/hit.xiti?' + Xt_param;
		Xt_i += '&hl=' + Xt_h.getHours() + 'x' + Xt_h.getMinutes() + 'x' + Xt_h.getSeconds();
		if (parseFloat(navigator.appVersion) >= 4)
		{
			Xt_s = screen;
			Xt_i += '&r=' + Xt_s.width + 'x' + Xt_s.height + 'x' + Xt_s.pixelDepth + 'x' + Xt_s.colorDepth;
		}
		var img = document.createElement('img');
		img.setAttribute('width', 1);
		img.setAttribute('height', 1);
		img.setAttribute('alt', 1);
		img.setAttribute('src', Xt_i);
		Xt_i += '&ref=' + Xt_r.replace(/[<>"]/g, '').replace(/&/g, '$');
		document.getElementsByTagName('body')[0].appendChild(img);
		/**
		 * On affiche la popin
		 */
		showModalWindow(TIP_A_FRIEND_CONTENT,
		{
			'height' : 605,
			'width' : 635
		}, undefined);
	}
	return false;
}
/**
 * Fonction permettant d'envoyer les données du formulaure de Tip A Friend
 * @return bool true
 */
function sendTipAFriend()
{
	/**
	 * On affiche le message de remerciement final
	 */
	if (typeof TIP_A_FRIEND_END_CONTENT != 'undefined')
	{
		/**
		 * Appel xiti
		 */
		Xt_param = 's=' + xtsite + '&s2=&di=&p=' + xttaf_merci;
		if (window.xtparam != null)
			Xt_param += xtparam;
		try
		{
			Xt_r = top.document.referrer;
		}
		catch (e)
		{
			Xt_r = document.referrer;
		}
		Xt_h = new Date();
		Xt_i = xtsd + '.xiti.com/hit.xiti?' + Xt_param;
		Xt_i += '&hl=' + Xt_h.getHours() + 'x' + Xt_h.getMinutes() + 'x' + Xt_h.getSeconds();
		if (parseFloat(navigator.appVersion) >= 4)
		{
			Xt_s = screen;
			Xt_i += '&r=' + Xt_s.width + 'x' + Xt_s.height + 'x' + Xt_s.pixelDepth + 'x' + Xt_s.colorDepth;
		}
		var img = document.createElement('img');
		img.setAttribute('width', 1);
		img.setAttribute('height', 1);
		img.setAttribute('alt', 1);
		img.setAttribute('src', Xt_i);
		Xt_i += '&ref=' + Xt_r.replace(/[<>"]/g, '').replace(/&/g, '$');
		document.getElementsByTagName('body')[0].appendChild(img);
		var data = '';
		/**
		 * Récupération des mails, prénoms et nom
		 */
		for ( var i = -1; i < 10; i++)
		{
			var suf = i == -1 ? '' : '_' + i;
			var amp = i == -1 ? '' : '' + '&';
			var mailId = 'taf_email' + suf;
			var prenomId = 'taf_prenom' + suf;
			if (document.getElementById(mailId) && document.getElementById(prenomId))
				data += amp + mailId + '=' + encodeURIComponent($('#' + mailId).val()) + '&' + prenomId + '=' + encodeURIComponent($('#' + prenomId).val());
			else
				break;
			if (i == -1)
				data += '&taf_nom=' + encodeURIComponent($('#taf_nom').val());
		}
		/**
		 * Ajout message
		 */
		data += '&taf_message=' + encodeURIComponent($('#taf_message').val());
		$.ajax(
		{
			type : "POST",
			url : "taf.php",
			data : data
		});
		/**
		 * On affiche le message de remerciement final
		 */
		showModalWindow(TIP_A_FRIEND_END_CONTENT,
		{
			'height' : 595,
			'width' : 630
		}, undefined);
	}
	return false;
}
/**
 * Fonction permettant d'initialiser l'auto complétion des villes lors de la saisie du code postal
 * @param $_host string OPTIONAL url à appeler pour obtenir les résultats
 * @param $_options OPTIONAL Array les options d'affichage de gestion des résultats à redéfinir
 * @param $_cpFieldName OPTIONAL string l'id du champ de saisie du code postal
 * @param $_cityFieldName OPTIONAL string l'id du champ de la ville
 * @return void
 */
function autocompleteCity($_host, $_options, $_cpFieldName, $_cityFieldName)
{
	/**
	 * Liste des options possibles
	 */
	var options = new Array('autoFill', 'cacheLength', 'delay', 'extraParams', 'formatItem', 'formatMatch', 'formatResult', 'highlight', 'matchCase', 'matchContains', 'matchSubset', 'max', 'minChars', 'multiple', 'multipleSeparator', 'mustMatch', 'scroll', 'scrollHeight', 'selectFirst', 'width');
	/**
	 * Définition de l'id du champ de saisi du CP
	 */
	var cpFieldName = (typeof $_cpFieldName != 'undefined' && $_cpFieldName != null) ? $_cpFieldName : 'codepostal';
	/**
	 * Définition de l'id du champ de saisi de la ville
	 */
	var cityFieldName = (typeof $_cityFieldName != 'undefined' && $_cityFieldName != null) ? $_cityFieldName : 'ville';
	/**
	 * Gestion du code postal automatique avec autocomplétion des villes
	 */
	if (document.getElementById(cpFieldName) && document.getElementById(cityFieldName))
	{
		/**
		 * Récupération du champ du code postal
		 * par défaut, c'est le champs qui doit porter l'id indiqué,
		 * sinon au maximum, le champ doit être le premier élément de type input contenu par l'élément portant l'id
		 */
		var cpField = document.getElementById(cpFieldName).tagName.toLowerCase() == 'input' ? document.getElementById(cpFieldName) : document.getElementById(cpFieldName).getElementsByTagName('input').item(0);
		var cityField = document.getElementById(cityFieldName).tagName.toLowerCase() == 'input' ? document.getElementById(cityFieldName) : document.getElementById(cityFieldName).getElementsByTagName('input').item(0);
		/**
		 * Options par défaut
		 */
		var defaultOptions =
		{
			'extraParams' :
			{
				'callService' : 'getville',
				'output' : 'autocomplete'
			},
			'cacheLength' : '1',
			'minChars' : 3,
			'width' : '220px',
			'max' : 100,
			'scrollHeight' : '500px'
		};
		/**
		 * Redéfinition des valeurs d'options si passées en paramètre
		 */
		if (typeof $_options != 'undefined' && $_options != null)
		{
			for ( var index in options)
			{
				var key = options[index];
				if (typeof $_options[key] != 'undefined')
					defaultOptions[key] = $_options[key];
			}
		}
		/**
		 * Définition de l'hôte d'appel pour l'auto complétion
		 */
		var host = (typeof $_host != 'undefined' && $_host != null) ? $_host : 'http://' + location.host + '/_ressources/services/';
		/**
		 * Déclaration de l'autocomplétion sur le champ CP
		 */
		$(cpField).autocomplete(host, defaultOptions);
		/**
		 * Définition des actions à entreprendre lors de la sélection d'un résultat par l'internaute
		 * Les résultats sont de la forme "CP - Ville"
		 */
		$(cpField).result(function(event, item)
		{
			if (typeof item != 'undefined' && item != 'undefined')
			{
				/**
				 * Récupération du CP complet choisi
				 */
				var zip = new String(item).substring(0, new String(item).lastIndexOf(' -'));
				/**
				 * Récupération de la ville choisie
				 */
				var city = new String(item).replace(zip + ' - ', '');
				/**
				 * Définition de la valeur finale du CP choisi
				 */
				$(cpField).val(zip);
				$(cpField)[0].setAttribute('value', zip);
				/**
				 * Définition de la valeur finale de la ville choisie
				 */
				$(cityField).val(city);
				$(cityField)[0].setAttribute('value', city);
			}
		});
	}
}
/**
 * Fonction permettant d'initialiser l'auto complétion des villes lors de la saisie du nom d'une ville sans aucune autre information
 * @param $_host string OPTIONAL url à appeler pour obtenir les résultats
 * @param $_options OPTIONAL Array les options d'affichage de gestion des résultats à redéfinir
 * @param $_cpFieldName OPTIONAL string l'id du champ de saisie du code postal
 * @param $_cityFieldName OPTIONAL string l'id du champ de la ville
 * @return void
 */
function autocompleteCityFromCityValue($_host, $_options, $_cpFieldName, $_cityFieldName)
{
	/**
	 * Liste des options possibles
	 */
	var options = new Array('autoFill', 'cacheLength', 'delay', 'extraParams', 'formatItem', 'formatMatch', 'formatResult', 'highlight', 'matchCase', 'matchContains', 'matchSubset', 'max', 'minChars', 'multiple', 'multipleSeparator', 'mustMatch', 'scroll', 'scrollHeight', 'selectFirst', 'width');
	/**
	 * Définition de l'id du champ de saisi du CP
	 */
	var cpFieldName = (typeof $_cpFieldName != 'undefined' && $_cpFieldName != null) ? $_cpFieldName : 'codepostal';
	/**
	 * Définition de l'id du champ de saisi de la ville
	 */
	var cityFieldName = (typeof $_cityFieldName != 'undefined' && $_cityFieldName != null) ? $_cityFieldName : 'ville';
	/**
	 * Gestion du code postal automatique avec autocomplétion des villes
	 */
	if (document.getElementById(cpFieldName) && document.getElementById(cityFieldName))
	{
		/**
		 * Récupération du champ du code postal
		 * par défaut, c'est le champs qui doit porter l'id indiqué,
		 * sinon au maximum, le champ doit être le premier élément de type input contenu par l'élément portant l'id
		 */
		var cpField = document.getElementById(cpFieldName).tagName.toLowerCase() == 'input' ? document.getElementById(cpFieldName) : document.getElementById(cpFieldName).getElementsByTagName('input').item(0);
		var cityField = document.getElementById(cityFieldName).tagName.toLowerCase() == 'input' ? document.getElementById(cityFieldName) : document.getElementById(cityFieldName).getElementsByTagName('input').item(0);
		/**
		 * Options par défaut
		 */
		var defaultOptions =
		{
			'extraParams' :
			{
				'callService' : 'getville',
				'output' : 'autocomplete'
			},
			'delay' : 0,
			'cacheLength' : 0,
			'minChars' : 1,
			'width' : '220px',
			'max' : 100,
			'scrollHeight' : '500px'
		};
		/**
		 * Redéfinition des valeurs d'options si passées en paramètre
		 */
		if (typeof $_options != 'undefined' && $_options != null)
		{
			for ( var index in options)
			{
				var key = options[index];
				if (typeof $_options[key] != 'undefined')
					defaultOptions[key] = $_options[key];
			}
		}
		/**
		 * Définition de l'hôte d'appel pour l'auto complétion
		 */
		var host = (typeof $_host != 'undefined' && $_host != null) ? $_host : 'http://' + location.host + '/_ressources/services/';
		/**
		 * Déclaration de l'autocomplétion sur le champ CP
		 */
		$(cityField).autocomplete(host, defaultOptions);
		/**
		 * Définition des actions à entreprendre lors de la sélection d'un résultat par l'internaute
		 * Les résultats sont de la forme "CP - Ville"
		 */
		$(cityField).result(function(event, item)
		{
			if (typeof item != 'undefined' && item != 'undefined')
			{
				/**
				 * Récupération du CP complet choisi
				 */
				var zip = new String(item).substring(0, new String(item).lastIndexOf(' -'));
				/**
				 * Récupération de la ville choisie
				 */
				var city = new String(item).replace(zip + ' - ', '');
				/**
				 * Définition de la valeur finale du CP choisi
				 */
				$(cpField).val(zip);
				$(cpField)[0].setAttribute('value', zip);
				/**
				 * Définition de la valeur finale de la ville choisie
				 */
				$(cityField).val(city);
				$(cityField)[0].setAttribute('value', city);
			}
		});
	}
}
/**
 * Fonction permettant d'initialiser l'auto complétion des villes pour les LP à la saisie du nom d'une ville sans aucune autre information
 * @param $_host string OPTIONAL url à appeler pour obtenir les résultats
 * @param $_options OPTIONAL Array les options d'affichage de gestion des résultats à redéfinir
 * @param $_cityFieldName OPTIONAL string l'id du champ de la ville
 * @param $_cityFieldName OPTIONAL string l'id du champ de la ville
 * @return void
 */
function autocompleteCityFromDpt($_host, $_options, $_dptFieldName, $_cityFieldName)
{
	/**
	 * Liste des options possibles
	 */
	var options = new Array('autoFill', 'cacheLength', 'delay', 'extraParams', 'formatItem', 'formatMatch', 'formatResult', 'highlight', 'matchCase', 'matchContains', 'matchSubset', 'max', 'minChars', 'multiple', 'multipleSeparator', 'mustMatch', 'scroll', 'scrollHeight', 'selectFirst', 'width');
	/**
	 * Définition de l'id du champ de saisi du CP
	 */
	var dptFieldName = (typeof $_dptFieldName != 'undefined' && $_dptFieldName != null) ? $_dptFieldName : 'liste_departements';
	/**
	 * Définition de l'id du champ de saisi de la ville
	 */
	var cityFieldName = (typeof $_cityFieldName != 'undefined' && $_cityFieldName != null) ? $_cityFieldName : 'ville';
	/**
	 * Gestion du code postal automatique avec autocomplétion des villes
	 */
	if (document.getElementById(dptFieldName) && document.getElementById(cityFieldName))
	{
		/**
		 * Récupération du champ du code postal
		 * par défaut, c'est le champs qui doit porter l'id indiqué,
		 * sinon au maximum, le champ doit être le premier élément de type input contenu par l'élément portant l'id
		 */
		var dptField = document.getElementById(dptFieldName).tagName.toLowerCase() == 'select' ? document.getElementById(dptFieldName) : document.getElementById(dptFieldName).getElementsByTagName('select').item(0);
		var cityField = document.getElementById(cityFieldName).tagName.toLowerCase() == 'input' ? document.getElementById(cityFieldName) : document.getElementById(cityFieldName).getElementsByTagName('input').item(0);
		/**
		 * Par défaut, le champ ville doit être désactivé
		 */
		if ($(cityField).val() == '' && $(dptField).val() == '')
		{
			$(cityField).attr('disabled', 'disabled');
			$(cityField).css('backgroundColor', 'DDDDDD');
		}
		/**
		 * Options par défaut
		 */
		defaultOptionsDpt =
		{
			'extraParams' :
			{
				'callService' : 'getville',
				'output' : 'autocomplete'
			},
			'cacheLength' : '1',
			'minChars' : 3,
			'width' : '220px',
			'max' : 100,
			'scrollHeight' : '500px'
		};
		/**
		 * Redéfinition des valeurs d'options si passées en paramètre
		 */
		if (typeof $_options != 'undefined' && $_options != null)
		{
			for ( var index in options)
			{
				var key = options[index];
				if (typeof $_options[key] != 'undefined')
					defaultOptions[key] = $_options[key];
			}
		}
		/**
		 * Définition de l'hôte d'appel pour l'auto complétion
		 */
		hostDpt = (typeof $_host != 'undefined' && $_host != null) ? $_host : 'http://' + location.host + '/_ressources/services/';
		/**
		 * si on change le département
		 */
		$(dptField).change(function()
		{
			if ($(this).val() == '')
			{
				$(cityField).val('');
				$(cityField).attr('disabled', true);
				$(cityField).css('backgroundColor', 'DDDDDD');
				$(cityField).autocomplete('destroy');
			}
			else
			{
				$(cityField).attr('disabled', false);
				$(cityField).css('backgroundColor', 'FFFFFF');
				$(cityField).val('');
				if ($(this).val() != '00' && $(this).val() != '-')
				{
					defaultOptionsDpt.extraParams.dpt = $(this).val();
					$(cityField).autocomplete(hostDpt, defaultOptionsDpt);
					$(cityField).flushCache();
				}
			}
			/**
			 * on met à jour le champ hidden departement
			 */
			if ($('.hidden_departement').length)
				$('.hidden_departement').val($(this).val());
		});
	}
}
var defaultOptionsDpt = hostDpt = null;
/**
 * Id du champ de sélection de la ville
 */
var cityFieldName = '';
/**
 * Fonction permettant dans le cas où la sélection de la ville est une liste déraoulante de lancer la recherche
 * de la ville correspondante au CP saisi au changement de la valeur du champ CP
 * @param $_host string url à appeler pour la recherche des villes associées au CP
 * @param $_cpFieldName string l'id du champ de saisie du CP
 * @param $_cityFieldName string l'id du champ de sélection de la ville
 * @return void
 */
function autoFillCities($_host, $_cpFieldName, $_cityFieldName)
{
	/**
	 * Définition de l'id du champ de saisi du CP
	 */
	var cpFieldName = (typeof $_cpFieldName != 'undefined' && $_cpFieldName != null) ? $_cpFieldName : 'codepostal';
	/**
	 * Définition de l'id du champ de saisi de la ville
	 */
	cityFieldName = (typeof $_cityFieldName != 'undefined' && $_cityFieldName != null) ? $_cityFieldName : 'ville';
	/**
	 * Définition de l'hôte d'appel pour l'auto complétion
	 */
	var host = (typeof $_host != 'undefined' && $_host != null) ? $_host : 'http://' + location.host + location.pathname.replace(/(index.php)/, '') + '../../_ressources/services/';
	/**
	 * Déclaration de l'évévenement sur le champ CP 
	 * et en fonction de si le champ de sélection de la ville est bien une liste de sélection
	 */
	if (document.getElementById(cpFieldName) && document.getElementById(cityFieldName) && document.getElementById(cityFieldName).tagName.toLowerCase() == 'select')
	{
		$('#' + cpFieldName).change(function()
		{
			/**
			 * Si le code postal est bien un nombre au moins égal à 5 chiffres
			 */
			if ($('#' + cpFieldName).val().length == 5 && !isNaN($('#' + cpFieldName).val().replace(' ', '-')))
			{
				/**
				 * On indique le chargement en cours
				 */
				$('#' + cpFieldName).addClass('ac_loading');
				/**
				 * On lance la requete AJAX
				 */
				$.ajax(
				{
					'type' : 'POST',
					'url' : host,
					'data' :
					{
						'callService' : 'getville',
						'callback' : 'getVilleCallback',
						'output' : 'json',
						'codepostal' : $('#' + cpFieldName).val()
					},
					'success' : function(data)
					{
						/**
						 * On indique la fin du chargement
						 */
						$('#' + cpFieldName).removeClass('ac_loading');
						/**
						 * On évalue le code retourné
						 */
						try
						{
							return eval(data);
						}
						/**
						 * Sinon on indique une erreur
						 */
						catch (e)
						{
							return getVilleCallback( {});
						}
					}
				});
			}
			/**
			 * Sinon on indique une erreur
			 */
			else
				return getVilleCallback( {});
		});
	}
}
/**
* Fonction de gestion de la réponse à un appel de recherche de ville en fonction du CP
* @param Object les villes
* @return void
*/
function getVilleCallback($_response)
{
	if (typeof $_response != 'undefined' && cityFieldName != '' && document.getElementById(cityFieldName) && document.getElementById(cityFieldName).tagName.toLowerCase() == 'select')
	{
		/**
		* Récupération du select HTML
		*/
		var selectVille = document.getElementById(cityFieldName);
		/**
		* Suppression des options sauf la première
		*/
		var options = selectVille.options;
		var nbOptions = options.length;
		for ( var i = 0; i < nbOptions; i++)
		{
			var option = options.item(1);
			if (option && (option.id != 'firstVille' || i > 0))
				selectVille.removeChild(option);
		}
		/**
		* Ajout des villes associées au CP
		*/
		var citiesAdded = 0;
		for ( var index in $_response)
		{
			var couple = $_response[index];
			var zip = couple.zip;
			var city = couple.city;
			var option = document.createElement('option');
			$(option).html(city);
			$(option).val(city);
			selectVille.appendChild(option);
			citiesAdded++;
		}
		/**
		* Si plusieurs villes ont été ajoutées à la liste
		*/
		if (citiesAdded > 0)
		{
			/**
			 * On met indique de sélectionner la ville
			 */
			$(selectVille.options.item(0)).html('Sélectionnez votre ville');
			/**
			 * Si une seule ville associée au CP, on la sélectionne auto
			 */
			var selectIndex = citiesAdded == 1 ? 1 : 0;
			/**
			 * On s'assure de la sélection de l'option voulue
			 */
			selectVille.options.selectIndex = selectIndex;
			selectVille.selectedIndex = selectIndex;
			selectVille.options[selectIndex].setAttribute('selected', 'selected');
			/**
			 * Si une seule ville, on déselectionne la première valeur
			 */
			if (selectIndex == 1)
				selectVille.options[0].removeAttribute('selected');
		}
		/**
		* Sinon, si pas de villes, alors on indique que le code postal n'est pas valide
		*/
		else
			$(selectVille.options.item(0)).html('Code postal invalide');
	}
}
/**
 * Fonction basique permettant de charger une chaine de caractères représentatn de l'XML
 * au format Object pour le parcourir plus simplement
 * @param $_xmlString string
 * @return Document
 */
function loadXmlFromString($_xmlString)
{
	var doc = null;
	/**
	 * code for IE
	 */
	if (window.ActiveXObject)
	{
		var doc = new ActiveXObject("Microsoft.XMLDOM");
		doc.async = 'false';
		doc.loadXML($_xmlString);
	}
	/**
	 * code for Mozilla, Firefox, Opera, etc.
	 */
	else
	{
		var parser = new DOMParser();
		var doc = parser.parseFromString($_xmlString, "text/xml");
	}
	return doc;
}
/**
 * Définition des événements nécessaires
 */
$(document).ready(function()
{
	/**
	 * Formatage du numéro de téléphone à la saisie
	 */
	var telFields = new Array('telephone', 'wcb_numtel');
	var telFieldsLength = telFields.length;
	for ( var i = 0; i < telFieldsLength; i++)
		if (document.getElementById(telFields[i]))
		{
			$('#' + telFields[i]).change(function()
			{
				updatePhoneNumber(this);
			});
			/**
			 * Formatage à la saisie uniquement pour les nouvelles
			 * Au 04/08/2010 : généralisation
			 */
			$('#' + telFields[i]).keyup(function()
			{
				updatePhoneNumber(this);
			});
		}
	/**
	 * Auto-complétation de CP - ville
	 * Au 17/06/2010 : uniquement pour les nouvelles opé pour le moment
	 * Au 04/08/2010 : généralisation
	 * Au 01/04/2011 : autocomplétion sur la saisie de la ville et non le CP est masqué
	 */
	if (document.getElementById('codepostal') && document.getElementById('codepostal').className.match(/hidden/))
		autocompleteCityFromCityValue();
	else
		autocompleteCity();
});
/**
 * Focntion permettant d'afficher la lightbox de jquery avec les liens sélectionnés par le selector
 * @param $_selector string sélection des liens
 * @return bool true
 */
function showLightBox($_selector)
{
	$($_selector).lightBox(
	{
		fixedNavigation : true,
		imageLoading : '/_ressources/styles/lightbox/images/lightbox-ico-loading.gif',
		imageBtnClose : '/_ressources/styles/lightbox/images/lightbox-btn-close-fr.gif',
		imageBtnPrev : '/_ressources/styles/lightbox/images/lightbox-btn-prev-fr.gif',
		imageBtnNext : '/_ressources/styles/lightbox/images/lightbox-btn-next-fr.gif',
		imageBlank : '/_ressources/styles/lightbox/images/lightbox-blank.gif',
		txtOf : 'sur'
	});
}

