/* Fonction de check de formulaire universelle :)

Vrifie le formulaire champ par champ et vrifie 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 mthode
		- sortie de fonction avec la valeur FALSE
	sinon
		- sortie de fonction avec la valeur TRUE

Mthodes possibles
	- filled : champ remplit ?
	- min-N : minimum 'N' caractres
	- max-N : maximum 'N' caractres
	- alpha : ne contient pas de chiffres
	- numeric : ne contient que des chiffres ou point ou espace (tlphone)
	- email : vrifie si est un email valide
	- regex-RE : expression rgulire 'RE' vrifie ? // ne pas oublier de doubler les "\"
	- notregex-RE : expression rgulire 'RE' non-vrifie ? // 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 : vrifie si 'N' boutons du mm nom sont cochs au minimum
	- selected : select-box pas sur la premire position et valeur non-vide.

exemple :
if (
	RM_checkform(document.inscription,
		"civilite","checked-1","Veuillez slectionner une civilit test.",
		"lastname","filled","Veuillez saisir votre prnom.",
		"lastname","alpha","Veuillez n'utiliser que des lettres.",
		"countryid","selected","Veuillez slectionner votre pays.",
		"daytimephone","numeric","Votre tlphone 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 caractres minimum.",
		"password","max-10","Votre mot de passe doit faire 10 caractres minimum.",
		"password","regex-^[A-Za-z0-9]*$","Votre mot de passe ne doit pas contenir de caractres accentus.",
		"password2","equal-password","Votre mot de passe doit tre confirm sans erreur.")
	) {
		alert("Formulaire vrifi avec succs");
	}

*/
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 "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 "checkJM" :					
					verifie=(champ.checked);
					break;
				case "checked" :
					coches=0;
					for (j=0;j<champ.length;j++)
						if (champ[j].checked)
							coches++;
					verifie=(coches>=parseInt(getargs));
					break;
				case "selected" :
					verifie=(champ.selectedIndex>0 && champ.options[champ.selectedIndex].value!="");
					break;
			}

			if (!verifie) {
				if (methode=="checked") 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;
}


/*
Permet d'envoyer dans un champ cach l'ensemble des valeurs
d'une liste de boutons radio ayant tous le mme nom.

exemple :
  si les boutons radio se nomme "interet" et qu'il existe un
  champ cach "interets" dans lequel on veut sauvegarder la
  liste des valeurs slectionnes, la syntaxe sera :

  radio2hidden(document.formulaire,"interet","interets");

*/
function radio2hidden(objform,nomradio,nomhidden) {
  with (objform) {
    cible=eval(nomhidden); cible.value="";
    for (i=0;i<eval(nomradio+".length");i++)
      if (eval(nomradio+"["+i+"].checked"))
        cible.value+=((cible.value=="")?"":", ")+eval(nomradio+"["+i+"].value");
  }
}

