/*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*/
function boutonval(form, action, tableau)
{
	if(testchamps(form, tableau)) // teste les champs
	{
		 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
	fichier		: nom du fichier traiter
	id_fichier	: id du fichier traiter
	type_fichier	: type du fichier à traiter
	tableau		: nom du tableau avec toutes les erreurs*/
function bouton_fichier(form, action, fichier, id_fichier, type_fichier, tableau)
{
	option = eval("document."+form+".id_option");	// création de l'objet id_option
	option.value = id_fichier;			// id sur lekel il faut faire le traitement
	
	option = eval("document."+form+".type_option");	// création de l'objet id_option
	option.value = type_fichier;			// id sur lekel il faut faire le traitement
	
	if(action == "modif_fichier")		// si il faut modifier
	{
		boutonval(form, action, tableau); // lance test avant validation
	}else if(action == "del_fichier")	// si il faut suprrimer
	{
		boutonsupp(form, action, "Veuillez confirmer la suppression de : "+fichier);	// lance la supression
	}
}

/*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();

}


/*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
	}
}


/*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
	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"]=="egaux")	// teste si deux champs sont égaux
		{
			bufferreur = test_egaux(form,tab[i]);
		}
		else if (tab[i]["test"]=="et")		// teste un champs et l'autre
		{
			bufferreur = test_et(form,tab[i]);
		}
		else if (tab[i]["test"]=="ou")		// teste un champs ou l'autre
		{
			bufferreur = test_ou(form,tab[i]);
		}
		else if (tab[i]["test"]=="file")	// teste le type d'un fichier
		{
			bufferreur = test_format(form,tab[i]);
		}
		else if (tab[i]["test"]=="date")	// teste le type d'un fichier
		{
			bufferreur = test_date(form,tab[i]);
		}
		else
		{
			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)
		{
			if(msgerreur != "") msgerreur  += ",\n";
			msgerreur += tab[i]["erreur"];	// on ajoute le message d'erreur du champs
		}
		/* fin de la création du message d'erreur global */
	}
	/* fin du traitement de tous les champs */
	
	if (msgerreur!="")
	{
		alert(titre_erreur+msgerreur);
		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")&&(obj_champs.value==false))						// test pour les champs radio button
	{
		erreur = 1;
	}
	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"]))
			{
				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
		
		/* début du test sur la présence d'une arrobase et d'un point dans le mail */
		if ((obj_champs.value.indexOf("@")==-1) || (obj_champs.value.indexOf(".")==-1))
		{
			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 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;
}


/* fonction qui teste si deux champs sont égaux
	form	: nom du formulaire
	tab	: tableau avec toute les infos sur un champs */
function test_egaux(form, tab)
{
	var erreur = 0;
	
	/* début du test si le champs n'est pas vide */
	if((test_champs(form, tab) == 0) || test_champs(form, tab["autre"]) == 0)
	{
		var obj_champs = eval("document."+form+"."+tab["nom"]);	// création de l'objet champs à vérifier
		var obj_champs2 = eval("document."+form+"."+tab["autre"]["nom"]);  // création de l'objet champs à vérifier
		
		/* début du test d'égalité des 2 champs */
		if(obj_champs.value!=obj_champs2.value)
		{
			erreur = 1;
		}
		/* fin du test d'égalité des 2 champs */
		
	}
	/* fin du test si le champs n'est pas vide */
	
	return erreur;
}


/* fonction qui teste des champs qui entrainent les uns les autres
	form	: chemin complet pour aller au champs
	tab	: tableau avec toute les infos sur un champs */
function test_et(form, tab)
{
	var erreur = 0;
	var i;
	
	/* début de la lecture de tous les champs */
	for(i=0; i<tab["champs"].length; i++)
	{
		if(tab["champs"][i]["test"] == "ou")
		{
			erreur += test_ou(form, tab["champs"][i]);
		}else
		{
			erreur += test_champs(form, tab["champs"][i]);
		}
	}
	/* fin de la lecture de tous les champs */
	
	/* début du teste du retour */
	
	if(erreur == 0 || erreur == tab["champs"].length)	// tous les champs sont remplis ou vides
	{
		return 0;
	}else												// au moins un champs est vide
	{
		return 1;
	}
	/* fin du teste du retour */
}


/* fonction qui teste des champs qui entrainent les uns ou les autres
	form	: chemin complet pour aller au champs
	tab	: tableau avec toute les infos sur un champs */
function test_ou(form, tab)
{
	var erreur = 0;
	var i;
	
	/* début de la lecture de tous les champs */
	for(i=0; i<tab["champs"].length; i++)
	{
		erreur += test_champs(form, tab["champs"][i]);
	}
	/* fin de la lecture de tous les champs */
	
	/* début du teste du retour */
	if(erreur == tab["champs"].length)	// aucun champs est rempli
	{
		return 1;
	}else												// au moins un champs est rempli
	{
		return 0;
	}
	/* fin du teste du retour */
}


/*teste le format du fichier
liste des paramètres:
	form	: chemin complet pour aller au champs
	tab	: tableau avec toute les infos sur un champs */
function test_format(form, tab)
{
	var erreur=1; // déclaration des variables locales
	
	/* début du test si le champs n'est pas vide */
	if((test_champs(form, tab) == 0))
	{
		var tab_type = tab['liste'].split("/");
		
		var fichier = eval("document."+form+"."+tab['nom']+".value");	// objet à traiter
		var type =fichier.split(".");					// tableau avec en dernière cellule le format
		var max = type.length-1;					// id de la dernière cellule
	
		/* début de la lecture de tout les format */		
		for(i=0; i<tab_type.length; i++)
		{
			/* si le format est dans le tableau */
			if(type[max].toLowerCase()==tab_type[i])
			{
				erreur=0;
			}
		}
		/* fin de la lecture de tout les format */
	}else
	{
		erreur=0;
	}
	/* 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 champs = eval("document."+form+"."+tab['nom']);

	if(champs.value != "")
	{
		var amin=1900; // 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))
		{
		   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();
		   
		   if (a2<1000)
		   {
		   		a2=1900+a2;
		   }
		   if ((j!=j2)||(m!=m2)||(a!=a2))
		   {
		      erreur = 1;
		   }
		   else
		   {
		   		date_archive = a+"-"+m+"-"+j;
		   }
		}
	}
	return erreur;
}

/* fonction qui vide un champs
liste des paramètre :
	obj_champ	: objet champ*/
tab_testchamp = new Array();
function vide(obj_champ)
{
	if(tab_testchamp[obj_champ.name] == undefined)
	{
		tab_testchamp[obj_champ.name] = obj_champ.value;
	}
	
	if(tab_testchamp[obj_champ.name] == obj_champ.value)
	{
		obj_champ.value = "";
	}
}