// *****************************************************************************
// *****************************************************************************
// Modif function ValideFormulaire(unFormulaire)  JML 17/05/05
//  - ajout de  getAttribute
//  - teste null


// Permet de valider les champs d'un formulaire avant son
// envoi sur le serveur.
//
// Utilisation:
// ------------- 
//
// - Insérer le fichier dans la page HTML comprenant le formulaire
// - Ajouter un attribut valider="type_de_donnée" dans chaque balise à vérifier
// - Ajouter l'attribut obligatoire="vrai" pour rendre ce champ obligatoire
// - Créer un bouton ou un lien qui appelera la méthode 
//		-> valider(nom_du_formulaire_à_valider)
//
// Exemple:
// ---------
//
//  <FORM id="form1" onsubmit="return valider(this)"> 
//		<INPUT valider="email" obligatoire="vrai"> <!-- champs obligatoire -->
//		<INPUT valider="telephone"> <!-- pas obligatoire mais si entré alors doit être un téléphone -->
//		<INPUT type="submit">
//
//
//	</FORM>
//
// Expressions autorisées:
// ------------------------
// car : une chaîne non vide
// telephone : 11-45-45-45654, 12 456 45 45 45
// codepostal : 68000, FR-331232, ch-123
// email : s.ros@essaim.univ-mulhouse.fr
// date : 01/01/2000, 01/01/00 ou 01-01-1999
// rga : 123456
// reel : 123,456 123.456, -123,...
// entier : 456
//
// ******************************************************************************
// ******************************************************************************

var clAlerte = "#FFFACD"; // couleur de fond pour les champs invalides

// expression régulières validées
var reelexp = /^-?\d*[d{1},.\d+]?\d+$/;
var entierexp = /^\d+$/;
var emailexp = /^[\w_][_\w\.\-~]*@[\w_][_\w\.\-~]*\.[\w]{2,}$/;
var carexp = /./;
var codepostalexp = /^\d{3,5}$|^[a-z]{2}\-\d{3,}$/;
var rgaexp = /^\d{0,5}\d$/;
var telephoneexp =  /./; // /^[+0-9][0-9\-\s]+\d$/;
var dateexp = /^[0-3]?\d{1}[\/\-][01]\d{1}[\/\-]\d{4}$/;


function verifEnvoie(nameform) {

	if(valider(nameform)){
		
		nameform.submit();
	}

}


function isValid(pattern, str) {
	return pattern.test(str);
}

function replaceCommas(str){
	return str.replace(/\./,",");
}

////////////////////////////////////////////////////////////////////////////////
function doValid(objet){
	objet.style.backgroundColor = "transparent";
}

////////////////////////////////////////////////////////////////////////////////
function doUnvalid(objet){
	objet.style.backgroundColor = clAlerte;
}


////////////////////////////////////////////////////////////////////////////////
function validerexp(regexp,objet,vOk,obligatoire){

	valide = isValid(regexp,objet.value);
	vide = objet.value=="";
	
	if ((obligatoire && valide && !vide) || (!obligatoire && (valide || vide)) )
	{
		doValid(objet);
		return vOk;
	}
	else
	{	
		doUnvalid(objet);
		return false;
	}
}

////////////////////////////////////////////////////////////////////////////////
function ValideFormulaire(unFormulaire)
{
	var obligatoire;
	var ok = true;
	for(i=0;i<unFormulaire.elements.length;i++)
	{
		if ((!unFormulaire.elements[i].disabled) && (unFormulaire.elements[i].getAttribute('valider')!=null))
		{ // à ce niveau, une vérification de contenu a été demandée

			obligatoire=(unFormulaire.elements[i].getAttribute('obligatoire')!=null) && 
                                    (unFormulaire.elements[i].getAttribute('obligatoire')=="vrai");

			switch(unFormulaire.elements[i].getAttribute('valider'))
			{
				case "car" : ok = validerexp(carexp,unFormulaire.elements[i],ok,obligatoire); break;
				case "telephone" : ok = validerexp(telephoneexp,unFormulaire.elements[i],ok,obligatoire); break;
				case "codepostal" : ok = validerexp(codepostalexp,unFormulaire.elements[i],ok,obligatoire); break;
				case "email" : ok = validerexp(emailexp,unFormulaire.elements[i],ok,obligatoire); break;
				case "date" :  unFormulaire.elements[i].value = unFormulaire.elements[i].value.replace(/\-/,"/"); ok = validerexp(dateexp,unFormulaire.elements[i],ok,obligatoire); break;
				case "rga" : ok = validerexp(rgaexp,unFormulaire.elements[i],ok,obligatoire); break;
				case "reel" : unFormulaire.elements[i].value=replaceCommas(unFormulaire.elements[i].value);ok = validerexp(reelexp,unFormulaire.elements[i],ok,obligatoire); break;
				case "entier" : ok = validerexp(entierexp,unFormulaire.elements[i],ok,obligatoire); break;
			}
		}
	}
	return ok;
}

////////////////////////////////////////////////////////////////////////////////
function valider(leFormulaire){
	right = true;

	if (ValideFormulaire(leFormulaire))
		//leFormulaire.submit();
		right=true;
	else
	{
		alert("Informations manquantes ou erronées");
		right=false;		
	}	
	
	return right;
}

