/* il faut créer en début de page un tableau du nom
messagexxx = new Array(nombre de champs);
messagexxx[0] = "message d'erreur général";
messagexxx[i] = "message pour chaque champs en teste dans la fonction i et la position du champs dans la fonction et commence toujours à 3";*/

/*fontion sur le boutton de validation
liste des paramètre :
	form : nom du formulaire
	action : action de la validation
	tableau : nom du tableau avec toutes les erreurs
	suite des paramètres sont les champs obligatoire ou en teste
	pour tous les teste aure que simplement vide il faut 'nom du champs$code pour le test*/
function boutonval(form, action, tableau)
{
	
	if(testchamps(form, 'boutonval', tableau)) // teste les champs
	{
		 validerform(form, action); // valide le formulaire
	}
}

/*boutton de suppression
liste des paramètre :
	form : nom du formulaire
	action : action de la validation
	message : message à afficher avant de valider la supression*/
function boutonsupp(form, action, message)
{
	if(confirm(message)) // valide la supression
	{
		 validerform(form, action); // valide le formulaire
	}
}

/*fonction de validfation d'une liste d'option dans un formulaire
liste des paramètres : 
	form : nom du formulaire
	action : action de la validation
	tableau : nom du tableau avec toutes les erreurs/message à afficher avant de valider la supression/id de l'option à supprimer
	suite des paramètres sont les champs obligatoire ou en teste
	pour tous les teste autre que simplement vide il faut 'nom du champs$code pour le test*/
function boutonliste(form, action, tableau)
{
	tab = tableau.split("/");			// tableau avec les trois infos des
	option = eval("document."+form+".id_option");	// création de l'objet id_option
	option.value = tab[2];				// id sur lekel il faut faire le traitement
	
	if(action.indexOf("_modif", 1) > 0)	// si il faut modifier
	{
		if(testchamps(form, 'boutonliste', tab[0])) // teste les champs
		{
			validerform(form, action);	// valide le formulaire
		}
	}else if(action.indexOf("_del", 1) > 0)	// si il faut suprrimer
	{
		boutonsupp(form, action, tab[1]);	// lance la supression
	}else if(action.indexOf("_tri", 1) > 0)	// si il faut tirer
	{	
		validerform(form, action); 		// valide le formulaire
	}
}

/*valider un formuler
liste des paramètre :
	formulaire : nom du formulaire
	action : action de la validation*/
function validerform(formulaire, action)
{
	
	form=eval("document."+formulaire);
	form.action.value = action;
	form.submit();

}

/*test tous les champs
liste des paramètre :
	form : nom du formulaire
	fonction : fonction d'origine et qui contien les champs obligatoire
	tableau : nom du tableau avec toutes les erreurs*/
function testchamps(form, fonction, tableau)
{
	var i=0, erreur=0, buff=0, mailerreur=0, msgerreur=""; // déclaration des variables locales
	
	tab=eval("message"+tableau+langue); // création du tableau des erreurs (variable globale)

	obligatoire = eval(fonction+".arguments"); // création du tableau avec tous les champs obligatoire ou les test à réalisé

	/*fait tous les tests 1/1*/
	for (i=3; i<obligatoire.length; i++)
	{
		erreur =0; // par défaut il n'y a aucune erreur avant de fair les tests
		champstest = obligatoire[i].split("$"); // création tu tableau avec les champs et les test à leur attribuer champtest[0] : champs et valeur à tester - champtest[1] : teste à réalisé site il n'existe pas c'est un simple test sur le champs vide ou nom
		
		/*test les validations des champs*/
		if(champstest[1] == "&&") //un champs et un autre
		{
			erreur = test_et(champstest[0], form, i);
		}else if(champstest[1] == "==") //deux champs egaux 'champs1/champs2$=='
		{
			var tabchampsegau = champstest[0].split("/");
			if(eval("document."+form+"."+tabchampsegau[0]+".value") != eval("document."+form+"."+tabchampsegau[1]+".value"))
			{
				erreur=1
			}
		}else if(champstest[1] == "file") //le type d'une image
		{
			erreur = test_format(champstest[0], form);
		}else if(champstest[1]=="num") // les champs numériques
		{
			erreur = test_numeric(champstest[0], form);
		}else if(champstest[1]=="long") // la longueur des champs
		{
			erreur = test_longmax(champstest[0], form);
		}else if (champstest[1]=='mail') // les mails
		{
			erreur = test_mail(champstest[0], form);
		}else if (champstest[1]=='date') // les dates
		{
			erreur = test_date(champstest[0], form, i);
		}else if(champstest[1] == "||")//un champs ou un autre est obligatoire
		{
			erreur = test_ou(champstest[0], form, i);
		}else if(champstest[1] == "&&==") //un champs et un autre si le second vaut 
		{
			erreur = test_etegal(champstest[0], form);
		}else /*teste les champs obligatoire*/
		{
			erreur = test_saisie(champstest[0], form);
		}
				
		if (erreur == 1)
		{
			if (buff==1){msgerreur += ", ";}
			msgerreur += tab[i];
			buff = 1
		}
	}
	
	if(msgerreur=="")/*si il n'y a pas d'erreur*/
	{
		return 1;
	}else
	{
		alert (tab[0]+"\n"+msgerreur);
		return 0;
	}
}

/*teste les champs l'un ou l'autre
liste des paramètres
	champs : nom des champs à tester champs1||champs2||...||champsn ou  champs1&&champs2||champs3||...||champsn
	form : nom du formulaire
	i : numéro du test*/
function test_ou(champs, form, i)
{
	var j = 0, erreur = 1, erreur_et = 0; // déclarations des variable locale
	var tabchamps = champs.split("||"); // tableau avec les champs en test
	var message = tab[i]; // mémorisation du message original
	tab[i] = ""; //on vide le message original
	/*test tous les champs 1/1*/
	for (j=0; j<tabchamps.length; j++)
	{
		/*champs groupés*/
		if(tabchamps[j].indexOf("&&", 2)>0)
		{
			if(erreur_et == 0)
			{
				erreur_et = test_et(tabchamps[j], form, i);
			}else
			{
				test_et(tabchamps[j], form, i);
			}
		}else /*champs autonomes*/
		{
			if(test_saisie(tabchamps[j], form) && erreur == 1)
			{
				erreur = 1;
			}else
			{
				erreur = 0;
			}
		}

	}
	if(erreur_et==1)
	{
		erreur=1;
	}else
	{
		tab[i] = message;
	}
	return erreur;
}

/*teste les champs un est l'autre
liste des paramètres
	champs : nom des champs à tester champs1&&champs2&&...&&champsn
	form : nom du formulaire
	i : numéro du test
il faut créer en début de page un tableau du nom
messagechamps1 = new Array(nombre de champs);
messagechamps1[i] = "message pour chaque champs en teste dans la fonction i et la position du champs dans la fonction et commence toujours à 0";*/
function test_et(champs, form, i)
{
	var j=0, erreur=0, message=""; // déclaration des variables locales
	var tabchamps = champs.split("&&"); // tableau avec les champs en test
	var taberreur = eval("message"+tabchamps[0]+langue); // tableau avec les messages d'erreur correspondant au test

	/*test tous les champs 1/1*/
	for (j=0; j<tabchamps.length; j++)
	{
		if (test_saisie(tabchamps[j], form)) // si le champs est vide
		{
			if(message!="") message+=", ";
			message += taberreur[j];
			erreur++;
		}
	}
	
	/*test global*/
	if(erreur==0 || erreur == tabchamps.length) // tgous les champs sont ramplis ou sont vides
	{
		erreur=0;
	}else // il y a au moins un champs vides alors que les autres sont renplis
	{
		if(tab[i]!="" && message!="") tab[i]+=", ";
		if(message!="") tab[i] = message;
		erreur=1;
	}
	return erreur;
}

/*teste les champs un est l'autre
liste des paramètres
	champs : nom des champs à tester champs1&&champs2==valeur
	form : nom du formulaire*/
function test_etegal(champs, form)
{
	var tabchamps = champs.split("&&"); // tableau avec les champs en test
	var tabegal = tabchamps[1].split("=="); // tableau avec le champs et sa valeur
	valeur = eval("document."+form+"."+tabegal[0]); // valeur à comparrer
	/*test tous les champs*/
	if (test_saisie(tabchamps[0], form) && valeur.value == tabegal[1]) // si le champs est vide
	{
		return 1;
	}else
	{
		return 0;
	}
}

/*teste les mail*
liste des paramètres:
	nomchamps : nom du champs à tester
	form : nom du formulaire*/
function test_mail(nomchamps, form)
{
	var erreur=0; // déclaration des variables locales
	var test = /^[0-9a-zA-Z@._-]+$/; // code de teste des chiffre
	var champs = eval("document."+form+"."+nomchamps);
	if((champs.value.indexOf("@", 1) < 0 || champs.value.indexOf(".", 1) < 0 ||  test.exec(champs.value)==null) && champs.value != "")
	{
		erreur = 1
	}
	
	return erreur;
}

/*teste le format du fichier
liste des paramètres:
	nomchamps : nom du champs à tester champs/format
	form : nom du formulaire*/
function test_format(nomchamps, form)
{
	var erreur=0; // déclaration des variables locales
	var tabchamps = champstest[0].split("/");
	
	//teste si le champs n'est pas vide
	if (eval("document."+form+"."+tabchamps[0]+".value") != "")
	{
		fichier = eval("document."+form+"."+tabchamps[0]+".value")
		type =fichier.split(".");
		max = type.length-1;
		if(type[max].toLowerCase()!=tabchamps[1])
		{
			erreur=1;
		}
	}
	return erreur;
}

/*verifie les dates
liste des paramètres:
	nomchamps : nom du champs à tester
	form : nom du formulaire
	i : numéro du test*/
function test_date(nomchamps, form, i)
{
	var erreur=0; // déclaration des variables locales
	var champs = eval("document."+form+"."+nomchamps);
	if(champs.value != "")
	{
		var amin=2000; // année mini
		var j=champs.value.substring(0,2);
		var m=champs.value.substring(3,5);
		var a=champs.value.substring(6);
		
        	
		if (((isNaN(j))||(j<1)||(j>31)) && (ok==1))
		{
		   tab[i] = "Le jour n'est pas correct.";
		   erreur = 1;
		}
		if (((isNaN(m))||(m<1)||(m>12)) && (ok==1))
		{
		   tab[i] = "Le mois n'est pas correct.";
		   erreur = 1;
		}
		if (((isNaN(a))||(a<amin)) && (ok==1))
		{
		   tab[i] = "L'année n'est pas correcte.";
		   erreur = 1;
		}
        	
		if (erreur==0)
		{
		   var d2=new Date(a,m-1,j);
		   j2=d2.getDate();
		   m2=d2.getMonth()+1;
		   a2=d2.getYear();
		   if (a2<=100)
		   {
		   		a2=2000+a2;
		   }
		   if ((j!=j2)||(m!=m2)||(a!=a2))
		   {
		      tab[i] = "La date "+d+" n'existe pas !";
		      erreur = 1;
		   }
		   else
		   {
		   		date_archive = a+"-"+m+"-"+j;
		   }
		}
	}
	return erreur;
}


/*test si c'est un champs numérique
liste des paramètres:
	nomchamps : nom du champs à tester
	form : nom du formulaire*/
function test_numeric(nomchamps, form)
{
	var erreur=0; // déclaration des variables locales
	var test = /^[0-9]+$/; // code de teste des chiffre
	
	var champs = eval("document."+form+"."+nomchamps); // champs à tester
	
	//si il est diférrant de la valeur par défaut
	if(champs.value != "" && test.exec(champs.value)==null)
	{
		erreur=1;
	}
	return erreur;
}

/*test la longueur d'un champs
liste des paramètres:
	nomchamps : nom du champs à tester champs/nummax/type de test "== ou <= ou >="
	form : nom du formulaire*/
function test_longmax(nomchamps, form)
{
	var erreur=0; // déclaration des variables locales
	var tabchamps = nomchamps.split("/");
	var champs = eval("document."+form+"."+tabchamps[0]); // champs à tester
		
	if (champs.value.length!=tabchamps[1] && tabchamps[2]=="==" && champs.value!="") // test un champs de taille préci
	{
		erreur = 1;
	}else if (champs.value.length>tabchamps[1] && tabchamps[2]=="<=" && champs.value!="") // test un champs inferrieur ou égal
	{
		erreur = 1;
	}else if (champs.value.length<tabchamps[1] && tabchamps[2]==">=" && champs.value!="") // test un champs superrieur ou égal
	{
		erreur = 1;
	}
	return erreur;
}


/*test si le champs est saisi ou non
liste des paramètres :
	nomchamps : nom du champs
	form : nom du formulaire*/
function test_saisie(nomchamps, form)
{
	var erreur = 0; // déclaration de la variable locale
	//alert(document.toto.nom);
	var champs = eval("document."+form+"."+nomchamps);

	if((champs.type == "checkbox" || champs.type == "radio" ) && champs.checked== false) // si c'est un champs checkbox ou radio et vide
	{
		erreur = 1;
	}else if((champs.type != "checkbox" || champs.type != "radio") && (champs.value == "" || champs.value == "http://")) // si c'est un autre type de champs et vide
	{
		erreur = 1;
	}
	
	return erreur;
}
/*fin du formulaire*/