/**
* Function de controle de formulaire
*
* @author   mabaakouk@alcyonis.fr
* @version  1.1
* @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_time_interval=new Array();
var champ_a_verif_error_string="Veuillez renseigner ou v?rifier les informations suivantes";

var champ_a_verifier = new Array();
var champ_a_verif_fonction_perso = new Array();
var fonction_avant_verification = new Array();
var fonction_apres_verification = new Array();
/* 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_perso(form,libelle,nom_fonction ){
	if (nom_fonction!="" && libelle!="" && form!="" && nom_fonction!=undefined && libelle!=undefined && form!=undefined)
	{
		if (!champ_a_verif_fonction_perso[form])
			champ_a_verif_fonction_perso[form] = new Array();
		var index=champ_a_verif_fonction_perso[form].length;
		champ_a_verif_fonction_perso[form][index] = new Array();
		champ_a_verif_fonction_perso[form][index]["libelle"] = libelle;
		champ_a_verif_fonction_perso[form][index]["nom_fonction"] = nom_fonction;
		return true;
	} else {
		return false;
	}
}
function ajout_fonction_avant_verification(form,nom_fonction ){

	if (nom_fonction!="" && form!="" && nom_fonction!=undefined && form!=undefined)
	{
		if (!fonction_avant_verification[form])
			fonction_avant_verification[form] = new Array();
		var index=fonction_avant_verification[form].length;
		fonction_avant_verification[form][index] = new Array();
		fonction_avant_verification[form][index]["nom_fonction"] = nom_fonction;
		return true;
	} else {
		return false;
	}
}
function ajout_fonction_apres_verification(form,nom_fonction ){

	if (nom_fonction!="" && form!="" && nom_fonction!=undefined && form!=undefined)
	{
		if (!fonction_apres_verification[form])
			fonction_apres_verification[form] = new Array();
		var index=fonction_apres_verification[form].length;
		fonction_apres_verification[form][index] = new Array();
		fonction_apres_verification[form][index]["nom_fonction"] = nom_fonction;
		return true;
	} else {
		return false;
	}
}
function supprime_champ_a_verif(form,name,type){
	//alert(name+","+libelle+","+type)
	var index;
	if (name!="" && form!="" && name!=undefined && form!=undefined)
	{
		if (champ_a_verifier[form] && champ_a_verifier[form][name] && champ_a_verifier[form][name]["name"] && champ_a_verifier[form][name]["form"] && champ_a_verifier[form][name]["libelle"] && champ_a_verifier[form][name]["type"]){
			for(var i in champ_a_verifier[form][name]["type"]){
				if (champ_a_verifier[form][name]["type"][i]==type){
					champ_a_verifier[form][name]["type"][i] = null;
				}
			}
			if (champ_a_verifier[form][name]["type"].length<=0){
				champ_a_verifier[form][name] = null;
			}
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

/* 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 ajout_champ_a_verif(form,name,libelle,type){
	//alert(name+","+libelle+","+type)
	var index;
	if (name!="" && libelle!="" && form!="" && name!=undefined && libelle!=undefined && form!=undefined)
	{
		if (!champ_a_verifier[form])
			champ_a_verifier[form] = new Array();
		if (!champ_a_verifier[form][name])
			champ_a_verifier[form][name]= new Array();
		champ_a_verifier[form][name]["name"]=name;
		champ_a_verifier[form][name]["form"]=form;
		champ_a_verifier[form][name]["libelle"]=libelle;
		if (!champ_a_verifier[form][name]["type"])
			champ_a_verifier[form][name]["type"]= new Array();
		champ_a_verifier[form][name]["type"][champ_a_verifier[form][name]["type"].length]=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;
}

var un_element;
function load_verification(theform){

	if (document.forms[theform])
	for (num_element in document.forms[theform].elements){
		un_element=document.forms[theform].elements[num_element];
		if (un_element && un_element.type && un_element.type!=null && un_element.type!="button" && un_element.type!="hidden" && un_element.type!="submit" && un_element.type!="reset"){
			if (un_element.addEventListener){
					un_element.addEventListener("blur", function(e){this.style.backgroundColor="#FFFFFF";},false);
					un_element.addEventListener("focus", function(e){this.style.backgroundColor="#F5F5F5";},false);
			} else {
					un_element.onblur = function(){this.style.backgroundColor="#FFFFFF";};
					un_element.onfocus = function(){this.style.backgroundColor="#F5F5F5";};
			}
		}
	}

	var le_champ_en_cours;
	if (champ_a_verifier[theform]){
		for (var nom_champ in champ_a_verifier[theform])
		{
			if (champ_a_verifier[theform][nom_champ]["type"]!="file" && champ_a_verifier[theform][nom_champ]["type"]!="radio" && champ_a_verifier[theform][nom_champ]["type"]!="checkbox"){
				le_champ_en_cours=document[theform][champ_a_verifier[theform][nom_champ]["name"]];

				//alert("Ajout du listeneur du champ : "+champ_a_verifier[theform][nom_champ]["name"]);

				if (le_champ_en_cours.addEventListener){
					//le_champ_en_cours.addEventListener("blur", "verif_champ_blur('"+theform+"','"+nom_champ+"')",true);
					//le_champ_en_cours.addEventListener("focus", function(e){stop_verif_le_champ(theform,nom_champ)},false);

					le_champ_en_cours.addEventListener("blur", function(e){this.style.backgroundColor="#FFFFFF";verif_champ_blur(e)},false);
					le_champ_en_cours.addEventListener("focus", function(e){this.style.backgroundColor="#F5F5F5";stop_verif_le_champ(e)},false);
				} else {
					le_champ_en_cours.onblur = function(){this.style.backgroundColor="#FFFFFF";verif_champ_blur(false)};
					le_champ_en_cours.onfocus = function(){this.style.backgroundColor="#F5F5F5";stop_verif_le_champ(false)};
				}
			}
		}
	}
}
// Renvoie true quand le champ est valide
function champ_est_valide(le_champ){
	var le_champ_en_cours=eval("document."+le_champ["form"]+"."+le_champ["name"]);

	//alert(le_champ["name"]);
	var est_valide=true;
	var tmp_est_valide=true;
	for (var i=0;i<le_champ["type"].length;i++){
		if (le_champ["type"][i]==undefined) continue;
		if (le_champ["type"][i]=="mandatory"){
			if (le_champ_en_cours.type=="file"){
				var champ_fichier_cache=eval("document."+le_champ["form"]+"."+le_champ["name"]+"_file");
				tmp_est_valide = ( (champ_fichier_cache!=undefined && trim(champ_fichier_cache.value)!="") || trim(le_champ_en_cours.value)!="") ;
			} else {
				tmp_est_valide = trim(le_champ_en_cours.value)!="";
			}
		}
		else if (trim(le_champ_en_cours.value)!="" && le_champ_en_cours.value!=undefined)
		{
			if (le_champ["type"][i]=="email")
				tmp_est_valide = verif_type_email(le_champ_en_cours.value);

			else if (le_champ["type"][i]=="date")
				tmp_est_valide = verif_type_date(le_champ_en_cours.value);

			else if (le_champ["type"][i]=="time")
				tmp_est_valide = verif_type_time(le_champ_en_cours.value);

			else if (le_champ["type"][i]=="float")
				tmp_est_valide = !isNaN(le_champ_en_cours.value);

			else if (le_champ["type"][i]=="int")
				tmp_est_valide =  ( !isNaN(le_champ_en_cours.value) && le_champ_en_cours.value.indexOf('.')==-1 );

			else if (le_champ["type"][i].substr(0,3)=="min")
				tmp_est_valide = (le_champ_en_cours.value.length>=le_champ["type"][i].substr(3,le_champ["type"][i].length));

			else if (le_champ["type"][i].substr(0,3)=="max")
				tmp_est_valide = ( le_champ_en_cours.value.length <=le_champ["type"][i].substr(3,le_champ["type"][i].length));

		} else {
			tmp_est_valide = true;
		}
		est_valide = est_valide && tmp_est_valide;
	}
	return est_valide;
}
// V?rifie le champ lors de sa sortie
function verif_champ_blur(e){
	if (document.all){
		le_nom_du_champ=window.event.srcElement;
	} else {
		le_nom_du_champ=e.target;
	}
	le_champ=champ_a_verifier[le_nom_du_champ.form.name][le_nom_du_champ.name];
	//alert(le_nom_du_champ.form.name+" + "+le_nom_du_champ);
	var le_champ_en_cours=eval("document."+le_champ["form"]+"."+le_champ["name"]);
	if (champ_est_valide(le_champ)) {
		//alert(le_champ["name"]+" : ok ("+le_champ_en_cours.className.indexOf(" controle_champ_error"))+")";
		stop_verif_le_champ(e);
	} else {

		//alert(le_champ["name"]+" : ko ("+le_champ_en_cours.className+")");
		champ_a_verifier[le_champ["form"]][le_champ["name"]]["interval"]=window.setInterval("clignotement_champ('"+le_nom_du_champ.form.name+"','"+le_nom_du_champ.name+"')",1000);
		//le_champ_en_cours.focus();
	}
}
// Fonction lanc? a interval r?gulier lors de la sorit d'un non valide
function clignotement_champ(theform,nom_champ){
	var prefix="controle_champ_error ";

	le_champ=champ_a_verifier[theform][nom_champ];
	var le_champ_en_cours=eval("document."+le_champ["form"]+"."+le_champ["name"]);

	if (le_champ_en_cours.className.indexOf(prefix)!=-1)
		le_champ_en_cours.className=le_champ_en_cours.className.substring(prefix.length,le_champ_en_cours.className.length);
	else
		le_champ_en_cours.className=prefix+le_champ_en_cours.className;
}
// Arrete le clignotement d'un champ avec erreur
function stop_verif_le_champ(e){
	if (document.all){
		le_nom_du_champ=window.event.srcElement;
	} else {
		le_nom_du_champ=e.target;
	}
	le_champ=champ_a_verifier[le_nom_du_champ.form.name][le_nom_du_champ.name];
	var prefix="controle_champ_error ";
	var le_champ_en_cours=eval("document."+le_champ["form"]+"."+le_champ["name"]);
	if (champ_a_verifier[le_champ["form"]][le_champ["name"]]["interval"]){
		window.clearInterval(champ_a_verifier[le_champ["form"]][le_champ["name"]]["interval"]);
		champ_a_verifier[le_champ["form"]][le_champ["name"]]["interval"]=false;
		if (le_champ_en_cours.className.indexOf(prefix)!=-1)
			le_champ_en_cours.className=le_champ_en_cours.className.substring(prefix.length,le_champ_en_cours.className.length);
	}
}
function verif_champ(theform){
	var i;
	var str_verif="";
	if (fonction_avant_verification[theform]){
		for (i in fonction_avant_verification[theform]){
			eval(fonction_avant_verification[theform][i]["nom_fonction"]);
		}
	}

	//verification du contenu des champ type
	if (champ_a_verif_fonction_perso[theform]){
		for (i in champ_a_verif_fonction_perso[theform]){
			if (!eval(champ_a_verif_fonction_perso[theform][i]["nom_fonction"])) {
				str_verif+="\n- "+champ_a_verif_fonction_perso[theform][i]["libelle"];
			}
		}
	}
	var le_champ_en_cours;
	for (var nom_champ in champ_a_verifier[theform])
	{
		le_champ_en_cours=eval("document."+theform+"."+champ_a_verifier[theform][nom_champ]["name"]);
		if (!champ_est_valide(champ_a_verifier[theform][nom_champ])) {
			str_verif+="\n- "+champ_a_verifier[theform][nom_champ]["libelle"];
		}
	}
	if (fonction_apres_verification[theform]){
		for (i in fonction_apres_verification[theform]){
			eval(fonction_apres_verification[theform][i]["nom_fonction"]+"("+(str_verif=="")+");");
		}
	}
	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])+$/
  var reg = /^([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_time (saisie){
  var res = false;

  var tmp=saisie.split(':');
  if (tmp.length == 2) {
    var heure  = parseInt(tmp[0]);
    var minute = parseInt(tmp[1]);
    if (! isNaN(heure) && ! isNaN(minute)) {
      if (heure >= 0 && heure <= 23 && minute >= 0 && minute <= 59) {
		res = true;
      }
    }
  }

  //alert('verif_type_time(' + saisie  + ') res=' + res);
  return res;
}

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;
}
