/*fontion sur le boutton de validation
liste des paramÃ¨tre :
	form	: nom du formulaire
	tableau	: nom du tableau avec toutes les erreurs*/
function boutonval(form, tableau)
{
	if(testchamps(form, tableau)) // teste les champs
	{
		return true;
	}else
	{
		return false;
	}
}


/*fontion sur le boutton de validation
liste des paramÃ¨tre :
	form	: nom du formulaire
	tableau	: nom du tableau avec touts les champs */
function testchamps(form, tab)
{
	var i, bufferreur;	// dÃ©claration des variables locales
	var msgerreur = "";
	
	/* dÃ©but du traitement de tous les champs */
	for (i=0; i<tab.length; i++)
	{
		bufferreur =  0;	// par dÃ©faut aucune erreur

		/* dÃ©but du choix du test sur le champs */
		if(tab[i]["test"]=="long")			// test de la longueur du champs
		{
			bufferreur = test_longueur(form,tab[i]);
		}
		else if (tab[i]["test"]=="mail")		// test de la prÃ©sence d'une arrobasa et d'un point dans l'adresse mail
		{
			bufferreur = test_mail(form,tab[i]);
		}
		else if (tab[i]["test"]=="numeric")	// teste si les donnÃ©es saisies ne sont que des chiffres
		{
			bufferreur = test_numeric(form,tab[i]);
		}
		else if (tab[i]["test"]=="date")	// teste le type d'un fichier
		{
			bufferreur = test_date(form,tab[i]);
		}
		else if (tab[i]["test"]=="reg")	// teste le type d'un fichier
		{
			bufferreur = test_reg(form,tab[i]);
		}
		else if (tab[i]["test"]=="ou")	// teste un champs ou un autre
		{
			bufferreur = test_ou(form,tab[i]);
		}
		else if (tab[i]["test"]=="egal")	// teste deux champs égaux
		{
			bufferreur = test_egal(form,tab[i]);
		}
		else
		{
			bufferreur = test_champs(form,tab[i]);	// test du champs obligatoire
		}
		
		if(tab[i]['obligatoire'] == 1 && bufferreur == 0)
		{
			bufferreur = test_champs(form,tab[i]);	// test du champs obligatoire
		}
		/* fin du choix du test sur le champs */


		/* dÃ©but de la crÃ©ation du message d'erreur global */
		if(bufferreur == 1)
		{
			msgerreur = " ";
			if(tab[i]["tab_label"] != undefined)
			{
				var i_label;
				for(i_label=0; i_label<tab[i]["tab_label"].length; i_label++)
				{
					change_class(tab[i]["tab_label"][i_label], 'contact_liberreur');
				}
			}else
			{
				change_class(tab[i]['label'], 'contact_liberreur');
			}
		}else if(bufferreur == 0)
		{
			if(tab[i]["tab_label"] != undefined)
			{
				var i_label;
				for(i_label=0; i_label<tab[i]["tab_label"].length; i_label++)
				{
					change_class(tab[i]["tab_label"][i_label], 'contact_lib');
				}
			}else
			{
				change_class(tab[i]['label'], 'contact_lib');
			}
		}
		/* fin de la crÃ©ation du message d'erreur global */
		
	}
	/* fin du traitement de tous les champs */
	
	if (msgerreur!="")
	{
		if(form == "etre_alerte")
		{
			alert(titre_mail);
		}else
		{
			alert(titre_erreur);
		}
		
		return 0;
	}else
	{
		return 1;
	}
}


/* fonction de test du champs vide ou nom
liste des paramÃ¨tres :
	form	: nom du formulaire
	tab	: tableau avec toute les infos sur un champs */
function test_champs(form,tab)
{
	var obj_champs = eval("document."+form+"."+tab["nom"]);	// crÃ©ation de l'objet champs Ã  traiter
	var erreur = 0;
	
	/* dÃ©but du test si le champs est vide ou si il est a sa valeur par dÃ©faut */
	if (tab["type"] == "texte" && (obj_champs.value == "" || obj_champs.value == tab["defaut"]))	// test pour les champs texte
	{
		erreur = 1;
	}
	else if((tab["type"] == "checkbox")&&(obj_champs.checked == false))						// test pour les champs checkbox
	{
		erreur = 1;
	}
	else if((tab["type"] == "radio"))						// test pour les champs radio button
	{
		erreur = 1;
		
		var i;
		for(i=0; i<tab["id"].length; i++)
		{
			if(document.getElementById(tab["id"][i]).checked == true)
			{
				erreur = 0;
			}
		}
	}
	else if ((tab["type"] == "combobox")&&(obj_champs.value == "Choisissez votre pays"))		// test pour les champs combobox
	{
		erreur = 1;
	}
	/* fin du test si le champs est vide ou si il est a sa valeur par dÃ©faut */
	
	return erreur;
}


/* fonction de test sur la longueur du champs
liste des parametres :
	form	: nom du formulaire
	tab	: tableau avec toute les infos sur un champs */
function test_longueur(form, tab)
{
	var erreur = 0;

	/* dÃ©but du test si le champs n'est pas vide */
	if(test_champs(form, tab) == 0)
	{
		var obj_champs = eval("document."+form+"."+tab["nom"]);	// crÃ©ation de l'objet champs Ã  traiter

		/* dÃ©but du test sur la longueur du texte */
			if ((tab["operation"] == "<" && obj_champs.value.length>tab["longueur"]) || (tab["operation"] == ">" && obj_champs.value.length<tab["longueur"]) || (tab["operation"] == "==" && obj_champs.value.length != tab["longueur"]) || (tab["operation"] == "entre" && (obj_champs.value.length < tab["longueur"] || obj_champs.value.length > tab["longueur_2"])))
			{
				erreur = 1;
			}
		/* fin du test sur la longueur du texte */
	}
	/* fin du test si le champs n'est pas vide */
	
	return erreur;
}


/* fonction de test sur la conformitÃ© du mail
	form	: nom du formulaire
	tab	: tableau avec toute les infos sur un champs */
function test_mail(form, tab)
{
	var erreur = 0;
	
	/* dÃ©but du test si le champs n'est pas vide */
	if(test_champs(form, tab) == 0)
	{
		var obj_champs = eval("document."+form+"."+tab["nom"]);	// crÃ©ation de l'objet champs Ã  traiter
		var expr = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,3}$/;
		var buff = expr.exec(obj_champs.value);
		/* dÃ©but du test sur la prÃ©sence d'une arrobase et d'un point dans le mail */
		if (buff == null || obj_champs.value.length > tab["longueur"])
		{
			erreur = 1;
		}
		/* dÃ©but du test sur la prÃ©sence d'une arrobase et d'un point dans le mail */
	}
	/* fin du test si le champs n'est pas vide */
	
	return erreur;
}


/* fonction de test sur la conformitÃ© d'une expression rÃ©guliÃ¨re
	form	: nom du formulaire
	tab	: tableau avec toute les infos sur un champs */
function test_reg(form, tab)
{
	var erreur = 0;
	
	/* dÃ©but du test si le champs n'est pas vide */
	if(test_champs(form, tab) == 0)
	{
		var obj_champs = eval("document."+form+"."+tab["nom"]);	// crÃ©ation de l'objet champs Ã  traiter
		var expr = tab["pattern"];
		var buff = expr.exec(obj_champs.value);
		
		/* dÃ©but du test sur la prÃ©sence d'une arrobase et d'un point dans le mail */
		if (buff == null)
		{
			erreur = 1;
		}
		/* dÃ©but du test sur la prÃ©sence d'une arrobase et d'un point dans le mail */
	}
	/* fin du test si le champs n'est pas vide */
	
	return erreur;
}


/* fonction de test un champ ou l'autre
	form	: nom du formulaire
	tab	: tableau avec toute les infos sur un champs */
function test_ou(form, tab)
{
	var autres = tab["autre"];
	var i;
	for(i=0; i<autres.length; i++)
	{
		if(autres[i]["test"]=="long")			// test de la longueur du champs
		{
			bufferreur = test_longueur(form,autres[i]);
		}
		else if (autres[i]["test"]=="mail")		// test de la prÃ©sence d'une arrobasa et d'un point dans l'adresse mail
		{
			bufferreur = test_mail(form,autres[i]);
		}
		else if (autres[i]["test"]=="numeric")	// teste si les donnÃ©es saisies ne sont que des chiffres
		{
			bufferreur = test_numeric(form,autres[i]);
		}
		else if (autres[i]["test"]=="date")	// teste le type d'un fichier
		{
			bufferreur = test_date(form,autres[i]);
		}
		else if (autres[i]["test"]=="reg")	// teste le type d'un fichier
		{
			bufferreur = test_reg(form,autres[i]);
		}
		else if (autres[i]["test"]=="egal")	// teste deux champs égaux
		{
			bufferreur = test_egal(form,autres[i]);
		}
		else
		{
			bufferreur = test_champs(form,autres[i]);	// test du champs obligatoire
		}
		
		if(bufferreur == 0)
		{
			bufferreur = test_champs(form,autres[i]);	// test du champs obligatoire
		}
		
		if(bufferreur == 0)
		{
			return 0;
		}
	}
	return 1
}


/* fonction de test deux champs egaux
	form	: nom du formulaire
	tab	: tableau avec toute les infos sur un champs */
function test_egal(form, tab)
{
	/* dÃ©but du test si le champs n'est pas vide */
	if(test_champs(form, tab) == 0)
	{
		var obj_champs = eval("document."+form+"."+tab["nom"]);	// crÃ©ation de l'objet champs Ã  traiter
		var obj_champs2 = eval("document."+form+"."+tab["autre"]);	// crÃ©ation de l'objet champs Ã  traiter
		
		if(obj_champs.value == obj_champs2.value)
		{
			return 0;
		}else
		{
			return 1;
		}
	}else
	{
		return 0;
	}
	/* fin du test si le champs n'est pas vide */
}


/* fonction de test du type de donnÃ©es saisies dans le champs
	form	: nom du formulaire
	tab	: tableau avec toute les infos sur un champs */
function test_numeric(form, tab)
{
	var erreur = 0;
	
	/* dÃ©but du test si le champs n'est pas vide */
	if(test_champs(form, tab) == 0)
	{
		var obj_champs = eval("document."+form+"."+tab["nom"]);	// crÃ©ation de l'objet champs Ã  traiter
		
		/* dÃ©but du test des caracteres saisis */
		if (isNaN(obj_champs.value))
		{
			erreur=1;
		}
		/* fin du test des caracteres saisis */
	}
	/* fin du test si le champs n'est pas vide */
	
	return erreur;
}


/*verifie les dates
liste des paramÃ¨tres:
	form	: chemin complet pour aller au champs
	tab	: tableau avec toute les infos sur un champs */
function test_date(form, tab)
{
	var erreur=0; // dÃ©claration des variables locales
	var jour = eval("document."+form+"."+tab['nom']);
	var mois = eval("document."+form+"."+tab['mois']);
	var annee = eval("document."+form+"."+tab['annee']);

	if(jour.value != "")
	{
		
		var amin=1900; // annÃ©e min
		var j = jour.value;
		var m = mois.value;
		var a = annee.value;
		
		if(j<10)
		{
			j = j.replace('0', '')*1;	
		}
		
		if(m<10)
		{
			m = m.replace('0', '')*1;	
		}
		
		

		if ((isNaN(j))||(j<1)||(j>31))
		{
		   erreur = 1;
		}
		if ((isNaN(m))||(m<1)||(m>12))
		{
		   erreur = 1;
		}
		if ((isNaN(a))||(a<amin))
		{
		   erreur = 1;
		}
        	
		if (erreur==0)
		{
			
		   var d2=new Date(a,m-1,j);
		   j2=d2.getDate();
		   m2=d2.getMonth()+1;
		   a2=d2.getYear();
		   
		   var date_tmp = new Date();
		   
		   if (a2<1000)
		   {
		   		a2=1900+a2;
		   }
		   if ((j!=j2)||(m!=m2)||(a!=a2))
		   {
		      erreur = 1;
		   }
		   else if (d2 > date_tmp)
		   {
		      erreur = 1;
		   }
		   else
		   {
		   		date_archive = a+"-"+m+"-"+j;
		   }
		}
	}
	return erreur;
}


/* fonction de test direct d'un champs
liste des paramÃÂ¨tres :
	champ	: champ tester*/
function direct_reg(champ)
{
	var tmp = champ.value;
	var expr = /^[éèàùêîôûâöïüëäaàçÑÁÉÍÓÚúóíéáña-zA-Z-' ]{1}$/;
	var buff = expr.exec(tmp);
	if(buff == null)
	{
		champ.value = ""
		var i;
		for(i=0; i<tmp.length; i++)
		{
			var tester = tmp.substr(i, 1);
			if(expr.exec(tester) != null && tester != undefined && tester != "undefined")
			{
				champ.value += tester;
			}
		}
	}
}

/* fonction de test direct d'un champs
liste des paramÃÂ¨tres :
	champ	: champ tester*/
function direct_regnum(champ)
{
	var tmp = champ.value;
	var expr = /^[éèàùêîôûâöïüëäaàçÑÁÉÍÓÚúóíéáña-zA-Z0-9-' ]{1}$/;
	var buff = expr.exec(tmp);
	if(buff == null)
	{
		champ.value = ""
		var i;
		for(i=0; i<tmp.length; i++)
		{
			var tester = tmp.substr(i, 1);
			if(expr.exec(tester) != null && tester != undefined && tester != "undefined")
			{
				champ.value += tester;
			}
		}
	}
}

/* fonction de test direct d'un champs
liste des paramÃÂ¨tres :
	champ	: champ tester*/
function direct_num(champ)
{
	var tmp = champ.value;
	var expr = /^[0-9]{1}$/;
	var buff = expr.exec(tmp);
	if(buff == null)
	{
		champ.value = ""
		var i;
		for(i=0; i<tmp.length; i++)
		{
			var tester = tmp.substr(i, 1);
			if(expr.exec(tester) != null && tester != undefined && tester != "undefined")
			{
				champ.value += tester;
			}
		}
	}
	
	tmp = champ.value;
	if(tmp.length >1)
	{
		if(tmp > maxi || tmp <= 0)
		{
			champ.value = tmp.substr(0, (tmp.length-1));
		}
	}
}

/* fonction de test direct d'un champs
liste des paramÃÂ¨tres :
	champ	: champ tester*/
function direct_regmail(champ)
{
	var tmp = champ.value;
	var expr = /^[._@a-zA-Z0-9-]{1}$/;
	var buff = expr.exec(tmp);
	if(buff == null)
	{
		champ.value = ""
		var i;
		for(i=0; i<tmp.length; i++)
		{
			var tester = tmp.substr(i, 1);
			if(expr.exec(tester) != null && tester != undefined && tester != "undefined")
			{
				champ.value += tester;
			}
		}
	}
}