// JavaScript WebTool


/* ========================================================================================
	::	Variables globales
======================================================================================== */

	/* 	- VARIABLES_001 -------------------------------------------------------------------
	|	VARIABLES UTILISEES PAR LES FONCTIONS
	|		:: nomFonction()
	------------------------------------------------------------------------------------ */
	var menuActif	= "";
	var sTexte		= "";
	var nav			= "";


	// Détection du navigateur
	switch(window.navigator.appName){
		case "Netscape":
			switch(window.navigator.vendor){
				case "Firefox": nav = "Firefox" ; break; // FireFox
				case "Netscape": // Netscape
				default: nav = "Netscape"; break;
			}
		break;
		case "Microsoft Internet Explorer": // Internet Explorer
		default: nav = "IE"; break;
	}


	var ns4 = (document.layers)?true:false;
	var ie4 = (document.all)?true:false;
	var dom = (document.getElementById)?true:false; // NS 7.02, Mozilla FireFox, Mozilla, IE6

/* fin Variables globales=============================================================================== */










/* ========================================================================================
	::	Scripts Généraux
======================================================================================== */

	/*
		oError = {
			"oForm":,
			"iError":,
			"aFocus":
		}
	*/
	function formErrorValidation(oError){

		var sError		 = "";							// construction du message d'erreur par concaténation successives
		var f			 = oError.oForm;				// référence au formulaire à analyser
		var iError		 = oError.iError;				// nombre d'erreurs

		if(iError != 0) {
			sError += "--------------------------------------------------------\n";
			sError += "*     Vous avez "+iError+" erreur"+(iError > 1 ? 's':'')+" à corriger :     *\n";
			sError += "--------------------------------------------------------\n";
			sError += "                                                    \n";
			sError += oError.sErreur;
			alert(sError);
			if(oError.aFocus[0]!=null) eval("f." + oError.aFocus[0]).focus();
			return false;
		}else{
			return true;
		}
	}


	/* 	- changeClassName() -------------------------------------------------------
	|	Description :
	|		-	Modifier la classe d'un objet
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : objId		=>	identifiant de l'objet sur lequel agir
	|		- argument 1 (string)	 : newClassName	=>	nom de la nouvelle classe de style à appliquer
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function changeClassName(objId,newClassName){

		var o = getObjet(objId);
		if(o){
			o.setAttribute("class",newClassName);
			o.setAttribute("className",newClassName);
		}

	}
	// fin Fonction changeClassName(objId,newClassName)--------------------------------------



	function changeMouvementStock(sMouvement,iIdfCommandeFournisseur,iIdfCommande){

		var oLigne			 = getObjet("TR_SELECT");
		var xhr_object		 = getHTTPObject();
		var sResponse		 = "";
		var bMode			 = false; // mode synchrone
		var sMethod			 = "POST";
		var sAction			 = "ajax/ajax_mouvements_stocks.php";
		var sData 			 = "choix="+escape(sMouvement)+"&idfCommandeFournisseur="+escape(iIdfCommandeFournisseur)+"&idfCommande="+escape(iIdfCommande);

		// Test d'existence de l'objet XmlHttpRequest
		if (!xhr_object) return;

		// Ouverture de la connexion au fichier avec la méthode choisie
		xhr_object.open(sMethod, sAction, bMode);

		// Quand les données sont traitées
		// on affiche la réponse
		xhr_object.onreadystatechange = function () {
			if(xhr_object.readyState == 4) {
				sResponse = xhr_object.responseText;
				oLigne.cells[0].innerHTML = "<span class=\"obligatoire\">*</span>"+(sMouvement=="ENTREE" ? "Bon de Commande Fournisseur":"Bon de Commande Client");
				oLigne.cells[1].innerHTML = sResponse;
			}
		};

		// Ajout des en-têtes nécessaires à la requête en POST
		if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

		// Envoi des données
		xhr_object.send(sData);

	}





	/**
	 *
	 * @access public
	 * @return void
	 **/
	function getAdresseOptionList(oForm){

		// FACTURATION
		var f						 = oForm;
		var iIdfClient				 = f.NBC_IDF_CLIENT.value;
		var iIdfAdresseFacturation	 = f.NBC_IDF_ADRESSE_FACTURATION_OLD.value;
		var iIdfAdresseLivraison	 = f.NBC_IDF_ADRESSE_LIVRAISON_OLD.value;
		var oLigne					 = getObjet("oTDFacturation");
		var xhr_object				 = getHTTPObject();
		var sResponse				 = "";
		var bMode					 = false; // mode synchrone
		var sMethod					 = "POST";
		var sAction					 = "ajax/ajax_GetAdresseOptionlist.php";
		var sData 					 = "idf_client="+escape(iIdfClient);
		sData 						+= "&sTypeAdresse="+escape("Facturation");
		sData 						+= "&iIdfAdresseFacturation="+escape(iIdfAdresseFacturation);


		// Test d'existence de l'objet XmlHttpRequest
		if (!xhr_object) return;

		// Ouverture de la connexion au fichier avec la méthode choisie
		xhr_object.open(sMethod, sAction, bMode);

		// Quand les données sont traitées
		// on affiche la réponse
		xhr_object.onreadystatechange = function () {
			if(xhr_object.readyState == 4) {
				sResponse = xhr_object.responseText;
				oLigne.innerHTML = sResponse;
				getAdresse(iIdfAdresseFacturation,"Facturation");
			}
		};

		// Ajout des en-têtes nécessaires à la requête en POST
		if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

		// Envoi des données
		xhr_object.send(sData);


		// LIVRAISON
		var oLigne_2		 = getObjet("oTDLivraison");
		var xhr_object_2	 = getHTTPObject();
		var sData_2			 = "idf_client="+escape(iIdfClient);
		sData_2				+= "&sTypeAdresse="+escape("Livraison");
		sData_2				+= "&iIdfAdresseLivraison="+escape(iIdfAdresseLivraison);

		// Test d'existence de l'objet XmlHttpRequest
		if (!xhr_object_2) return;

		// Ouverture de la connexion au fichier avec la méthode choisie
		xhr_object_2.open(sMethod, sAction, bMode);

		// Quand les données sont traitées
		// on affiche la réponse
		xhr_object_2.onreadystatechange = function () {
			if(xhr_object_2.readyState == 4) {
				sResponse = xhr_object_2.responseText;
				oLigne_2.innerHTML = sResponse;
				getAdresse(iIdfAdresseLivraison,"Livraison");
			}
		};

		// Ajout des en-têtes nécessaires à la requête en POST
		if(sMethod == "POST") xhr_object_2.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

		// Envoi des données
		xhr_object_2.send(sData_2);



	}













	/**
	 *
	 * @access public
	 * @return void
	 **/
	function getAdresse(iIdfAdresse,sTypeAdresse){

		var oDiv			 = getObjet("oDIV"+sTypeAdresse);
		var xhr_object		 = getHTTPObject();
		var sResponse		 = "";
		var bMode			 = false; // mode synchrone
		var sMethod			 = "POST";
		var sAction			 = "ajax/ajax_GetAdresse.php";
		var sData 			 = "idf_adresse="+escape(iIdfAdresse);
		sData 				+= "&sTypeAdresse="+escape(sTypeAdresse);

		// Test d'existence de l'objet XmlHttpRequest
		if (!xhr_object) return;

		// Ouverture de la connexion au fichier avec la méthode choisie
		xhr_object.open(sMethod, sAction, bMode);

		// Quand les données sont traitées
		// on affiche la réponse
		xhr_object.onreadystatechange = function () {
			if(xhr_object.readyState == 4) {
				sResponse = xhr_object.responseText;
				if(oDiv) oDiv.innerHTML = sResponse;
			}
		};

		// Ajout des en-têtes nécessaires à la requête en POST
		if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

		// Envoi des données
		xhr_object.send(sData);

	}



	function manageClient(sAction,oForm){

		switch(sAction){

			case "create" :
				var f					 = oForm;
				var sFile				 = "popup/popup_ManageClient.php";
				var oW					 = window.open(sFile,"POPUP_CLIENT","width=800px, height=420px");
				oW.focus();
			break;

			case "update" :
				var iIdfClient			 = arguments[2];
				var sFile				 = "popup/popup_ManageClient.php?idf_client="+iIdfClient+"&choix=update";
				var oW					 = window.open(sFile,"POPUP_CLIENT","width=800px, height=420px");
				oW.focus();
			break;

		}

	}






	function manageProduit(sAction,oForm){

		switch(sAction){

			case "create" :
				var f					 = oForm;
				var sFile				 = "popup_ManageProduit.php";
				var oW					 = window.open(sFile,"POPUP_PRODUIT","width=800px, height=560px");
				oW.focus();
			break;

		}

	}







	function manageAdresse(sAction,oForm){

		switch(sAction){

			case "create" :
				var f					 = oForm;
				var iIdfClient			 = f.NBC_IDF_CLIENT.value;
				var sFile				 = "popup/popup_ManageAdresse.php?idf_client="+iIdfClient+ (iIdfClient ? "&choix=createByClient" : "");
				var oW					 = window.open(sFile,"POPUP_ADRESSE","width=800px, height=420px");
				oW.focus();
			break;

		}

	}






	/**
	 *
	 * @access public
	 * @return void
	 **/
	function manageLigneCommande(sAction,oForm){

		switch(sAction){

			case "create" :
				var f					 = oForm;
				var iIdfBonCommande		 = f.NBC_IDF_BON_COMMANDE.value;
				var sFile				 = "popup/popup_ManageLigneCommande.php?idf_bon_commande="+iIdfBonCommande;
				var oW					 = window.open(sFile,"POPUP_LIGNE_COMMANDE","width=800px, height=340px");
				oW.focus();
			break;

			case "update" :
				var iIdfLigneCommande	 = arguments[2];
				var sFile				 = "popup/popup_ManageLigneCommande.php?idf_ligne_commande="+iIdfLigneCommande+"&choix=update";
				var oW					 = window.open(sFile,"POPUP_LIGNE_COMMANDE","width=800px, height=340px");
				oW.focus();
			break;

			case "delete" :

				var aIdf				 = getCbCheckedValue("suppression_lignecommande[]");
				var iNb					 = aIdf.length;
				if(iNb == 0){
					alert("Veuillez sélectionner au moins un enregistrement avant de cliquer sur le bouton Supprimer");
					return;
				}

				var sIdfLigneCommande	 = "";
				for(var i=0;i<iNb;i++) sIdfLigneCommande += (sIdfLigneCommande ? "|" : "") + aIdf[i];

				var xhr_object			 = getHTTPObject();
				var sResponse			 = "";
				var bMode				 = false; // mode synchrone
				var sMethod				 = "POST";
				var sAction				 = "ajax/ajax_DeleteLigneCommande.php";
				var sData 				 = "sIdfLigneCommande="+escape(sIdfLigneCommande);

				// Test d'existence de l'objet XmlHttpRequest
				if (!xhr_object) return;

				// Ouverture de la connexion au fichier avec la méthode choisie
				xhr_object.open(sMethod, sAction, bMode);

				// Quand les données sont traitées
				// on affiche la réponse
				xhr_object.onreadystatechange = function () {
					if(xhr_object.readyState == 4) {
						sResponse = xhr_object.responseText;
						switch(sResponse){
							case "error": alert("Erreur lors de la suppression du(des) enregistrement(s)"); break;
							case "ok":
							default:
								refreshLigneCommande(oForm);
							break;
						}
					}
				};

				// Ajout des en-têtes nécessaires à la requête en POST
				if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

				// Envoi des données
				xhr_object.send(sData);

			break;
		}

	}



	/**
	 *
	 * @access public
	 * @return void
	 **/
	function reloadBdcOngletList(sChoix){

		var oDiv = getObjet("oDivBdcOngletList");
		if(oDiv){

			var xhr_object			 = getHTTPObject();
			var sResponse			 = "";
			var bMode				 = false; // mode synchrone
			var sMethod				 = "POST";
			var sAction				 = "ajax/ajax_GetBdcOngletList.php";
			var sData 				 = "sChoix="+escape(sChoix);

			// Test d'existence de l'objet XmlHttpRequest
			if (!xhr_object) return;

			// Ouverture de la connexion au fichier avec la méthode choisie
			xhr_object.open(sMethod, sAction, bMode);

			// Quand les données sont traitées
			// on affiche la réponse
			xhr_object.onreadystatechange = function () {
				if(xhr_object.readyState == 4) {
					sResponse = xhr_object.responseText;
					oDiv.innerHTML = sResponse;
				}
			};

			// Ajout des en-têtes nécessaires à la requête en POST
			if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

			// Envoi des données
			xhr_object.send(sData);

		}

	}



	/* 	- changeOngletActif(objId,newClassName) -------------------------------------------------------
	|	Description :
	|		-	Modifier l'onglet actif (navigation multilingue)
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : objId		=>	identifiant de l'objet sur lequel agir
	|		- argument 1 (string)	 : newClassName	=>	nom de la nouvelle classe de style à appliquer
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function changeOngletActif(objId,objName,sModule,ongletId,ongletName,textareaId){

		// Activer / Désactiver l'onglet
		var oOnglet = document.getElementsByTagName("DIV");
        iOnglet = oOnglet.length;
        for(i=0;i<iOnglet;i++){
          if(oOnglet[i].name != ongletName) continue;
          // Afficher l'onglet Actif
          if(oOnglet[i].id.substr(0,ongletId.length) == ongletId){
            changeClassName(oOnglet[i].id,"ongletCenterLong ongletActif");
          // Afficher l'onglet Inactif
          }else{
            changeClassName(oOnglet[i].id,"ongletCenterLong ongletInactif");
          }
        }


		switch(sModule){

	      default:

			var oLine = document.getElementsByTagName("DIV");
	        iLine = oLine.length;
	        for(i=0;i<iLine;i++){
	          if(oLine[i].name != objName) continue;
	          // Afficher l'onglet Actif
	          if(oLine[i].id.substr(0,objId.length) == objId){
	            changeClassName(oLine[i].id,"visible");
	          // Masquer l'onglet Inactif
	          }else{
	            changeClassName(oLine[i].id,"hidden");
	          }
	        }

	      break;

	    }

	}
	// fin Fonction changeOngletActif(objId,newClassName)--------------------------------------














	function changeRestantDu(iIdfCommande,iNewMontant,iOldMontant,sType){

		var oSpan	  		 = getObjet("restantDu");
		var xhr_object		 = getHTTPObject();
		var sResponse		 = "";
		var bMode		     = true; // mode asynchrone
		var sMethod			 = "POST";
		var sAction			 = "ajax/ajax_bons_commandes.php";
		var sData 			 = "type="+escape(sType)+"&idfCommande="+escape(iIdfCommande);

		// Test d'existence de l'objet XmlHttpRequest
		if (!xhr_object) return;

		// Ouverture de la connexion au fichier avec la méthode choisie
		xhr_object.open(sMethod, sAction, bMode);

		// Quand les données sont traitées
		// on affiche la réponse
		xhr_object.onreadystatechange = function () {
			if(xhr_object.readyState == 4) {
				sResponse = xhr_object.responseText;

				iOldMontant = 1 * (isNaN(iOldMontant) ? 0.00 : iOldMontant);
				iNewMontant = 1 * (isNaN(iNewMontant) ? 0.00 : iNewMontant);
				sResponse   = 1 * sResponse;

       			oSpan.innerHTML = (iIdfCommande == "" ? "n/c" : (sResponse + iOldMontant + iNewMontant));
			}
		};

		// Ajout des en-têtes nécessaires à la requête en POST
		if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

		// Envoi des données
		xhr_object.send(sData);

	}







	/* 	- changeUrl() ----------------------------------------------------------
	|	Description :
	|		-	Fonction utilisée pour recharger une nouvelle url et donc changer de page.
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : url	=>	url de la nouvelle page à charger
	|	Fonctions appellées :
	|		- changeClassName()
	|	Pages appellantes :
	|		- prive/groupes_utilisateurs.php
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function changeUrl(url){

		document.location.href = url;

	}
	// fin Fonction changeUrl(url)-------------------------------------------------------




	/**
	 *
	 * @access public
	 * @return void
	 **/
	function formatURL(oObject,sURL){
		if(sURL != ""){
			if(sURL.substring(0,7) != "http://"){
				sURL = "http://" + sURL;
			}
		}
		oObject.value = sURL;
	}


	function setActionForUninstal(oForm,sValue){

		oForm.action = sValue;
		oForm.submit();

	}



	/* 	- cocheCbAttributs() ----------------------------------------------------------
	|	Description :
	|		-	Fonction utilisée pour cocher/décocher toutes les cases à cocher des pouvoirs et spécificétités
	|			des groupes d'utilisateurs.
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : categorie	=>	que doit-on faire avec les cases à cocher ?
	|				:: tous		=> cocher toutes les cases
	|				:: DEFAULT	=> décocher toutes les cases
	|		- argument 1 (string)	 : cbName		=>	nom des cases à cochers déterminant les droits
	|		- argument 2 (string)	 : champName	=>	nom du champ stockant les pouvoirs pour les poster avec le formulaire
	|	Fonctions appellées :
	|		- createUpdateAttributs()
	|	Pages appellantes :
	|		- prive/groupes_utilisateurs.php
	|	Return :
	|		- NULL
	|	Infos :
	|		- Cette fonction coche ou décoche toutes les cases des pouvoirs OU spécificités,
	|		  puis appelle la fonction qui permet de recréer le contenu du champ destiné
	|		  à stocker les pouvoirs OU spécificités.
	------------------------------------------------------------------------------------ */
	function cocheCbAttributs(categorie,cbName,champName){

		var oCb = document.getElementsByName(cbName); // cases à cocher des attributs
		var total = oCb.length;						  // nombre total de cases à cocher

		// on teste chaque case
		for(i=0;i<total;i++){
			// si la la catégorie vaut 'tous' on coche la case
			if(categorie == "tous"){
				oCb[i].checked = true;
			// sinon on la décoche
			}else{
				oCb[i].checked = false;
			}
		}

		// on recré les attributs
		createUpdateAttributs(cbName,champName);

	}
	// fin Fonction cocheCbAttributs(categorie,cbName,champName)----------------------------------






	/* 	- cocheDecocheCb() ----------------------------------------------------------
	|	Description :
	|		-	Coche ou décoche toutes les cases à cocher portant le nom passé en paramètre
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : cbName		=>	nom des cases à cocher sur lesquelles agir
	|		- argument 1 (string)	 : choix		=>	action à réaliser en fonction de la valeur :
	|				:: "coche"	=> cocher toutes les cases
	|				:: DEFAULT	=> décocher toutes les cases
	|	Pages appellantes :
	|		- toutes les pages avec des listes d'enregistrements
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function cocheDecocheCb(cbName,choix){

		var oCb			= document.getElementsByName(cbName); // cases à cocher
		var total		= oCb.length;						  // nombre total de cases à cocher/décocher
		var aCb			= new Array();
		var wasChecked	= false;

		// on teste chaque case
		for(i=0;i<total;i++){

			wasChecked = oCb[i].checked;
			// si la le choix vaut 'coche' on coche la case
			if(choix == "coche"){
				oCb[i].checked = true;
			// sinon on la décoche
			}else{
				oCb[i].checked = false;
			}

			// CAS PARTICULIER : si on s'occupe des agrégats
			if(cbName == "suppression_agregat[]"){
				// si la le choix vaut 'coche'
				if(choix == "coche"){
					// si la case :
					//		- n'a pas encore été traitée
					//	ET	- n'est pas désactivée
					//	ET	- n'était pas déjà cochée
					if(!aCb[oCb[i].value] && !oCb[i].desabled && !wasChecked){
						enableDesableCb(oCb[i].name,oCb[i].id,oCb[i].value);
						aCb[oCb[i].value] = true;
					}
				}else{
					// on active la case
					oCb[i].disabled = false;
				}
			}

		}

	}
	// fin Fonction cocheDecocheCb(cbName,choix)-------------------------------------------





	/* 	- createUpdateAttributs() ----------------------------------------------------------
	|	Description :
	|		-	Création des attributs du groupe d'Utilisateurs en fonction des cases à cocher choisies
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : cbName		=>	nom des cases à cochers déterminant les droits
	|		- argument 1 (string)	 : champName	=>	nom du champ stockant les pouvoirs pour les poster avec le formulaire
	|	Pages appellantes :
	|		- prive/groupes_utilisateurs.php
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function createUpdateAttributs(cbName,champName){

		var coche		 = 0;									 // nombre de Checbox cochées
		var decoche		 = 0; 									 // nombre de Checbox décochées
		var attributs	 = "";									 // attributs de l'administrateur
		var oChamp		 = getObjet(champName); 				 // champ dans lequel on écrit les attributs
		var oCb			 = document.getElementsByName(cbName);	 // cases à cocher des attributs

		// on vide le champ
		oChamp.value = "";

		// nombre total de cases à cocher
		total = oCb.length;

		// on teste chaque case
		for(i=0;i<total;i++){
			// si la case est cochée on la compte cochée
			if(oCb[i].checked){
				coche += 1;
				attributs += oCb[i].value + "|";
			// si la case est cochée on la compte décochée
			}else{
				decoche += 1;
			}
		}

		// si au moins une case est cochée on écris les attributs correspondants
		if(coche > 0){
			oChamp.value = attributs;
		}else{
			oChamp.value = "NULL";
		}

	}
	// fin Fonction createUpdateAttributs(cbName,champName)--------------------------------------



	function cropMyBox(sId){

		var sForcedType = null;
		var iArgs = arguments.length;
		if(iArgs>1) sForcedType = arguments[1];
		var oBox = getObjet(sId);
		if(oBox){
			var sStyle = "";
			if(sForcedType == null){
				sStyle += "height:"+(oBox.style.height == "146px" ? "20px" : "146px")+"; ";
			}else{
				sStyle += "height:"+(sForcedType == "hide" ? "20px" : "146px")+"; ";
			}
			oBox.setAttribute("style",sStyle);
			oBox.style.setAttribute("cssText",sStyle);
		}

	}



	function cropMyBoxes(sId,iStart,iEnd,sType){

		for(var i=iStart; i<iEnd; i++){
			cropMyBox(sId+i,sType);
		}

	}







	/* 	- DeplacerItemDeVers() ----------------------------------------------------------
	|	Description :
	|		-	fonction qui permet de déplacer les items d'une liste de sélection à une autre
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : balise		=>	préfxe du nom de la balise de multisélection
	|		- argument 1 (string)	 : de			=>	suffixe du nom de la balise de multisélection de départ (A VIDER)
	|		- argument 2 (string)	 : vers			=>	suffixe du nom de la balise de multisélection de destination (A REMPLIR)
	|	Pages appellantes :
	|		- prive/groupes_utilisateurs.php
	|		- prive/catalogues.php
	|	Return :
	|		- NULL
	|	Infos :
	|		- Cette fonction est utilisée pour ajouter/enlever des utilisateurs à un groupe d'utilisateurs.
	|		- Cette fonction est utilisée pour ajouter/enlever des familles de produits à un catalogue.
	------------------------------------------------------------------------------------ */
	function DeplacerItemDeVers(balise,de,vers) {

		var depart = balise+"s_"+de+"[]";
		var arrivee = balise+"s_"+vers+"[]";
		var fDepart = document.formCreateUpdate.elements[depart];
		var fArrivee = document.formCreateUpdate.elements[arrivee];

		if (fDepart.options.selectedIndex >= 0) {

			while (fDepart.options.selectedIndex >= 0) {

				indice = fDepart.options.selectedIndex;
				texte  = fDepart.options[indice].text;
				valeur = fDepart.options[indice].value;

				if(valeur != "NULL"){

					fDepart.options[indice] = null;

					var choix = new Option(texte, valeur);
					longueur = fArrivee.options.length;
					fArrivee.options[longueur] = choix;


					if(vers == "selectionnees"){
						fArrivee.options[longueur].selected = true;
					}else{
						fArrivee.options[longueur].selected = false;
					}

				}else{
					fDepart.options[indice].selected = false;
				}

			}

		}else{
			alert("Aucun "+ balise +" sélectionnée !");
		}

	}
	// fin Fonction DeplacerItemDeVers(balise,de,vers)-----------------------------------------------





	/* 	- enableDesableCb() ----------------------------------------------------------
	|	Description :
	|		-	Active ou désactive toutes les cases à cocher portant le nom passé en paramètre
	|			en fonction de la valeur passée elle aussi en paramètre
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : cbName		=>	nom des cases à cocher sur lesquelles agir
	|		- argument 1 (string)	 : cbId			=>	id de la case sur laquelle on a agit pour appeller la fonction
	|		- argument 2 (string)	 : cbValue		=>	valeur de la case à cocher sur laquelle agir
	|	Pages appellantes :
	|		- agregats.php
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function enableDesableCb(cbName,cbId,cbValue){

		var i		= 0;								  // compteur de boucle
		var oCb		= document.getElementsByName(cbName); // cases à cocher
		var oCbUsed	= getObjet(cbId);					  // cases à cocher sur laquelle l'utilisateur a agit
		var total	= oCb.length;						  // nombre total de cases à cocher/décocher
		var choix	= oCbUsed.checked ? "disable" : "enable";
		var debug	= "";

		debug += " - idUsed : " + cbId + "\n";
		debug += " - " + total + " cases à tester\n";
		debug += " - choix : " + choix + "\n";

		// on teste chaque case
		for(i=0;i<total;i++){
			// si la case testée n'est pas celle sur laquelle on a cliqué
			if(oCb[i].id != cbId && oCb[i].value == cbValue){
				// on active la case en fonction du choix
				if(choix == "enable"){
					oCb[i].disabled = false;
					oCb[i].checked  = false;
				// sinon on la désactive
				}else{
					oCb[i].disabled = true;
					oCb[i].checked  = true;
				}
				debug += " - case n°"+i+ (oCb[i].disabled ? " désactivée":" activée") + "\n";
			}
		}
		//alert(debug);

	}
	// fin Fonction enableDesableCb(cbName,choix)-------------------------------------------





	/* 	- formatLibelleBb() ----------------------------------------------------------
	|	Description :
	|		-	Formatter le libellé du champ à créer dans la base de donnée en fonction
	|			d'une expression régulière limitant les caractères autorisés
	|	Pages appellantes :
	|		- prive/champs_articles.php
	|		- prive/champs_produits.php
	|	Return :
	|		- NULL
	|	Infos :
	|		- la fonction utilise le champ de formulaire "NCA_LIBELLE_BD" OU "NCP_LIBELLE_BD" en créant une référence
	|		  absolue. il ne faut donc pas renommer ce champ sinon la fonction ne fonctionnerait plus
	|		  correctement.
	------------------------------------------------------------------------------------ */
	function formatLibelleBb(sChampName){

		var oInput		= getObjet(sChampName);
		var libelle 	= "";
		var code		= event.keyCode;

		/*
		Codes de certaines touches :
		35 END | 36 BEGIN | 37 LEFT | 38 UP | 39 RIGHT | 40 DOWN
		*/

		if(oInput && (code < 35 || code > 40) ){
			libelle = oInput.value.toUpperCase().replace(/[^A-Za-z_0-9]/g,"");
			oInput.value = libelle;
		}

	}
	// fin Fonction formatLibelleBb()-----------------------------------------------





	/* 	- formatChampPrix() ----------------------------------------------------------
	|	Description :
	|		-	Formatter le contenu du champ PAU_HT ou PVU_HT en fonction
	|			d'une expression régulière limitant les caractères autorisés
	|	Pages appellantes :
	|		- prive/produits.php
	|	Return :
	|		- NULL
	|	Infos :
	|		- n/c
	------------------------------------------------------------------------------------ */
	function formatChampPrix(sChampId){

		var oInput			= getObjet(sChampId);
		var libelle 		= "";
		var code			= event.keyCode;
		var oResultat		= getObjet(sChampId + "_RESULTAT");		 // balise span affichant le message de sortie
		var bTest			= false;
		var rControle 		= new RegExp("^[0-9]+([\.,]{1}[0-9]{1,2})?$");
		var posSeparateur	= 0;
		var posFin			= 0;
		var tmpLibelleDebut	= "";
		var tmpLibelleFin	= "";

		/*
		Codes de certaines touches :
		35 END | 36 BEGIN | 37 LEFT | 38 UP | 39 RIGHT | 40 DOWN
		*/

		if(oInput && (code < 35 || code > 40) ){

			libelle 		= oInput.value.replace(/[^0-9\.,]/g,"");
			posFin  		= libelle.length;
			// on recherche la position du séparateur : ',' OU '.'
			posSeparateur	= (libelle.indexOf(",") != -1 ? libelle.indexOf(",") : (libelle.indexOf(".") != -1 ? libelle.indexOf(".") : -1 ) );

			// si on trouve un séparateur :
			//		 - on vérifie que le nombre de décimales après la virgule soit correct
			if(posSeparateur != -1){
				tmpLibelleDebut = libelle.substring(0,posSeparateur);
				tmpLibelleFin	= libelle.substring(posSeparateur,posFin+1);
				if(tmpLibelleFin.length > 2){
					tmpLibelleFin = tmpLibelleFin.substring(0,3);
				}
				// on recré la chaine contenant la valeur du champ de prix
				libelle = tmpLibelleDebut + tmpLibelleFin;
			}

			// on affiche le prix formatté dans le champ
			oInput.value = libelle;

			// Test du motif
			bTest = rControle.test(oInput.value);

			// changement de la classe de la balise span affichant le message de sortie
			if(bTest){
				oResultat.innerHTML = "Champ correctement formaté.";
				changeClassName(oResultat.id,"true");
			}else{
				oResultat.innerHTML = "Erreur : formattage du champ incorrect !";
				changeClassName(oResultat.id,"false");
			}

		}

	}
	// fin Fonction formatChampPrix()-----------------------------------------------





	/* 	- getHTTPObject() ----------------------------------------------------------
	|	Description :
	|		-	Instanciation d'un objet XmlHttpRequest
	|			quelque soit le navigateur
	|	Return :
	|		- référence à un objet XmlHttpRequest
	------------------------------------------------------------------------------------ */
	function getHTTPObject(){

		var xmlhttp = false;

		// Compilation conditionnelle d'IE
		/*@cc_on
		@if (@_jscript_version >= 5)
			try{
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			}catch (e){
				try{
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				}catch (E){
					xmlhttp = false;
				}
			}
		@else
			xmlhttp = false;
		@end @*/

		// on essaie de créer l'objet si ce n'est pas déjà fait
		if (!xmlhttp && typeof XMLHttpRequest != 'undefined'){
			try{
				xmlhttp = new XMLHttpRequest();
			}catch (e){
				xmlhttp = false;
			}
		}

		if (xmlhttp){
			// on définit ce qui doit se passer quand la page répondra
			xmlhttp.onreadystatechange = function(){
				// 4 : état "complete"
				if (xmlhttp.readyState == 4){
					// 200 : code HTTP pour OK
					if (xmlhttp.status == 200){
						/*
						Traitement de la réponse.
						Ici on affiche la réponse dans une boîte de dialogue.
						*/
						alert(xmlhttp.responseText);
					}
				}
			}
		}

		return xmlhttp;

	}
	// fin Fonction getHTTPObject()-----------------------------------------------






	/* 	- getObjet() -----------------------------------------------------------------------
	|	Description :
	|		-	Atteindre un objet en fonction du navigateur utilisé
	|	Variables Globales Utilisées :
	|		- dom (bool)
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : id		=>	id de l'objet à atteindre
	|	Return :
	|		- une référence à l'objet dont l'id est passé en paramètre
	|	Infos :
	|		- plusieurs fonction utilisent cette fonction dans leur scripts
	------------------------------------------------------------------------------------ */
	function getObjet(id){

		if(id){
			if (dom) obj = window.document.getElementById(id);
			else if (ie4) obj = window.document.all[id];
			else if (ns4) obj = window.document.layers[id];
		}else{
			obj = false;
		}
		return obj;

	}
	// fin Fonction getObjet(id)-----------------------------------------------------------



	/* 	- manageForumForMessage() ----------------------------------------------------------
	|	Description :
	|		-	Lors d'une modification des pouvoirs d'un groupe d'utilisateur, lecture des pouvoirs et on coche les cases
	|			correspondantes.
	|	Aguments OBLIGATOIRES
	|		- argument 0 (object)	 : oSelectMessage	=> objet liste de sélection des messages parents
	|		- argument 1 (object)	 : oSelectForum		=> objet liste de sélection des forums
	|		- argument 2 (object)	 : oSpan			=> objet span pour afficher le libellé du forum
	|	Pages appellantes :
	|		- prive/forums.php
	|	Return :
	|		- NULL
	|	Infos :
	|		- Cette fonction affiche soit la liste de sélection des forums
	|		  soit la balise span avec uniquement le titre du forum.
	------------------------------------------------------------------------------------ */
	function manageForumForMessage(oSelectMessage,oSelectForum,oSpan){

		var sValue = oSelectMessage.value;

		// Choix du forum libre
		if(sValue == "NULL"){
			changeClassName(oSelectForum.id,"tabSelectSuperLong");
			changeClassName(oSpan.id,"hidden");
		}else{

			changeClassName(oSelectForum.id,"hidden");
			changeClassName(oSpan.id,"spanVisible");

			var xhr_object		 = getHTTPObject();
			var sResponse		 = "";
			var bMode			 = true;
			var sMethod			 = "POST";
			var sAction			 = "ajax/ajax_messages.php";
			var sData 			 = "idf_message="+escape(oSelectMessage.value);

			// Test d'existence de l'objet XmlHttpRequest
			if (!xhr_object) return;

			// Ouverture de la connexion au fichier avec la méthode choisie
			// en mode asynchrone
			xhr_object.open(sMethod, sAction, bMode);

			// Quand les données sont traitées
			// on affiche la réponse
			xhr_object.onreadystatechange = function () {
				if(xhr_object.readyState == 4) {
					sResponse = xhr_object.responseText;
					//alert("Libellé : "+sResponse);
					oSpan.innerHTML = sResponse;
				}
			};

			// Ajout des en-têtes nécessaires à la requête en POST
			if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

			// Envoi des données
			xhr_object.send(sData);

		}

	}
	// fin Fonction manageForumForMessage()-----------------------------------------------------------



	/* 	- manageProduitChamp() ----------------------------------------------------------
	|	Description :
	|		-	Lors d'une modification des pouvoirs d'un groupe d'utilisateur, lecture des pouvoirs et on coche les cases
	|			correspondantes.
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : cbName		=>	nom des cases à cochers déterminant les droits
	|		- argument 1 (string)	 : champName	=>	nom du champ stockant les pouvoirs pour les poster avec le formulaire
	|		- argument 2 (string)	 : tabAttributs	=>	tableau stockant les pouvoirs autorisés pour le groupe d'utilisateur
	|	Fonctions appellées :
	|		- createUpdateAttributs()
	|	Pages appellantes :
	|		- prive/groupes_utilisateurs.php
	|	Return :
	|		- NULL
	|	Infos :
	|		- Cette fonction parcourt le tableau des pouvoirs et pour chaque pouvoir attribué
	|		  elle cherche la case qui correspond à ce pouvor de manière à la cocher.
	------------------------------------------------------------------------------------ */
	function manageProduitChamp(sTypeAgregat,oForm){

		var choix			 = oForm.choix.value;
		var oMontantManuel	 = oForm.NPR_IDC_MONTANT_MANUEL;
		var oPVU	 		 = oForm.NPR_PVU_HT;
		var oPVU_old 		 = oForm.NPR_PVU_HT_OLD;
		var oTypeAgregat_old = oForm.NPR_TYPE_AGREGAT_OLD;

		if(oMontantManuel.checked){
			oPVU.disabled = false;
		}else{

			switch(sTypeAgregat){
				case "DECLINAISON":
				case "REGROUPEMENT":
					oPVU.disabled		 = true;
					if(choix == "create" || oTypeAgregat_old.value == "SIMPLE"){
						oPVU.value		 = "0";
					} else if(choix == "update"){
						oPVU.value		 = oPVU_old.value;
					}
				break;
				case "SIMPLE":
				default:
					oPVU.disabled		 = false;
					if(choix == "create"){
						oPVU.value			 = "";
					} else if(choix == "update"){
						oPVU.value		 = oPVU_old.value;
					}
				break;
			}

		}

	}
	// fin Fonction manageProduitChamp(typeAgregat)----------------------------------------





	function manageProduitStock(oForm,bChecked){

		var oSuiviStock = oForm.NPR_QUANTITE;
		var oOldQuantite = oForm.NPR_QUANTITE_OLD;
		var oZoneQuantite = getObjet("zoneQuantite");
		oZoneQuantite.innerHTML = "<input class=\"tabInput\" name=\"NPR_QUANTITE\" type=\""+(bChecked ? "hidden":"text")+"\" value=\""+(bChecked ? 0:oOldQuantite.value)+"\" >"+(bChecked ? 0:"");

	}



	function swapProductScreen(iActif){

		var sPath = (arguments.length>1 ? arguments[1] : "");

		var sDebug = "";
		if(isNaN(iActif)) return;
		var aScreen		 = ["productScreen1","productScreen2","productScreen3","productScreen4"];
		var aScreenImg	 = ["imageScreen_1","imageScreen_2","imageScreen_3","imageScreen_4"];
		var iNbScreen	 = aScreen.length;

		for(var i=0;i<iNbScreen;i++){
			changeClassName(aScreen[i],(aScreen[i] == "productScreen"+iActif ? "visible":"hidden"));
			var oScreenImg = getObjet(aScreenImg[i]);
			if(!oScreenImg) continue;
			oScreenImg.src = (aScreen[i],(aScreen[i] == "productScreen"+iActif ? sPath+"../images/interface/menu_"+(i+1)+"_in.png":sPath+"../images/interface/menu_"+(i+1)+"_out.png"));
			sDebug += " - "+aScreenImg[i]+".src = '"+(aScreen[i] == "productScreen"+iActif ? sPath+"../images/interface/menu_"+(i+1)+"_in.png":sPath+"../images/interface/menu_"+(i+1)+"_out.png")+"'\n";
		}

		//alert(sDebug);

	}

	// JavaScript Document








	/* 	- managePromotion() ----------------------------------------------------------
	|	Description :
	|		-	Cette fonction permet de gérer les promotions liées à un produit.
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : sUrl			=>	url à charger
	|	Pages appellantes :
	|		- prive/produits.php
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function managePromotion(sUrl){

		changeUrl(sUrl);

	}






	function promotionIsPermanent(bValue){

		var oDebut	 = getObjet("NPP_DATE_DEBUT");
		var oFin	 = getObjet("NPP_DATE_FIN");

		//alert("la case "+(bValue ? "est":"n'est pas")+" cochée !");

		// Si la promotion est permanente
		// on cache les champs
		// et on leur donne une valeur nulle
		if(bValue){
			oDebut.value			 = "NULL";
			oFin.value				 = "NULL";
			oDebut.style.display	 = "none";
			oFin.style.display		 = "none";
			oDebut.style.visibility	 = "hidden";
			oFin.style.visibility	 = "hidden";
		// Sinon on affiche les champs
		// et on leur donne une valeur vide
		// pour que l'utilisateur puisse la remplir
		}else{
			if(oDebut.value	== "NULL") oDebut.value = "";
			if(oFin.value	== "NULL") oFin.value = "";
			oDebut.style.display	 = "";
			oFin.style.display		 = "";
			oDebut.style.visibility	 = "visible";
			oFin.style.visibility	 = "visible";
		}

	}





	/* 	- remindAttributs() ----------------------------------------------------------
	|	Description :
	|		-	Lors d'une modification des pouvoirs d'un groupe d'utilisateur, lecture des pouvoirs et on coche les cases
	|			correspondantes.
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : cbName		=>	nom des cases à cochers déterminant les droits
	|		- argument 1 (string)	 : champName	=>	nom du champ stockant les pouvoirs pour les poster avec le formulaire
	|		- argument 2 (string)	 : tabAttributs	=>	tableau stockant les pouvoirs autorisés pour le groupe d'utilisateur
	|	Fonctions appellées :
	|		- createUpdateAttributs()
	|	Pages appellantes :
	|		- prive/groupes_utilisateurs.php
	|	Return :
	|		- NULL
	|	Infos :
	|		- Cette fonction parcourt le tableau des pouvoirs et pour chaque pouvoir attribué
	|		  elle cherche la case qui correspond à ce pouvor de manière à la cocher.
	------------------------------------------------------------------------------------ */
	function remindAttributs(cbName,champName,tabAttributs){

		var oCb = document.getElementsByName(cbName); // champ dans lequel on écrit les attributs
		var total = oCb.length;						  // nombre total de cases à cocher

		for(j=0;j<tabAttributs.length;j++){
			// on teste chaque case
			for(i=0;i<total;i++){
				// si la case est cochée on la compte cochée
				if(oCb[i].value == tabAttributs[j]){
					oCb[i].checked = true;
				}
			}
		}

		// on recré le contenu du champ
		createUpdateAttributs(cbName,champName);

	}
	// fin Fonction remindAttributs(cbName,champName,tabAttributs)---------------------------------





	/* 	- SelectionnerItems() ----------------------------------------------------------
	|	Description :
	|		-	fonction qui permet de sélectionner tous les items d'une liste déroulante à multisélection
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : balise		=>	préfxe du nom de la balise de multisélection
	|	Pages appellantes :
	|		- prive/groupes_utilisateurs.php
	|	Return :
	|		- NULL
	|	Infos :
	|		- Cette fonction est utilisée pour sélectionnés tous les utilisateurs à ajouter au groupe d'utilisateurs
	|		  au moment de la validation du formulaire pour poster les données de la liste déroulante.
	------------------------------------------------------------------------------------ */
	function SelectionnerItems(balise) {

		if(document.formCreateUpdate.elements[balise]){
			if(document.formCreateUpdate.elements[balise].tagName == "SELECT"){
				var longueur = document.formCreateUpdate.elements[balise].options.length;
				for (cpt = 0; cpt < longueur; cpt++) {
					if(document.formCreateUpdate.elements[balise].options[cpt].value != "NULL"){
						document.formCreateUpdate.elements[balise].options[cpt].selected = true;
					}
				}
			}
		}

	}
	// fin Fonction SelectionnerItems(balise)-------------------------------------------------





	/* 	- setValue() ----------------------------------------------------------
	|	Description :
	|		-	Modifier la valeur d'une balise
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : idObj		=>	identifiant de l'objet à modifier
	|		- argument 1 (string)	 : newValue		=>	nouvelle valeur de l'objet
	|	Fonctions appellées :
	|		- getObjet()
	|	Pages appellantes :
	|		- toutes les pages avec des formulaires d'ajout/modification/suppression
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function setValue(idObj,newValue){

		var obj = getObjet(idObj);
		if(obj)	{
			obj.value = newValue;
		}

	}
	// fin Fonction setValue(idObj,newValue)-----------------------------------------------





	/* 	- showActiveMenu() -------------------------------------------------------------
	|	Description :
	|		-	Change la classe de style du lien actif dans le menu de navigation principal
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string | integer)	 : numMenu		=>	numéro du menu à activer
	|	Fonctions appellées :
	|		- changeClassName()
	|	Pages appellantes :
	|		- prive/index.php
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function showActiveMenu(numMenu){

		if(numMenu != "")	{
			var newClassName = "module_lien_actif";
			var menu = "menu_"+(isNaN(numMenu) ? "accueil" : numMenu);
			changeClassName(menu,newClassName);

			// Affichage du Module en entier
			var oMenu = getObjet(menu);
			if(oMenu){

				switch(nav){
					// Firefox & Netscape
					case "Netscape":
						var oParent = oMenu.parentNode;
						for(var i=0;i<oParent.childNodes.length;i++){
							var oChild = oParent.childNodes[i];
							if(!oChild.className || oChild.className != "module_titre") continue;
							oChild.onclick();
						}
					break;
					// IE
					case "IE":
					default:
						var oParent = oMenu.parentElement;
						for(var i=0;i<oParent.childNodes.length;i++){
							var oChild = oParent.childNodes[i];
							if(!oChild.className || oChild.className != "module_titre") continue;
							oChild.click();
						}
					break;
				}

			}
			//menuActif = menu;
		}

	}
	// fin Fonction showActiveMenu(numMenu)-----------------------------------------------





	/* 	- testerMasque() ----------------------------------------------------------
	|	Description :
	|		-	Fonction utilisée pour vérifier le motif d'un masque sur une expression à tester
	|			dans le module masques_articles.
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : sPrefix	=>	préfixe des objets à utiliser :
	|				:: "NMA" => pour les articles
	|				:: "NMP" => pour les produits
	|	Pages appellantes :
	|		- prive/masques_articles.php
	|	Return :
	|		- NULL
	|	Infos :
	|		- cette fonction affiche "ok" en vert si l'expression respecte le masque
	|		- sinon elle affiche "erreur" en rouge si l'expression ne respecte pas le masque
	------------------------------------------------------------------------------------ */
	function testerMasque(sPrefix){

		var bTest		 = false;										 // valeur booléenne recueillant le résultat du test
		var oResultat	 = getObjet(sPrefix + "_MASQUE_RESULTAT");		 // balise span affichant le message de sortie
		var oExpression	 = getObjet(sPrefix + "_MASQUE_TEST");			 // balise input contenant l'expression à tester
		var oMasque		 = getObjet(sPrefix + "_MASQUE");				 // balise input contenant le motif du masque à appliquer

		// Création de l'expression régulière
		var rControle = new RegExp(oMasque.value);

		// Test du motif
		bTest = rControle.test(oExpression.value);

		// changement de la classe de la balise span affichant le message
		if(bTest){
			oResultat.innerHTML = "L'expression '"+oExpression.value+"' correspond au motif du masque.";
			changeClassName(oResultat.id,"true");
		}else{
			oResultat.innerHTML = "Erreur : l'expression '"+oExpression.value+"' n'est pas valide par rapport au motif du masque !";
			changeClassName(oResultat.id,"false");
		}

	}
	// fin Fonction testerMasque(url)-------------------------------------------------------



	/* 	- showHideForumChoice() ----------------------------------------------------------
	|	Description :
	|		-	Active ou désactive la liste de sélection des forums pour y rattacher l'article
	|	Aguments OBLIGATOIRES
	|		- argument 0 (bool)	 : bChecked		=>	valeur de la case à cocher (coché/décoché) : True|False
	|	Pages appellantes :
	|		- articles.php
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function showHideForumChoice(bChecked){

		var oSelect	= getObjet("NFO_IDF_FORUM");		  // liste de sélection
		var debug	= "";

		debug += " - case : " + (bChecked ? "cochée":"décochée") + "\n";

		// si la case testée est cochée
		if(bChecked){
			// on active la liste de sélection
			oSelect.disabled = false;
		// sinon on la désactive
		}else{
			oSelect.disabled = true;
		}
		debug += " - liste " + (oSelect.disabled ? " désactivée":" activée") + "\n";
		//alert(debug);

	}
	// fin Fonction showHideForumChoice(bValeur)-------------------------------------------





	/**
	 *
	 * @access public
	 * @return void
	 **/
	// Coordonnées de la souris
	var _IE_NAV = document.all?true:false;
	if (!_IE_NAV) document.captureEvents(Event.MOUSEMOVE)
	//document.onmousemove = getMouseXY;
	var tempX = 0;
	var tempY = 0;
	function getMouseXY(e) {
		if (_IE_NAV) { // grab the x-y pos.s if browser is IE
			tempX = event.clientX + document.body.scrollLeft;
			tempY = event.clientY + document.body.scrollTop;
		} else {  // grab the x-y pos.s if browser is NS
			tempX = e.pageX;
			tempY = e.pageY;
		}
		if (tempX < 0){tempX = 0;}
		if (tempY < 0){tempY = 0;}
		return {"MouseX" : tempX, "MouseY" : tempY };
	}


	var _WBT_DIV_MODULE = null;
	function showHideInfoModule(oDiv,sAction){

		var sModule = (arguments.length > 2 ? arguments[2] : null);
		var sContent = (arguments.length > 3 ? arguments[3] : "");
		if(sAction == "hide"){
			var oDescriptionModule = getObjet("descriptionModule");
			if(oDescriptionModule){
				for(var i=(oDescriptionModule.childNodes.length-1); i>=0; i--){
					oDescriptionModule.removeChild(oDescriptionModule.childNodes[i]);
				}
			}
		}else{
			if(sModule != null){
				var oModule = getObjet(sModule);
				var oDescriptionModule = getObjet("descriptionModule");
				if(oModule && oDescriptionModule){

					oDiv.style.cursor = 'help';
					// Coordonnées de la souris
					var oCoord = getMouseXY();

					if(_WBT_DIV_MODULE == null){
						_WBT_DIV_MODULE = document.createElement("div");
						_WBT_DIV_MODULE.setAttribute("id","WBT_DIV_MODULE");
					}
					for(var i=(_WBT_DIV_MODULE.childNodes.length-1); i>=0; i--){
						_WBT_DIV_MODULE.removeChild(_WBT_DIV_MODULE.childNodes[i]);
					}
					for(var i=(oDescriptionModule.childNodes.length-1); i>=0; i--){
						oDescriptionModule.removeChild(oDescriptionModule.childNodes[i]);
					}
					_WBT_DIV_MODULE.appendChild(document.createTextNode(sContent));
					if(_WBT_DIV_MODULE.style.display) _WBT_DIV_MODULE.style.display = "block";
					if(_WBT_DIV_MODULE.style.visibility) _WBT_DIV_MODULE.style.visibility = "visible";
					_WBT_DIV_MODULE.style.left = (oCoord.MouseX + 0)+"px";
					_WBT_DIV_MODULE.style.top = (oCoord.MouseY + 20)+"px";
					oDescriptionModule.appendChild(_WBT_DIV_MODULE);
				}
			}
		}

	}






	/* 	- showHidePeriodiciteChoice() ----------------------------------------------------------
	|	Description :
	|		-	Active ou désactive la liste de sélection des périodicités pour y rattacher l'article
	|	Aguments OBLIGATOIRES
	|		- argument 0 (bool)	 : bChecked		=>	valeur de la case à cocher (coché/décoché) : True|False
	|	Pages appellantes :
	|		- produits.php
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function showHidePeriodiciteChoice(bChecked){

		var bInit	= (arguments.length>1 ? arguments[1] : false);
		var oSelect	= getObjet("NPR_PERIODICITE");		  // liste de sélection
		var oInput	= getObjet("NPR_DELAI_RAPPEL");		  // champ de texte
		var debug	= "";

		// si la case testée est cochée
		if(bChecked){
			// on active la liste de sélection
			oSelect.disabled	 = false;
			if(!bInit){
				oInput.value		 = (oInput._wbtOldValue != null && oInput._wbtOldValue != "" ? oInput._wbtOldValue : 0);
			}
			oInput.disabled		 = false;
		// sinon on la désactive
		}else{
			oSelect.disabled	 = true;
			oInput._wbtOldValue	 = oInput.value;
			oInput.value		 = 0;
			oInput.disabled		 = true;
		}

	}
	// fin Fonction showHidePeriodiciteChoice(bValeur)-------------------------------------------





	/* 	- showHideLimiteChoice() ----------------------------------------------------------
	|	Description :
	|		-	Active ou désactive la liste de sélection des périodicités pour y rattacher l'article
	|	Aguments OBLIGATOIRES
	|		- argument 0 (bool)	 : bChecked		=>	valeur de la case à cocher (coché/décoché) : True|False
	|	Pages appellantes :
	|		- produits.php
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function showHideLimiteChoice(bChecked){

		var bInit	= (arguments.length>1 ? arguments[1] : false);
		var oSelect = getObjet("NPR_IDF_PRODUIT_SUPERIEUR");
		var oInput	= getObjet("NPR_LIMITE");		  // champ de texte
		var debug	= "";

		// si la case testée est cochée
		if(bChecked){
			// on active les champs
			oSelect.disabled	 = false;
			if(!bInit){
				oInput.value	 = (oInput._wbtOldValue != null && oInput._wbtOldValue != "" ? oInput._wbtOldValue : 0);
			}
			oInput.disabled		 = false;
		// sinon on le désactive
		}else{
			oSelect.disabled	 = true;
			oInput._wbtOldValue	 = oInput.value;
			oInput.value		 = 0;
			oInput.disabled		 = true;
		}

	}
	// fin Fonction showHideLimiteChoice(bValeur)-------------------------------------------








	/* 	- checkProduitSuperieur() ----------------------------------------------------------
	|	Description :
	|		-	Change l'item sélection dans la liste de sélection des produits
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : sValue		=>	valeur du champ limite
	|	Pages appellantes :
	|		- produits.php
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function checkProduitSuperieur(sValue){

		var bInit	= (arguments.length>1 ? arguments[1] : false);
		var oSelect = getObjet("NPR_IDF_PRODUIT_SUPERIEUR");

		// si la valeur est '-1'
		if(sValue == "-1"){
			// on sélectionne 'Aucun produit'
			oSelect.options[0].selected = true;
		}

	}
	// fin Fonction checkProduitSuperieur(sValue)-------------------------------------------






	/* 	- reloadImage() ----------------------------------------------------------
	|	Description :
	|		-	permet de recharger une image qui est stockée au même endroit et sous le même nom de fichier
	|			que plusieurs autres images (ex : c'est le cas de l'image de prévisualisation du logo des société
	|			qui est générée dynamiquement)
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : sId			=>	identifiant de l'image à recharger
	|		- argument 1 (string)	 : sImgSrc		=>	chemin de l'image à recharger
	|	Aguments FACULTATIFS
	|	Pages appellantes :
	|		- societes.php
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function reloadImage(sId,sImgSrc){
		var oImg = getObjet(sId);
		if(oImg){
			oImg.src = sImgSrc+"?"+(new Date().getTime());
		}
	}






	/* 	- testerMotif() ----------------------------------------------------------
	|	Description :
	|		-	Fonction utilisée pour vérifier le motif d'un masque sur une expression à tester
	|			dans le module d'inscription des sociétés.
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : sMotif		=>	motif à tester
	|		- argument 0 (string)	 : sExpression	=>	expression sur laquelle tester le motif
	|	Pages appellantes :
	|		- inc/clients_partenaires.php
	|	Return :
	|		- true : si l'expression testée respecte le motif
	|		- false: si l'expression testée ne respecte pas le motif
	------------------------------------------------------------------------------------ */
	function testerMotif(sMotif,sExpression){

		// Création de l'expression régulière
		var rControle = new RegExp(sMotif);

		// Test du motif
		return rControle.test(sExpression);

	}
	// fin Fonction testerMotif()-------------------------------------------------------



	function getTTC(oSelect){

		var oForm			 = oSelect.form;
		var iTVA			 = oSelect.value / 100;
		var oFieldPrixHT	 = oForm.NPR_PVU_HT;
		var oSpanPrixTTC	 = getObjet("spanPrixTTC");

		if(!isNaN(oFieldPrixHT.value)){
			oSpanPrixTTC.innerHTML = Math.round( (oFieldPrixHT.value * (1 + iTVA)) * 100) / 100;
		}

	}




	/* 	- radioIsChecked() ----------------------------------------------------------
	|	Description :
	|		-	Fonction utilisée pour vérifier qu'au moins un bouton radio est coché
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : sName	=>	nom du bouton radio à tester
	|	Pages appellantes :
	|		- prive/bons_commandes.php
	|	Return :
	|		- true	 : au moins un bouton radio est coché
	|		- false	 : aucun bouton radio est coché
	------------------------------------------------------------------------------------ */
	function radioIsChecked(sName){

		var oR		 = document.getElementsByName(sName);	// bouton radio à cocher
		var total	 = oR.length;							// nombre total de cases à cocher
		var bIsChecked = false;

		// on vérifie qu'au moins un bouton radio est coché
		for(i=0;i<total;i++){
			if(oR[i].checked){
				bIsChecked = true;
				break;
			}
		}

		return bIsChecked;

	}
	// fin Fonction radioIsChecked(sName)----------------------------------








	/* 	- getRadioCheckedValue() ----------------------------------------------------------
	|	Description :
	|		-	Fonction utilisée pour retourner la valeur du bouton radio coché
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : sName	=>	nom du bouton radio à tester
	|	Pages appellantes :
	|		- index.php
	|	Return :
	|		- true	 : au moins un bouton radio est coché
	|		- false	 : aucun bouton radio est coché
	------------------------------------------------------------------------------------ */
	function getRadioCheckedValue(sName){

		var oR		 = document.getElementsByName(sName);	// bouton radio à cocher
		var total	 = oR.length;							// nombre total de cases à cocher
		var sValue	 = "";

		// on vérifie qu'au moins un bouton radio est coché
		for(i=0;i<total;i++){
			if(oR[i].checked){
				sValue = oR[i].value;
				break;
			}
		}

		return sValue;

	}
	// fin Fonction getRadioCheckedValue(sName)----------------------------------



	/* 	- getCbCheckedValue() ----------------------------------------------------------
	|	Description :
	|		-	Fonction utilisée pour retourner la valeur des checkbox cochées
	|	Aguments OBLIGATOIRES
	|		- argument 0 (string)	 : sName	=>	nom de la checkbox à tester
	|	Pages appellantes :
	|		- index.php
	|	Return :
	|		- true	 : au moins un bouton radio est coché
	|		- false	 : aucun bouton radio est coché
	------------------------------------------------------------------------------------ */
	function getCbCheckedValue(sName){

		var oCB		 = document.getElementsByName(sName);	// checjbox à tester
		var total	 = oCB.length;							// nombre total de cases à cocher
		var aValue	 = Array();

		// on vérifie qu'au moins un bouton radio est coché
		for(i=0;i<total;i++){
			if(oCB[i].checked){
				aValue.push(oCB[i].value);
			}
		}

		return aValue;

	}
	// fin Fonction getCbCheckedValue(sName)----------------------------------



	/**
	 *
	 * @access public
	 * @return void
	 **/
	function refreshLigneCommande(oForm){

		var f				 = oForm;
		var iIdfBonCommande	 = f.NBC_IDF_BON_COMMANDE.value;
		var oListeLigne		 = getObjet("oDivListLigne");

		// Si l'identifiant est trouvé
		// on actualise les lignes de commande
		if(!isNaN(iIdfBonCommande)){

			var xhr_object		 = getHTTPObject();
			var sResponse		 = "";
			var bMode			 = true;
			var sMethod			 = "POST";
			var sAction			 = "ajax/ajax_GetLigneCommandeTable.php";
			var sData 			 = "iIdfBonCommande="+escape(iIdfBonCommande);

			// Test d'existence de l'objet XmlHttpRequest
			if (!xhr_object) return;

			// Ouverture de la connexion au fichier avec la méthode choisie
			// en mode asynchrone
			xhr_object.open(sMethod, sAction, bMode);

			// Quand les données sont traitées
			// on affiche la réponse
			xhr_object.onreadystatechange = function () {
				if(xhr_object.readyState == 4) {
					sResponse = xhr_object.responseText;
					oListeLigne.innerHTML = sResponse;
					refreshRecapCommande(oForm);
				}
			};

			// Ajout des en-têtes nécessaires à la requête en POST
			if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

			// Envoi des données
			xhr_object.send(sData);

		}

	}



	/**
	 *
	 * @access public
	 * @return void
	 **/
	function refreshClientOptiontList(oForm){

		var f				 = oForm;
		var sClientName		 = f.NBC_CLIENT_SEARCH.value;
		var oListeLigne		 = getObjet("oDivListClient");

		var xhr_object		 = getHTTPObject();
		var sResponse		 = "";
		var bMode			 = true;
		var sMethod			 = "POST";
		var sAction			 = "ajax/ajax_GetClientOptionList.php";
		var sData 			 = "sClientName="+escape(sClientName);

		// Test d'existence de l'objet XmlHttpRequest
		if (!xhr_object) return;

		// Ouverture de la connexion au fichier avec la méthode choisie
		// en mode asynchrone
		xhr_object.open(sMethod, sAction, bMode);

		// Quand les données sont traitées
		// on affiche la réponse
		xhr_object.onreadystatechange = function () {
			if(xhr_object.readyState == 4) {
				sResponse = xhr_object.responseText;
				oListeLigne.innerHTML = sResponse;
			}
		};

		// Ajout des en-têtes nécessaires à la requête en POST
		if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

		// Envoi des données
		xhr_object.send(sData);

	}





	/**
	 *
	 * @access public
	 * @return void
	 **/
	function refreshProduitOptiontList(oForm){

		var f					 = oForm;
		var sProduitName		 = f.NLC_PRODUIT_SEARCH.value;
		var iIdfProduitSelected	 = f.NLC_IDF_PRODUIT.value;
		var oListeLigne			 = getObjet("oDivListProduit");

		var xhr_object			 = getHTTPObject();
		var sResponse			 = "";
		var bMode				 = true;
		var sMethod				 = "POST";
		var sAction				 = "../ajax/ajax_GetProduitOptionList.php";
		var sData 				 = "sProduitName="+escape(sProduitName);
		sData 					+= "&iIdfProduitSelected="+escape(iIdfProduitSelected);

		// Test d'existence de l'objet XmlHttpRequest
		if (!xhr_object) return;

		// Ouverture de la connexion au fichier avec la méthode choisie
		// en mode asynchrone
		xhr_object.open(sMethod, sAction, bMode);

		// Quand les données sont traitées
		// on affiche la réponse
		xhr_object.onreadystatechange = function () {
			if(xhr_object.readyState == 4) {
				sResponse = xhr_object.responseText;
				oListeLigne.innerHTML = sResponse;
			}
		};

		// Ajout des en-têtes nécessaires à la requête en POST
		if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

		// Envoi des données
		xhr_object.send(sData);

	}





	/**
	 *
	 * @access public
	 * @return void
	 **/
	function refreshRecapCommande(oForm){

		var f				 = oForm;
		var iIdfBonCommande	 = f.NBC_IDF_BON_COMMANDE.value;
		var iIdfClient		 = f.NBC_IDF_CLIENT.value;
		var oListeLigne		 = getObjet("oDivRecapCommande");
		var oBtnPrint		 = getObjet("oDivPrintCommande");

		// Si l'identifiant est trouvé
		// on actualise les lignes de commande
		if(!isNaN(iIdfBonCommande) && !isNaN(iIdfClient)){

			var xhr_object		 = getHTTPObject();
			var sResponse		 = "";
			var bMode			 = true;
			var sMethod			 = "POST";
			var sAction			 = "ajax/ajax_GetFacture.php";
			var sData 			 = "idf_commande="+escape(iIdfBonCommande);
			sData 				+= "&idf_client="+escape(iIdfClient);

			// Test d'existence de l'objet XmlHttpRequest
			if (!xhr_object) return;

			// Ouverture de la connexion au fichier avec la méthode choisie
			// en mode asynchrone
			xhr_object.open(sMethod, sAction, bMode);

			// Quand les données sont traitées
			// on affiche la réponse
			xhr_object.onreadystatechange = function () {
				if(xhr_object.readyState == 4) {
					sResponse = xhr_object.responseText;
					oListeLigne.innerHTML = sResponse;
					oBtnPrint.innerHTML = "<a class='mail' href='popup_facture.php?idf_client="+ iIdfClient  +"&idf_commande="+ iIdfBonCommande + "&doPrint=1' target='_blank'><img src='../images/interface/b_print.png' width='16' height='16' alt='Imprimer' title='Imprimer' border='0' /></a>";
				}
			};

			// Ajout des en-têtes nécessaires à la requête en POST
			if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

			// Envoi des données
			xhr_object.send(sData);

		}

	}






	function setBdcLineInfo(oSelect){

		var sPath			 = (arguments.length > 1 ? arguments[1] : "");
		var oForm			 = oSelect.form;
		var iIdf			 = oSelect.value
		var oFieldPrixHT	 = oSelect.form.NLC_PRIX_HT;
		var oFieldPrixTTC	 = oSelect.form.NLC_PRIX_TTC;
		var oSpanPrixHT		 = getObjet("spanPrixHT");
		var oSpanPrixTTC	 = getObjet("spanPrixTTC");


		// Si l'identifiant est trouvé
		// on actualise les champs prix
		if(!isNaN(iIdf)){

			// on prépare les champs en les nettoyant !
			oFieldPrixHT.value		 = "";
			oFieldPrixTTC.value		 = "";
			oSpanPrixHT.innerHTML	 = "";
			oSpanPrixTTC.innerHTML	 = "";

			var xhr_object		 = getHTTPObject();
			var sResponse		 = "";
			var bMode			 = true;
			var sMethod			 = "POST";
			var sAction			 = sPath+"ajax/ajax_produits.php";
			var sData 			 = "idf_produit="+escape(iIdf);

			// Test d'existence de l'objet XmlHttpRequest
			if (!xhr_object) return;

			// Ouverture de la connexion au fichier avec la méthode choisie
			// en mode asynchrone
			xhr_object.open(sMethod, sAction, bMode);

			// Quand les données sont traitées
			// on affiche la réponse
			xhr_object.onreadystatechange = function () {
				if(xhr_object.readyState == 4) {

					sResponse = xhr_object.responseText;
					aResponse = sResponse.split("|");

					for(i=0;i<aResponse.length;i++){
						aParam = aResponse[i].split(":");
						switch(aParam[0]){
							case "PVU_HT":
								oFieldPrixHT.value		 = aParam[1];
								oSpanPrixHT.innerHTML	 = aParam[1];
							break;
							case "PVU_TTC":
								oFieldPrixTTC.value		 = aParam[1];
								oSpanPrixTTC.innerHTML	 = aParam[1];
							break;
						}
					}

				}
			};

			// Ajout des en-têtes nécessaires à la requête en POST
			if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

			// Envoi des données
			xhr_object.send(sData);

		// sinon on vide les champs prix
		}else{
			oFieldPrixHT.value		 = "";
			oFieldPrixTTC.value		 = "";
			oSpanPrixHT.innerHTML	 = "";
			oSpanPrixTTC.innerHTML	 = "";
		}

	}











	function setBdcFournisseurLineInfo(){

		var oForm			 = getObjet("formCreateUpdate");
		var oFieldPrixHT	 = oForm.NLF_PRIX_HT;
		var oFieldPrixTTC	 = oForm.NLF_PRIX_TTC;
		var oFieldTVA		 = oForm.inputTVA;
		var oSpanPrixTTC	 = getObjet("spanPrixTTC");
		var iTVA			 = oFieldTVA.value;
		var iHT				 = oFieldPrixHT.value;

		// on prépare les champs en les nettoyant !
		oFieldPrixTTC.value		 = "";
		oSpanPrixTTC.innerHTML	 = "";

		// Si le prix HT et la TVA sont trouvés
		// on actualise les champs prix TTC
		if(!isNaN(iTVA) && !isNaN(iHT)){

			var xhr_object		 = getHTTPObject();
			var sResponse		 = "";
			var bMode			 = true;		// mode asynchrone
			var sMethod			 = "POST";
			var sAction			 = "ajax/ajax_arrondi.php";
			var sData 			 = "HT="+escape(iHT)+"&TVA="+escape(iTVA);

			// Test d'existence de l'objet XmlHttpRequest
			if (!xhr_object) return;

			// Ouverture de la connexion au fichier avec la méthode choisie
			xhr_object.open(sMethod, sAction, bMode);

			// Quand les données sont traitées
			// on affiche la réponse
			xhr_object.onreadystatechange = function () {
				if(xhr_object.readyState == 4) {
					sResponse = xhr_object.responseText;
					oFieldPrixTTC.value		 = sResponse;
					oSpanPrixTTC.innerHTML	 = sResponse;
				}
			};

			// Ajout des en-têtes nécessaires à la requête en POST
			if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

			// Envoi des données
			xhr_object.send(sData);

		}

	}







	/* 	- showEditeurWYSIWYG() ----------------------------------------------------------
	|	Description :
	|		-	Active ou désactive la liste de sélection des forums pour y rattacher l'article
	|	Aguments OBLIGATOIRES
	|		- argument 0 (bool)	 : bChecked		=>	valeur de la case à cocher (coché/décoché) : True|False
	|	Pages appellantes :
	|		- articles.php
	|	Return :
	|		- NULL
	------------------------------------------------------------------------------------ */
	function showEditeurWYSIWYG(sInputName){

		var oParam	 = new Object();
		var oInput	 = getObjet(sInputName);
		var oPreview = getObjet(sInputName+"_preview");
		if(oInput){
			oParam.contenu		 = oInput.value;
			oPreview.innerHTML	 = oInput.value;

			var sContenu = showModalDialog('editeur_wysiwyg.htm',oParam,'dialogHeight:625px;dialogWidth:500px;resizable=yes;scroll:off');
			if(sContenu=="" || sContenu==null) return;

			oInput.value		 = sContenu;
			oPreview.innerHTML	 = sContenu;
		}

	}
	// fin Fonction showEditeurWYSIWYG(sEditeur)-------------------------------------------







	function showHideReglementForCommande(iIdfCommande){

		var sDebug = "";
		var sPattern = (arguments.length>1 ? arguments[1] : "commande_");
		var sVisibility	 = (arguments.length>1 ? arguments[2] : "");
		var aLine = document.getElementsByTagName("tr");
		var nLine = aLine.length;

		if(iIdfCommande == null){
			for(var i=0;i<nLine;i++){
				var oLine = aLine[i];
				if(!oLine.name || oLine.name == null || oLine.name.substr(0,sPattern.length) != sPattern) continue;
				var iIdfCommande = oLine.name.substr(sPattern.length);
				changeClassName(oLine.id,sVisibility);
				// Affichage de l'image '+' ou '-'
				reloadImage("image_"+iIdfCommande,"../images/interface/"+(sVisibility == "hidden" ? "plus" : "minus")+".png");
			}
		}else{
			for(var i=0;i<nLine;i++){
				var oLine = aLine[i];
				if(oLine.name != sPattern+iIdfCommande) continue;
				//sDebug += " - "+i+" : "+oLine.name+" | "+sPattern+iIdfCommande+"\n";
				sVisibility = (oLine.className == "visible" ? "hidden":"visible");
				changeClassName(oLine.id,sVisibility);
			}
			// Affichage de l'image '+' ou '-'
			reloadImage("image_"+iIdfCommande,"../images/interface/"+(sVisibility == "hidden" ? "plus" : "minus")+".png");
		}

	}



	function showHideRelanceForCommande(iIdfCommande){

		var sDebug = "";
		var sPattern = (arguments.length>1 ? arguments[1] : "commande_");
		var sVisibility	 = (arguments.length>1 ? arguments[2] : "");
		var aLine = document.getElementsByTagName("tr");
		var nLine = aLine.length;

		if(iIdfCommande == null){
			for(var i=0;i<nLine;i++){
				var oLine = aLine[i];
				if(!oLine.name || oLine.name == null || oLine.name.substr(0,sPattern.length) != sPattern) continue;
				var iIdfCommande = oLine.name.substr(sPattern.length);
				changeClassName(oLine.id,sVisibility);
				// Affichage de l'image '+' ou '-'
				reloadImage("image_"+iIdfCommande,"../images/interface/"+(sVisibility == "hidden" ? "plus" : "minus")+".png");
			}
		}else{
			for(var i=0;i<nLine;i++){
				var oLine = aLine[i];
				if(oLine.name != sPattern+iIdfCommande) continue;
				sVisibility = (oLine.className == "visible" ? "hidden":"visible");
				changeClassName(oLine.id,sVisibility);
			}
			// Affichage de l'image '+' ou '-'
			reloadImage("image_"+iIdfCommande,"../images/interface/"+(sVisibility == "hidden" ? "plus" : "minus")+".png");
		}

	}



	function swapFormMode(sMode,iIdfReglement){

		var sDebug = "";
		sDebug += " - Mode : "+sMode+" pour le réglement n°"+iIdfReglement+"\n";

		var oLine = getObjet("reglement_"+iIdfReglement);
		if(oLine){
			var aCase = oLine.childNodes;
			var iCase = aCase.length;
		}

		switch(sMode){

			// On rétablit l'affichage normal de la ligne
			case "annuler":

				// Mémorisation du contenu de la ligne à modifier
				// ------------------------
				for(var i=0;i<iCase;i++){
					var oCase = aCase[i];
					oCase.innerHTML = oCase.$content;
				}

				// Affichage des liens des lignes
				// -------------------------
				for(var i=0;i<document.links.length;i++){
					var oLink = document.links[i];
					if(oLink && oLink.id && oLink.id.substring(0,11) == "linkUpdate_"){
						changeClassName(oLink.id,"visible");
					}
				}

			break;


			// Ajout des données
			case "createReglement":

				// Mémorisation des données du formulaire
				// -------------------------

					// référence au formulaire à analyser
					var f = document.forms['formDeleteUpdate'].elements;

					// mémorisation des index des éléments du formulaire
					// en fonction de leur nom pour y accéder à cause d'un bug IE
					// qui empêche d'accéder aux éléments créés dynamiquement
					var els = el_id_by_name(f);


				// Récupération des données du formulaire
				// -------------------------

					// input.text : Bon de Commande
					var iIdfBonCommande = f[els['NRC_IDF_BON_COMMANDE']].value;

					// input.text : Date
					var sDate = f[els['NRC_DATE_REGLEMENT']].value;

					// select : Type de Réglement
					var iTypeReglement = f[els['NRC_IDF_TYPE_REGLEMENT']].value;
					var sTypeReglement = f[els['NRC_IDF_TYPE_REGLEMENT']].options[f[els['NRC_IDF_TYPE_REGLEMENT']].options.selectedIndex].text;

					// select : Echéance de Réglement
					var iEcheanceReglement = f[els['NRC_IDF_ECHEANCE_REGLEMENT']].value;
					var sEcheanceReglement = f[els['NRC_IDF_ECHEANCE_REGLEMENT']].options[f[els['NRC_IDF_ECHEANCE_REGLEMENT']].options.selectedIndex].text;

					// input.text : Montant
					var sMontant = f[els['NRC_MONTANT']].value;

					// FiltreClient
					var sFiltreClient = f[els['FILTRE_CLIENT']].value;

					// FiltreClient
					var sFiltreFacture = f[els['FILTRE_FACTURE']].value;


				// Vérification des champs du formulaire
				// -------------------------

					var msg_erreur	 = "";							// construction du message d'erreur par concaténation successives
					var en_tete		 = "";							// en-tête du message d'erreur
					var nb_erreur	 = 0;							// comptabilisation des erreurs
					var tab_focus	 = new Array();					// tableau de mémorisation du focus pour se repositionner sur le premier éléments manquant
					var bContinue	 = true;

					if(iIdfBonCommande == "") {
						msg_erreur = msg_erreur + " - Veuillez indiquer l'identifiant du Bon de Commande !\n";
						tab_focus[nb_erreur] = null;
						nb_erreur = nb_erreur + 1;
					}

					if(sDate == "") {
						msg_erreur = msg_erreur + " - Veuillez compléter le champ Date de Réglement !\n";
						tab_focus[nb_erreur] = "NRC_DATE_REGLEMENT";
						nb_erreur = nb_erreur + 1;
					}

					if(iTypeReglement == "") {
						msg_erreur = msg_erreur + " - Veuillez compléter le champ Type de Réglement!\n";
						tab_focus[nb_erreur] = "NRC_IDF_TYPE_REGLEMENT";
						nb_erreur = nb_erreur + 1;
					}

					if(iEcheanceReglement == "") {
						msg_erreur = msg_erreur + " - Veuillez compléter le champ Echéance!\n";
						tab_focus[nb_erreur] = "NRC_IDF_ECHEANCE_REGLEMENT";
						nb_erreur = nb_erreur + 1;
					}

					if(sMontant == "") {
						msg_erreur = msg_erreur + " - Veuillez compléter le champ Montant!\n";
						tab_focus[nb_erreur] = "NRC_MONTANT";
						nb_erreur = nb_erreur + 1;
					}

					if(nb_erreur != 0) {
						en_tete = "--------------------------------------------------------\n" + en_tete;
						en_tete = "*     Vous avez "+nb_erreur+" erreur"+(nb_erreur > 1 ? 's':'')+" à corriger :     *\n" + en_tete;
						en_tete = "--------------------------------------------------------\n" + en_tete;
						en_tete = "                                                    \n" + en_tete;
						msg_erreur = en_tete + msg_erreur;
						alert(msg_erreur);
						if(tab_focus[0] != null) eval("f[els['" + tab_focus[0] + "']]").focus();
						bContinue =  false;
					}


				// Affichage du contenu de la ligne mémorisé
				// ------------------------

					if(bContinue){

						// Actualisation du contenu
						// avec mise à jour de l'enregistrement modifié
						// -------------------------
						var oContent		 = getObjet("webtoolContent");
						oContent.innerHTML	 = "Chargement en cours ... !";
						var xhr_object		 = getHTTPObject();
						var sResponse		 = "";
						var bMode			 = false;		// mode synchrone
						var sMethod			 = "POST";
						var sAction			 = "ajax/ajax_reglements_clients.php";
						var sData			 = "";
						sData 				 += "choix=create";
						sData 				 += "&create=valider";
						sData 				 += "&NRC_IDF_REGLEMENT="+escape(iIdfReglement);
						sData 				 += "&NRC_IDF_BON_COMMANDE="+escape(iIdfBonCommande);
						sData 				 += "&NRC_IDF_TYPE_REGLEMENT="+escape(iTypeReglement);
						sData 				 += "&NRC_IDF_ECHEANCE_REGLEMENT="+escape(iEcheanceReglement);
						sData 				 += "&NRC_MONTANT="+escape(sMontant);
						sData 				 += "&NRC_DATE_REGLEMENT="+escape(sDate);
						sData 				 += "&FILTRE_CLIENT="+escape(sFiltreClient);
						sData 				 += "&FILTRE_FACTURE="+escape(sFiltreFacture);

						// Test d'existence de l'objet XmlHttpRequest
						if (!xhr_object) return;

						// Ouverture de la connexion au fichier avec la méthode choisie
						xhr_object.open(sMethod, sAction, bMode);

						// Quand les données sont traitées
						// on affiche la réponse
						xhr_object.onreadystatechange = function () {
							if(xhr_object.readyState == 4) {
								sResponse = xhr_object.responseText;
								oContent.innerHTML = sResponse;
							}
						};

						// Ajout des en-têtes nécessaires à la requête en POST
						if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

						// Envoi des données
						xhr_object.send(sData);

					}

			break;


			case "annulerCreate":

				var iIndex = arguments[2];
				var oTab = getObjet("tabReglement");
				oTab.deleteRow(iIndex);

				// Affichage des images de toutes les lignes pour ajouter des réglements
				// -------------------------
				for(var i=0;i<document.links.length;i++){
					var oImg = document.images[i];
					if(oImg && oImg.id && oImg.id.substring(0,16) == "imgAddReglement_"){
						changeClassName(oImg.id,"visible");
					}
				}


				// Affichage des liens de toutes les lignes
				// -------------------------
				for(var i=0;i<document.links.length;i++){
					var oLink = document.links[i];
					if(oLink && oLink.id && oLink.id.substring(0,11) == "linkUpdate_"){
						changeClassName(oLink.id,"visible");
					}
				}

			break;


			// Ajout d'une ligne avec un formulaire pour créer un réglement
			case "create":

				var iIdfBonCommande = arguments[2];
				var oTab = getObjet("tabReglement");
				var oLine = getObjet("bonCommande_"+iIdfBonCommande);
				if(oLine) var iIndex = oLine.rowIndex +1;
				var oNewLine = oTab.insertRow(iIndex);
				/*
				oNewLine.setAttribute("id","reglement_0");
				oNewLine.setAttribute("name","commande_"+iIdfBonCommande);
				oNewLine.setAttribute("class","visible");
				oNewLine.setAttribute("className","visible");
				*/

				// Masquage des images des autres lignes pour ajouter des réglements
				// -------------------------
				for(var i=0;i<document.links.length;i++){
					var oImg = document.images[i];
					if(oImg && oImg.id && oImg.id.substring(0,16) == "imgAddReglement_"){
						changeClassName(oImg.id,"hidden");
					}
				}


				// Masquage des liens de toutes les lignes
				// -------------------------
				for(var i=0;i<document.links.length;i++){
					var oLink = document.links[i];
					if(oLink && oLink.id && oLink.id.substring(0,11) == "linkUpdate_"){
						changeClassName(oLink.id,"hidden");
					}
				}


				// Mise en place du formulaire de mise à jour
				// -------------------------

					var aCase = new Array();

					// Case n°0 : Date et type de réglement
					aCase[0] = document.createElement("td");
					aCase[0].setAttribute("class","tabCaseLineReglement paddingLeftExtra impair");
					aCase[0].setAttribute("className","tabCaseLineReglement paddingLeftExtra impair");

						// input.text : IDF Bon Commande
						var oInput_1 = document.createElement("input");
						oInput_1.setAttribute("name","NRC_IDF_BON_COMMANDE");
						oInput_1.setAttribute("id","NRC_IDF_BON_COMMANDE");
						oInput_1.setAttribute("type","hidden");
						oInput_1.setAttribute("value",iIdfBonCommande);


						// input.text : Date
						var oInput_2 = document.createElement("input");
						oInput_2.setAttribute("name","NRC_DATE_REGLEMENT");
						oInput_2.setAttribute("id","NRC_DATE_REGLEMENT");
						oInput_2.setAttribute("class","tabInputMoyen");
						oInput_2.setAttribute("className","tabInputMoyen");
						oInput_2.setAttribute("type","text");
						oInput_2.setAttribute("size","50");
						oInput_2.setAttribute("alt","format accepté : 'jj.mm.aaaa hh:mm:ss'");
						oInput_2.setAttribute("title","format accepté : 'jj.mm.aaaa hh:mm:ss'");
						oInput_2.setAttribute("maxlength","255");
						oInput_2.setAttribute("value","");
						oInput_2.setAttribute("onmouseover","this.style.cursor = 'help';");
						oInput_2.onmouseover = function (){ this.style.cursor = 'help'; };


						// select : Type de Réglement
						var oSelect_1 = document.createElement("select");
						oSelect_1.setAttribute("name","NRC_IDF_TYPE_REGLEMENT");
						oSelect_1.setAttribute("id","NRC_IDF_TYPE_REGLEMENT");
						oSelect_1.setAttribute("class","tabSelectCourt");
						oSelect_1.setAttribute("className","tabSelectCourt");
						oSelect_1.setAttribute("size","1");

							// Ajout des options via Ajax
							var xhr_object		 = getHTTPObject();
							var sResponse		 = "";
							var bMode			 = false;		// mode synchrone
							var sMethod			 = "POST";
							var sAction			 = "ajax/ajax_getOptionList.php";
							var sData 			 = "sChoix=typeReglement";

							// Test d'existence de l'objet XmlHttpRequest
							if (!xhr_object) return;

							// Ouverture de la connexion au fichier avec la méthode choisie
							xhr_object.open(sMethod, sAction, bMode);

							// Quand les données sont traitées
							// on affiche la réponse
							xhr_object.onreadystatechange = function () {
								if(xhr_object.readyState == 4) {
									sResponse = xhr_object.responseText;
									var aOptions = sResponse.split("|");
									var iOptions = aOptions.length;
									var sDebug = "";
									for(var i=0;i<iOptions;i++){
										var iSeparator = aOptions[i].indexOf(":");
										var sValue = aOptions[i].substring(0,iSeparator);
										var sLabel = aOptions[i].substring(iSeparator+1);
										sDebug += " - "+i+" : "+sValue+" => "+sLabel+"\n";
										oSelect_1.options[i] = new Option(sLabel,sValue);
									}
								}
							};

							// Ajout des en-têtes nécessaires à la requête en POST
							if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

							// Envoi des données
							xhr_object.send(sData);


						// select : Echéance de Réglement
						var oSelect_2 = document.createElement("select");
						oSelect_2.setAttribute("name","NRC_IDF_ECHEANCE_REGLEMENT");
						oSelect_2.setAttribute("id","NRC_IDF_ECHEANCE_REGLEMENT");
						oSelect_2.setAttribute("class","tabSelectCourt");
						oSelect_2.setAttribute("className","tabSelectCourt");
						oSelect_2.setAttribute("size","1");

							// Ajout des options via Ajax
							// select : Echéance de Réglement
							var xhr_object		 = getHTTPObject();
							var sResponse		 = "";
							var bMode			 = false;		// mode synchrone
							var sMethod			 = "POST";
							var sAction			 = "ajax/ajax_getOptionList.php";
							var sData 			 = "sChoix=echeanceReglement";

							// Test d'existence de l'objet XmlHttpRequest
							if (!xhr_object) return;

							// Ouverture de la connexion au fichier avec la méthode choisie
							xhr_object.open(sMethod, sAction, bMode);

							// Quand les données sont traitées
							// on affiche la réponse
							xhr_object.onreadystatechange = function () {
								if(xhr_object.readyState == 4) {
									sResponse = xhr_object.responseText;
									var aOptions = sResponse.split("|");
									var iOptions = aOptions.length;
									var sDebug = "";
									for(var i=0;i<iOptions;i++){
										var iSeparator = aOptions[i].indexOf(":");
										var sValue = aOptions[i].substring(0,iSeparator);
										var sLabel = aOptions[i].substring(iSeparator+1);
										oSelect_2.options[i] = new Option(sLabel,sValue);
									}
								}
							};

							// Ajout des en-têtes nécessaires à la requête en POST
							if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

							// Envoi des données
							xhr_object.send(sData);

						aCase[0].appendChild(oInput_1);
						aCase[0].appendChild(oInput_2);
						aCase[0].appendChild(document.createTextNode(" : "));
						aCase[0].appendChild(oSelect_1);
						aCase[0].appendChild(document.createTextNode(" "));
						aCase[0].appendChild(oSelect_2);


					// Case n°1
					aCase[1] = document.createElement("td");
					aCase[1].setAttribute("class","tabCaseLineReglement impair");
					aCase[1].setAttribute("className","tabCaseLineReglement impair");
					aCase[1].innerHTML = "&nbsp;";

					// Case n°2 : montant
					aCase[2] = document.createElement("td");
					aCase[2].setAttribute("class","tabCaseLineReglement tabCasePaddingRight impair");
					aCase[2].setAttribute("className","tabCaseLineReglement tabCasePaddingRight impair");

						// input.text : Montant
						var oInput_1 = document.createElement("input");
						oInput_1.setAttribute("name","NRC_MONTANT");
						oInput_1.setAttribute("id","NRC_MONTANT");
						oInput_1.setAttribute("class","tabInputCourt");
						oInput_1.setAttribute("className","tabInputCourt");
						oInput_1.setAttribute("type","text");
						oInput_1.setAttribute("size","50");
						oInput_1.setAttribute("maxlength","255");
						oInput_1.setAttribute("onChange","changeRestantDu(getObjet('NRC_IDF_BON_COMMANDE').value,this.value,getObjet('NRC_MONTANT_OLD').value,'ttc')");
						oInput_1.setAttribute("onKeyUp","changeRestantDu(getObjet('NRC_IDF_BON_COMMANDE').value,this.value,getObjet('NRC_MONTANT_OLD').value,'ttc')");
						oInput_1.setAttribute("value","");

							// Récupératio du montant total du solde pour la commande en cours
							var xhr_object		 = getHTTPObject();
							var sResponse		 = "";
							var bMode		     = false; // mode asynchrone
							var sMethod			 = "POST";
							var sAction			 = "ajax/ajax_bons_commandes.php";
							var sData 			 = "type=ttc&idfCommande="+escape(iIdfBonCommande);

							// Test d'existence de l'objet XmlHttpRequest
							if (!xhr_object) return;

							// Ouverture de la connexion au fichier avec la méthode choisie
							xhr_object.open(sMethod, sAction, bMode);

							// Quand les données sont traitées
							// on affiche la réponse
							xhr_object.onreadystatechange = function () {
								if(xhr_object.readyState == 4) {
									sResponse = -1 * xhr_object.responseText;
					       			oInput_1.setAttribute("value",sResponse);
								}
							};

							// Ajout des en-têtes nécessaires à la requête en POST
							if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

							// Envoi des données
							xhr_object.send(sData);


						// input.text : Date
						var oInput_2 = document.createElement("input");
						oInput_2.setAttribute("name","NRC_MONTANT_OLD");
						oInput_2.setAttribute("id","NRC_MONTANT_OLD");
						oInput_2.setAttribute("type","hidden");
						oInput_2.setAttribute("value","");

						aCase[2].appendChild(oInput_1);
						aCase[2].appendChild(oInput_2);

					// Case n°3
					aCase[3] = document.createElement("td");
					aCase[3].setAttribute("class","tabCaseLineReglement tabCasePaddingRight impair");
					aCase[3].setAttribute("className","tabCaseLineReglement tabCasePaddingRight impair");
					aCase[3].innerHTML = "&nbsp;";

					// Case n°4 : lien pour valider les modifications
					aCase[4] = document.createElement("td");
					aCase[4].setAttribute("class","tabCaseLineReglement impair");
					aCase[4].setAttribute("className","tabCaseLineReglement impair");
					aCase[4].setAttribute("align","center");

						var oImg_1 = document.createElement("img");
						oImg_1.setAttribute("onclick","swapFormMode('createReglement',null,"+iIdfBonCommande+")");
						oImg_1.onclick = function(){ swapFormMode('createReglement',null,iIdfBonCommande); };
						oImg_1.setAttribute("src","../images/interface/s_okay2.png");
						oImg_1.setAttribute("alt","Valider");
						oImg_1.setAttribute("title","Valider");
						oImg_1.setAttribute("width","11");
						oImg_1.setAttribute("height","11");
						oImg_1.setAttribute("onmouseover","this.style.cursor = 'pointer';");
						oImg_1.onmouseover = function (){ this.style.cursor = 'pointer'; };

						var oImg_2 = document.createElement("img");
						oImg_2.setAttribute("onclick","swapFormMode('annulerCreate',null,"+iIndex+")");
						oImg_2.onclick = function(){ swapFormMode('annulerCreate',null,iIndex); };
						oImg_2.setAttribute("src","../images/interface/s_error2.png");
						oImg_2.setAttribute("alt","Annuler");
						oImg_2.setAttribute("title","Annuler");
						oImg_2.setAttribute("width","11");
						oImg_2.setAttribute("height","11");
						oImg_2.setAttribute("onmouseover","this.style.cursor = 'pointer';");
						oImg_2.onmouseover = function (){ this.style.cursor = 'pointer'; };

						aCase[4].appendChild(oImg_1);
						aCase[4].appendChild(document.createTextNode("   "));
						aCase[4].appendChild(oImg_2);

					// Case n°5
					aCase[5] = document.createElement("td");
					aCase[5].setAttribute("class","tabCaseLineReglement impair");
					aCase[5].setAttribute("className","tabCaseLineReglement impair");
					aCase[5].setAttribute("align","center");
					aCase[5].innerHTML = "&nbsp;";

					oNewLine.appendChild(aCase[0]);
					oNewLine.appendChild(aCase[1]);
					oNewLine.appendChild(aCase[2]);
					oNewLine.appendChild(aCase[3]);
					oNewLine.appendChild(aCase[4]);
					oNewLine.appendChild(aCase[5]);

				/*
				alert(" - Réglement pour le bon de Commande n°"+iIdfBonCommande+"\n"+
					  " - rowIndex de la ligne : "+iIndex);
				*/

			break;



			// Affichage du formulaire pour la ligne
			case "update":

				// Mémorisation du contenu de la ligne à modifier
				// ------------------------
				for(var i=0;i<iCase;i++){
					var oCase = aCase[i];
					oCase.$content = oCase.innerHTML;
				}

				// Masquage des liens des autres lignes
				// -------------------------
				for(var i=0;i<document.links.length;i++){
					var oLink = document.links[i];
					if(oLink && oLink.id && oLink.id.substring(0,11) == "linkUpdate_"){
						changeClassName(oLink.id,(oLink.id == "linkUpdate_"+iIdfReglement ? "visible" : "hidden" ));
					}
				}

				// Mise en place du formulaire de mise à jour
				// -------------------------

					// Case n°0 : Date et type de réglement
					oCase = aCase[0];

						// input.text : IDF Bon Commande
						var oInput_1 = document.createElement("input");
						oInput_1.setAttribute("name","FORM_NRC_IDF_BON_COMMANDE_"+iIdfReglement);
						oInput_1.setAttribute("id","FORM_NRC_IDF_BON_COMMANDE_"+iIdfReglement);
						oInput_1.setAttribute("type","hidden");
						oInput_1.setAttribute("value",getObjet("NRC_IDF_BON_COMMANDE_"+iIdfReglement).innerHTML);


						// input.text : Date
						var oInput_2 = document.createElement("input");
						oInput_2.setAttribute("name","FORM_NRC_DATE_REGLEMENT_"+iIdfReglement);
						oInput_2.setAttribute("id","FORM_NRC_DATE_REGLEMENT_"+iIdfReglement);
						oInput_2.setAttribute("class","tabInputMoyen");
						oInput_2.setAttribute("className","tabInputMoyen");
						oInput_2.setAttribute("type","text");
						oInput_2.setAttribute("size","50");
						oInput_2.setAttribute("alt","format accepté : 'jj.mm.aaaa hh:mm:ss'");
						oInput_2.setAttribute("title","format accepté : 'jj.mm.aaaa hh:mm:ss'");
						oInput_2.setAttribute("maxlength","255");
						oInput_2.setAttribute("value",getObjet("NRC_DATE_REGLEMENT_"+iIdfReglement).innerHTML);
						oInput_2.setAttribute("onmouseover","this.style.cursor = 'help';");
						oInput_2.onmouseover = function (){ this.style.cursor = 'help'; };


						// select : Type de Réglement
						var iSelected_1 = 0;
						var oSelect_1 = document.createElement("select");
						oSelect_1.setAttribute("name","FORM_NRC_IDF_TYPE_REGLEMENT_"+iIdfReglement);
						oSelect_1.setAttribute("id","FORM_NRC_IDF_TYPE_REGLEMENT_"+iIdfReglement);
						oSelect_1.setAttribute("class","tabSelectCourt");
						oSelect_1.setAttribute("className","tabSelectCourt");
						oSelect_1.setAttribute("size","1");

							// Ajout des options via Ajax
							var xhr_object		 = getHTTPObject();
							var sResponse		 = "";
							var bMode			 = false;		// mode synchrone
							var sMethod			 = "POST";
							var sAction			 = "ajax/ajax_getOptionList.php";
							var sData 			 = "sChoix=typeReglement";

							// Test d'existence de l'objet XmlHttpRequest
							if (!xhr_object) return;

							// Ouverture de la connexion au fichier avec la méthode choisie
							xhr_object.open(sMethod, sAction, bMode);

							// Quand les données sont traitées
							// on affiche la réponse
							xhr_object.onreadystatechange = function () {
								if(xhr_object.readyState == 4) {
									sResponse = xhr_object.responseText;
									var aOptions = sResponse.split("|");
									var iOptions = aOptions.length;
									var sDebug = "";
									for(var i=0;i<iOptions;i++){
										var iSeparator = aOptions[i].indexOf(":");
										var sValue = aOptions[i].substring(0,iSeparator);
										var sLabel = aOptions[i].substring(iSeparator+1);
										sDebug += " - "+i+" : "+sValue+" => "+sLabel+"\n";
										oSelect_1.options[i] = new Option(sLabel,sValue);
										if(sValue == getObjet("NRC_IDF_TYPE_REGLEMENT_"+iIdfReglement).innerHTML){
											iSelected_1 = i;
										}
									}
									//alert(sDebug);
								}
							};

							// Ajout des en-têtes nécessaires à la requête en POST
							if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

							// Envoi des données
							xhr_object.send(sData);


						// select : Echéance de Réglement
						var iSelected_2 = 0;
						var oSelect_2 = document.createElement("select");
						oSelect_2.setAttribute("name","FORM_NRC_IDF_ECHEANCE_REGLEMENT_"+iIdfReglement);
						oSelect_2.setAttribute("id","FORM_NRC_IDF_ECHEANCE_REGLEMENT_"+iIdfReglement);
						oSelect_2.setAttribute("class","tabSelectCourt");
						oSelect_2.setAttribute("className","tabSelectCourt");
						oSelect_2.setAttribute("size","1");

							// Ajout des options via Ajax
							// select : Echéance de Réglement
							var xhr_object		 = getHTTPObject();
							var sResponse		 = "";
							var bMode			 = false;		// mode synchrone
							var sMethod			 = "POST";
							var sAction			 = "ajax/ajax_getOptionList.php";
							var sData 			 = "sChoix=echeanceReglement";

							// Test d'existence de l'objet XmlHttpRequest
							if (!xhr_object) return;

							// Ouverture de la connexion au fichier avec la méthode choisie
							xhr_object.open(sMethod, sAction, bMode);

							// Quand les données sont traitées
							// on affiche la réponse
							xhr_object.onreadystatechange = function () {
								if(xhr_object.readyState == 4) {
									sResponse = xhr_object.responseText;
									var aOptions = sResponse.split("|");
									var iOptions = aOptions.length;
									var sDebug = "";
									for(var i=0;i<iOptions;i++){
										var iSeparator = aOptions[i].indexOf(":");
										var sValue = aOptions[i].substring(0,iSeparator);
										var sLabel = aOptions[i].substring(iSeparator+1);
										sDebug += " - "+i+" : "+sValue+" => "+sLabel+"\n";
										oSelect_2.options[i] = new Option(sLabel,sValue);
										if(sValue == getObjet("NRC_IDF_ECHEANCE_REGLEMENT_"+iIdfReglement).innerHTML){
											iSelected_2 = i;
										}
									}
									//alert(sDebug);
								}
							};

							// Ajout des en-têtes nécessaires à la requête en POST
							if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

							// Envoi des données
							xhr_object.send(sData);

						while(oCase.hasChildNodes()==true) oCase.removeChild(oCase.childNodes[0]);
						oCase.appendChild(oInput_1);
						oCase.appendChild(oInput_2);
						oCase.appendChild(document.createTextNode(" : "));
						oCase.appendChild(oSelect_1);
						oSelect_1.options.selectedIndex = iSelected_1;
						oCase.appendChild(document.createTextNode(" "));
						oCase.appendChild(oSelect_2);
						oSelect_2.options.selectedIndex = iSelected_2;


					// Case n°1
					oCase = aCase[1];
					oCase.innerHTML = "&nbsp;";

					// Case n°2 : montant
					oCase = aCase[2];

						// input.text : Montant
						var oInput_1 = document.createElement("input");
						oInput_1.setAttribute("name","FORM_NRC_MONTANT_"+iIdfReglement);
						oInput_1.setAttribute("id","FORM_NRC_MONTANT_"+iIdfReglement);
						oInput_1.setAttribute("class","tabInputCourt");
						oInput_1.setAttribute("className","tabInputCourt");
						oInput_1.setAttribute("type","text");
						oInput_1.setAttribute("size","50");
						oInput_1.setAttribute("maxlength","255");
						oInput_1.setAttribute("onChange","changeRestantDu(getObjet('NRC_IDF_BON_COMMANDE').value,this.value,getObjet('NRC_MONTANT_OLD').value,'ttc')");
						oInput_1.setAttribute("onKeyUp","changeRestantDu(getObjet('NRC_IDF_BON_COMMANDE').value,this.value,getObjet('NRC_MONTANT_OLD').value,'ttc')");
						oInput_1.setAttribute("value",getObjet("NRC_MONTANT_"+iIdfReglement).innerHTML);

						// input.text : Date
						var oInput_2 = document.createElement("input");
						oInput_2.setAttribute("name","FORM_NRC_MONTANT_OLD_"+iIdfReglement);
						oInput_2.setAttribute("id","FORM_NRC_MONTANT_OLD_"+iIdfReglement);
						oInput_2.setAttribute("type","hidden");
						oInput_2.setAttribute("value",getObjet("NRC_MONTANT_"+iIdfReglement).innerHTML);

						while(oCase.hasChildNodes()==true) oCase.removeChild(oCase.childNodes[0]);
						oCase.appendChild(oInput_1);
						oCase.appendChild(oInput_2);

					// Case n°3
					oCase = aCase[3];
					oCase.innerHTML = "&nbsp;";

					// Case n°4 : lien pour valider les modifications
					oCase = aCase[4];

						var oImg_1 = document.createElement("img");
						oImg_1.setAttribute("onclick","swapFormMode('updateReglement',"+iIdfReglement+")");
						oImg_1.onclick = function(){ swapFormMode('updateReglement',iIdfReglement); };
						oImg_1.setAttribute("src","../images/interface/s_okay2.png");
						oImg_1.setAttribute("alt","Valider");
						oImg_1.setAttribute("title","Valider");
						oImg_1.setAttribute("width","11");
						oImg_1.setAttribute("height","11");
						oImg_1.setAttribute("onmouseover","this.style.cursor = 'pointer';");
						oImg_1.onmouseover = function (){ this.style.cursor = 'pointer'; };

						var oImg_2 = document.createElement("img");
						oImg_2.setAttribute("onclick","swapFormMode('annuler',"+iIdfReglement+")");
						oImg_2.onclick = function(){ swapFormMode('annuler',iIdfReglement); };
						oImg_2.setAttribute("src","../images/interface/s_error2.png");
						oImg_2.setAttribute("alt","Annuler");
						oImg_2.setAttribute("title","Annuler");
						oImg_2.setAttribute("width","11");
						oImg_2.setAttribute("height","11");
						oImg_2.setAttribute("onmouseover","this.style.cursor = 'pointer';");
						oImg_2.onmouseover = function (){ this.style.cursor = 'pointer'; };

						while(oCase.hasChildNodes()==true) oCase.removeChild(oCase.childNodes[0]);
						oCase.appendChild(oImg_1);
						oCase.appendChild(document.createTextNode("   "));
						oCase.appendChild(oImg_2);

					// Case n°5
					oCase = aCase[5];
					oCase.innerHTML = "&nbsp;";

			break;

			// Mise à jour des données
			case "updateReglement":

				// Mémorisation des données du formulaire
				// -------------------------

					// référence au formulaire à analyser
					var f = document.forms['formDeleteUpdate'].elements;

					// mémorisation des index des éléments du formulaire
					// en fonction de leur nom pour y accéder à cause d'un bug IE
					// qui empêche d'accéder aux éléments créés dynamiquement
					var els = el_id_by_name(f);


				// Récupération des données du formulaire
				// -------------------------

					// input.text : Bon de Commande
					var iIdfBonCommande = f[els['FORM_NRC_IDF_BON_COMMANDE_'+iIdfReglement]].value;

					// input.text : Date
					var sDate = f[els['FORM_NRC_DATE_REGLEMENT_'+iIdfReglement]].value;

					// select : Type de Réglement
					var iTypeReglement = f[els['FORM_NRC_IDF_TYPE_REGLEMENT_'+iIdfReglement]].value;
					var sTypeReglement = f[els['FORM_NRC_IDF_TYPE_REGLEMENT_'+iIdfReglement]].options[f[els['FORM_NRC_IDF_TYPE_REGLEMENT_'+iIdfReglement]].options.selectedIndex].text;

					// select : Echéance de Réglement
					var iEcheanceReglement = f[els['FORM_NRC_IDF_ECHEANCE_REGLEMENT_'+iIdfReglement]].value;
					var sEcheanceReglement = f[els['FORM_NRC_IDF_ECHEANCE_REGLEMENT_'+iIdfReglement]].options[f[els['FORM_NRC_IDF_ECHEANCE_REGLEMENT_'+iIdfReglement]].options.selectedIndex].text;

					// input.text : Montant
					var sMontant = f[els['FORM_NRC_MONTANT_'+iIdfReglement]].value;

					// FiltreClient
					var sFiltreClient = f[els['FILTRE_CLIENT']].value;

					// FiltreClient
					var sFiltreFacture = f[els['FILTRE_FACTURE']].value;


				// Vérification des champs du formulaire
				// -------------------------

					var msg_erreur	 = "";							// construction du message d'erreur par concaténation successives
					var en_tete		 = "";							// en-tête du message d'erreur
					var nb_erreur	 = 0;							// comptabilisation des erreurs
					var tab_focus	 = new Array();					// tableau de mémorisation du focus pour se repositionner sur le premier éléments manquant
					var bContinue	 = true;

					if(iIdfBonCommande == "") {
						msg_erreur = msg_erreur + " - Veuillez indiquer l'identifiant du Bon de Commande !\n";
						tab_focus[nb_erreur] = null;
						nb_erreur = nb_erreur + 1;
					}

					if(sDate == "") {
						msg_erreur = msg_erreur + " - Veuillez compléter le champ Date de Réglement !\n";
						tab_focus[nb_erreur] = "NRC_DATE_REGLEMENT";
						nb_erreur = nb_erreur + 1;
					}

					if(iTypeReglement == "") {
						msg_erreur = msg_erreur + " - Veuillez compléter le champ Type de Réglement!\n";
						tab_focus[nb_erreur] = "NRC_IDF_TYPE_REGLEMENT";
						nb_erreur = nb_erreur + 1;
					}

					if(iEcheanceReglement == "") {
						msg_erreur = msg_erreur + " - Veuillez compléter le champ Echéance!\n";
						tab_focus[nb_erreur] = "NRC_IDF_ECHEANCE_REGLEMENT";
						nb_erreur = nb_erreur + 1;
					}

					if(sMontant == "") {
						msg_erreur = msg_erreur + " - Veuillez compléter le champ Montant!\n";
						tab_focus[nb_erreur] = "NRC_MONTANT";
						nb_erreur = nb_erreur + 1;
					}

					if(nb_erreur != 0) {
						en_tete = "--------------------------------------------------------\n" + en_tete;
						en_tete = "*     Vous avez "+nb_erreur+" erreur"+(nb_erreur > 1 ? 's':'')+" à corriger :     *\n" + en_tete;
						en_tete = "--------------------------------------------------------\n" + en_tete;
						en_tete = "                                                    \n" + en_tete;
						msg_erreur = en_tete + msg_erreur;
						alert(msg_erreur);
						if(tab_focus[0] != null) eval("f[els['FORM_" + tab_focus[0] + "_"+iIdfReglement+"']]").focus();
						bContinue =  false;
					}


				// Affichage du contenu de la ligne mémorisé
				// ------------------------

					if(bContinue){

						// Actualisation du contenu
						// avec mise à jour de l'enregistrement modifié
						// -------------------------
						var oContent		 = getObjet("webtoolContent");
						oContent.innerHTML	 = "Chargement en cours ... !";
						var xhr_object		 = getHTTPObject();
						var sResponse		 = "";
						var bMode			 = false;		// mode synchrone
						var sMethod			 = "POST";
						var sAction			 = "ajax/ajax_reglements_clients.php";
						var sData			 = "";
						sData 				 += "choix=update";
						sData 				 += "&update=valider";
						sData 				 += "&NRC_IDF_REGLEMENT="+escape(iIdfReglement);
						sData 				 += "&NRC_IDF_BON_COMMANDE="+escape(iIdfBonCommande);
						sData 				 += "&NRC_IDF_TYPE_REGLEMENT="+escape(iTypeReglement);
						sData 				 += "&NRC_IDF_ECHEANCE_REGLEMENT="+escape(iEcheanceReglement);
						sData 				 += "&NRC_MONTANT="+escape(sMontant);
						sData 				 += "&NRC_DATE_REGLEMENT="+escape(sDate);
						sData 				 += "&FILTRE_CLIENT="+escape(sFiltreClient);
						sData 				 += "&FILTRE_FACTURE="+escape(sFiltreFacture);

						// Test d'existence de l'objet XmlHttpRequest
						if (!xhr_object) return;

						// Ouverture de la connexion au fichier avec la méthode choisie
						xhr_object.open(sMethod, sAction, bMode);

						// Quand les données sont traitées
						// on affiche la réponse
						xhr_object.onreadystatechange = function () {
							if(xhr_object.readyState == 4) {
								sResponse = xhr_object.responseText;
								oContent.innerHTML = sResponse;
							}
						};

						// Ajout des en-têtes nécessaires à la requête en POST
						if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

						// Envoi des données
						xhr_object.send(sData);

					}

			break;

			// Liste des Enregistrements e fonction des filtres utilisés
			case "list":

				// Mémorisation des données du formulaire
				// -------------------------

					// référence au formulaire à analyser
					var f = document.forms['formDeleteUpdate'].elements;

					// mémorisation des index des éléments du formulaire
					// en fonction de leur nom pour y accéder à cause d'un bug IE
					// qui empêche d'accéder aux éléments créés dynamiquement
					var els = el_id_by_name(f);


				// Récupération des données du formulaire
				// -------------------------

					// FiltreClient
					var sFiltreClient = f[els['FILTRE_CLIENT']].value;

					// FiltreClient
					var sFiltreFacture = f[els['FILTRE_FACTURE']].value;


				// Actualisation du contenu
				// avec mise à jour de l'enregistrement modifié
				// -------------------------

					var oContent		 = getObjet("webtoolContent");
					oContent.innerHTML	 = "Chargement en cours ... !";
					var xhr_object		 = getHTTPObject();
					var sResponse		 = "";
					var bMode			 = false;		// mode synchrone
					var sMethod			 = "POST";
					var sAction			 = "ajax/ajax_reglements_clients.php";
					var sData			 = "";
					sData 				 += "choix=list";
					sData 				 += "&FILTRE_CLIENT="+escape(sFiltreClient);
					sData 				 += "&FILTRE_FACTURE="+escape(sFiltreFacture);

					// Test d'existence de l'objet XmlHttpRequest
					if (!xhr_object) return;

					// Ouverture de la connexion au fichier avec la méthode choisie
					xhr_object.open(sMethod, sAction, bMode);

					// Quand les données sont traitées
					// on affiche la réponse
					xhr_object.onreadystatechange = function () {
						if(xhr_object.readyState == 4) {
							sResponse = xhr_object.responseText;
							oContent.innerHTML = sResponse;
						}
					};

					// Ajout des en-têtes nécessaires à la requête en POST
					if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

					// Envoi des données
					xhr_object.send(sData);

			break;


			// Suppression des enregistrements cochés
			case "deleteReglement":

				// Mémorisation des données du formulaire
				// -------------------------

					// référence au formulaire à analyser
					var f = document.forms['formDeleteUpdate'].elements;

					// mémorisation des index des éléments du formulaire
					// en fonction de leur nom pour y accéder à cause d'un bug IE
					// qui empêche d'accéder aux éléments créés dynamiquement
					var els = el_id_by_name(f);


				// Récupération des données du formulaire
				// -------------------------

					var oCb = document.getElementsByName('suppression_reglement_client[]'); // cases à cocher des attributs
					var total = oCb.length;						  // nombre total de cases à cocher
					var aSuppression = new Array();
					// on teste chaque case
					for(i=0;i<total;i++){
						if(oCb[i].checked) aSuppression.push(oCb[i].value);
					}
					var sSuppression = aSuppression.join('|');

					// FiltreClient
					var sFiltreClient = f[els['FILTRE_CLIENT']].value;

					// FiltreClient
					var sFiltreFacture = f[els['FILTRE_FACTURE']].value;


				// Vérification des champs du formulaire
				// -------------------------

					var msg_erreur	 = "";							// construction du message d'erreur par concaténation successives
					var nb_erreur	 = 0;							// comptabilisation des erreurs
					var tab_focus	 = new Array();					// tableau de mémorisation du focus pour se repositionner sur le premier éléments manquant
					var bContinue	 = true;

					if(sSuppression == "") {
						msg_erreur = msg_erreur + "Veuillez sélectionner au moins un Réglement Client\navant de cliquer sur le bouton Supprimer !\n";
						tab_focus[nb_erreur] = null;
						nb_erreur = nb_erreur + 1;
					}

					if(nb_erreur != 0) {
						msg_erreur = msg_erreur;
						alert(msg_erreur);
						if(tab_focus[0] != null) eval("f[els['FORM_" + tab_focus[0] + "_"+iIdfReglement+"']]").focus();
						bContinue =  false;
					}


				// Affichage du contenu de la ligne mémorisé
				// ------------------------

					if(bContinue){

						// Actualisation du contenu
						// avec mise à jour de l'enregistrement modifié
						// -------------------------
						var oContent		 = getObjet("webtoolContent");
						oContent.innerHTML	 = "Chargement en cours ... !";
						var xhr_object		 = getHTTPObject();
						var sResponse		 = "";
						var bMode			 = false;		// mode synchrone
						var sMethod			 = "POST";
						var sAction			 = "ajax/ajax_reglements_clients.php";
						var sData			 = "";
						sData 				 += "choix=delete";
						sData 				 += "&source=AJAX";
						sData 				 += "&suppression_reglement_client="+escape(sSuppression);
						sData 				 += "&FILTRE_CLIENT="+escape(sFiltreClient);
						sData 				 += "&FILTRE_FACTURE="+escape(sFiltreFacture);

						// Test d'existence de l'objet XmlHttpRequest
						if (!xhr_object) return;

						// Ouverture de la connexion au fichier avec la méthode choisie
						xhr_object.open(sMethod, sAction, bMode);

						// Quand les données sont traitées
						// on affiche la réponse
						xhr_object.onreadystatechange = function () {
							if(xhr_object.readyState == 4) {
								sResponse = xhr_object.responseText;
								oContent.innerHTML = sResponse;
							}
						};

						// Ajout des en-têtes nécessaires à la requête en POST
						if(sMethod == "POST") xhr_object.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

						// Envoi des données
						xhr_object.send(sData);

					}

			break;

		}
		//alert(sDebug);

	}


	function el_id_by_name(el) {
		var els = new Array();
		var sDebug = "";
		for (i=0;i<el.length;i++) {
			if (el[i].name) {
				els[el[i].name] = i;
				sDebug += " - "+i+" : els["+ el[i].name +"] = "+i+"\n";
			}
		}
		//alert(sDebug);
		return els;
	}


	  // Correctly handle PNG transparency in Win IE 5.5 or higher.
	  // http://homepage.ntlworld.com/bobosola. Updated 02-March-2004

	  function correctPNG(){

	     for(var i=0; i<document.images.length; i++){

	       var img = document.images[i];
	       var imgName = img.src.toUpperCase();
	       if (imgName.substring(imgName.length-3, imgName.length) == "PNG"){

	         var imgID = (img.id) ? "id='" + img.id + "' " : "";
	         var imgClass = (img.className) ? "class='" + img.className + "' " : "";
	         var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
	         var imgStyle = "display:inline-block;" + img.style.cssText;
	         if (img.align == "left") imgStyle = "float:left;" + imgStyle;
	         if (img.align == "right") imgStyle = "float:right;" + imgStyle;
	         if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle;
	         var strNewHTML = "";
	         strNewHTML += "<span " + imgID + imgClass + imgTitle;
	         strNewHTML += " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";";
	         strNewHTML += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader";
	         strNewHTML += "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>";
	         img.outerHTML = strNewHTML;
	         i = i-1;
	      }

	    }

	  }
	  //window.attachEvent("onload", correctPNG);



	/**
	 *
	 * @access public
	 * @return void
	 **/
	function _F(_o){

		// Récupération du calque parent
		var oParent = _o.parentNode;
		var aLinks	= Array();

		// Mémorisation des liens enfants
		for(var j=0;j<oParent.childNodes.length;j++){
			var oChild = oParent.childNodes[j];
			if(!oChild.tagName || oChild.tagName != "A") continue;
			aLinks.push(oChild);
		}

		// Premier passage
		if(_o.bShown == null){
			// le menu est visible
			_o.bShown = true;
		}

		var iLinks = aLinks.length;
		// Afficher / Masquer les liens enfants
		for(var j=0;j<iLinks;j++){
			var oChild = aLinks[j];
			oChild.style.display = (_o.bShown ? "none" : "block" );
		}

		// Mémorisation de l'Affichage ou Masquage de la sous-navigation
		_o.bShown = !_o.bShown;

	}



	/**
	*
	* @access public
	* @return void
	**/
	function showHideSubNavigation(){

		var iNbDivNavigation = 0;
		var aDiv = document.getElementsByTagName("div");
		var iDiv = aDiv.length;

		for(var i=0;i<iDiv;i++){
			var oDiv = aDiv[i];
			if(!oDiv.className || oDiv.className != "module_titre") continue;

			oDiv.onmouseover = function(){ this.style.cursor = "pointer";};
			oDiv.onmouseout	 = function(){ this.style.cursor = ""; };

			switch(nav){

				// Firefox & Netscape
				case "Netscape":

					oDiv.onclick	 = function(){

						// Récupération du calque parent
						var oParent = this.parentNode;
						var aLinks	= Array();

						// Mémorisation des liens enfants
						for(var j=0;j<oParent.childNodes.length;j++){
							var oChild = oParent.childNodes[j];
							if(!oChild.tagName || oChild.tagName != "A") continue;
							aLinks.push(oChild);
						}

						// Premier passage
						if(this.bShown == null){
							// le menu est visible
							this.bShown = true;
						}

						var iLinks = aLinks.length;
						// Afficher / Masquer les liens enfants
						for(var j=0;j<iLinks;j++){
							var oChild = aLinks[j];
							oChild.style.display = (this.bShown ? "none" : "block" );
						}

						// Mémorisation de l'Affichage ou Masquage de la sous-navigation
						this.bShown = !this.bShown;

					};

					oDiv.onclick();

				break;

				// IE
				case "IE":
				default:

					oDiv.onclick	 = function(){

						// Récupération du calque parent
						var oParent = this.parentElement;
						var aLinks	= Array();

						// Mémorisation des liens enfants
						for(var j=0;j<oParent.childNodes.length;j++){
							var oChild = oParent.childNodes[j];
							if(!oChild.tagName || oChild.tagName != "A") continue;
							aLinks.push(oChild);
						}

						// Premier passage
						if(this.bShown == null){
							// le menu est visible
							this.bShown = true;
						}

						var iLinks = aLinks.length;
						// Afficher / Masquer les liens enfants
						for(var j=0;j<iLinks;j++){
							var oChild = aLinks[j];
							oChild.style.display = (this.bShown ? "none" : "block" );
						}

						this.style.backgroundImage		 = (this.bShown ? "url(../images/interface/item_ltr.png)" : "url(../images/interface/s_desc.png)" );
						this.style.backgroundRepeat		 = "no-repeat";
						this.style.backgroundPosition	 = "0px 3px";

						// Mémorisation de l'Affichage ou Masquage de la sous-navigation
						this.bShown = !this.bShown;

					};

					oDiv.click();

				break;

			}

		}

	}



	var _tmpOnload = window.onload;
	window.onload = function(){
		if(_tmpOnload) _tmpOnload();
		showHideSubNavigation();
		showActiveMenu(_MEMO_MENU_ACTIF);
	};



/* fin Scripts Généraux================================================================================= */










/* ========================================================================================
	::	Scripts Développeur
======================================================================================== */




	/* 	- VoirPropriete() ----------------------------------------------------------
	|	Description :
	|		-	Fonction permettant de voir toutes les propriétés des objets pour
	|			lesquels l'objet parent est passé en paramètre.
	|	Aguments OBLIGATOIRES
	|		- argument 0 (objet)	 : f		=>	l'objet parent à Analyser et à parcourrir
	|	Return :
	|		- toutes les propriétés de l'objet ainsi que celles des objets enfants
	------------------------------------------------------------------------------------ */
	function VoirPropriete(f) {
		var object = eval(f.object.value);
		w = open("","popup","width=400,height=400,scrollbars=yes,resizable=yes");
		w.document.write("<HTML><HEAD><TITLE>Propriétés de "+f.object.value+"</TITLE></HEAD>");
		w.document.write("<BODY><FONT face='arial' size=1>");
		if (object) {
			for (var i in object) {
				w.document.write("<B>"+i+"</B> = "+object[i]+"<BR>");
			}
		} else {
			w.document.write("L'objet <B>"+f.object.value+"</B> n'existe pas...<BR> Vérifiez votre saisie.");
		}
		w.document.write("</FONT></BODY></HTML>");
		w.document.close();
		w.focus();
	}
	// fin Fonction VoirPropriete(f)-----------------------------------------------------




/* fin Scripts Développeur=============================================================================== */
