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

