function Formulaire(formulaire){
	this.form=formulaire;
	this.erreurs=new Array();
	this.messageH = "Le formulaire comporte des erreurs";
	this.messageB = "Veuillez remplir correctement les champs.";
	this.regles=new Array();
	this.messages=new Array();
	this.validations=new Array();
	this.params=new Array();
	this.regle=regleChamp;
	this.nettoyer=nettoyerChaine;
	this.valider=validerForm;
	this.liste=listeErreurs;
	this.changeLang=changeLang;
}
function changeLang(messageH,messageB){
	this.messageH = messageH;
	this.messageB = messageB;
}
function regleChamp(champ, type, message, param){
	this.regles.push(champ);
	this.validations.push(type);
	this.messages.push(message);
	this.params.push(param);
}
function listeErreurs(){
	var liste="";
	if(this.erreurs.length){
		var x;
		liste+="<ul>";
		for(x=0; x<this.erreurs.length; x++) liste+="<li>"+this.erreurs[x]+"</li>";
		liste+="</ul>";
	}
	return liste;
}
function nettoyerChaine(chaine){
	try{
		regex=new RegExp("(^ +)|( +$)", "g");
		chaine=chaine.replace(regex, "");
		return chaine;
	}catch(err){return chaine;}
}
function validerForm(){
	var formulaire, x, regex, msg="", MonChamp;
	if($(this.form)) formulaire=$(this.form);
	else formulaire=document.forms[this.form];
	if(!this.regles.length) return true;
	for(x=0; x<this.regles.length; x++){
		eval("MonChamp = formulaire."+this.regles[x]+";");
		if(!MonChamp) continue;
		MonChamp.value=this.nettoyer(MonChamp.value);
		switch(this.validations[x]){
			case "comparaison":
				if(MonChamp.value!=this.params[x]) this.erreurs.push(this.messages[x]);
				break;
			case "longueur":
				var longueur=MonChamp.value.length;
				if(longueur){
					var temp=this.params[x].split(",( +)?");
					mini=parseInt(temp[0]);
					maxi=parseInt(temp[1]);
					if((mini && longueur<mini) || (maxi && longueur>maxi)) this.erreurs.push(this.messages[x]);
				}
				break;
			case "regex":
				switch(this.params[x]){
					case "mail":
						regex=new RegExp("^([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})*@([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,4}$");
						break;
					case "num":
						regex=new RegExp("^[0-9\.]+$", "gi");
						break;
					case "alpha_num":
						regex=new RegExp("^[_a-z0-9]+$", "gi");
						break;
					case "code_postal":
						regex=new RegExp("^(0[1-9]|[1-9][0-9])[0-9]{3}$", "g");
						break;
					case "date":
						regex=new RegExp("^[0-3][0-9][/](0[1-9]|1[0-2])[/][1-2][0-9][0-9][0-9]$", "gi");
						break;
					case "heure":
						regex=new RegExp("^[0-2][0-9][:][0-5][0-9]$", "gi");
						break;
					default:
						regex=new RegExp("^.+$", "g");
				}
				if(MonChamp.value!="" && !regex.exec(MonChamp.value)) this.erreurs.push(this.messages[x]);
				break;
			case "nombre":
				var str=MonChamp.value;
				if(str=="" || isNaN(str)) this.erreurs.push(this.messages[x]);
				break;
			case "nombreNonNull":
				var str=MonChamp.value;
				if(str=="" || isNaN(str) || str=="0") this.erreurs.push(this.messages[x]);
				break;
			case "radio":
				var r = false;
				var d = document.getElementsByName(this.regles[x]);
				for(var i=0; i<d.length; i++){
					if(d[i].type=='radio' && d[i].checked){
						r = d[i].value;
						break;
					}
				}
				if(!r) this.erreurs.push(this.messages[x]);
				break;
			case "checked":
				var r = false;
				var d = document.getElementsByName(this.regles[x]);
				for(var i=0; i<d.length; i++){
					if(d[i].type=='checkbox' && d[i].checked){
						r = d[i].value;
						break;
					}
				}
				if(!r) this.erreurs.push(this.messages[x]);
				break;
			case "requis":
			default:
				if(MonChamp.value=="") this.erreurs.push(this.messages[x]);
		}
	}
	if(this.erreurs.length){
		var msg="<h1>"+this.messageH+" :</h1>"+this.liste()+"<h1>"+this.messageB+"</h1><div id='AlertRX_BOUTONS'><a id='AlertRX_OK' class='btnA' href='#'>&nbsp; OK &nbsp;</a></div>";
		popup.setMessage(msg);
		popup.display('erreur');
		return false;
	}
	return true;
}