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


/**
 * Indique si le formulaire MEC a déjà été setté
 */
var flagInitFormMEC;

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

	// Ajout des calendriers dynamiques (si les icones sont présentes)
	var jourDebutMEC=document.getElementById("jourDebutMEC");
	var moisDebutMEC=document.getElementById("moisDebutMEC");
	var heureDebutMEC=document.getElementById("heureDebutMEC");
	var jourFinMEC=document.getElementById("jourFinMEC");
	var moisFinMEC=document.getElementById("moisFinMEC");
	var heureFinMEC=document.getElementById("heureFinMEC");
	var calendrierMECDebutIcon=document.getElementById("calendrierMECDebutIcon");
	var calendrierMECFinIcon=document.getElementById("calendrierMECFinIcon");
	var calendrierMECDebut=document.getElementById("calendrierMECDebut");
	var calendrierMECFin=document.getElementById("calendrierMECFin");
	initJours(jourDebutMEC);
	initMois(moisDebutMEC);
	initHeures(heureDebutMEC);
	initJours(jourFinMEC);
	initMois(moisFinMEC);
	initHeures(heureFinMEC);
	heureDebutMEC.value="10:00";
	heureFinMEC.value="10:00";
	if(jourDebutMEC!=undefined&&moisDebutMEC!=undefined&&calendrierMECDebutIcon!=undefined&&calendrierMECDebut!=undefined) {
		try{
			var calendarMECdebut=new Calendar(jourDebutMEC,moisDebutMEC,calendrierMECDebut);
			addJavascriptToAttribute(calendrierMECDebutIcon,"onclick","calendarPool.get("+calendarMECdebut.poolIndex+").show(this);");
		}
		catch(e){}
	}
	if(jourFinMEC!=undefined&&moisFinMEC!=undefined&&calendrierMECFinIcon!=undefined&&calendrierMECFin!=undefined) {
		try{
			var calendarMECFin=new Calendar(jourFinMEC,moisFinMEC,calendrierMECFin);
			addJavascriptToAttribute(calendrierMECFinIcon,"onclick","calendarPool.get("+calendarMECFin.poolIndex+").show(this);");
		}
		catch(e){}
	}
	
	var lieuMEC=document.getElementById("lieuMEC");
	var adresseCodeMEC=document.getElementById("adresseCodeMEC");
	var propositionsMEC=document.getElementById("propositionsMEC");
	var nombrePropositionsCompletionMEC=12;
	if(lieuMEC!=undefined&&adresseCodeMEC!=undefined&&propositionsMEC!=undefined){
		try{
			new CompletionMEC(lieuMEC,adresseCodeMEC,propositionsMEC,nombrePropositionsCompletionMEC);
		}
		catch(e){}
	}

	// FIXME [ygally] : support des anciens formulaires utilisant un bouton de validation de type='button'
	var submitMEC=document.getElementById("submitMEC");
	if(submitMEC!=undefined&&submitMEC.type=="button") addJavascriptToAttribute(submitMEC,"onclick","submitFormMEC();");

	initMECDates();
	verifyFormMEC();
		
	// [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","resetSubmitMECButton");
	flagInitFormMEC=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 initMECDates(dateDebutTexte,dateFinTexte) {
	var jourDebutMEC=document.getElementById("jourDebutMEC");
	var moisDebutMEC=document.getElementById("moisDebutMEC");
	var jourFinMEC=document.getElementById("jourFinMEC");
	var moisFinMEC=document.getElementById("moisFinMEC");
	if(jourDebutMEC==undefined||moisDebutMEC==undefined||jourFinMEC==undefined||moisFinMEC==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();
	}
	
	jourDebutMEC.value=jourDebut;
	moisDebutMEC.value=moisDebut;
	jourFinMEC.value=jourFin;
	moisFinMEC.value=moisFin;
}



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

/**
* Initialise l'age du conducteur.
**/
function initMECdriverAge(driverAge) {
        if(driverAge!=null) document.getElementById("ageMEC").value=driverAge;
}

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

/**
* 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 verifyFormMEC() {
	var error=false;
	var errorMECDateDebutErronee=document.getElementById("errorMECDateDebutErronee");
	var jourDebutMEC=document.getElementById("jourDebutMEC").value;
	var moisDebutMEC=document.getElementById("moisDebutMEC").value.replace(/\/[0-9]{4}$/,"");
	var anDebutMEC=document.getElementById("moisDebutMEC").value.replace(/^[0-9]{2}\//,"");
	if(isValidDate(jourDebutMEC,moisDebutMEC,anDebutMEC)){
		if(errorMECDateDebutErronee!=undefined) errorMECDateDebutErronee.style.display="none";
	}
	else{
		if(errorMECDateDebutErronee!=undefined) errorMECDateDebutErronee.style.display="";
		error=true;
	}
	var errorMECDateFinErronee=document.getElementById("errorMECDateFinErronee");
	var jourFinMEC=document.getElementById("jourFinMEC").value;
	var moisFinMEC=document.getElementById("moisFinMEC").value.replace(/\/[0-9]{4}$/,"");
	var anFinMEC=document.getElementById("moisFinMEC").value.replace(/^[0-9]{2}\//,"");
	if(isValidDate(jourFinMEC,moisFinMEC,anFinMEC)){
		if(errorMECDateFinErronee!=undefined) errorMECDateFinErronee.style.display="none";
	}
	else{
		if(errorMECDateFinErronee!=undefined) errorMECDateFinErronee.style.display="";
		error=true;
	}
	var errorMECDatesInversees=document.getElementById("errorMECDatesInversees");
	if(!error){
		var dateDebutMEC=createDate(jourDebutMEC,moisDebutMEC,anDebutMEC);
		var dateFinMEC=createDate(jourFinMEC,moisFinMEC,anFinMEC);
		if(dateDebutMEC.getTime()<dateFinMEC.getTime()){
			if(errorMECDatesInversees!=undefined) errorMECDatesInversees.style.display="none";
		}
		else{
			if(errorMECDatesInversees!=undefined) errorMECDatesInversees.style.display="";
			error=true;
		}
	}
	else{
		if(errorMECDatesInversees!=undefined) errorMECDatesInversees.style.display="none";
	}
	
	return !error;
}

function resetSubmitMECButton() {
	var submitMEC=document.getElementById("submitMEC");
	removeClass(submitMEC,"wait");
}

function setActionMEC (dir) {
	document.getElementById("formMEC").setAttribute("action", dir);
}

function setTargetFormMEC (targetForm) {
	document.getElementById("formMEC").setAttribute("target", targetForm);
}

function getParamMEC(paramMECAller){
	paramVilleDepart = null;
	paramVilleArrivee = null;
	var paramMECDepart = paramMECAller; //on defini le nom du parametre de l'url propre a chaque langue
	
	for (i = 0; i < paramUrl.length; i++) {
		if (paramUrl[i].indexOf(paramMECDepart) != -1) { //si le parametre paramDepart defini est present
			params = paramUrl[i].split("="); //alors divise la chaine dans un tableau avec le separateur =, qui est du coup supprime
			paramVilleMECDepart = params[1]; //et on recupere la valeur du parametre
		}
	}
}

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