/**
* Fonctions utilisées par le formulaire MEH, 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 completionMEH.js et completionMEH.css
**/


/**
 * Indique si le formulaire MEH a déjà été setté
 */
var flagInitFormMEH;

/**
* Fonction invoquée par initForm() du script form.js
**/
function initFormMEH() {
	if(flagInitFormMEH) return;
	var formMEH=document.getElementById("formMEH");
	if(genericNavigator.navigator.id==MSIE) addJavascriptToAttribute(formMEH,"onsubmit","cancelIEEvent();submitFormMEH();");
    else addJavascriptToAttribute(formMEH,"onsubmit","submitFormMEH();return false;");

	// Ajout des calendriers dynamiques (si les icones sont présentes)
	var jourDebutMEH=document.getElementById("jourDebutMEH");
	var moisDebutMEH=document.getElementById("moisDebutMEH");
	var jourFinMEH=document.getElementById("jourFinMEH");
	var moisFinMEH=document.getElementById("moisFinMEH");
	var calendrierMEHDebutIcon=document.getElementById("calendrierMEHDebutIcon");
	var calendrierMEHFinIcon=document.getElementById("calendrierMEHFinIcon");
	var calendrierMEHDebut=document.getElementById("calendrierMEHDebut");
	var calendrierMEHFin=document.getElementById("calendrierMEHFin");
	initJours(jourDebutMEH);
	initMois(moisDebutMEH);
	initJours(jourFinMEH);
	initMois(moisFinMEH);
	if(jourDebutMEH!=undefined&&moisDebutMEH!=undefined&&calendrierMEHDebutIcon!=undefined&&calendrierMEHDebut!=undefined) {
		try{
			var calendarMEHdebut=new Calendar(jourDebutMEH,moisDebutMEH,calendrierMEHDebut);
			addJavascriptToAttribute(calendrierMEHDebutIcon,"onclick","calendarPool.get("+calendarMEHdebut.poolIndex+").show(this);");
		}
		catch(e){
		}
	}
	if(jourFinMEH!=undefined&&moisFinMEH!=undefined&&calendrierMEHFinIcon!=undefined&&calendrierMEHFin!=undefined) {
		try{
			var calendarMEHFin=new Calendar(jourFinMEH,moisFinMEH,calendrierMEHFin);
			addJavascriptToAttribute(calendrierMEHFinIcon,"onclick","calendarPool.get("+calendarMEHFin.poolIndex+").show(this);");
		}
		catch(e){
		}
	}
	
	var lieuMEH=document.getElementById("lieuMEH");
	var lieuIataMEH=document.getElementById("lieuIataMEH");
	var propositionsMEH=document.getElementById("propositionsMEH");
	var nombrePropositionsCompletionMEH=12;
	if(lieuMEH!=undefined&&lieuIataMEH!=null&&propositionsMEH!=undefined){
		try{
			new CompletionMEH(lieuMEH,lieuIataMEH,propositionsMEH,nombrePropositionsCompletionMEH);
		}
		catch(e){
		}
	}
	
	var submitMEH=document.getElementById("submitMEH");
	if(submitMEH!=undefined&&submitMEH.type=="button") addJavascriptToAttribute(submitMEH,"onclick","submitFormMEH();");

	initMEHDates();
	verifyFormMEH();
		
	// [bfoucher] : permet de remettre le bouton de recherche du formulaire dans son état initial dans le cas où la page est rechargée
	var body=document.getElementsByTagName("BODY")[0];
	addJavascriptToAttribute(body,"onunload","resetSubmitMEHButton");
	flagInitFormMEH=true;
}



/**
* Initialise les dates par défaut en utilisant l'horloge du client, la règle est la suivante pour la date début: c'est le
* prochain vendredi jusqu'au mercredi, et le vendredi en 8 à partir du jeudi. La date de fin est le jour suivant
* la date de début (par défaut on a une nuit).
* 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;
function initMEHDates(dateDebutTexte,dateFinTexte) {
	var jourDebutMEH=document.getElementById("jourDebutMEH");
	var moisDebutMEH=document.getElementById("moisDebutMEH");
	var jourFinMEH=document.getElementById("jourFinMEH");
	var moisFinMEH=document.getElementById("moisFinMEH");
	if(jourDebutMEH==undefined||moisDebutMEH==undefined||jourFinMEH==undefined||moisFinMEH==undefined) return;
	
	var jourDebut;
	var moisDebut;
	var anneeDebut;
	var jourFin;
	var moisFin;
	var anneeFin;

	var now=new Date();
	var day=now.getDay();
	var delta=5-day;
	if(delta<=1) delta+=7;
	var dateDebut=new Date();
	dateDebut.setTime(now.getTime()+delta*JOUR);
	var dateFin=new Date();
	dateFin.setTime(dateDebut.getTime()+1*JOUR);

	if(dateDebutTexte!=undefined&&dateDebutTexte.match(/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/)){
		jourDebut=dateDebutTexte.replace(/\/[0-9]{2}\/[0-9]{4}$/,"");
		moisDebut=dateDebutTexte.replace(/^[0-9]{2}\//,"");
	}
	else{
		jourDebut=""+dateDebut.getDate();
		if(dateDebut.getDate()<10) jourDebut="0"+dateDebut.getDate();
		moisDebut=""+(dateDebut.getMonth()+1);
		if(dateDebut.getMonth()<9) moisDebut="0"+(dateDebut.getMonth()+1);
		moisDebut+="/"+dateDebut.getFullYear();
	}
	
	if(dateFinTexte!=undefined&&dateFinTexte.match(/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/)){
		jourFin=dateFinTexte.replace(/\/[0-9]{2}\/[0-9]{4}$/,"");
		moisFin=dateFinTexte.replace(/^[0-9]{2}\//,"");
	}
	else{
		jourFin=""+dateFin.getDate();
		if(dateFin.getDate()<10) jourFin="0"+dateFin.getDate();
		moisFin=""+(dateFin.getMonth()+1);
		if(dateFin.getMonth()<9) moisFin="0"+(dateFin.getMonth()+1);
		moisFin+="/"+dateFin.getFullYear();
	}
	
	jourDebutMEH.value=jourDebut;
	moisDebutMEH.value=moisDebut;
	jourFinMEH.value=jourFin;
	moisFinMEH.value=moisFin;
}



/**
* Initialise le lieu avec un texte par défaut.
**/
function initMEHLieu(lieu) {
	if(lieu!=null) document.getElementById("lieuMEH").value=lieu;
}


/**
* Initialise le nombre de chambre, adultes, enfants.
**/
function initMEHChambrePax(chambres, paxAdultes, paxEnfants) {
	//var eltPaxMEHAdultes=document.getElementById("paxMEHAdultes"),
	//eltPaxMEHEnfants=document.getElementById("paxMEHEnfants");
	// FIXME pour compatibilite ascendente
	var eltPaxMEHAdultes=document.getElementById("paxMEHAdultes")||document.getElementById("paxAdultes"),
	eltPaxMEHEnfants=document.getElementById("paxMEHEnfants")||document.getElementById("paxEnfants");
		

	if(chambres!=null) document.getElementById("chambres").value=chambres;
	if(paxAdultes!=null) eltPaxMEHAdultes.value=paxAdultes;
	if(paxEnfants!=null) eltPaxMEHEnfants.value=paxEnfants;
}

/**
 * Cette méthode doit correspondre à la soumission réelle du formulaire.
 * @param f : formulaire à soumettre
 * Elle peut être surchargée si besoin.
 */
function doSubmitFormMEH(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 formMEH
* Elle ajoute la classe wait à submitMEH pour permettre l'affichage d'une image de chargement.
**/
function submitFormMEH() {
	if(verifyFormMEH()){
		var submitMEH= document.getElementById("submitMEH");
		addClass(submitMEH,"wait");
		doSubmitFormMEH(document.getElementById("formMEH"));
	}
}

/**
* Cette fonction vérifie la cohérence des données du formulaire MEH 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
**/
function verifyFormMEH() {
	var error=false;
	
	var affErrorMEHDate = false;//l'affichage des erreurs de date sur les formaulaires MEH n'est intégré que sur les sites principaux et pas encore sur les affiliés
	if((document.location.href).match(/seoul/)||(document.location.href).match(/tokyo/)||(document.location.href).match(/test/)||(document.location.href).match(/easyviajar.com/)||(document.location.href).match(/easyviaggio.com/)||(document.location.href).match(/easyvoyage.co.uk/)||(document.location.href).match(/easyvoyage.de/)||(document.location.href).match(/easyvoyage.com/)||(document.location.href).match(/avion.fr/))
	{affErrorMEHDate=true;}

	var errorMEHDateDebutErronee=document.getElementById("errorMEHDateDebutErronee");
	var jourDebutMEH=document.getElementById("jourDebutMEH").value;
	var moisDebutMEH=document.getElementById("moisDebutMEH").value.replace(/\/[0-9]{4}$/,"");
	var anDebutMEH=document.getElementById("moisDebutMEH").value.replace(/^[0-9]{2}\//,"");
	if(isValidDate(jourDebutMEH,moisDebutMEH,anDebutMEH)){
		if(errorMEHDateDebutErronee!=undefined) errorMEHDateDebutErronee.style.display="none";
	}
	else{
		if(errorMEHDateDebutErronee!=undefined&&affErrorMEHDate) errorMEHDateDebutErronee.style.display="block";
		error=true;
	}
	var errorMEHDateFinErronee=document.getElementById("errorMEHDateFinErronee");
	var jourFinMEH=document.getElementById("jourFinMEH").value;
	var moisFinMEH=document.getElementById("moisFinMEH").value.replace(/\/[0-9]{4}$/,"");
	var anFinMEH=document.getElementById("moisFinMEH").value.replace(/^[0-9]{2}\//,"");
	if(isValidDate(jourFinMEH,moisFinMEH,anFinMEH)){
		if(errorMEHDateFinErronee!=undefined) errorMEHDateFinErronee.style.display="none";
	}
	else{
		if(errorMEHDateFinErronee!=undefined&&affErrorMEHDate) errorMEHDateFinErronee.style.display="block";
		error=true;
	}
	var errorMEHDatesInversees=document.getElementById("errorMEHDatesInversees");
	if(!error){
		var dateDebutMEH=createDate(jourDebutMEH,moisDebutMEH,anDebutMEH);
		var dateFinMEH=createDate(jourFinMEH,moisFinMEH,anFinMEH);
		if(dateDebutMEH.getTime()<dateFinMEH.getTime()){
			if(errorMEHDatesInversees!=undefined) errorMEHDatesInversees.style.display="none";
		}
		else{
			if(errorMEHDatesInversees!=undefined&&affErrorMEHDate) errorMEHDatesInversees.style.display="block";
			error=true;
		}
	}
	else{
		if(errorMEHDatesInversees!=undefined) errorMEHDatesInversees.style.display="none";
	}
	
	return !error;
}

function resetSubmitMEHButton() {
	var submitMEH=document.getElementById("submitMEH");
	removeClass(submitMEH,"wait");
}

function setActionMEH (dir) {
	document.getElementById("formMEH").setAttribute("action", dir);
}

function setTargetFormMEH (targetForm) {
	document.getElementById("formMEH").setAttribute("target", targetForm);
}

/**
* Cette fonction effectue le préchargement des champs de formulaire du form MEC en fonction
* des paramètres d'URL associés.
**/
function readURLMEH() {
	var clientIdValue=EV.tools.getParameter("clientId");
	var inputs=EV.dom.tags("input", EV.dom.element("formMEH"));
	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": "arrivee", "id": "lieuMEH", "id2": "lieuIataMEH"},
			{"lang": "es_ES", "param": "destino", "id": "lieuMEH", "id2": "lieuIataMEH"},
			{"lang": "it_IT", "param": "destinazione", "id": "lieuMEH", "id2": "lieuIataMEH"},
			{"lang": "en_GB", "param": "arrival", "id": "lieuMEH", "id2": "lieuIataMEH"},
			{"lang": "de_DE", "param": "ankunft", "id": "lieuMEH", "id2": "lieuIataMEH"}
			
		]
	);
}
