/*************************************************************************

 *************************************************************************/

function valideForm2(f) {
	var champsObligatoires = [];
	var adresse1;
	var erreurs = [];

	var lang = (navigator.language || navigator.userLanguage).substr(0, 2).toLowerCase();
	var msg_fr = new Array();
	msg_fr["toolong"] = "Cette adresse est trop longue";
	msg_fr["invalid"] = "L'adresse que vous avez entrée est invalide.";
	msg_fr["mailrequired"] = "Veuillez entrer votre adresse email.";
	msg_fr["different"] = "Il y a une faute de frappe entre les deux adresses entrées.";
	msg_fr["confirm"] = "La confirmation d'adresse email est obligatoire.";
	msg_fr["required1"] = 'Le champ "';
	msg_fr["required2"] = '" est obligatoire.';
	msg_fr["bracketsno"] = " n'est ni de type checkbox ni de type select-multiple, son nom ne doit pas se terminer par []";
	msg_fr["bracketsyes"] = " et peut prendre plusieurs valeurs, son nom doit se terminer par []";
	msg_fr["is"] = " est de type ";
	msg_fr["warning"] = "ATTENTION :\n";
	var msg_en = new Array();
	msg_en["toolong"] = "This address is too long";
	msg_en["invalid"] = "The email address you typed is invalid.";
	msg_en["mailrequired"] = "Please enter your email address.";
	msg_en["different"] = "The two email addresses don't match. Please try again."
	msg_en["confirm"] = "Please enter your confirmation email address.";
	msg_en["required1"] = 'The "';
	msg_en["required2"] = '" field is required.';
	msg_en["bracketsno"] = " is neither a checkbox nor select-multiple, so it's name musn't end with []";
	msg_en["bracketsyes"] = " and can have several values, it's name must end with []";
	msg_en["is"] = " is a ";
	msg_en["warning"] = "WARNING :\n";
	var msg = (lang == 'fr') ? msg_fr : msg_en;
	this.msgs = msg;

	/*
	 * Cette fonction renvoie le texte ï¿½crit juste avant un ï¿½lï¿½ment donnï¿½.
	 * Elle parcourt l'arbre du document vers l'arriï¿½re jusqu'ï¿½ trouver
	 * un textNode contenant autre chose que des espaces.
	 */
	function textePrecedent(element) {
		var ELEMENTNODE = 1;
		var TEXTNODE = 3;

		// Ce navigateur connaï¿½t-il le DOM ?
		if(!element.nodeType) return "no nodetype";

		// Tant qu'on n'a pas trouvï¿½ un textNode contenant autre chose que des espaces...
		while((element.nodeType != TEXTNODE) || (element.nodeValue.search(/^\s*$/) == 0)) {
			// On prend l'ï¿½lï¿½ment prï¿½cï¿½dent.
			if(element.previousSibling)
				element = element.previousSibling;
			// S'il n'y a pas d'ï¿½lï¿½ment prï¿½cï¿½dent on prend le prï¿½cï¿½dent du parent.
			else if(element.parentNode && element.parentNode.previousSibling)
				element = element.parentNode.previousSibling;
			// On ne peut plus remonter, c'est qu'on n'a rien trouvï¿½, on quitte.
			else return;

			// Si on arrive sur un ï¿½lï¿½ment qui a des descendants, on descend pour
			// trouver le texte le plus ï¿½ droite.
			while((element.nodeType == ELEMENTNODE) && element.lastChild)
				element = element.lastChild;
		}
		return element.nodeValue;
	}
//Verification validité date
	this.checkDate = function (date1){
	var errMsg;
    //var date_pas_sure = document.getElementById('valeur').value;
    var format = /^(\d{1,2}\/){2}\d{4}$/;
    if(!format.test(date1)){
	//alert('Date non valable !')
	errMsg = msg["toolong"];
	}
    else{
        var date_temp = date1.split('/');
        date_temp[1] -=1;        // On rectifie le mois !!!
        var ma_date = new Date();
        ma_date.setFullYear(date_temp[2]);
        ma_date.setMonth(date_temp[1]);
        ma_date.setDate(date_temp[0]);
        if(ma_date.getFullYear()!=date_temp[2] || ma_date.getMonth()!=date_temp[1] || ma_date.getDate()!=date_temp[0]){
            errMsg = msg["invalid"];
        }
    }
	if(errMsg)
			erreurs.push(errMsg);
		return errMsg;
}


	/*
	 * Fonctions vï¿½rifiant la validitï¿½ et la confirmation d'une adresse email.
	 */
	this.checkEmail = function(adr1) {
		adresse1 = adr1;
		var errMsg;
		if(adresse1 && !estVide(adresse1)) {
			if(adresse1.length > 100)
				errMsg = msg["toolong"];
			else {
				var atom = "[!#-'*+\\-\\/-9=?A-Z^-~]+";
				var regex_adresse =
					new RegExp("^"+atom+"(\\."+atom+")*@"+atom+"(\\."+atom+")*\\.[a-zA-Z]{2,4}$");
				if(adresse1.search(regex_adresse) != 0)
					errMsg = msg["invalid"];
			}
		}
		else if(champsObligatoires["email"])
			errMsg = msg["mailrequired"];
		if(errMsg)
			erreurs.push(errMsg);
		return errMsg;
	}

	function confirmeEmail(adresse2) {
		if(adresse2) {
			if(adresse1 && (adresse2 != adresse1))
				erreurs.push(msg["different"]);
		}
		else if(champsObligatoires["email2"])
			erreurs.push(msg["confirm"]);
	}


	/*
	 * Fonction vï¿½rifiant qu'un champ est rempli.
	 * On vï¿½rifie que la valeur n'est ni vide ni constituï¿½e d'un seul caractï¿½re rï¿½pï¿½tï¿½.
	 */
	function estVide(valeur) {
		return (!valeur || (valeur.search(/^[\n\r]*(.)\1*[\n\r]*$/) >= 0));
	}

	function isSelect(node) {
		return (node.type.substr(0, 7) == 'select-');
	}

	/*
	 * Cette fonction vï¿½rifie le formulaire : syntaxe et confirmation de
	 * l'adresse email, prï¿½sence des champs obligatoires.
	 */
	if(!f) f = document.forms[0];
	erreurs = [];
	if(!f) return;						// S'il n'y a pas de formulaire, on renvoie juste l'objet.
	adresse1 = '';
	var erreursFatales = [];

	// Vï¿½rification des champs obligatoires.
	var nom, node, texte, emplacementfocus;
	var radios = [];
	var multiples = [];

	for(var i = 0; i < f.elements.length; i++) {
		node = f.elements[i];
		nom = node.name;
		id = node.id;
		if(!nom) continue;

		//document.getElementById(id).style.borderColor='#666';
		//document.getElementById(id).style.borderWidth='1px';
		//document.getElementById(id).style.borderStyle='solid';
		
		
		// Ils doivent ï¿½tre prï¿½cï¿½dï¿½s d'une ï¿½toile.
		texte = textePrecedent(node);
		if(texte && texte.search(/\*\s*$/) >= 0)
			champsObligatoires[nom] = 1;

		// Aide pour le webmaster : vï¿½rifications pour un transfert correct.
		if((node.type == 'checkbox') || (node.type == 'select-multiple')) {
			// Attention : substr(-2) renvoie la chaï¿½ne entiï¿½re dans Internet Explorer !
			if(nom.substr(nom.length-2) != '[]') {
				if(!multiples[nom]) multiples[nom] = {t:node.type, n:0};
				multiples[nom].n++;
			}
		} else
			if(nom.substr(nom.length-2) == '[]')
				erreurs.push(nom+msg["bracketsno"]);
		if(nom == "email") this.checkEmail(node.value);
		if(nom == "email1") this.checkEmail(node.value);
		if(nom == "date_arrivee") this.checkDate(node.value);
		if(nom == "date_depart") this.checkDate(node.value);
		else if(nom == "email2") confirmeEmail(node.value);
		else if(champsObligatoires[nom]) {
			if((node.type == 'radio') ||
			   (node.type == 'checkbox')) {
				if(radios[nom] == undefined) radios[nom] = false;
				radios[nom] |= node.checked;
			}
			else

			if(((node.type == 'select-one') && !node.selectedIndex) ||
			   ((node.type == 'select-multiple') && (node.selectedIndex < 0)) ||
				(!isSelect(node) && estVide(node.value)))				// node.value is not set for select elements with IE
				erreurs.push(msg["required1"]+nom+msg["required2"]);
		}
		
		if(erreurs.length) {
			if((id == "email20") || (id == "email21")){
				document.getElementById(id).style.backgroundImage="url('imagesie/input_zone1.gif')";
				emplacementfocus = id;
				 //alert(emplacementfocus);
				 document.getElementById(emplacementfocus).focus();
			}
			else{
			 document.getElementById(id).style.borderColor='#BBEE5C';
			 document.getElementById(id).style.borderWidth='1px';
			 document.getElementById(id).style.borderStyle='solid';
			 document.getElementById(id).style.backgroundColor='#6EDF6E';
			 emplacementfocus = id;
			 //alert(emplacementfocus);
			 document.getElementById(emplacementfocus).focus();
			 }
			return false;
		}
			
		
	}

	for(var r in radios)
		if(!radios[r]) erreurs.push(msg["required1"]+r+msg["required2"]);

	// Vï¿½rification d'une mauvaise conception du formulaire.
	for(var m in multiples)
		if(multiples[m].n > 1)
			erreursFatales.push(m+msg["is"]+multiples[m].t+msg["bracketsyes"]);
	// Affichage des erreurs et retour.
	if(erreursFatales.length) {
		alert(msg["warning"]+erreursFatales.join("\n"));
		return false;
	}
	if(erreurs.length) {
		//alert(erreurs.join("\n"));
		//alert(emplacementfocus);
		//document.getElementById(nom).style.backgroundColor='#00ff00';
		//document.getElementById(emplacementfocus).focus();
		return false;
	}
	return true;
}

