/* Fonction de check de formulaire universelle :)

Vérifie le formulaire champ par champ et vérifie si la saisie pour ce champ est valide,
	si la saisie d'un champ est invalide :
		- focus sur le champ
		- affichage d'une alerte avec le message associé au champ et à la méthode
		- sortie de fonction avec la valeur FALSE
	sinon
		- sortie de fonction avec la valeur TRUE

Méthodes possibles
	- filled : champ remplit ?
	- min-N : minimum 'N' caractères
	- max-N : maximum 'N' caractères
	- alpha : ne contient pas de chiffres
	- numeric : ne contient que des chiffres ou point ou espace (téléphone)
	- min_number-N : La valeur du champ est plus grande ou égale à 'N'
	- max_number-N : La valeur du champ est plus petite ou égale à 'N'
	- email : vérifie si est un email valide
	- regex-RE : expression régulière 'RE' vérifiée ?  (ne pas oublier de doubler les "\")
	- notregex-RE : expression régulière 'RE' non-vérifiée ?  (ne pas oublier de doubler les "\")
	- equal-NOMCHAMP : valeur du champ identique à la valeur du champ de nom 'NOMCHAMP'
	- checked-N : boutons radio ou checkbox : vérifie si 'N' boutons du mm nom sont cochés au minimum
	- checked-M-N : boutons radio ou checkbox : vérifie si 'M' boutons du mm nom sont cochés au minimum et 'N' .. sont cochés au maximum
	- selected : select-box pas sur la première position et valeur non-vide.

exemple :
if (
	RM_checkform(document.inscription,
		"civilite","checked-1","Veuillez sélectionner une civilité test.",
		"lastname","filled","Veuillez saisir votre Nom.",
		"lastname","alpha","Veuillez n'utiliser que des lettres.",
		"countryid","selected","Veuillez sélectionner votre pays.",
		"daytimephone","numeric","Votre téléphone ne peut comporter que des chiffres.",
		"login","email","L'adresse email que vous avez saisie n'est pas valide.",
		"password","min-6","Votre mot de passe doit faire 6 caractères minimum.",
		"password","max-10","Votre mot de passe doit faire 10 caractères minimum.",
		"password","regex-^[A-Za-z0-9]*$","Votre mot de passe ne doit pas contenir de caractères accentués.",
		"password2","equal-password","Votre mot de passe doit être confirmé sans erreur.")
	) {
		alert("Formulaire vérifié avec succès");
	}

*/
function RM_checkform(Form2Check) {
	if (arguments.length%3 != 1) {
		alert('appel incorrect de la fonction RM_checkform !!\nAppel correct = RM_checkform(formulaire, "nomchamp_1","methode_1","erreur_1",..., "nomchamp_N","methode_N","erreur_N")');
		return false;
	}
	with (Form2Check) {
		for (i=1;i<arguments.length;i+=3) {
			nomchamp=arguments[i]; champ=eval(nomchamp);
			methode=arguments[i+1];
			msgerreur=arguments[i+2];
			verifie=true;
			if ( (idx=methode.indexOf("-")) >-1) {
				getargs=methode.substr(idx+1);
				methode=methode.substr(0,idx);
			}
			switch (methode) {
				case "filled" : 
					verifie=((champ.value).replace(/\ /g,"") != "");
					break;
				case "min" :
					verifie=(champ.value.length>=parseInt(getargs));
					break;
				case "max" :
					verifie=(champ.value.length<=parseInt(getargs));
					break;
				case "alpha" :
					verifie=( (champ.value).search(/\d/) ==-1 );
					break;
				case "numeric" :
					verifie=( (champ.value).search(/[^0-9. ]/) ==-1 );
					break;
			    	case "min_number" :				
					verifie=(parseFloat(champ.value)>=parseFloat(getargs));
					break;
				case "max_number" :
					verifie=(parseFloat(champ.value)<=parseFloat(getargs));
					break;	
				case "email" :
					verifie=false;  m=champ.value;
					if ( (arob=m.indexOf("@")) > -1) {
						if ( (m.substr(0,arob)).search(/^(\w+([-.]\w)*)+$/)>-1 ) {
							verifie=( (m.substr(arob+1)).search(/^\w+(([-]\w+)*[.]\w{2,})+$/)>-1);
						}
					}
					break;
				case "regex" :
					regex=new RegExp(getargs);
					verifie=((champ.value).search(regex)>-1);
					break;
				case "notregex" :
					regex=new RegExp(getargs);
					verifie=((champ.value).search(regex)==-1);
					break;
				case "equal" :
					verifie=( champ.value == (eval(getargs)).value );
					break;
				case "checked" :
					coches=0;
					if (champ!=null) {
						if (isNaN(champ.length))
							coches=champ.checked?1:0;
						else
							for (j=0;j<champ.length;j++)
								if (champ[j].checked)
									coches++;
					}
					else {
						/* Patch avec les id renseignés */
						for (j=0;j<elements.length;j++)
							if (elements[j].name==nomchamp || elements[j].title==nomchamp ) {
								if (champ==null)
									champ = elements[j];
								if (elements[j].checked)
									coches++;
							}
					}
					if ( (idx=getargs.indexOf("-")) >-1) {
						cochesmin=parseInt(getargs.substr(0,idx));
						cochesmax=parseInt(getargs.substr(idx+1));
						verifie=(coches>=cochesmin)&&(coches<=cochesmax);
						
					}
					else
						verifie=(coches>=parseInt(getargs));
					break;
				case "selected" :
					verifie=(champ.selectedIndex>0 && champ.options[champ.selectedIndex].value!="");
					break;
			}
			
			if (!verifie) {
				if (methode=="checked") { if (isNaN(champ.length)) champ.focus(); else champ[0].focus(); }
				else { if (champ.type=="text"||champ.type=="password") champ.select();  champ.focus(); }
				window.scrollBy(0,-100);
				alert(msgerreur);
				return false;
			}
		} // fin for
	} // fin with (Form2Check)
	return true;
}