function show_menu(bloc,etat,bouton,classe){
	if (bloc&&etat) {document.getElementById(bloc).style.display=etat;}
	if (bouton&&classe) {document.getElementById(bouton).className=classe;}
}

// Ajout de la fonction trim au prototype des chaines.
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }

function MM_findObj(n, d)  //  v4.0
{
	var p, i, x ;
	if(!d) d=document ;
	if((p=n.indexOf("?"))>0 && parent.frames.length)
	{
		d=parent.frames[n.substring(p+1)].document ;
		n=n.substring(0, p) ;
	}
	if(!(x=d[n])&&d.all) x=d.all[n] ;
	for (i=0 ; !x&&i<d.forms.length ; i++) x=d.forms[i][n] ;
	for(i=0 ; !x && d.layers && i<d.layers.length ; i++) x=MM_findObj(n,d.layers[i].document) ;
	if(!x && document.getElementById) x=document.getElementById(n) ;
	return x ;
}


/*
 * VERSION : 4.1.1.2
 * Verifie les champs d'un FORM qui lui sont passe en argument.
 *
 * Voici le schema d'appel de cette fonction :
 *     VerificationFormulaire('objetForm', 'submit_form', 'conteneurMessage', 'langue', 'go_top', 'trim', 'Nom_Champ1','Intitule_msg_erreur1','Type_Test', 'Nom_Champ2','Intitule_msg_erreur2','Type_Test', ...)
 *     - Le premier argument passe est soit un objet ou une chaine.
 *       Dans le cas ou il s'agirait d'un objet, celui-ci serait celui
 *       du formulaire sur lequel on desire faire les test.
 *       Dans le cas ou il s'agirait d'une chaine, celle-ci ferait
 *       reference au nom du formulaire, il faudrait alors recuperer
 *       l'objet formulaire via son nom.
 *     - Le deuxieme argument indique si un submit doit etre fait sur le
 *       formulaire dans le cas ou il ne contiendrait pas d'erreur.
 *     - Le troisieme argument si il est renseigne indique que le
 *       message d'erreur, si il y en a un, doit s'afficher dans le
 *       conteneur. Tout comme pour le formulaire on fournit un objet ou
 *       son nom.
 *       Le conteneur devra etre obligatoirement un DIV.
 *       L'utilisation d'un P est desormais proscrite car certains
 *       navigateurs tels que IE genere une erreur lors de l'insertion
 *       des messages d'erreurs comme contenu de la balise.
 *     - Le quatrieme argument passe est celui de la langue dans
 *       laquelle va etre afficher le message d'erreur.
 *           * fr : francais
 *           * en : anglais
 *       Si la langue n'est pas renseignee, le francais est pris par
 *       defaut.
 *     - Le cinquieme argument, si il est renseigne, indique que l'on
 *       doit revenir en haut de page, en cas d'erreur dans le
 *       formulaire.
 *       Ceci est surtout necessaire dans le cas ou l'affichage des
 *       erreurs se fait dans un DIV qui s'affiche en haut de page et
 *       que l'on ne se trouve pas en haut de la page au moment de la
 *       validation.
 *     - Le sixieme argument indique si il faut appliquer un trim() aux
 *       champs testes, pour supprimer les espaces en debut et fin de
 *       chaine.
 *     - Le reste des arguments fonctionne par groupe de 3
 *           Le 1er est le nom du champ a verifier dans le FORM,
 *           Le 2eme est l'intitule voulu dans le msg d'erreur si il y
 *           en a un,
 *           Le 3eme contient le type de test a faire :
 *               Multi : verifie qu'au moins un choix est fait dans un
 *                       SELECT MULTIPLE,
 *               Checkbox ou Radio : verifie qu'au moins un choix est
 *                                   fait sur des checkbox de meme nom,
 *               Checkbox_Confirmation : verifie que le checkbox est
 *                                       valide,
 *               R : indique que la presence de contenu est obligatoire,
 *               isEmail : contenu doit etre un email,
 *               isFile[ext1,ext2,...] : fichier avec une des extensions
 *                                       fournies,
 *               isNaN : contenu doit etre numerique,
 *               inRangeX:Y : indique un contenu numerique se trouvant
 *                            entre X et Y.
 *           Le test R peut etre associe aux tests isEmail et isNAN en
 *           le placant au debut pour indiquer, en plus, que le contenu
 *           est obligatoire.
 */
function VerificationFormulaire()
{
	var cpt_args, pos, intitule_champ, le_test, range_min, range_max, errors = '', args = VerificationFormulaire.arguments;

	var form_valide = 0;
	var monForm = null;

	var submit_form = args[1];

	var conteneurMessage = null;
	var conteneur_id = '';
	var affiche_conteneur = 0;
	var errors_html = '';

	var langue = args[3];  // Langue du message d'erreur.
	if (typeof(langue) == 'undefined' || langue == '') langue = 'fr';

	var go_top = args[4];

	var do_trim = args[5];

	if (args[2])
	{
		if (typeof(args[2]) == 'object' && args[2] && args[2].nodeType == '1' && (args[2].nodeName == 'DIV' || args[2].nodeName == 'P'))
		{
			// Le conteneur de message est un objet.
			var affiche_conteneur = 1;
			conteneurMessage = args[2];
			conteneur_id = conteneurMessage.id;
		}
		else if (typeof(args[2]) == 'string' && args[2])
		{
			// On a l'id ou le nom du conteneur de message.
			if (conteneurMessage = MM_findObj(args[2]))
			{
				if (conteneurMessage.nodeType == '1' && conteneurMessage.nodeName == 'DIV')
				{
					var affiche_conteneur = 1;
					conteneur_id = conteneurMessage.id;
				}
			}
		}
	}

	if (typeof(args[0]) == 'object' && args[0] && args[0].nodeType == '1' && args[0].nodeName == 'FORM')
	{
		// Le FORM est fourni a ete fourni en tant qu'objet.
		monForm = args[0];
		form_valide = 1;
	}
	else if (typeof(args[0]) == 'string' && args[0])
	{
		// Le FORM a ete fourni par son nom ou son ID.
		if (monForm = MM_findObj(args[0]))
		{
			if (monForm.nodeType == '1' && monForm.nodeName == 'FORM')
			{
				form_valide = 1;
			}
		}
	}

	if (form_valide == '1')
	{
		var nameForm = monForm.name;  //  Nom du formulaire a soumettre.

		for (cpt_args = 6 ; cpt_args < (args.length-2) ; cpt_args += 3)
		{
			// test a effectuer.
			le_test = args[cpt_args+2];

			champ = monForm.elements[args[cpt_args]];
			if (champ)
			{
				// Intitule du message d'erreur pour le champ.
				if (args[cpt_args+1] != '')
				{
					intitule_champ = args[cpt_args+1];
				}
				else
				{
					intitule_champ = champ.name;
				}

				if (le_test == 'Multi')
				{
					var nb_select = 0;
					for (cpt = 0 ; cpt < champ.options.length ; cpt++)
					{
						if (champ.options[cpt].selected)
						{
							nb_select++;
						}
					}
					if (!nb_select)
					{
						if (langue == 'en')
						{
							errors += '- ' + intitule_champ + ' is needed.\n';
							errors_html += '<li>' + intitule_champ + ' is needed</li>';
						}
						else
						{
							errors += '- ' + intitule_champ + ' est nécessaire.\n';
							errors_html += '<li>' + intitule_champ + ' est n&eacute;cessaire</li>';
						}
					}
				}
				else if (le_test == 'Checkbox' || le_test == 'Radio')
				{
					var nb_select = 0;
					// Si il n'y a qu'un seul Checkbox ou Radio la variable length n'est pas
					// defini, on fait donc un test direct au lieu de faire une boucle qui
					// aboutira automatiquement sur le message d'erreur champ[0] n'existant pas.
					if (!champ.length)
					{
						if (champ.checked == true)
						{
							nb_select++;
						}
					}
					else
					{
						for (cpt = 0 ; cpt < champ.length ; cpt++)
						{
							if (champ[cpt].checked == true)
							{
								nb_select++;
							}
						}
					}
					if (!nb_select)
					{
						if (langue == 'en')
						{
							errors += '- ' + intitule_champ + ' is needed.\n';
							errors_html += '<li>' + intitule_champ + ' is needed</li>';
						}
						else
						{
							errors += '- ' + intitule_champ + ' est nécessaire.\n';
							errors_html += '<li>' + intitule_champ + ' est n&eacute;cessaire</li>';
						}
					}
				}
				else if (le_test == 'Checkbox_Confirmation')
				{
					if (champ.checked == false)
					{
						if (langue == 'en')
						{
							errors += '- you must validate ' + intitule_champ + '.\n';
							errors_html += '<li>you must validate ' + intitule_champ + '</li>';
						}
						else
						{
							errors += '- vous devez confirmer ' + intitule_champ + '.\n';
							errors_html += '<li>vous devez confirmer ' + intitule_champ + '</li>';
						}
					}
				}
				else
				{
					if ((champ = ((do_trim == 1 || do_trim == true) ? champ.value.trim() : champ.value)) != "")
					{
						if (le_test.indexOf('isEmail') != -1)
						{
							if (!champ.match("^[a-zA-Z0-9]+([\\.\\-_]?[a-zA-Z0-9]+)*@[a-zA-Z0-9]+([_\\-\\.]?[a-zA-Z0-9]+)*\\.[a-zA-Z]{2,6}$"))
							{
								if (langue == 'en')
								{
									errors += '- ' + intitule_champ + ' is not valid.\n';
									errors_html += '<li>' + intitule_champ + ' is not valid</li>';
								}
								else
								{
									errors += '- ' + intitule_champ + ' n\'est pas valide.\n';
									errors_html += '<li>' + intitule_champ + ' n\'est pas valide</li>';
								}
							}
						}
						else if (le_test.indexOf('isFile') != -1)
						{
							// Positions des crochets ouvrant et fermant.
							var posCrochOpen = le_test.indexOf('[');
							var posCrochClose = le_test.indexOf(']');

							// Recuperation des extensions acceptees.
							var liste_extension = le_test.substring(posCrochOpen+1, posCrochClose);

							var buffer_tab_extension = liste_extension.split(',');
							var buffer_extension = '';
							var liste_extension_test = '';
							var liste_extension_msg = '';
							for (cpt_ext = 0 ; cpt_ext < buffer_tab_extension.length ; cpt_ext++)
							{
								buffer_extension = buffer_tab_extension[cpt_ext];
								buffer_extension = buffer_extension.trim();
								buffer_extension = buffer_extension.toLowerCase();
								// Construction de la liste d'extension servant au test.
								liste_extension_test += ',' + buffer_extension + ',';
								// Construction de la liste d'extension servant au message.
								liste_extension_msg += buffer_extension + ' - ';
							}
							liste_extension_msg = liste_extension_msg.substring(0, liste_extension_msg.length - 3);

							var posExtFile = champ.lastIndexOf('.');
							var extension_champ = champ.substring(posExtFile+1).toLowerCase();
							if(liste_extension_test.indexOf(',' + extension_champ + ',') == -1)
							{
								if (langue == 'en')
								{
									errors += '- ' + intitule_champ + ' must have one of the following extensions : ' + liste_extension_msg + '.\n';
									errors_html += '<li>' + intitule_champ + ' must have one of the following extensions : ' + liste_extension_msg + '.</li>';
								}
								else
								{
									errors+='- ' + intitule_champ + ' doit avoir une des extensions suivantes : ' + liste_extension_msg + '.\n';
									errors_html += '<li>' + intitule_champ + ' doit avoir une des extensions suivantes : ' + liste_extension_msg + '.</li>';
								}
							}
						}
						else if (le_test != 'R')
						{
							if (isNaN(champ))
							{
								if (langue == 'en')
								{
									errors += '- ' + intitule_champ + ' must contain a number.\n';
									errors_html += '<li>' + intitule_champ + ' must contain a number.</li>';
								}
								else
								{
									errors+='- ' + intitule_champ + ' doit contenir un nombre.\n';
									errors_html += '<li>' + intitule_champ + ' doit contenir un nombre.</li>';
								}
							}

							if (le_test.indexOf('inRange') != -1)
							{
								pos = le_test.indexOf(':');
								// Recuperation du range mini.
								if (le_test.charAt(0) == 'R')
								{
									range_min = le_test.substring(8, pos);
								}
								else
								{
									range_min = le_test.substring(7, pos);
								}
								// Recuperation du range max.
								range_max = le_test.substring(pos + 1);
								// On fait une operation arithmetique pour etre sur
								// que l'on test un integer et non une string.
								champ = champ - 0;
								if (champ < range_min || range_max < champ)
								{
									if (langue == 'en')
									{
										errors += '- ' + intitule_champ + ' must contain a number between ' + range_min + ' and ' + range_max + '.\n';
										errors_html += '<li>' + intitule_champ + ' must contain a number between ' + range_min + ' and ' + range_max + '.</li>';
									}
									else
									{
										errors += '- ' + intitule_champ + ' doit contenir un nombre entre ' + range_min + ' et ' + range_max + '.\n';
										errors_html += '<li>' + intitule_champ + ' doit contenir un nombre entre ' + range_min + ' et ' + range_max + '.</li>';
									}
								}
							}
						}
					}
					else if (le_test.charAt(0) == 'R')
					{
						if (langue == 'en')
						{
							errors += '- ' + intitule_champ + ' is needed.\n';
							errors_html += '<li>' + intitule_champ + ' is needed</li>';
						}
						else
						{
							errors += '- ' + intitule_champ + ' est nécessaire.\n';
							errors_html += '<li>' + intitule_champ + ' est n&eacute;cessaire</li>';
						}
					}
				}
			}
			else
			{
				if (langue == 'en')
				{
					errors = "CAUTION : " + args[cpt_args] + " is not an element of the form.\n" + errors;
					errors_html = "<strong>CAUTION : &quot;" + args[cpt_args] + "&quot; is not an element of the form.</strong><br /><br />" + errors_html;
				}
				else
				{
					errors = "ATTENTION : " + args[cpt_args] + " n'est pas un élément du formulaire.\n" + errors;
					errors_html = "<strong>ATTENTION : &quot;" + args[cpt_args] + "&quot; n'est pas un &eacute;l&eacute;ment du formulaire.</strong><br /><br />" + errors_html;
				}
			}
		}

		if (errors)
		{
			// Des erreurs ont ete trouvees.
			if (langue == 'en')
			{
				errors = 'Some informations are missing or erroneous :\n\n' + errors;
				errors_html = 'Some informations are missing or erroneous :<br /><ul>' + errors_html + '</ul>';
			}
			else
			{
				errors = 'Des informations sont manquantes ou erronées :\n\n' + errors;
				errors_html = 'Des informations sont manquantes ou erron&eacute;es :<br /><ul>' + errors_html + '</ul>';
			}
		}
	}
	/*else
	{
		// Pas de formulaire trouve.
		if (langue == 'en')
		{
			errors = 'CAUTION : The form to be checked does not exist.\n' + errors;
			errors_html = '<strong>CAUTION : The form to be checked does not exist.</strong><br />' + errors_html;
		}
		else
		{
			errors = "ATTENTION : Le formulaire à vérifier n'existe pas.\n" + errors;
			errors_html = "<strong>ATTENTION : Le formulaire &agrave; v&eacute;rifier n'existe pas.</strong><br />" + errors_html;
		}
	}*/

	if (errors)
	{
		if (affiche_conteneur)
		{
			conteneurMessage.innerHTML = '';
			conteneurMessage.innerHTML += errors_html;

			// Preparation du contenu onclick du lien OK du conteneur.
			var conteneur_onclick = '';
			if (conteneurMessage.style.display == 'none')
			{
				conteneur_onclick += "document.getElementById('" + conteneur_id + "').style.display='none';";
			}
			if (conteneurMessage.style.visibility == 'hidden')
			{
				conteneur_onclick += "document.getElementById('" + conteneur_id + "').style.visibility='hidden';";
			}

			// On a un contenu pour le onclick, on peut donc afficher le lien OK.
			if (conteneur_onclick)
			{
				conteneurMessage.innerHTML += '<br /><a href="#" onClick="' + conteneur_onclick + 'return false;">Ok</a><br />';
			}

			// Si le conteneur n'est pas visible on l'affiche.
			if (conteneurMessage.style.display == 'none')
			{
				conteneurMessage.style.display = 'block';
			}
			if (conteneurMessage.style.visibility == 'hidden')
			{
				conteneurMessage.style.visibility = 'visible';
			}
		}
		else
		{
			alert(errors);
		}
		if (go_top == '1' || go_top == true)
		{
			document.location.href="#";
		}
		return false;
	}
	else
	{
		if (submit_form == '1')
		{
			monForm.submit();
		}
		return true;
	}
	return false;
}