// ----------------------------------------------------------------------------
// Détection des navigateurs
// ----------------------------------------------------------------------------
var ie= (navigator.appName=="Microsoft Internet Explorer")?1:0;
var ns= (navigator.appName=="Netscape")?1:0;


// ----------------------------------------------------------------------------
// Renvoie le "label" du contrôle en paramètre
// ----------------------------------------------------------------------------
// @param element : nom du contrôle
// @return : String
// ----------------------------------------------------------------------------
function getFieldLabel(element){
	fieldLabel="";
	//if (ie) {
	//	fieldLabel=	element.fieldlabel;
	//} else {
	for (e=0;e<element.attributes.length;e++) {
		if (element.attributes[e].name=="label") {
			fieldLabel=element.attributes[e].value;
		}
	}
	//}
	if (fieldLabel=="" || fieldLabel==null ) {
		return element.name;	
	} else {
		return fieldLabel;	
	}
}

// ----------------------------------------------------------------------------
// Vérifie que la date passée en paramètre est cohérente
// ----------------------------------------------------------------------------
// @param dateATester : chaine de la date à vérifier
// @return : boolean
// ----------------------------------------------------------------------------
function dateValide(dateATester) {
	j = parseInt(dateATester.split("/")[0], 10);
	m = parseInt(dateATester.split("/")[1], 10);
	a = parseInt(dateATester.split("/")[2], 10);

	if (a%4 == 0 && a%100 !=0 || a%400 == 0) 
		fev = 29;
	else
		fev = 28;

	nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);

	return ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] ); 
}

// ----------------------------------------------------------------------------
// Vérifie que la date passée en paramètre respecte le format en paramètre
// ----------------------------------------------------------------------------
// @param controle : nom du controle HTML contenant la date à vérifier
// @param formatDate : chaine spécifiant le format à vérifier (ex 'jj/mm/aaaa')
// @return : null
// ----------------------------------------------------------------------------
function verifDate(controle, formatDate) {
	valeurDate = eval("document.getElementById('" + controle + "').value");
	composantes = "";
	if (valeurDate.indexOf("/") != -1)
		composantes = valeurDate.split("/");
	else if (valeurDate.indexOf("-") != -1)
		composantes = valeurDate.split("-");

	if (composantes != "") {
		switch (formatDate) {
			case 'jj/mm/aaaa' :
				jour = composantes[0];
				if (jour.length == 1) jour = '0' + jour;
				mois = composantes[1];
				if (mois.length == 1) mois = '0' + mois;
				annee = composantes[2];
				if (annee.length == 2) annee = '20' + annee;
				
				if (dateValide(jour + "/" + mois + "/" + annee))
					return jour + "/" + mois + "/" + annee;
				else
					return false;
				break;
		}
	}
}

function isAlphaNum(value) {
	var exp = new RegExp("^[a-zA-Z0-9]*$","i");
	if (!exp.test(value))
		return 0;
	else
		return 1;
}

function verifMail(email) {
	/*positionArobase = email.indexOf("@");
	positionExtension = email.lastIndexOf(".");
	
	identifiant = email.substring(0, positionArobase);
	domaine = email.substring(positionArobase+1, positionExtension);
	extension = email.substring(positionExtension+1, email.length);*/
	
	//var exp = new RegExp("[a-zA-Z0-9]+[\.\-_]*[a-zA-Z0-9]+","i");
	var exp = new RegExp("^([a-zA-Z0-9]+(([\._-]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[\._-])+[a-zA-Z]{2,6})$","i");
	//var exp = new RegExp("^[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*@[a-z0-9]+([_|\.|-]­{1}[a-z0-9]+)*[\.]{1}[a-z]{2,6}$", "i");

	//erreur = 0;
	
	/*if (!exp.test(identifiant) || !exp.test(domaine))
		erreur = 1;
	if (!isAlphaNum(extension))
		erreur = 1;
	if (extension.length<2 || extension.length>4)
		erreur = 1;*/
	if (!exp.test(email)) {
		//erreur = 1;
		resultat = false;
	}
	else {
		resultat = true;
	}
	
	return (resultat);
}


function verifTel(tel) {
	var exp = new RegExp("^([0-9]{10})([\.,]{0,1})([0-9]*)$");
	if (!exp.test(tel))
		return 0;
	else
		return 1;
}

function verifCp(cp) {
	var exp = new RegExp("^[0-9]{5}$");
	if (!exp.test(cp))
		return 0;
	else
		return 1;
}


// ----------------------------------------------------------------------------
// Vérifie que le formulaire passé en paramètre est conforme
// ----------------------------------------------------------------------------
// @param formName : "name" de la balise "form" à contrôler
// @return : boolean
// ----------------------------------------------------------------------------
function checkForm(formName) {

	formulaire = eval("document." + formName.name);
	message = "";
	for(k=0;k<formulaire.elements.length;k++){
		nomElement = formulaire.elements[k].name;
		valeurElement = formulaire.elements[k].value;
		labelElement = getFieldLabel(formulaire.elements[k]);
		for(l=0;l<formulaire.elements[k].attributes.length;l++){	
			
			if (formulaire.elements[k].attributes[l].name=="required" && this.formulaire.elements[k].attributes[l].value=="true"){
				if (valeurElement == "") {
					message += "- " + labelElement + " est obligatoire\n";
				}
			}
			if (formulaire.elements[k].attributes[l].name=="format") {

				switch (formulaire.elements[k].attributes[l].value) {
					case "jj/mm/aaaa" :
						if (!verifDate(nomElement, formulaire.elements[k].attributes[l].value)) {
							message += "- " + labelElement + " doit être de la forme '" + formulaire.elements[k].attributes[l].value + "'\n";
						}
						break;
						
					case "aaaa/mm/jj" :
						break;
						
					case "alphanum" :
						var exp = new RegExp("^[A-Za-z0-9 ]+$");
						if (!exp.test(valeurElement)) {
							message += "- " + labelElement + " ne doit comporter que des caractères alphanumériques\n";
						}
						break;
						
					case "alpha" :
						var exp = new RegExp("^[a-zA-Z ]+$");
						if (!exp.test(valeurElement)) {
							message += "- " + labelElement + " ne doit comporter que des caractères alphabétiques\n";
						}
						break;

					case "num" :
						var exp = new RegExp("^([0-9]+)([\.,]{0,1})([0-9]*)$");
						if (!exp.test(valeurElement)) {
							message += "- " + labelElement + " ne doit comporter que des caractères numériques\n";
						}
						break;

					case "email" :
						var exp = new RegExp("^[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*@[a-zA-Z0-9\-_]+\.[a-zA-Z\.\-_]{2,}[a-zA-Z\-_]+","i");
						if (!exp.test(valeurElement)) {
							message += "- " + labelElement + " est incorrect\n";
						}
						break;
					default :
						break;
				}
			}
		}
	}
	
	if (message != "") {
		alert(message);
		return false;
	}
	else
		return true;
}