	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 : 3.0.0.0_bdoc
	 * Verifie les champs d"un FORM qui lui sont passe en argument.
	 * Version speciale Business Document :
	 * 	- Le mot "OK" se trouvant dans le layer et en majuscule.
	 * 	- "requis(e)" est remplace par "nécessaire".
	 * 	- lors de l'affichage des erreurs en version layer, on cache le layer
	 * 	  courant pour éviter les pb d'affichage sous IE.
	 *
	 * Voici le schema d"appel de cette fonction :
	 * 	VerificationFormulaire("Nom_DIV", "LANGUE", "Nom_FORM", "Nom_Champs1","Intitule_msg_erreur1","Type_Test", "Nom_Champs2","Intitule_msg_erreur2","Type_Test", ...)
	 * 	- Le premier argument si il est renseigne indique que le message d'erreur, si il y en a un,
	 * 	  doit s'afficher dans le layer dont le nom a ete fourni via cet argument.
	 * 	  Apres l'affichage du layer, on demande au document de revenir en haut pour permettre a
	 * 	  l'utilisateur de voir le layer si on se trouve dans une zone ou celui-ci n'est pas visible.
	 *	- Le deuxieme 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 troisieme argument passe est celui du nom du formulaire que l on va traiter.
	 * 	  Son but est simple, si il est vide et qu il n y a pas d erreur dans les champs
	 * 	  verifie, la fonction renvoit un TRUE. Par contre si le nom du formulaire est fourni
	 * 	  la fonction le submitera dans le cas ou elle ne rencontre pas d erreur.
	 * 	- Le reste des arguments fonctionne par groupe de 3
	 * 		Le 1er est le nom du champs 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 : verifie qu'au moins un choix est fait sur des checkbox de meme nom
	 * 			R : indique que la presence de contenu est obligatoire
	 * 			isEmail : contenu doit etre un email
	 * 			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 i, p, q, nm, test, num, min, max, errors='', args=VerificationFormulaire.arguments ;
		
		if (args[0])
		{
			var DivName = args[0]; // Nom du layer.
			if (MM_findObj(DivName))
			{
				var AfficheLayer = 1;
			}
			var errors_html = '';
		}
		
		var Langue = args[1];  // Langue du message d'erreur.
		if (Langue == '') Langue = 'fr';
		var Name = args[2];  //  Nom du formulaire a soumettre.
		for (i=3 ; i<(args.length-2) ; i+=3)
		{
			test=args[i+2] ;
			val=MM_findObj(args[i]) ;
			if (val)
			{
				// Intitule du message d'erreur pour le champ.
				if (args[i+1] != '')
				{
					nm = args[i+1] ;
				}
				else
				{
					nm=val.name ;
				}

				if (test == 'Multi')
				{
					var nb_select = 0;
					for (cpt = 0 ; cpt < val.options.length ; cpt++)
					{
						if (val.options[cpt].selected)
						{
							nb_select++;
						}
					}
					if (!nb_select)
					{
						if (Langue == 'fr')
						{
							errors += '- '+nm+' est nécessaire).\n';
							errors_html += '<li>'+nm+' est n&eacute;cessaire</li>';
						}
						else if (Langue == 'en')
						{
							errors += '- '+nm+' is needed.\n';
							errors_html += '<li>'+nm+' is needed</li>';
						}
					}
				}
				else if (test == 'Checkbox')
				{
					var nb_select = 0;
					// Si il n'y a qu'un seul Checkbox 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 val[0] n'existant pas.
					if (!val.length)
					{
						if (val.checked == true)
						{
							nb_select++;
						}
					}
					else
					{
						for (cpt = 0 ; cpt < val.length ; cpt++)
						{
							if (val[cpt].checked == true)
							{
								nb_select++;
							}
						}
					}
					if (!nb_select)
					{
						if (Langue == 'fr')
						{
							errors += '- '+nm+' est nécessaire.\n';
							errors_html += '<li>'+nm+' est n&eacute;cessaire</li>';
						}
						else if (Langue == 'en')
						{
							errors += '- '+nm+' is needed.\n';
							errors_html += '<li>'+nm+' is needed</li>';
						}
					}
				}
				else
				{
					if ((val=val.value) != "")
					{
						if (test.indexOf('isEmail') != -1)
						{
							Aro = val.indexOf('@') ;
							Point = val.lastIndexOf('.') ;
							Taille = val.length ;
							if (Taille < 6 || Aro < 1 || Aro == Taille || Aro > Point || (Aro + 1) == Point || (Point + 1) == Taille || (Point + 2) == Taille)
							{
								if (Langue == 'fr')
								{
									errors += '- ' + nm + ' n\'est pas valide.\n' ;
									errors_html += '<li>'+nm+' n\'est pas valide</li>';
								}
								else if (Langue == 'en')
								{
									errors += '- ' + nm + ' is not valid.\n' ;
									errors_html += '<li>'+nm+' is not valid</li>';
								}
							}
						}
						else if (test!='R')
						{
							if (isNaN(val))
							{
								if (Langue == 'fr')
								{
									errors+='- '+nm+' doit contenir un nombre.\n' ;
									errors_html += '<li>'+nm+' doit contenir un nombre.</li>';
								}
								else if (Langue == 'en')
								{
									errors+='- '+nm+' must contain a number.\n' ;
									errors_html += '<li>'+nm+' must contain a number.</li>';
								}
							}
							if (test.indexOf('inRange') != -1)
							{
								p=test.indexOf(':') ;
								min=test.substring(8,p) ;
								max=test.substring(p+1) ;
								if (val<min || max<val)
								{
									if (Langue == 'fr')
									{
										errors+='- '+nm+' doit contenir un nombre entre '+min+' et '+max+'.\n';
										errors_html += '<li>'+nm+' doit contenir un nombre entre '+min+' et '+max+'.</li>';
									}
									else if (Langue == 'en')
									{
										errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
										errors_html += '<li>'+nm+' must contain a number between '+min+' and '+max+'.</li>';
									}
								}
							}
						}
					}
					else if (test.charAt(0) == 'R')
					{
						if (Langue == 'fr')
						{
							errors += '- '+nm+' est nécessaire.\n';
							errors_html += '<li>'+nm+' est n&eacute;cessaire</li>';
						}
						else if (Langue == 'en')
						{
							errors += '- '+nm+' is needed.\n';
							errors_html += '<li>'+nm+' is needed</li>';
						}
					}
				}
			}
		}
		if (errors)
		{
			if (AfficheLayer)
			{
			
				// Ajout pas du tout propre pour eviter le pb sous IE du div se mettant sous les elements
				// du formulaire dans la partie gerant les formulaires dynamiques en front.
				var show_formulaire = '';
				if (val2 = document.getElementById("contenu_formulaire"))
				{
					//show_formulaire = 'val2.style.visibility=\'visible\';';
					show_formulaire = 'val2.style.display=\'block\';';
					//val2.style.visibility = 'hidden';
					val2.style.display = 'none';
				}

				var val = MM_findObj(DivName);
				val.innerHTML = '';
				if (Langue == 'fr')
				{
					val.innerHTML += '<p>Des informations sont manquantes ou erron&eacute;es :</p>';
				}
				else if (Langue == 'en')
				{
					val.innerHTML += '<p>Some informations are missing or erroneous :</p>';
				}
				val.innerHTML += '<ul>';
				val.innerHTML += errors_html;
				val.innerHTML += '</ul>';
				//val.innerHTML += '<p class="javascript_ok"><a href="#" onClick="document.getElementById(\''+DivName+'\').style.visibility=\'hidden\';'+show_formulaire+'return false;">OK</a></p>';
				val.innerHTML += '<p class="javascript_ok"><a href="#" onClick="document.getElementById(\''+DivName+'\').style.display=\'none\';'+show_formulaire+'return false;">OK</a></p>';
				//val.style.visibility = 'visible';
				val.style.display = 'block';
				val.style.visibility = 'visible';
				document.location.href="#";
			}
			else
			{
				if (Langue == 'fr')
				{
					alert('Des informations sont manquantes ou erronées :\n\n'+errors) ;
				}
				else if (Langue == 'en')
				{
					alert('Some informations are missing or erroneous :\n\n'+errors) ;
				}
			}
			return false;
		}
		else
		{
			if (Name != '')
			{
				document.forms[Name].submit() ;
			}
			return true;
		}
		document.MM_returnValue = (errors == '') ;
		return false;
	}

	function pop(url,w,h,resizable,scrollbars)
	{
		//w=1000;
		//h=563;
		objFCT_popup=window.open(url,'','resizable='+resizable+',scrollbars='+scrollbars+',menubar=no,width='+w+',height='+h);
		intFCT_x=(screen.width-w)/2;
		intFCT_y=(screen.height-h)/2;
		objFCT_popup.moveTo(intFCT_x,intFCT_y);
		return false;
	}

	/*
	 * Demande de confirmation d'une action.
	 *
	 * @string DivName : nom du layer.
	 * @string FormName : nom du formulaire.
	 * @string Action : action a faire.
	 * @string Langue : langue d'affichage (partie layer).
	 * @string Msg : Message.
	 * @string DivName2 : pour palier le probleme d'affichage sous IE, on peut mettre le reste
	 * 			de la page dans un DIV qui est cache. DivName2, si il est
	 * 			renseigne contient le nom de ce div. Il sera cache au moment de
	 * 			l'affichage de DivName et rendu visible en cas d'annulation de
	 * 			l'action.
	 * @return bool.
	 * @author : Baron.
	 */
	function Confirmation(DivName, FormName, Act, Langue, Msg, DivName2)
	{
		if (Act == '')
		{
			ActionAct = 0;
		}
		else
		{
			ActionAct = 1;
		}

		if (Langue == '') Langue = 'fr';
		if (Langue == 'fr')
		{
			var Oui = 'Oui';
			var Non = 'Non';
		}
		else if (Langue == 'en')
		{
			var Oui = 'Yes';
			var Non = 'No';
		}

		if (document.getElementById(DivName2))
		{
			Affiche = "document.getElementById('"+DivName2+"').style.visibility='visible';";
			//Affiche = "document.getElementById('"+DivName2+"').style.display='block';";
		}
		else
		{
			Affiche = '';
		}

		if (div = document.getElementById(DivName))
		{
			div.innerHTML  = '<p>' + Msg + '</p>';
			//div.innerHTML += '<p><a href="#" onClick="document.getElementById(\''+DivName+'\').style.visibility=\'hidden\';if ('+ActionAct+'){document.forms[\''+FormName+'\'].act.value=\''+Act+'\';};document.forms[\''+FormName+'\'].submit();return true;">'+Oui+'</a>&nbsp;&nbsp;-&nbsp;&nbsp;<a href="#" onClick="document.getElementById(\''+DivName+'\').style.visibility=\'hidden\';'+Affiche+'return false;">'+Non+'</a></p>';
			div.innerHTML += '<p><a href="#" onClick="document.getElementById(\''+DivName+'\').style.display=\'none\';if ('+ActionAct+'){document.forms[\''+FormName+'\'].act.value=\''+Act+'\';};document.forms[\''+FormName+'\'].submit();return true;">'+Oui+'</a>&nbsp;&nbsp;-&nbsp;&nbsp;<a href="#" onClick="document.getElementById(\''+DivName+'\').style.display=\'none\';'+Affiche+'return false;">'+Non+'</a></p>';
			document.location.href = "#";
			if (DivName2)
			{
				//document.getElementById(DivName2).style.visibility = 'hidden';
				document.getElementById(DivName2).style.display = 'none';
			}
			div.style.display = 'block';
			div.style.visibility = 'visible';
			return false;
		}
		else
		{
			while (Msg.search(/<br>/) != -1)
			{
				Msg = Msg.replace("<br>", "\n");
			}

			if (confirm(Msg))
			{
				return true;
			}
			else
			{
				return false;
			}
		}
	}

	/*
	 * Active ou desactive l'affichage d'un div en changeant l'image du
	 * bouton permettant l'operation.
	 *
	 * @string DivName : id du div a traiter
	 * @string ButtonName : id de l'image servant de bouton.
	 * @return void
	 * @author : Baron
	 */
	function change_display(DivName, ButtonName)
	{
		Bloc = document.getElementById(DivName);
		Bouton = document.getElementById(ButtonName);

		if (Bloc.style.display == 'none')
		{
			Bloc.style.display = 'block';
			Bouton.src = '/img/moins.jpg';
		}
		else
		{
			Bloc.style.display = 'none';
			Bouton.src = '/img/plus.jpg';
		}
	}

