/**
* Function de controle de formulaire
* 
* @author   mabaakouk@alcyonis.fr
* @version  1.0 
* @since    28/06/2004
*
**/

var champ_a_verif=new Array();
var champ_a_verif_form=new Array();
var champ_a_verif_libelle=new Array();
var champ_a_verif_type=new Array();
var champ_a_verif_error_string="Veuillez renseigner ou vérifier les informations suivantes";

/* ajout_champ_a_verif
*
*	Ajout un champ de formulaire au processus de verification
*
* @param    string    nom du formulaire
* @param    string    nom du champ du formulaire
* @param    string    libelle du message d'erreur lorsqu'un champs n'est pas valide
* @param    string    type du champs ŕ verifier
*           Valeur possible :
*			 - "mandatory" : on verifie que le champ n'est pas vide
*			 - "email" : on verifie que le champs contient une adresse email
*			 - "minN"  : on verifie que le champ contient au moin N caractere
*			 - "maxN"  : on verifie que le champ contient au plus N caractere
*			 - "radio" : on verifie que un des  bouton radio et selectionne (uniquement sur un champ 'radiobutton') !!!implique mandatory!!!
*			 - "checkbox" : on verifie que le champ est coche (uniquement sur un champ 'checkbox') !!!implique mandatory!!!
*			 - "int" :  on verifie que le champ est un entier
*			 - "float" : on verifie que le champ est un float
*			 - "date" : on verifie que la date est sous la forme de jj/mm/aaaa et quel est valide
*
* @return   string    return true si les informations sont correct
**/

function ajout_champ_a_verif(form,name,libelle,type){
	//alert(name+","+libelle+","+type)
	var index;
	if (name!="" && libelle!="" && form!="" && name!=undefined && libelle!=undefined && form!=undefined)
	{
		index=champ_a_verif.length;
		champ_a_verif[index]=name;
		champ_a_verif_form[index]=form;
		champ_a_verif_libelle[index]=libelle;
		champ_a_verif_type[index]=type;
		return true;
	}
	else
		return false;
}

/* set_error_champ_a_verif
*
*	Ajout un champ de formulaire au processus de verification
* @param    string    Le message d'erreur
*
**/

function set_error_champ_a_verif(str){
	champ_a_verif_error_string=str;
}

/* ajout_champ_a_verif
*
*	Lance la verification du formulaire et genere une erreur si il a lieu
*
* @param    string    nom du formulaire ŕ verifier
* @return   string    return true si les informations sont correct sinon false;
*
**/

function verif_champ(theform){
	var str_verif="";
	//verification du contenu des champ type
	//alert(champ_a_verif.length);
	var is_good;
	for(var i=0;i<champ_a_verif.length;i++)
	{
		if(champ_a_verif_form[i]==theform)
		{
			//alert(champ_a_verif_type[i]);

			if (champ_a_verif_type[i]=="radio")
			{
				is_good = verif_type_radio(champ_a_verif[i]);
			}
			else if (champ_a_verif_type[i]=="checkbox")
			{
				is_good = eval("document."+theform+"."+champ_a_verif[i]+".checked");
			}
			else if (champ_a_verif_type[i]=="mandatory")
			{
				is_good = (eval("document."+theform+"."+champ_a_verif[i]+".value")!="");
			}		
			else if ( eval("document."+theform+"."+champ_a_verif[i]+".value")!="" && eval("document."+theform+"."+champ_a_verif[i]+".value")!=undefined)
			{

				if (champ_a_verif_type[i]=="email")
				{
					is_good = verif_type_email(eval("document."+theform+"."+champ_a_verif[i]+".value"));
				}
				else if (champ_a_verif_type[i]=="date")
				{
					is_good = verif_type_date(eval("document."+theform+"."+champ_a_verif[i]+".value"));
				}
				else if (champ_a_verif_type[i]=="float")
				{
					is_good = !isNaN(eval("document."+theform+"."+champ_a_verif[i]+".value"));
				}			
				else if (champ_a_verif_type[i]=="int")
				{
					is_good = ( !isNaN(eval("document."+theform+"."+champ_a_verif[i]+".value")) && eval("document."+theform+"."+champ_a_verif[i]+".value.indexOf('.')")==-1 );
				}
				else if (champ_a_verif_type[i].substr(0,3)=="min")
				{
					is_good = (eval("document."+theform+"."+champ_a_verif[i]+".value.length")>=champ_a_verif_type[i].substring(3,champ_a_verif_type[i].length));
				}
				else if (champ_a_verif_type[i].substr(0,3)=="max")
				{
					is_good = (eval("document."+theform+"."+champ_a_verif[i]+".value.length")<=champ_a_verif_type[i].substring(3,champ_a_verif_type[i].length));
				}
			}
			else
				is_good=true;
			if (!is_good)
				str_verif+="\n- "+champ_a_verif_libelle[i];

		}// fin if(champ_a_verif_type_form[i]==theform)
	}// fin for(i=0;i<champ_a_verif.length;i++)
	if (str_verif!="")
	{	
		alert(champ_a_verif_error_string+" : "+str_verif);
		return false;
	}
	return true;
	
}

/* Fonction de controle de champ speciaux utilise par verif_champ() */
function verif_type_email (email){
  var reg = /[a-zA-Z_\.\-0-9\']+@[a-zA-Z_\.\-0-9]+\.[a-zA-Z]+/; // /^([a-zA-Z0-9_\.\-\'])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/
  return reg.test(email);
}
function verif_type_date (date){
//verifie la date sous la forme de DD/MMD/AAAA mais marche pas sous mozilla
//var reg = /(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])(\d{4}))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)([/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])(\d{4}))|((29)(\.|-|\/)(02)([/])([02468][048]00))|((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9][0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9][13579][26])))/ ; // 

var date_tmp=date.substr(3,2)+"/"+date.substr(0,2)+"/"+date.substr(6,4);
//verifie la date sous la forme de MM/DD/AAAA
var reg = /^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/;

  return reg.test(date_tmp);
}
function verif_type_radio(btn_radio){
	var is_good;
	for (var j=0;document.getElementsByName(btn_radio)[j];j++ )
	{
		is_good = document.getElementsByName(btn_radio)[j].checked || is_good;
	}	
	return is_good;
}