/**
 * fonction anonyme pour closure...
 */
(function(){
	/**
	* Fonctions utilisées par le formulaire MEV, ce script est invoqué par form.js
	* L'utilisation des calendriers impose aussi l'utilisation de calendar.js et calendar.css
	* L'utilisation de la completion impose l'utilisation de completionMEV.js et completionMEV.css
	*
	* Le formulaire MEV doit contenir imérativement les éléments suivant:
	* ATTENTION: Il ne faut pas modifier les id de ces éléments.
	* 
	* 	<!-- Les trois input de sélection de type de parcours -->
	* 	<input id="typeMEVAS" type="radio" value="0" name="type" />
	* 	<!-- on peut affecter l'attribut checked à n'importe quel de ces trois éléments radio, cela définit le type de parcours choisi par défaut -->
	* 	<input id="typeMEVAR" type="radio" value="1" name="type" checked="checked" />
	* 	<input id="typeMEVPC" type="radio" value="2" name="type" />
	*
	* 	<!-- les input de saisie de lieux pour les quatres lieux possibles, un départ et une arrivée, pour l'aller et pour le retour. Chaque
	* 	     champ texte doit être accompagné d'un conteneur de positionnement, et un champ hidden pour la valeur 'data' correspondant au choix de l'internaute.
	* 	-->
	* 	<input id="lieuMEVDepartAller" type="text" name="departAller" />
	* 	<input id="dataMEVDepartAller" type="hidden" name="departAllerData">
	* 	<div id="propositionsMEVDepartAller"></div>
	* 	<input id="lieuMEVArriveeAller" type="text" name="arriveeAller" />
	* 	<input id="dataMEVArriveeAller" type="hidden" name="arriveeAllerData" />
	* 	<div id="propositionsMEVArriveeAller"></div>
	* 	<input id="lieuMEVDepartRetour" type="text" name="departRetour" />
	* 	<input id="dataMEVDepartRetour" type="hidden" name="departRetourData" />
	* 	<div id="propositionsMEVDepartRetour"></div>
	* 	<input id="lieuMEVArriveeRetour" type="text" name="arriveeRetour" />
	* 	<input id="dataMEVArriveeRetour" type="hidden" name="arriveeRetourData" />
	* 	<div id="propositionsMEVArriveeRetour"></div>
	*
	* 	<!-- les sélecteurs de dates pour l'aller et le retour avec leur icone calendrier associée. Les sélecteurs sont vides (ils ne contiennent qu'une
	* 	     seule option vide, car ils sont calculés pour tenir compte de la date client.
	* 	-->
	* 	<select id="jourMEVAller" name="jourAller"><option></option></select>
	* 	<select id="moisMEVAller" name="moisAller"><option></option></select>
	* 	<img id="calendrierMEVAllerIcon" src="img/calendar.gif" alt="calendrier" />
	* 	<select id="jourMEVRetour" name="jourRetour"><option></option></select>
	* 	<select id="moisMEVRetour" name="moisRetour"><option></option></select>
	* 	<img id="calendrierMEVRetourIcon" src="img/calendar.gif" alt="calendrier" />
	* 	<!-- Il faut aussi disposer où l'on souhaite les div contenant les messages d'erreur associés aux sélecteurs de dates. 
	* 	     Leur présence est optionnelle, mais préférable si on veut informer l'utilisateur de ses erreurs de manip.
	* 	     Ces messages sont affichés au moment de la validation du formulaire. 
	* 	-->
	* 	<div id="errorMEVDateAllerErronee" class="errorMessage">La date aller que vous avez d&eacute;finie est erron&eacute;e</div>
	* 	<div id="errorMEVDateRetourErronee" class="errorMessage">La date retour que vous avez d&eacute;finie est erron&eacute;e</div>
	* 	<div id="errorMEVDatesInversees" class="errorMessage">La date retour est ant&eacute;rieure &agrave; la date d'aller</div>
	*
	* 	<!-- Les sélecteurs de pax -->
	* 	<select id="paxMEVAdultes" name="paxAdultes">options de 1 à 9</select>
	* 	<select id="paxMEVEnfants" name="paxEnfants">options de 0 à 9</select>
	* 	<select id="paxMEVBebes" name="paxBebes">options de 0 à 9</select>
	* 	<!-- et le message d'erreur associé -->
	* 	<div id="errorMEVNbBebes" class="errorMessage">Le nombre de b&eacute;b&eacute;s ne doit pas &ecirc;tre sup&eacute;rieur au nombre d'adultes</div>
	*
	* 	<!-- Et finalement les radio boutons por choisir la classe. Celui qui porte l'attribut checked="checked" indique la classe par défaut -->
	* 	<input id="classeMEVEco" type="radio" value="1" name="classe" checked="checked" />
	* 	<input id="classeMEVAff" type="radio" value="3" name="classe" />
	* 	<input id="classeMEVPre" type="radio" value="2" name="classe" />
	*
	* 	<!-- Pour valider le formulaire il faut un bouton -->
	* 	<input id="submitMEV" type="submit" value="Valider"/>
	**/
	
	
	
	/**
	* Initialise les dates par défaut en utilisant l'horloge du client, la règle est la suivante pour la date aller: c'est le
	* prochain vendredi jusqu'au mercredi, et le vendredi en 8 à partir du jeudi. La date retour est le vendredi suivant
	* la date aller.
	* On faire abstraction des dates par défaut précédentes et fixer les dates aller et retour en les passant en paramètre 
	* au format jj/mm/aaaa
	**/
	
	var JOUR=24*60*60*1000,
	/**
	 * Indique si le formulaire MEV a déjà été setté
	 */
	flagInitFormMEV,
	/**
	 * Raccourci vers méthode de récupération d'éléments
	 * DOM par identifiant.
	 */	
	//	byId=window.ev&&ev.dom&&ev.dom.element||function (){return document.getElementById.apply(document, arguments);};
	// Replaced  on 30/03/2010, cause seems that ie6 don't like apply methode.
	byId=window.ev&&ev.dom&&ev.dom.element;		
	if(!byId) {				
		byId=function(_parameter) {
			return document.getElementById(_parameter);
		};
	}
	
	window.initMEVDates=function (dateAllerTexte,dateRetourTexte) {
		
		var jourMEVAller=byId("jourMEVAller");
		var moisMEVAller=byId("moisMEVAller");
		var jourMEVRetour=byId("jourMEVRetour");
		var moisMEVRetour=byId("moisMEVRetour");
		if(!(jourMEVAller&&moisMEVAller&&jourMEVRetour&&moisMEVRetour)){
			return;
		}
		
		var jourAller;
		var moisAller;
		var anneeAller;
		var jourRetour;
		var moisRetour;
		var anneeRetour;
	
		var now=new Date();
		var day=now.getDay();
		var delta=5-day;
		if(delta<=1){
			delta+=7;
		}
		var dateAller=new Date();
		dateAller.setTime(now.getTime()+delta*JOUR);
		var dateRetour=new Date();
		dateRetour.setTime(dateAller.getTime()+7*JOUR);
	
		if(dateAllerTexte&&dateAllerTexte.match(/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/)){
			jourAller=dateAllerTexte.replace(/\/[0-9]{2}\/[0-9]{4}$/,"");
			moisAller=dateAllerTexte.replace(/^[0-9]{2}\//,"");
		}
		else{
			jourAller=""+dateAller.getDate();
			if(dateAller.getDate()<10){
				jourAller="0"+dateAller.getDate();
			}
			moisAller=""+(dateAller.getMonth()+1);
			if(dateAller.getMonth()<9){
				moisAller="0"+(dateAller.getMonth()+1);
			}
			moisAller+="/"+dateAller.getFullYear();
		}
		
		if(dateRetourTexte&&dateRetourTexte.match(/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/)){
			jourRetour=dateRetourTexte.replace(/\/[0-9]{2}\/[0-9]{4}$/,"");
			moisRetour=dateRetourTexte.replace(/^[0-9]{2}\//,"");
		}
		else{
			jourRetour=""+dateRetour.getDate();
			if(dateRetour.getDate()<10){
				jourRetour="0"+dateRetour.getDate();
			}
			moisRetour=""+(dateRetour.getMonth()+1);
			if(dateRetour.getMonth()<9){
				moisRetour="0"+(dateRetour.getMonth()+1);
			}
			moisRetour+="/"+dateRetour.getFullYear();
		}
		
		jourMEVAller.value=jourAller;
		moisMEVAller.value=moisAller;
		jourMEVRetour.value=jourRetour;
		moisMEVRetour.value=moisRetour;
	};
	
	/**
	* Cette fonction met à jour les champs (enabled ou disabled) et les classes associées des champs de formulaires en 
	* fonction du type sélectionné.
	**/
	window.setMEVType=function () {
		var typeMEVAS=byId("typeMEVAS");
		var typeMEVAR=byId("typeMEVAR");
		var typeMEVPC=byId("typeMEVPC");
		var lieuMEVDepartAller=byId("lieuMEVDepartAller");
		var lieuMEVArriveeAller=byId("lieuMEVArriveeAller");
		var lieuMEVDepartRetour=byId("lieuMEVDepartRetour");
		var lieuMEVArriveeRetour=byId("lieuMEVArriveeRetour");
		var jourMEVRetour=byId("jourMEVRetour");
		var moisMEVRetour=byId("moisMEVRetour");
		var anneeMEVRetour=byId("anneeMEVRetour");
		var calendrierMEVAllerIcon=byId("calendrierMEVAllerIcon");
		var calendrierMEVRetourIcon=byId("calendrierMEVRetourIcon");
		addClass(calendrierMEVAllerIcon,"calendarEnabled");
		if(typeMEVAS&&typeMEVAS.checked){
			disableInput(lieuMEVDepartRetour);
			disableInput(lieuMEVArriveeRetour);
			disableInput(jourMEVRetour);
			disableInput(moisMEVRetour);
			disableInput(anneeMEVRetour);
			if(lieuMEVDepartRetour){
				lieuMEVDepartRetour.value="";
			}
			if(lieuMEVArriveeRetour){
				lieuMEVArriveeRetour.value="";
			}
			removeClass(calendrierMEVRetourIcon,"calendarEnabled");
			addClass(calendrierMEVRetourIcon,"calendarDisabled");
			if(calendrierMEVRetourIcon){
				calendrierMEVRetourIcon.style.display="none";
			}
		}
		else if(typeMEVAR&&typeMEVAR.checked){
			disableInput(lieuMEVDepartRetour);
			disableInput(lieuMEVArriveeRetour);
			enableInput(jourMEVRetour);
			enableInput(moisMEVRetour);
			enableInput(anneeMEVRetour);
			if(lieuMEVArriveeRetour){
				lieuMEVDepartRetour.value=lieuMEVArriveeAller.value;
			}
			if(lieuMEVArriveeRetour){
				lieuMEVArriveeRetour.value=lieuMEVDepartAller.value;
			}
			removeClass(calendrierMEVRetourIcon,"calendarDisabled");
			addClass(calendrierMEVRetourIcon,"calendarEnabled");
			if(calendrierMEVRetourIcon){
				calendrierMEVRetourIcon.style.display="";
			}
		}
		else if(typeMEVPC&&typeMEVPC.checked){
			enableInput(lieuMEVDepartRetour);
			enableInput(lieuMEVArriveeRetour);
			enableInput(jourMEVRetour);
			enableInput(moisMEVRetour);
			enableInput(anneeMEVRetour);
			removeClass(calendrierMEVRetourIcon,"calendarDisabled");
			addClass(calendrierMEVRetourIcon,"calendarEnabled");
			if(calendrierMEVRetourIcon){
				calendrierMEVRetourIcon.style.display="";
			}
		}
	};
	
	/**
	* Cette fonction va rendre disabled les options de paxMEVBebes qui ne sont pas valables
	**/
	window.setMEVPax=function (){
	//	var paxMEVAdultes=byId("paxMEVAdultes"), paxMEVBebes=byId("paxMEVBebes"), i;
		// FIXME [ygally] : support des anciens formulaires utilisant les id de pax sans 'MEV'
		var paxMEVAdultes=byId("paxMEVAdultes")||byId("paxAdultes"), paxMEVBebes=byId("paxMEVBebes")||byId("paxBebes"), i;
	
		for(i=0;i<paxMEVBebes.options.length;i++){
			if(paxMEVBebes.options[i].value<=paxMEVAdultes.value){
				enableInput(paxMEVBebes.options[i]);
			}
			else{
				disableInput(paxMEVBebes.options[i]);
			}
		}
	};
	
	/**
	* Recopie les valeurs des lieux aller dans les lieux de retour si on est en aller retour.
	**/
	window.tranfertLieuMEVValueToReturn=function () {
		var typeMEVAR=byId("typeMEVAR");
		if(typeMEVAR&&typeMEVAR.checked){
			var lieuMEVDepartAller=byId("lieuMEVDepartAller");
			var lieuMEVArriveeAller=byId("lieuMEVArriveeAller");
			var lieuMEVDepartRetour=byId("lieuMEVDepartRetour");
			var lieuMEVArriveeRetour=byId("lieuMEVArriveeRetour");
			if(lieuMEVArriveeRetour){
				lieuMEVArriveeRetour.value=lieuMEVDepartAller.value;
			}
			if(lieuMEVDepartRetour){
				lieuMEVDepartRetour.value=lieuMEVArriveeAller.value;
			}
		}
	};
	
	/**
	* Cette fonction vérifie la cohérence des données du formulaire MEV et active éventuellement les messages d'erreur.
	* Cette fonction retourne aussi un booléen qui indique si le formulaire est sans erreur, donc retourne true si aucune
	* erreur n'est présente, false dans le cas contraire
	**/
	window.verifyFormMEV=function (isEvent) {
		//nouveau moteur (MEV3)
		if(window.versionMEV===3){
			var error=false;
		
			var REGEXP_SPACE=/  +/g;
			function checkTextField(_f){
				if(_f&&_f.value){
					_f.value=_f.value.replace(REGEXP_SPACE, ' ');
					if(_f.value.length>30){
						_f.value=_f.value.substring(0, 30);
					}
				}
			}
		
			function resetFieldStyle(_f){
				if(_f){ window.removeClass(_f, 'onError'); }
			}
		
			function errorFieldStyle(_f){
				if(_f&&_f.style){ ev.dom.addClass(_f, 'onError'); }
			}
		
			tranfertLieuMEVValueToReturn();
			var errorMEVDateAllerErronee=byId("errorMEVDateAllerErronee");
			var jourMEVAller=byId("jourMEVAller").value;
			var moisMEVAller=byId("moisMEVAller").value.replace(/\/[0-9]{4}$/,"");
			var anMEVAller=byId("moisMEVAller").value.replace(/^[0-9]{2}\//,"");
			if(isValidDate(jourMEVAller,moisMEVAller,anMEVAller)){
				if(errorMEVDateAllerErronee){
					errorMEVDateAllerErronee.style.display="none";
				}
			}
			else{
				error=true;
				if(errorMEVDateAllerErronee){
					errorMEVDateAllerErronee.style.display="block";
				}
			}
			var errorMEVDateRetourErronee=byId("errorMEVDateRetourErronee");
			var jourMEVRetour=byId("jourMEVRetour").value;
			var moisMEVRetour=byId("moisMEVRetour").value.replace(/\/[0-9]{4}$/,"");
			var anMEVRetour=byId("moisMEVRetour").value.replace(/^[0-9]{2}\//,"");
			if(isValidDate(jourMEVRetour,moisMEVRetour,anMEVRetour)){
				if(errorMEVDateRetourErronee){
					errorMEVDateRetourErronee.style.display="none";
				}
			} 
			else{
				error=true;
				if(errorMEVDateRetourErronee){
					errorMEVDateRetourErronee.style.display="block";
				}
			}
			var errorMEVDatesInversees=byId("errorMEVDatesInversees");
			if(!error){
				var dateMEVAller=createDate(jourMEVAller,moisMEVAller,anMEVAller);
				var dateMEVRetour=createDate(jourMEVRetour,moisMEVRetour,anMEVRetour);
				if(byId("typeMEVAS").checked||dateMEVAller.getTime()<=dateMEVRetour.getTime()){
					if(errorMEVDatesInversees){
						errorMEVDatesInversees.style.display="none";
					}
				}
				else{
					error=true;
					if(errorMEVDatesInversees){
						errorMEVDatesInversees.style.display="block";
					}
				}
			}
			else{
				if(errorMEVDatesInversees){
					errorMEVDatesInversees.style.display="none";
				}
			}
			
			var errorMEVNbBebes=byId("errorMEVNbBebes");
		//	var paxMEVAdultes=byId("paxMEVAdultes"), paxMEVBebes=byId("paxMEVBebes");
			// FIXME [ygally] : support des anciens formulaires utilisant les id de pax sans 'MEV'
			var paxMEVAdultes=byId("paxMEVAdultes")||byId("paxAdultes"), paxMEVBebes=byId("paxMEVBebes")||byId("paxBebes");
		
			if(paxMEVAdultes.value>=paxMEVBebes.value) {
				if(errorMEVNbBebes){
					errorMEVNbBebes.style.display="none";
				}
			}
			else{
				error=true;
				if(errorMEVNbBebes){
					errorMEVNbBebes.style.display="block";
				}
			}
			
			var errorMEVLieuxEgauxAller=byId("errorMEVLieuxEgauxAller");
			var errorMEVLieuxEgauxRetour=byId("errorMEVLieuxEgauxRetour");
			var errorMEVLieuVide=byId("errorMEVLieuVide");
			var lieuMEVDepartAller=byId("lieuMEVDepartAller");
			var lieuMEVArriveeAller=byId("lieuMEVArriveeAller");
			var lieuMEVDepartRetour=byId("lieuMEVDepartRetour");
			var lieuMEVArriveeRetour=byId("lieuMEVArriveeRetour");
			resetFieldStyle(lieuMEVDepartAller);
			resetFieldStyle(lieuMEVArriveeAller);
			resetFieldStyle(lieuMEVDepartRetour);
			resetFieldStyle(lieuMEVArriveeRetour);
		
			checkTextField(lieuMEVDepartAller);
			checkTextField(lieuMEVArriveeAller);
			checkTextField(lieuMEVDepartRetour);
			checkTextField(lieuMEVArriveeRetour);
		
			if(lieuMEVDepartAller&&lieuMEVArriveeAller){
				if(lieuMEVDepartAller.value&&lieuMEVArriveeAller.value&&lieuMEVDepartAller.value===lieuMEVArriveeAller.value){
					error=true;
					if(errorMEVLieuxEgauxAller){
						errorMEVLieuxEgauxAller.style.display = "block";
					}
					errorFieldStyle(lieuMEVDepartAller);
					errorFieldStyle(lieuMEVArriveeAller);
					lieuMEVArriveeAller.focus();
				}
				else{
					if(errorMEVLieuxEgauxAller){
						errorMEVLieuxEgauxAller.style.display = "none";
					}
				}
			}
			if(lieuMEVDepartRetour&&lieuMEVArriveeRetour){
				if(lieuMEVDepartRetour.value&&lieuMEVArriveeRetour.value&&lieuMEVDepartRetour.value===lieuMEVArriveeRetour.value){
					error=true;
					if(errorMEVLieuxEgauxRetour){
						errorMEVLieuxEgauxRetour.style.display="block";
					}
					errorFieldStyle(lieuMEVDepartRetour);
					errorFieldStyle(lieuMEVArriveeRetour);
					lieuMEVArriveeRetour.focus();
				}
				else{
					if(errorMEVLieuxEgauxRetour){
						errorMEVLieuxEgauxRetour.style.display="none";
					}
				}		
			}
			var lieuAllerDVide=!(lieuMEVDepartAller&&lieuMEVDepartAller.value);
			var lieuAllerAVide=!(lieuMEVArriveeAller&&lieuMEVArriveeAller.value);
			var lieuAllerVide=lieuAllerDVide||lieuAllerAVide;
			var lieuRetourDVide=lieuMEVDepartRetour&&!lieuMEVDepartRetour.value;
			var lieuRetourAVide=lieuMEVArriveeRetour&&!lieuMEVArriveeRetour.value;
			var lieuRetourVide=lieuRetourDVide||lieuRetourAVide;
			if(isEvent&&(lieuAllerVide||lieuRetourVide)){	
				error=true;
				if(errorMEVLieuVide){
					errorMEVLieuVide.style.display="block";
				}
				if(lieuRetourAVide){
					errorFieldStyle(lieuMEVArriveeRetour);
					lieuMEVArriveeRetour.focus();
				}
				if(lieuRetourDVide){
					errorFieldStyle(lieuMEVDepartRetour);
					lieuMEVDepartRetour.focus();
				}
				if(lieuAllerAVide){
					errorFieldStyle(lieuMEVArriveeAller);
					lieuMEVArriveeAller.focus();
				}
				if(lieuAllerDVide){
					errorFieldStyle(lieuMEVDepartAller);
					lieuMEVDepartAller.focus();
				}
			}
			else{
				if(errorMEVLieuVide){
					errorMEVLieuVide.style.display="none";
				}
			}
			
			return !error;
		}
		//ancien moteur (MEV2)
		else{
			var error=false;
		
			var REGEXP_SPACE=/  +/g;
			function checkTextField(_f){
				if(_f&&_f.value){
					_f.value=_f.value.replace(REGEXP_SPACE, ' ');
					if(_f.value.length>30){
						_f.value=_f.value.substring(0, 30);
					}
				}
			}
		
			function resetFieldStyle(_f){
				if(_f){ window.removeClass(_f, 'onError'); }
			}
		
			function errorFieldStyle(_f){
				if(_f&&_f.style){ ev.dom.addClass(_f, 'onError'); }
			}
		
			tranfertLieuMEVValueToReturn();
			var errorMEVDateAllerErronee=byId("errorMEVDateAllerErronee");
			var jourMEVAller=byId("jourMEVAller").value;
			var moisMEVAller=byId("moisMEVAller").value.replace(/\/[0-9]{4}$/,"");
			var anMEVAller=byId("moisMEVAller").value.replace(/^[0-9]{2}\//,"");
			if(isValidDate(jourMEVAller,moisMEVAller,anMEVAller)){
				if(errorMEVDateAllerErronee){
					errorMEVDateAllerErronee.style.display="none";
				}
			}
			else{
				error=true;
				if(errorMEVDateAllerErronee){
					errorMEVDateAllerErronee.style.display="";
				}
			}
			var errorMEVDateRetourErronee=byId("errorMEVDateRetourErronee");
			var jourMEVRetour=byId("jourMEVRetour").value;
			var moisMEVRetour=byId("moisMEVRetour").value.replace(/\/[0-9]{4}$/,"");
			var anMEVRetour=byId("moisMEVRetour").value.replace(/^[0-9]{2}\//,"");
			if(isValidDate(jourMEVRetour,moisMEVRetour,anMEVRetour)){
				if(errorMEVDateRetourErronee){
					errorMEVDateRetourErronee.style.display="none";
				}
			}
			else{
				error=true;
				if(errorMEVDateRetourErronee){
					errorMEVDateRetourErronee.style.display="";
				}
			}
			var errorMEVDatesInversees=byId("errorMEVDatesInversees");
			if(!error){
				var dateMEVAller=createDate(jourMEVAller,moisMEVAller,anMEVAller);
				var dateMEVRetour=createDate(jourMEVRetour,moisMEVRetour,anMEVRetour);
				if(byId("typeMEVAS").checked||dateMEVAller.getTime()<=dateMEVRetour.getTime()){
					if(errorMEVDatesInversees){
						errorMEVDatesInversees.style.display="none";
					}
				}
				else{
					error=true;
					if(errorMEVDatesInversees){
						errorMEVDatesInversees.style.display="";
					}
				}
			}
			else{
				if(errorMEVDatesInversees){
					errorMEVDatesInversees.style.display="none";
				}
			}
			
			var errorMEVNbBebes=byId("errorMEVNbBebes");
		//	var paxMEVAdultes=byId("paxMEVAdultes"), paxMEVBebes=byId("paxMEVBebes");
			// FIXME [ygally] : support des anciens formulaires utilisant les id de pax sans 'MEV'
			var paxMEVAdultes=byId("paxMEVAdultes")||byId("paxAdultes"), paxMEVBebes=byId("paxMEVBebes")||byId("paxBebes");
		
			if(paxMEVAdultes.value>=paxMEVBebes.value) {
				if(errorMEVNbBebes){
					errorMEVNbBebes.style.display="none";
				}
			}
			else{
				error=true;
				if(errorMEVNbBebes){
					errorMEVNbBebes.style.display="";
				}
			}
			
			var errorMEVLieuxEgauxAller=byId("errorMEVLieuxEgauxAller");
			var errorMEVLieuxEgauxRetour=byId("errorMEVLieuxEgauxRetour");
			var errorMEVLieuVide=byId("errorMEVLieuVide");
			var lieuMEVDepartAller=byId("lieuMEVDepartAller");
			var lieuMEVArriveeAller=byId("lieuMEVArriveeAller");
			var lieuMEVDepartRetour=byId("lieuMEVDepartRetour");
			var lieuMEVArriveeRetour=byId("lieuMEVArriveeRetour");
			resetFieldStyle(lieuMEVDepartAller);
			resetFieldStyle(lieuMEVArriveeAller);
			resetFieldStyle(lieuMEVDepartRetour);
			resetFieldStyle(lieuMEVArriveeRetour);
		
			checkTextField(lieuMEVDepartAller);
			checkTextField(lieuMEVArriveeAller);
			checkTextField(lieuMEVDepartRetour);
			checkTextField(lieuMEVArriveeRetour);
		
			if(lieuMEVDepartAller&&lieuMEVArriveeAller){
				if(lieuMEVDepartAller.value&&lieuMEVArriveeAller.value&&lieuMEVDepartAller.value===lieuMEVArriveeAller.value){
					error=true;
					if(errorMEVLieuxEgauxAller){
						errorMEVLieuxEgauxAller.style.display = "";
					}
					errorFieldStyle(lieuMEVDepartAller);
					errorFieldStyle(lieuMEVArriveeAller);
					lieuMEVArriveeAller.focus();
				}
				else{
					if(errorMEVLieuxEgauxAller){
						errorMEVLieuxEgauxAller.style.display = "none";
					}
				}
			}
			if(lieuMEVDepartRetour&&lieuMEVArriveeRetour){
				if(lieuMEVDepartRetour.value&&lieuMEVArriveeRetour.value&&lieuMEVDepartRetour.value===lieuMEVArriveeRetour.value){
					error=true;
					if(errorMEVLieuxEgauxRetour){
						errorMEVLieuxEgauxRetour.style.display="";
					}
					errorFieldStyle(lieuMEVDepartRetour);
					errorFieldStyle(lieuMEVArriveeRetour);
					lieuMEVArriveeRetour.focus();
				}
				else{
					if(errorMEVLieuxEgauxRetour){
						errorMEVLieuxEgauxRetour.style.display="none";
					}
				}		
			}
			var lieuAllerDVide=!(lieuMEVDepartAller&&lieuMEVDepartAller.value);
			var lieuAllerAVide=!(lieuMEVArriveeAller&&lieuMEVArriveeAller.value);
			var lieuAllerVide=lieuAllerDVide||lieuAllerAVide;
			var lieuRetourDVide=lieuMEVDepartRetour&&!lieuMEVDepartRetour.value;
			var lieuRetourAVide=lieuMEVArriveeRetour&&!lieuMEVArriveeRetour.value;
			var lieuRetourVide=lieuRetourDVide||lieuRetourAVide;
			if(isEvent&&(lieuAllerVide||lieuRetourVide)){	
				error=true;
				if(errorMEVLieuVide){
					errorMEVLieuVide.style.display="";
				}
				if(lieuRetourAVide){
					errorFieldStyle(lieuMEVArriveeRetour);
					lieuMEVArriveeRetour.focus();
				}
				if(lieuRetourDVide){
					errorFieldStyle(lieuMEVDepartRetour);
					lieuMEVDepartRetour.focus();
				}
				if(lieuAllerAVide){
					errorFieldStyle(lieuMEVArriveeAller);
					lieuMEVArriveeAller.focus();
				}
				if(lieuAllerDVide){
					errorFieldStyle(lieuMEVDepartAller);
					lieuMEVDepartAller.focus();
				}
			}
			else{
				if(errorMEVLieuVide){
					errorMEVLieuVide.style.display="none";
				}
			}
			
			return !error;
		}
	};
	
	/**
	* Fonction invoquée par initForm() du script form.js
	**/
	window.initFormMEV=function (){		
		if(flagInitFormMEV){return;}		
		var formMEV=byId("formMEV");		
		if(genericNavigator.navigator.id==MSIE){
			addJavascriptToAttribute(formMEV,"onsubmit","cancelIEEvent();submitFormMEV();");
		}
		else{
			addJavascriptToAttribute(formMEV,"onsubmit","submitFormMEV();return false;");
		}		
		var typeMEVAS=byId("typeMEVAS"),
		typeMEVAR=byId("typeMEVAR"),
		typeMEVPC=byId("typeMEVPC");
		addJavascriptToAttribute(typeMEVAS,"onclick","setMEVType();");
		addJavascriptToAttribute(typeMEVAR,"onclick","setMEVType();");
		addJavascriptToAttribute(typeMEVPC,"onclick","setMEVType();");
	
		// Ajout des calendriers dynamiques (si les icones sont présentes)
		var jourMEVAller=byId("jourMEVAller"),
		moisMEVAller=byId("moisMEVAller"),
		jourMEVRetour=byId("jourMEVRetour"),
		moisMEVRetour=byId("moisMEVRetour"),
		calendrierMEVAllerIcon=byId("calendrierMEVAllerIcon"),
		calendrierMEVRetourIcon=byId("calendrierMEVRetourIcon"),
		calendrierMEVAller=byId("calendrierMEVAller"),
		calendrierMEVRetour=byId("calendrierMEVRetour");
	
		initJours(jourMEVAller);
		initMois(moisMEVAller);
		initJours(jourMEVRetour);
		initMois(moisMEVRetour);
		if(jourMEVAller&&moisMEVAller&&calendrierMEVAllerIcon&&calendrierMEVAller){
			try{
				var calendarMEVAller=new Calendar(jourMEVAller,moisMEVAller,calendrierMEVAller);
				addJavascriptToAttribute(calendrierMEVAllerIcon,"onclick","calendarPool.get("+calendarMEVAller.poolIndex+").show(this,"+calendarMEVAller.poolIndex+");");
			}
			catch(e1){}
		}
		if(jourMEVRetour&&moisMEVRetour&&calendrierMEVRetourIcon&&calendrierMEVRetour) {
			try{
				var calendarMEVRetour=new Calendar(jourMEVRetour,moisMEVRetour,calendrierMEVRetour);
				addJavascriptToAttribute(calendrierMEVRetourIcon,"onclick","calendarPool.get("+calendarMEVRetour.poolIndex+").show(this,"+calendarMEVRetour.poolIndex+");");
			}
			catch(e2){}
		}		
		// Ajout des des auto completions (si les élémentes de positionnement sont présents, ainsi que les champs hidden data)
		var lieuMEVDepartAller=byId("lieuMEVDepartAller"),
		lieuMEVArriveeAller=byId("lieuMEVArriveeAller"),
		lieuMEVDepartRetour=byId("lieuMEVDepartRetour"),
		lieuMEVArriveeRetour=byId("lieuMEVArriveeRetour"),
		
	//	dataMEVDepartAller=byId("dataMEVDepartAller"),
	//	dataMEVArriveeAller=byId("dataMEVArriveeAller"),
	//	dataMEVDepartRetour=byId("dataMEVDepartRetour"),
	//	dataMEVArriveeRetour=byId("dataMEVArriveeRetour"),
		// FIXME [ygally] : support des anciens formulaires utilisant les champs 'iata'
		dataMEVDepartAller=byId("dataMEVDepartAller")||byId("iataMEVDepartAller"),
		dataMEVArriveeAller=byId("dataMEVArriveeAller")||byId("iataMEVArriveeAller"),
		dataMEVDepartRetour=byId("dataMEVDepartRetour")||byId("iataMEVDepartRetour"),
		dataMEVArriveeRetour=byId("dataMEVArriveeRetour")||byId("iataMEVArriveeRetour"),
		
		propositionsMEVDepartAller=byId("propositionsMEVDepartAller"),
		propositionsMEVArriveeAller=byId("propositionsMEVArriveeAller"),
		propositionsMEVDepartRetour=byId("propositionsMEVDepartRetour"),
		propositionsMEVArriveeRetour=byId("propositionsMEVArriveeRetour"),
				
		// Nombre de villes qui vont être présentées dans les listes de propositions
		nombrePropositionsCompletionMEV=12;
		if(lieuMEVDepartAller&&dataMEVDepartAller&&propositionsMEVDepartAller){
			try{
				var mevCplt1=new CompletionMEV(lieuMEVDepartAller,dataMEVDepartAller,propositionsMEVDepartAller,nombrePropositionsCompletionMEV,true);
				// Le dernier paramèter active le mode interegogation par ville. => Ajoute un attribut data contenant le data du lieu aux champs texte.
				// Ne change pas le fonctionnel des formulaires de type MEV2
//				var mevCplt1=new CompletionMEV(lieuMEVDepartAller,dataMEVDepartAller,propositionsMEVDepartAller,nombrePropositionsCompletionMEV);
			}
			catch(e3){}
		}
		if(lieuMEVArriveeAller&&dataMEVArriveeAller&&propositionsMEVArriveeAller){
			try{
				var mevCplt2=new CompletionMEV(lieuMEVArriveeAller,dataMEVArriveeAller,propositionsMEVArriveeAller,nombrePropositionsCompletionMEV,true);
				// Le dernier paramèter active le mode interegogation par ville. => Ajoute un attribut data contenant le data du lieu aux champs texte.
				// Ne change pas le fonctionnel des formulaires de type MEV2
				//var mevCplt2=new CompletionMEV(lieuMEVArriveeAller,dataMEVArriveeAller,propositionsMEVArriveeAller,nombrePropositionsCompletionMEV);
			}
			catch(e4){}
		}
		if(lieuMEVDepartRetour&&dataMEVDepartRetour&&propositionsMEVDepartRetour){
			try{
				var mevCplt3=new CompletionMEV(lieuMEVDepartRetour,dataMEVDepartRetour,propositionsMEVDepartRetour,nombrePropositionsCompletionMEV);
			}
			catch(e5){}
		}
		if(lieuMEVArriveeRetour&&dataMEVArriveeRetour&&propositionsMEVArriveeRetour){
			try{
				var mevCplt4=new CompletionMEV(lieuMEVArriveeRetour,dataMEVArriveeRetour,propositionsMEVArriveeRetour,nombrePropositionsCompletionMEV);
			}
			catch(e6){}
		}
		
	//	var paxMEVAdultes=byId("paxMEVAdultes"), paxMEVBebes=byId("paxMEVBebes");
		// FIXME [ygally] : support des anciens formulaires utilisant les id de pax sans 'MEV'
		var paxMEVAdultes=byId("paxMEVAdultes")||byId("paxAdultes"), paxMEVBebes=byId("paxMEVBebes")||byId("paxBebes");
	
		addJavascriptToAttribute(paxMEVAdultes,"onchange","setMEVPax();");
		addJavascriptToAttribute(paxMEVBebes,"onchange","setMEVPax();");
	
		// FIXME [ygally] : support des anciens formulaires utilisant un bouton de validation de type='button'
		var submitMEV=byId("submitMEV");
		if(submitMEV&&submitMEV.type=="button"){
			addJavascriptToAttribute(submitMEV,"onclick","submitFormMEV();");
		}
	
		initMEVDates();
		setMEVType();
		setMEVPax();
		verifyFormMEV(false);
		
		// [bfoucher] : permet de remettre le bouton de recherche du formulaire dans son état initial dans le cas où la page est rechargée
		addJavascriptToAttribute(ev.dom.tags('BODY')[0],"onunload","resetSubmitMEVButton()");
		flagInitFormMEV=true;
	};
	
	/**
	* Initialise les lieux avec un texte par défaut. La définition des paramètres est explicite. Les
	* paramètres sont optionnels. Si un paramètre est null, il n'est pas traité.
	**/
	window.initMEVLieux=function (lieuDepartAller,lieuArriveeAller,lieuDepartRetour,lieuArriveeRetour) {
		
		if(lieuDepartAller){
			byId("lieuMEVDepartAller").value=lieuDepartAller;
		}
		if(lieuArriveeAller){
			byId("lieuMEVArriveeAller").value=lieuArriveeAller;
		}
		if(lieuDepartRetour){
			byId("lieuMEVDepartRetour").value=lieuDepartRetour;
		}
		if(lieuArriveeRetour){
			byId("lieuMEVArriveeRetour").value=lieuArriveeRetour;
		}
	};
	
	/**
	*Initialise les nb pax. La définition des paramètres est explicite. Les
	*paramètres sont optionnels. Si un paramètre est null, il n'est pas traité.
	**/
	window.initMEVPax=function (pa, pe, pb) {
		if(pa!==undefined){
			// FIXME ceci assure la compatibilité ascendante
			(byId("paxMEVAdultes")||byId("paxAdultes")).value=pa;
	//		byId("paxMEVAdultes").value=pa;
		}
		if(pe!==undefined){
			// FIXME ceci assure la compatibilité ascendante
			(byId("paxMEVEnfants")||byId("paxEnfants")).value=pe;
	//		byId("paxMEVEnfants").value=pe;
		}
		if(pb!==undefined){
			// FIXME ceci assure la compatibilité ascendante
			(byId("paxMEVBebes")||byId("paxBebes")).value=pb;
	//		byId("paxMEVBebes").value=pb;
		}
	};
	
	/**
	*Initialise la classe. La définition des paramètres est explicite. Les
	*paramètres sont optionnels. Si un paramètre est null, il n'est pas traité.
	**/
	window.initMEVClasse=function (classe) {
		if(classe){
			switch(classe){ 
				case '1':
					byId("classeMEVEco").checked=true;
					break; 
				case '2':
					byId("classeMEVPre").checked=true;
					break; 	 
				case '3':
					byId("classeMEVAff").checked=true;
					break; 
			} 
		}	
	};
	
	/**
	*Initialise le type. La définition des paramètres est explicite. Les
	*paramètres sont optionnels. Si un paramètre est null, il n'est pas traité.
	**/
	window.initMEVType=function (type) {
		if(type!==null&&type!==undefined){
			switch(type){ 
				case '0':
					byId("typeMEVAS").checked=true;
					break; 
				case '1':
					byId("typeMEVAR").checked=true;
					break;
			} 
		}
	};
	
	/**
	 * Cette méthode doit correspondre à la soumission réelle du formulaire.
	 * @param f : formulaire à soumettre
	 * Elle peut être surchargée si besoin.
	 */
	window.doSubmitFormMEV=function (f){
	    if(f){
	        try{
	            f.submit();
	        }catch(e){}
	    }
	};
	
	/**
	* Cette fonction vérifie la cohérence des données, et le cas échéant soumet le formulaire formMEV
	* Elle ajoute la classe wait à submitMEV pour permettre l'affichage d'une image de chargement.
	* MAJ :
	* Pour un code plus propre, depuis août 2010, les textes insérés dans une image sont proscrits.
	* On profite donc de la classe wait pour aligner le texte et non plus pour charger une image de chargement.
	* la fonction dot3 permet l'affichage des trois petits points après le texte "En cours".
	* 
	* FIXME : 
	* Comme le changement implique de retoucher au CSS des affiliés (1100 form à vérifier/corriger), il a été décidé
	* de n'executer ce code que dans l'environnement ESV, ce qui exclu les affiliés.
	* TODO : Il faudra supprimer le test du "window.location.host" et vérifier les affiliations.
	**/
	window.submitFormMEV=function () {
		if (verifyFormMEV(true)) {
			var submitMEV = byId("submitMEV");
			addClass(submitMEV, "wait");
			var RE=new RegExp("www\\.(easyvoyage\\.com||easyviajar.com||easyviaggio\\.com||easyvoyage\\.co\\.uk||easyvoyage\\.de)");
			if(submitMEV.value&&RE.test(window.location.host)){
				ev.dot3(submitMEV, waitValueSubmitME);
			}
			doSubmitFormMEV(byId("formMEV"));
		}
	};
	
	window.resetSubmitMEVButton=function () {
		var submitMEV=byId("submitMEV");
		removeClass(submitMEV,"wait");
		if (submitMEV.value) {
			submitMEV.value=submitValueSubmitME;
		}
	};
	
	window.setActionMEV=function (dir) {
		byId("formMEV").setAttribute("action", dir);
	};
	
	window.setTargetFormMEV=function (targetForm) {
		byId("formMEV").setAttribute("target", targetForm);
	};
	
	/**
	* Cette fonction effectue le préchargement des champs de formulaire du form MEV en fonction
	* des paramètres d'URL associés.
	**/
	window.readURLMEV=function () {
		var clientIdValue=EV.tools.getParameter("clientId");
		var inputs=EV.dom.tags("input", EV.dom.element("formMEV"));
		var cnt=inputs.length;
		for(var i=0; i<cnt; ++i){
			if(inputs[i].name==="clientId"){
				inputs[i].value=clientIdValue;
			}
		}
		transfertLangURLToElement(
			[
				{"lang": "fr_FR", "param": "depart", "id": "lieuMEVDepartAller", "id2": "dataMEVDepartAller"},
				{"lang": "es_ES", "param": "origen", "id": "lieuMEVDepartAller", "id2": "dataMEVDepartAller"},	
				{"lang": "it_IT", "param": "partenza", "id": "lieuMEVDepartAller", "id2": "dataMEVDepartAller"},
				{"lang": "de_DE", "param": "abflug", "id": "lieuMEVDepartAller", "id2": "dataMEVDepartAller"},
				{"lang": "en_GB", "param": "departure", "id": "lieuMEVDepartAller", "id2": "dataMEVDepartAller"},	
				{"lang": "fr_FR", "param": "arrivee", "id": "lieuMEVArriveeAller", "id2": "dataMEVArriveeAller"},
				{"lang": "es_ES", "param": "destino", "id": "lieuMEVArriveeAller", "id2": "dataMEVArriveeAller"},
				{"lang": "it_IT", "param": "destinazione", "id": "lieuMEVArriveeAller", "id2": "dataMEVArriveeAller"},
				{"lang": "de_DE", "param": "ankunft", "id": "lieuMEVArriveeAller", "id2": "dataMEVArriveeAller"},
				{"lang": "en_GB", "param": "arrival", "id": "lieuMEVArriveeAller", "id2": "dataMEVArriveeAller"}
			]
		);
	};
}()); // exécution fonction anonyme ici