	// Code javascript du configurateur
	var isIE=document.all;
	var popup;
	//****************************************************************************************************************	
	//Créer un pop-up
	//Affiche un popup
	function showPP(event) 
	{	
	    
		if (isIE) popup = window.createPopup();
		var src = getSrcElement(event);
		
		forceFireFox = arguments[1] != null;
		
		var width;
		if (src != null) 
		{
			//Si IE, on créer un popup car les DIV ne s'affichent pas au dessus des comboBox
			if (isIE && !forceFireFox)
			{
			    
				//Attache une feuille de style au popup
				if(popup.document.styleSheets.length != 1)
					popup.document.createStyleSheet("../App_Themes/Aqua/Default.css")    
					
					//popup.document.createStyleSheet(Feuille_style());
				
				//Retrouve le contenu du div
				popup.document.body.innerHTML = document.getElementById("o-" + src.id).innerHTML;
				
				//Si on a spécifié une largeur pour le div
				width = document.getElementById("t-" + src.id);
                
				var popupBody = popup.document.body;
				popup.show(0, 0, 200, 0);
				var realHeight = popupBody.scrollHeight;
				var realWidth = popupBody.scrollWidth;
				
                
				popup.hide();
				popup.show(event.clientX - (getAbsoluteLeft(src.id)-20), 16, (realWidth > 200) ? realWidth : 200, realHeight, src);
				
			}
			//Sinon, on prend seulement un DIV, il n'y a pas le problème des combo avec Netscape & FireFox
			else
			{
				popup = document.getElementById("o-" + src.id);
				popup.style.visibility="hidden";
				popup.style.left = getAbsoluteLeft(src.id);			
				popup.style.top = getAbsoluteTop(src.id) + 15;			
				popup.style.visibility = 'visible';
			}
		}
	}
	
	function hidePP() 
	{ 
		//Si le popup n'est pas affiché (nomenclatures)
		if (popup != null)
		{
			if (isIE && !forceFireFox)
				popup.hide(); 
			else popup.style.visibility="hidden";
		}
	}
	
	function isVisible() { return popup.style.visibility == "visible"; }
	function getSrcElement(event) { return (isIE) ? event.srcElement : event.target; }

	//****************************************************************************************************************	
	
	
	//****************************************************************************************************************	
	//Encode une URL
	function URLencode(sStr) 
	{
    return escape(sStr).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27');
    }
    //****************************************************************************************************************	

	
	//****************************************************************************************************************	
	//Même affaire que document.getElementById mais en moins long
	function ElementID(id)
	{
		var ctrl = parent.document.getElementById(id);
		if (ctrl == null)
		{
		    ctrl = document.getElementById(id);
		    return ctrl;
		} 
		else return ctrl;
	}
	//****************************************************************************************************************	


	//****************************************************************************************************************	
	//Permet de se déplacer d'une page à l'autre sans enregistrement
	function DeplacerSEnr(Destination)
	{	
		//location.replace(Destination);
		DeplacerSEnrFrame(Destination);
	}
	//****************************************************************************************************************		

//****************************************************************************************************************	
	//Permet de se déplacer d'une page à l'autre sans enregistrement
	function DeplacerSEnrNewWindow(Destination)
	{	
		var win = window.open(Destination,'New','fullscreen=yes,resizable=yes','true');
	}
	//****************************************************************************************************************		


    //****************************************************************************************************************	
	//Permet de se déplacer d'une page à l'autre sans enregistrement
	function DeplacerSEnrFrame(Destination)
	{	
	    //Si fraMain existe, le menu de recherche n'est pas dans un frame
	    //Comme dans menu_recherche.asp
	    //Sinon comme dans employes.aspx
	    /*if (parent.document.getElementById("fraMain"))
		    location.replace(Destination);
		else
		    parent.location.replace(Destination);  */ 
		    
		if (parent.document.getElementById("fraMain"))
		    location.href = Destination;
		else
		    parent.location.href = Destination; 
	}
	//****************************************************************************************************************		


    //****************************************************************************************************************	
	//Permet de se déplacer d'une page à l'autre en enregistrant les modifications
	function DeplacerWEnrFrame(Destination)
	{
		var allerOu = parent.document.getElementById("AllerOu");
        /*var boFrame = true;
        
		if (allerOu == null)
		{
			allerOu = document.getElementById("AllerOu");
			boFrame = false;
		}*/
			
		if (allerOu == null)
		    DeplacerWEnr(Destination)
			//alert("Contrôle AllerOu requis non défini dans ls fonction DeplacerWEnrFrame !")			
		else
			{
				allerOu.value = Destination;
				//if (boFrame)
				    parent.document.forms[0].submit();
				//else
				    //document.forms[0].submit();
			}
	}
	//****************************************************************************************************************		
	
	
	//****************************************************************************************************************	
	//Permet de se déplacer d'une page à l'autre en enregistrant les modifications
	function DeplacerWEnr(Destination)
	{
		var allerOu = document.getElementById("AllerOu");

		if (allerOu == null)
		    DeplacerWEnrFrame(Destination);
			//alert('Contrôle AllerOu requis non défini dans ls fonction DeplacerWEnr !')
		else
			{
				allerOu.value = Destination;
				document.forms[0].submit();
			}
	}
	//****************************************************************************************************************		


	//****************************************************************************************************************	
	//Fonction de KeyPress pour les recherches et autres qui ne nécessitent qu'un paramètre de recherche
	function KeyPressRecherche(event,Sur) 
	{
		var Location;
		var LienSupp;
		var ctrl = getSrcElement(event);
		var key = event.keyCode;

		if (key == 13) {
			ctrl.value = ctrl.value.toUpperCase();
			
			//Convertir en string
			Location = window.location + '';
			
			//Enlève le querystring
			Location = Location.substr(0,Location.indexOf("?"));
			
			//S'il y a un lien supprélemtaire ex: Recherche.asp?Sur=Soumission&Search=ABC
			LienSupp = (Sur != '') ? '?' + Sur + '&' : '?';
			location.replace(Location + LienSupp + 'Search=' + ctrl.value);
		}
	}
	//****************************************************************************************************************	
	
	
	//****************************************************************************************************************		
	//Action accomplie par une zone de saisie ou un icone à droite de celui-ci.
	//I.E.: Si on appuie sur Enter dans une zone se saisie ou si on clique sur l'icône à sa droite
	//Celui ci peut ne pas exister
	function fxActionSaisie(Me, Destination) 
	{
		//Touche appuyée au clavier
		if (navigator.appName == "Netscape")
			Key = 0;
		else var Key = (document.layers) ? e.which : window.event.keyCode;
		
		//Si la touche est un retour de chariot
		if (Key == 13 && !Me.value == '' ) 
		{
			//Permet d'annuler l'action du boutton par défaut sur la page
			event.returnValue=false;
			event.cancel = true;
			
			//Valeur en majuscule
			UpperCase(Me)
			DeplacerWEnr(Destination + Me.value);
		}
		
		//Sinon
		else
		{
			//Si aucune touche n'a été enfoncée : l'utilisateur a appuyé sur l'icône pour valider
			if(Key == 0)
			{
				//Retrouve le controle parent passé en paramètre
				var RefControle = document.getElementById("txt" + Me.name.substr(3));
				
				//Si il existe dans la form courrante
				if (typeof RefControle != null)
				{
					var ValeurParent = RefControle.value;
					RefControle.value = RefControle.value.toUpperCase();
					DeplacerWEnr(Destination + ValeurParent);
				}
				
				//Sinon, message d'erreur
				else 
					alert('Contrôle <' + ControleParent + '> non défini dans la fonction fxActionSaisie !');
			}					
		}
	}
	//****************************************************************************************************************	


	//****************************************************************************************************************	
	//Formate un code postal au format A9A 9A9
	function fxCodePostal(Element) {
		var strChaine = Trim(Element.value);	//Enlève tous les expaces de la chaîne entrée
		var PortionCode = "";
		var boCorrect = true;
		var tabPartiesCode;
		var iCtr = 0;
		var iCtrParties=0;
	
		//Si la longueur de la chaîne entrée en > 5, on la traite comme un code postal canadien
		if (Element.value.length > 5) {
		
			//On formate avec un espace au centre
			Element.value = strChaine.substring(0,3) + " " + strChaine.substr(3,3);
			
			//Mise en majuscule
			UpperCase(Element);
		
			//Séparation des deux parties du code postal dans un vecteur
			tabPartiesCode = Element.value.split(" ");
	
			//Pour les deux parties du code postal
			for (iCtrParties=0; iCtrParties <= tabPartiesCode.length - 1 ; iCtrParties++) {
	
				PortionCode = tabPartiesCode[iCtrParties];
	
				//Pour chaque lettre de la portion en cours
				for (iCtr=0; iCtr<= PortionCode.length-1; iCtr++) {
	
					//Vérifie le format A9A pour la 1ere portion et 9A9 pour la 2e
					if ((iCtr % 2 == 0 && iCtrParties == 0) || (iCtr % 2 == 1 && iCtrParties == 1))
					{
						if (!(PortionCode.substr(iCtr,1) >= "A" && PortionCode.substr(iCtr,1) <= "Z")) 
						boCorrect = false;
					}
					else
						{
							if (!(PortionCode.substr(iCtr,1) >= "0" && PortionCode.substr(iCtr,1) <= "9")) 
								boCorrect = false;
						}
				}	
			}	
		}
	
	
		//Sinon, on traîte comme un code postal américain au format 99999
		else 
			{ 	
				if (Element.value.length == 5 && ! isNaN(Element.value)) boCorrect = true;
				else boCorrect = false; 
			}
	
		//On peut aussi ne rien entrer dans la zone de saisie
		if (!boCorrect && Element.value.length > 1) boCorrect = false;
		else boCorrect = true;
		
		return boCorrect;
	}
	//****************************************************************************************************************		


	//****************************************************************************************************************	
	// Formatte un numéro de téléphone sous la forme (999) 999-9999
	function fxTelephone(Element)
	{
		var iCtr = 0;
		var Chaine = Element.value;
		var Result = '';
		var Tel = '';

		if (Chaine.length > 0)
		{
			for(iCtr=0; iCtr < Chaine.length; iCtr++)
			{
				if(Chaine.charCodeAt(iCtr) >= 48 && Chaine.charCodeAt(iCtr) <= 57)
					Result += Chaine.charAt(iCtr)		
			}
			
			if (Result.length == 10) 
			{	
				Tel = "(" + Result.substr(0,3) + ") " + Result.substr(3,3) + "-" + Result.substr(6,4);
				Element.value = Tel;
				return true;
			}
			else	
				return false;
		}
		else return true;
	}
	//****************************************************************************************************************	


    //****************************************************************************************************************	
    function doPostBack()
    {   
        document.forms[0].submit();
    }
    //****************************************************************************************************************	



	//****************************************************************************************************************	
	// Met en majuscule la valeur de l'élément passée en paramètre
	function UpperCase(Element) 
	{
		Element.value = Element.value.toUpperCase();
	}
	//****************************************************************************************************************		


	//****************************************************************************************************************	
	//Supprime tous les espaces dans une chaîne de caractères
	function Trim(strChaine) {
		var iCtr = 0;
		var strResult = "";
	
		strChaine = "" + strChaine;
		for(iCtr = 0; iCtr <= strChaine.length; iCtr++) {
			if (strChaine.charAt(iCtr) != " " && strChaine.charCodeAt(iCtr) != 160) {
				strResult = strResult + strChaine.charAt(iCtr);
			}
		}
		return strResult;
	}
	//****************************************************************************************************************		


	//****************************************************************************************************************		
	//Formate un nombre en fonction d'un masque de format
	//J'ai modifié la fonction pour qu'elle formate en foction des 4 premieres lettres 
	//du nom du contrôle
	
	// Original JavaScript code by Duncan Crombie: dcrombie@chirp.com.au
	// CONSTANTS
	var separator = ",";  // use comma as 000's separator
	var decpoint = ".";  // use period as decimal point
	var percent = "%";
	var currency = "$";  // use dollar sign for currency
	
	function formatNumber(number, format, print)  // use: formatNumber(number, "format")
	{  
		var strResult;
		if (print) 
		{
			if (print.substr(0,4) == "pRab") format = "0.00%";
			if (print.substr(0,4) == "pNbr") format = "0.00";
			if (print.substr(0,4) == "pTax") format = "0.0000";	
			if (print.substr(0,4) == "pPoi") format = "0.000";				
			if (print.substr(0,4) == "dReq") return number;
			if (print.substr(0,4) == "pInt") format = "0";
			if (print.substr(0,4) == "Prix") 
			{
				format = "0.00$";
				if (number.substr(0,1) == "$") number = number.substr(1,number.length);
			}
			if (print.substr(0,3) == "txt") return number;
		}
		print = null;
		
		number += "";
		number = Trim(number);
		if (number.indexOf(",")) number = number.replace(",",".");
		strResult = number = parseFloat(number);
		if (!Boolean(strResult) && number != 0) return formatNumber(0,format);
		
		var useSeparator = format.indexOf(separator) != -1;  // use separators in number
		var usePercent = format.indexOf(percent) != -1;  // convert output to percentage
		var useCurrency = format.indexOf(currency) != -1;  // use currency format
		var isNegative = (number < 0);
		number = Math.abs (number);
		//if (usePercent) number *= 100;
		format = strip(format, separator + percent + currency);  // remove key characters
		number = "" + number;  // convert number input to string
		
		 // split input value into LHS and RHS using decpoint as divider
		var dec = number.indexOf(decpoint) != -1;
		var nleftEnd = (dec) ? number.substring(0, number.indexOf(".")) : number;
		var nrightEnd = (dec) ? number.substring(number.indexOf(".") + 1) : "";
		
		 // split format string into LHS and RHS using decpoint as divider
		dec = format.indexOf(decpoint) != -1;
		var sleftEnd = (dec) ? format.substring(0, format.indexOf(".")) : format;
		var srightEnd = (dec) ? format.substring(format.indexOf(".") + 1) : "";
		
		 // adjust decimal places by cropping or adding zeros to LHS of number
		if (srightEnd.length < nrightEnd.length) {
		  var nextChar = nrightEnd.charAt(srightEnd.length) - 0;
		  nrightEnd = nrightEnd.substring(0, srightEnd.length);
		  if (nextChar >= 5) nrightEnd = "" + ((nrightEnd - 0) + 1);  // round up
		
		// patch provided by Patti Marcoux 1999/08/06
		  while (srightEnd.length > nrightEnd.length) {
			nrightEnd = "0" + nrightEnd;
		  }
		
		  if (srightEnd.length < nrightEnd.length) {
			nrightEnd = nrightEnd.substring(1);
			nleftEnd = (nleftEnd - 0) + 1;
		  }
		} else {
		  for (var i=nrightEnd.length; srightEnd.length > nrightEnd.length; i++) {
			if (srightEnd.charAt(i) == "0") nrightEnd += "0";  // append zero to RHS of number
			else break;
		  }
		}
		
		 // adjust leading zeros
		sleftEnd = strip(sleftEnd, "#");  // remove hashes from LHS of format
		while (sleftEnd.length > nleftEnd.length) {
		  nleftEnd = "0" + nleftEnd;  // prepend zero to LHS of number
		}
		
		if (useSeparator) nleftEnd = separate(nleftEnd, separator);  // add separator
		var output = nleftEnd + ((nrightEnd != "") ? "," + nrightEnd : "");  // combine parts
		output = output + ((usePercent) ? percent : "") + ((useCurrency) ? " " + currency : "");
		if (isNegative) {
		  // patch suggested by Tom Denn 25/4/2001
		  output = (useCurrency) ? "(" + output + ")" : "-" + output;
		}
		return output;
	}
	
	
	function strip(input, chars) {  // strip all characters in 'chars' from input
		var output = "";  // initialise output string
		for (var i=0; i < input.length; i++)
		if (chars.indexOf(input.charAt(i)) == -1)
		output += input.charAt(i);
		return output;
	}
	
	function separate(input, separator) {  // format input using 'separator' to mark 000's
		input = "" + input;
		var output = "";  // initialise output string
		for (var i=0; i < input.length; i++) 
		{
			if (i != 0 && (input.length - i) % 3 == 0) output += separator;
			output += input.charAt(i);
		}
		return output;
	}
	//****************************************************************************************************************
	
	
	//****************************************************************************************************************	
	//Enleve le style sur un contrôle
	function ChangeCouleurFocus(me)
	{
		me.style.backgroundColor = '#FFFFFF'; 
		me.select(); 
		me.style.border = '1px solid #000000'; 
	}
	//****************************************************************************************************************
	

	//****************************************************************************************************************
	//Remet un style sur une couleur
	function ChangeCouleurBlur(me)
	{
		me.style.backgroundColor = 'transparent'; 
		me.style.border = '0px none'; 
		if (me.value.substr(0,4) != 'dReq') 
			me.value = formatNumber(me.value,'',me.name);

	}
	//****************************************************************************************************************	


	//****************************************************************************************************************		
	//Déplace le curseur à la fin du textbox
	function CurseurFin(me)
	{
		if (me.createTextRange)
		{
		   var FieldRange = me.createTextRange();
		   FieldRange.moveStart('character', me.value.length);
		   FieldRange.collapse();
		   FieldRange.select();
		}	
	}
	//****************************************************************************************************************		
	
	
	//****************************************************************************************************************	
	function CouleurTri()
	{
		var no = document.getElementById("TriForm");
		var tr = document.getElementById("tableau");
		var ordre = document.getElementById("OrdreForm");
		var td = tr.getElementsByTagName("td")[no.value-1];
		
		var img = document.createElement("img");
		img.src = "../Images/Icones/" + ((ordre.value == "DESC") ? "down.gif" : "up.gif");
		img.align = "middle";	
	
		td.style.backgroundColor = "#666666"; 
		td.appendChild(img);
	}
	//****************************************************************************************************************
	
	
	//****************************************************************************************************************	
	function ClickCol(event, nbr)
	{	
		//Retrouve l'index de la colonne sur laquelle on a cliquée
		var no = parseInt(getSrcElement(event).cellIndex) + 1
		
		//Si le numéro est valide
		if (no <= nbr)
		{		
			var tri = document.getElementById("TriForm");
			var ordre = document.getElementById("OrdreForm");
			var quoi = document.getElementById("Quoi");
			var nOrdre, nLocation;
	
			//Si on clique sur la même colonne, on inverse le tri
			if (no == tri.value)
				nOrdre = (ordre.value == "DESC") ? "ASC" : "DESC";
			else
				nOrdre = "ASC";
			
			//On enleve les valeur Tri=XX&Order=XXX du querystring
			//Tout en gadant les autres valeur ID=XX
			nLocation = StripQsTri();
			if (nLocation.indexOf("?") > -1)
				nLocation += "&"
			else nLocation += "?"
			nLocation = nLocation.replace("&&","");
			
			//Place les nouvelles valeurs dans les champs pour le submit (s'il y a lieu)
			tri.value = no;
			ordre.value = nOrdre;
			
			//Parametre facultatif qui permet de passer les valeur de tri par submit
			//Au lieu de par querystring
			if (arguments[2])
				document.forms[0].submit();
			else location.replace(nLocation + 'Tri=' + no + '&Order=' + nOrdre);
		}
	}
	//****************************************************************************************************************
	

	//****************************************************************************************************************
	//Enleve la portion TRI= et Order= Dans un querystring
	function StripQsTri()
	{
		var qs = window.location.href;
		var tri = LireQs(qs,"Tri");
		var ordre = LireQs(qs,"Order");
	
		if (tri)
			qs = qs.replace("Tri=" + tri,"");
		if (ordre)
			qs = qs.replace("Order=" + ordre,"");
			
		qs = qs.replace("&&","");
		return qs;	
	}
	//****************************************************************************************************************		
	

	//****************************************************************************************************************		
	//Adaptation javascript de la fonction LireQs
	//Ex: Type=Net 30&Days=30 ==> retrouve les valeurs des variables
	function LireQs(Value, Variable)
	{
		var Index_trouve;
		var Index_fin;
		var Quoi = Value;
		
			//Vérifie que la variable existe dans la chaine
			Index_trouve = Quoi.indexOf(Variable); 
			if (Index_trouve != -1)
			{
				Quoi = Quoi.substr(Index_trouve,Quoi.length);
				
					if (Quoi.indexOf("&") != -1) 
						Index_fin = Quoi.indexOf("&") - 1;
					else Index_fin = Quoi.length;
	
				Quoi = Quoi.substr(1,Index_fin);
				Quoi = Quoi.substr(Quoi.indexOf("=")+1, Quoi.length);
				return Quoi;
			}
			else return null;
	}
	//****************************************************************************************************************		


	//****************************************************************************************************************		
	//Recois un QS (voir fonction précédente) et calcul la date due à partir de la date de la facture
	function ChangeDateDue(Quoi, NomDateDue, NomDateFacture)
	{
		//Lecture de la date de la facture
		var DateFacture = document.getElementById(NomDateFacture);
		
		//Validation sur la date
		if (DateFacture == null)
		{
			alert('La date est indéfinie !');
			return null;
		}
		//Sépare année-mois-jour dans un vecteur
		var tabDates = DateFacture.value.split("-");
		
		//Validation sur l'input de la date
		if (tabDates.length != 3)
		{
			return null;
		}
		else
			if (tabDates[0].length != 4 || 
				tabDates[1].length != 2 || 
				tabDates[2].length != 2)
			{
					return null;
			}
		
		//Créer un objet date à partir des données du vecteur
		var maDate = new Date(tabDates[0],tabDates[1]-1,tabDates[2]);
		
		//Va chercher le nombre de jours pour les termes de paiements
		var Ajout = LireQs(Quoi,'Days');
	
		var DateDue = document.getElementById(NomDateDue);
	
		//Vérification que le contrôle existe
		if (DateDue != null)
		{
			if (Ajout == null || Ajout == 0)
				DateDue.value = '';
			else
			{
				//Ajoute le nombre de jours à la date
				maDate.setDate(maDate.getDate() + parseInt(Ajout));
				
				//Complète le jour et le mois pour avoir 01 au lieu de 1
				var Mois = maDate.getMonth() + 1 + '';
				var Jour = maDate.getDate() + '';
				while (Mois.length < 2) Mois = '0' + Mois;
				while (Jour.length < 2) Jour = '0' + Jour;
				
				//Affiche la date due
				DateDue.value = maDate.getYear() + "-" + Mois + "-" + Jour;
			}
		}
		else alert('La date due est indéfinie dans cette page !');
	}
	//****************************************************************************************************************		


	//****************************************************************************************************************		
	//Formatte un nombre pour avoir des valeurs entières
	function FormatEntier(me)
	{
		var Valeur = me.value;
		Valeur = parseInt(Valeur);
		if (isNaN(Valeur)) Valeur = 0;
		me.value = Valeur;	
	}
	//****************************************************************************************************************
	
	
	//****************************************************************************************************************	
	function getAbsoluteLeft(objectId) {
		// Get an object left position from the upper left viewport corner
		// Tested with relative and nested objects
		o = document.getElementById(objectId)
		oLeft = o.offsetLeft            // Get left position from the parent object
		while(o.offsetParent!=null) {   // Parse the parent hierarchy up to the document element
			oParent = o.offsetParent    // Get parent object reference
			oLeft += oParent.offsetLeft // Add parent left position
			o = oParent
		}
		// Return left postion
		return oLeft
	}
	//****************************************************************************************************************
	
	
	//****************************************************************************************************************	
	function getAbsoluteTop(objectId) {
		// Get an object top position from the upper left viewport corner
		// Tested with relative and nested objects
		o = document.getElementById(objectId)
		oTop = o.offsetTop            // Get top position from the parent object
		while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element
			oParent = o.offsetParent  // Get parent object reference
			oTop += oParent.offsetTop // Add parent top position
			o = oParent
		}
		// Return top position
		return oTop
	}
	//****************************************************************************************************************		


	//****************************************************************************************************************	
	function autoComplete (field, select, property, forcematch) 
	{
		var found = false;
		for (var i = 0; i < select.options.length; i++) 
		{
			if (select.options[i][property].toUpperCase().indexOf(field.value.toUpperCase()) == 0) 
			{
				found=true; 
				break;
			}
		}
		
		if (found) { select.selectedIndex = i; }
		else { select.selectedIndex = -1; }
		
		if (field.createTextRange) 
		{
			if (forcematch && !found) 
			{
				field.value=field.value.substring(0,field.value.length-1); 
				return;
			}
			
			var cursorKeys ="8;46;37;38;39;40;33;34;35;36;45;";
			
			if (cursorKeys.indexOf(event.keyCode+";") == -1) 
			{
				var r1 = field.createTextRange();
				var oldValue = r1.text;
				var newValue = found ? select.options[i][property] : oldValue;
				if (newValue != field.value) 
				{
					field.value = newValue;
					var rNew = field.createTextRange();
					rNew.moveStart('character', oldValue.length) ;
					rNew.select();
				}
			}
		}
	}
	
	//****************************************************************************************************************		
    function exportToExcel(nom)
    {
        var table = document.getElementById(nom); 
        var succes = true;
        
        try
        {
            var oExcel = new ActiveXObject("Excel.Application");
        }   
        catch (e)
        {
            succes = false;
        }
        
        if (succes)
        {
            var oBook = oExcel.Workbooks.Add;
            var oSheet = oBook.Worksheets(1);
            
            for (var y=0;y<table.rows.length-1;y++)
            {
	            for (var x=0;x<table.rows(y).cells.length;x++)
	            {
	                var cell = table.rows(y).cells(x);
	                if (cell.style.display != "none")
		                oSheet.Cells(y+1,x+1) = table.rows(y).cells(x).innerText.replace(",",".");
	            }
            }

            var lettres = new Array("A","B","C","D","E","F","G","H","I","J","K","M","L","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
            //var se = "A1:" + lettres[table.rows(0).cells.length+2] + (table.rows.length+2);
            var se = "A1:" + lettres[table.rows(0).cells.length-1] + (table.rows.length-1);
                        
            oSheet.Range(se).Select;
            oSheet.Range(se).AutoFormat;
            oSheet.Range("A1").Select;
            oExcel.Visible = true;
            oExcel.UserControl = true;
        }
        else 
            alert("Impossible de creer la feuille de calcul Excel. \nSi Excel est installe, allez dans\n1- Outils | Options Internet\n2- Securite | Internet | Niveau personnalise\n3- Mettre a 'Demander' les elements du groupe 'Controles ActiveX' qui sont desactives.");
    }
    //****************************************************************************************************************		
    
    function xreplace(checkMe,toberep,repwith){
        var temp = checkMe;
        var i = temp.indexOf(toberep);
        while(i > -1){
        temp = temp.replace(toberep, repwith);
        i = temp.indexOf(toberep);
        }
        return temp;
    }
    
    /**********************************************************************************************************
    Cette fonction détermine si une nombre est valide et le formate selon un entier ou si la valeur à formater doit tenir compte
    de certains paramètres. Dans le cas monétaire le format est celui de ASP.NET soit 0,00 $
    De plus cette fonction permet de définir un nombre selon le nbr de chiffre après la ,
    **********************************************************************************************************/
    function FormatNbr(ControlID, Decimal,Type)
    {            
            var textbox = document.getElementById(ControlID);
            if (textbox.value == "")
                textbox.value = "0";
                        
            textbox.value = xreplace(textbox.value, ' ', '');
            textbox.value = xreplace(textbox.value, ',', '.');
            textbox.value = ExraitNbrFromMoney(textbox.value);
            textbox.value = xreplace(textbox.value, '$', '');
            textbox.value = xreplace(textbox.value, '%', '');
                
            //AJOUTER LE CODE POUR LE EVAL
            try 
            {
                if(textbox.value.length == 0)
                {
                    textbox.value="0";
                }
                else
                {
                    textbox.value=eval(textbox.value);
                    if(textbox.value > 999999999.99)
                    {
                        textbox.value = eval(999999999.99);
                    }  
                }
            } 
            catch(error)
            {
                textbox.value="0";
            } 
            finally {

            } 
            
            if(textbox.value == 'Infinity')
            {
                textbox.value = "0";
            }
            //FIN AJOUT CODE EVAL         
                
            var NombreValide = isNaN(textbox.value);
            
            if (!NombreValide)
            {
                if(Type == "Entier")            
                {    
                    textbox.value = formatNumber(textbox.value,'','pInt');
                }
                else if (Type == "Money")
                {
                    FormatValeur(ControlID, Decimal);
                    textbox.value = textbox.value + " $";
                }
                else if (Type == "Pourcent")
                {
                    FormatValeur(ControlID, Decimal);
                    textbox.value = textbox.value + "%";
                }
                
                //reel
                else 
                {   
                    FormatValeur(ControlID, Decimal);} 
                }
            else
            {
                if(Type == "Entier")
                {
                    textbox.value = "0";
                }
                else if (Type == "Money")
                {
                    textbox.value = "0,00 $";
                }
                else if (Type == "Pourcent")
                {
                    textbox.value = "0,00 %";
                }
                else
                {
                    textbox.value = "0,00";
                }
                
            } 
            
    }    


    /**********************************************************************************************************
    Cette fonction format le champs recu en fonction d'un nombre de décimal donnée.
    **********************************************************************************************************/      
    function FormatValeur(Ctr_Valeur, NbrDecimal)
    {
            
            var Quantite = document.getElementById(Ctr_Valeur).value;
            Quantite = Quantite.replace(",",".");
            Quantite = parseFloat(Quantite);
            
            var NombreValide = isNaN(Quantite);
        
            if (NombreValide == false)
            {      
            
                Quantite = Quantite.toFixed(NbrDecimal);
                
                if (Quantite < 0)
                {
                    Quantite = Math.abs(Quantite);
                    Quantite = Quantite.toFixed(NbrDecimal);
                    Quantite = "(" + Quantite + ")";
                }
                
                Quantite = Quantite.replace(".",",");
                
                document.getElementById(Ctr_Valeur).value = Quantite;
            }            
    }
    
    //****************************************************************************************************************		
    function ConstruireQS(page, liste, noMenu)
    {
        var i;
        var fin = page;
        var uneListe = liste.split(";");
        for (i=0; i<uneListe.length-1; i++)
        {
            var chk = document.getElementById('chk-menu-' + uneListe[i] + '-noMenu-' + noMenu);
            if (!chk.checked)
            {
                fin = fin + "&-" + noMenu + uneListe[i] + "=0"
            }
            else
                fin = fin + "&*" + noMenu + uneListe[i] + "=0"
        }
        
        location.replace(fin);
        
    }
    //****************************************************************************************************************		
    function cocher(no)
    {
        var chk = document.getElementById('chk-menu-' + no);
        if (chk != null)
            chk.checked = !chk.checked;
    }
    //****************************************************************************************************************		
    
    
    //****************************************************************************************************************		
    function alertSize() { 
        var myWidth = 0, myHeight = 0; 
        var tab;
        
        if( typeof( window.innerWidth ) == 'number' ) { 
            //Non-IE 
            myWidth = window.innerWidth; 
            myHeight = window.innerHeight; 
        } else if( document.documentElement && 
            ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { 
            //IE 6+ in 'standards compliant mode' 
            myWidth = document.documentElement.clientWidth; 
            myHeight = document.documentElement.clientHeight; 
        } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { 
            //IE 4 compatible 
            myWidth = document.body.clientWidth; 
            myHeight = document.body.clientHeight; 
        } 
        
        var main = document.getElementById('fraMain');
        
        if (main)
        {
            main.style.height = parseInt(myHeight - 80) + 'px';
            main.style.width = parseInt(myWidth - 0) + 'px';
        }
             
            
    }
    //****************************************************************************************************************		
        
        
    //****************************************************************************************************************		
    function Hauteur()
    {
        alertSize();
    }
    //****************************************************************************************************************	
    
    function openCenteredWindow(url, height, width, name, parms) 
    {
        var left = Math.floor( (screen.width - width) / 2);
        var top = Math.floor( (screen.height - height) / 2);
        var winParms = "top=" + top + ",left=" + left + ",height=" + height + ",width=" + width;
        if (parms) { winParms += "," + parms; }
        var win = window.open(url, name, winParms);
        if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
        return win;
    }
    
    function ExraitNbrFromMoney(ValeurMoney)
    {
        ValeurMoney = ValeurMoney.toString();
        var Nombre = "A";
        var Neg1 = false;
        var Neg2 = false;
        
        for(var i = 0;i< ValeurMoney.length;i++)
        {            
            if ((isNaN(ValeurMoney.charAt(i)) == false) && (ValeurMoney.charCodeAt(i) != 160))
            {                
                Nombre = Nombre + ValeurMoney.charAt(i);
            }
            else if ((ValeurMoney.charAt(i) == ",") || ValeurMoney.charAt(i) == ".")
            {                
                Nombre = Nombre + ".";
            }
            else if (ValeurMoney.charAt(i) == "-")
            {
                Nombre = Nombre + "-";
            }
            else if (ValeurMoney.charAt(i) == "(")
            {
                Neg1 = true;
            }
            else if (ValeurMoney.charAt(i) == ")")
            {
                Neg2 = true;
            }
            
        }        
        Nombre = Nombre.replace("A",""); 
        
        //Si le nombre était entre () alors c'est un nombre négatif
        if ((Neg1 == true) && (Neg2 == true))
        {
            Nombre = "-" + Nombre;
        }     
        return parseFloat(Nombre);
    }

    function ExraitNbrFromPourcent(ValeurPourcent)
    {
        ValeurPourcent = ValeurPourcent.toString();
        var Nombre = "A";
        var monPourcent;
        for(var i = 0;i< ValeurPourcent.length;i++)
        {            
            if ((isNaN(ValeurPourcent.charAt(i)) == false) && (ValeurPourcent.charCodeAt(i) != 160))
            {                
                Nombre = Nombre + ValeurPourcent.charAt(i);
            }
            else if ((ValeurPourcent.charAt(i) == ",") || ValeurPourcent.charAt(i) == ".")
            {                
                Nombre = Nombre + ".";
            }
            
        }        
        Nombre = Nombre.replace("A","");
         
        monPourcent = parseFloat(Nombre) / 100;
        
        return monPourcent;
    }

    function decodeURL(str) {
     return unescape(str.replace(/\+/g, " "));
    }
    
    function HeureMinute(txthrs)
    {
        var txtHeureMin = document.getElementById(txthrs);
        var strHeureMin = txtHeureMin.value;

        strHeureMin = strHeureMin.replace(":","");
        if (strHeureMin.length == 1)
        {
            txtHeureMin.value = "00:0" + ValidePositionHrsMin(strHeureMin.charAt(0),1);
        }
        else if (strHeureMin.length == 2)
        {
            txtHeureMin.value = "00:" + ValidePositionHrsMin(strHeureMin.charAt(0),2) + ValidePositionHrsMin(strHeureMin.charAt(1),1);
        }
        else if (strHeureMin.length == 3)
        {
            txtHeureMin.value = "0" + ValidePositionHrsMin(strHeureMin.charAt(0),3) + ":" + ValidePositionHrsMin(strHeureMin.charAt(1),2) + ValidePositionHrsMin(strHeureMin.charAt(2),1);
        }
        else if (strHeureMin.length == 4)
        {
            txtHeureMin.value = ValidePositionHrsMin(strHeureMin.charAt(0),4) + ValidePositionHrsMin(strHeureMin.charAt(1),3) + ":" + ValidePositionHrsMin(strHeureMin.charAt(2),2) + ValidePositionHrsMin(strHeureMin.charAt(3),1);
        }
        else
        {
            txtHeureMin.value = "00:00";
        }
        
        
    }

    function ValideNum(Valeur)
    {
        if (isNaN(Valeur) == true)
        {
            return '0';
        }
        else
        {
            return Valeur;
        }
    }

    function ValidePositionHrsMin(Valeur,posi)
    {
        switch (posi)
        {
            case 1:
                    return ValideNum(Valeur);
                    break;
            case 2:
                    if (parseInt(ValideNum(Valeur)) > 5)
                        return '0'
                    else
                        return ValideNum(Valeur);
                    break;
            case 3:                    
                    return ValideNum(Valeur);
                    break;
            case 4:
                    if (parseInt(ValideNum(Valeur)) > 2)
                        return '0'
                    else
                        return ValideNum(Valeur);
                    break;
        }
    }

    function NumUpDown (TextboxID, Step)
    {
        
      document.getElementById(TextboxID).value = parseInt(document.getElementById(TextboxID).value) + Step;
        
    }

    function pausecomp(millis)
    {
        date = new Date();
        var curDate = null;

        do { var curDate = new Date(); }
        while(curDate-date < millis);
    }  

    function LanceRapportSQL(RapportID)
    {
        var win=window.open('PageReportServer.aspx?Rapport=' + RapportID + '&ParID=1',null,'location=0,toolbar=0,resizable=1','true');
    }
    
    //Enlève le & dans la URL
    function EncodeCaractereURL(Caracteres)
    {
        return Caracteres.replace('&','(-ET-)')
    }
    
    function ControlValeur(ControlID)
    {
        if (ControlExist(ControlID) == true)
        {
            var monControl = document.getElementById(ControlID);
            //alert(monControl.type)
            switch (monControl.type)
            {
                case 'text':
                            return monControl.value;
                            break;
                case 'select-one':
                            return monControl.value;
                            break;
                            
                case 'radio':
                            return monControl.checked;
                                
                            break;
                case 'checkbox':
                            
                            return monControl.checked;
                                
                            break;
                            
                case 'hidden':
                            return monControl.value;
                            break;
                            
                default: alert('Composant inconnu!');            
                
            }
        
        }
            
        else
            return null;
    }
    
    function ControlExist(ControlID)
    {
        if (document.getElementById(ControlID) != undefined)
            return true;
        else
            return false;
    }

    function ControlAfficher(ControlID)
    {
        if (document.getElementById(ControlID).style.display == 'inline')
            return true;
        else
            return false;
    }

    function ColonneAfficher(ControlID)
    {
        if (document.getElementById(ControlID).parentNode.style.display == '')
            return true;
        else
            return false;
    }

    function ControlAffectation(ControlID,valeur,NbrDecimal,Format)
    {
        if (ControlExist(ControlID) == true)
        {
            var monControl = document.getElementById(ControlID);
            //De quel type est le control
            //alert(monControl.type);
            switch (monControl.type)
            {
                case 'text':
                            monControl.value = valeur;
                            if (Format != null)
                                FormatNbr(ControlID,NbrDecimal,Format);
                            break;
                case 'select-one':
                            monControl.value = valeur;
                            break;
                            
                case 'radio':
                            if (valeur == 'True')
                                monControl.checked = true;
                            else
                                monControl.checked = false;
                                
                            break;
                case 'checkbox':
                            
                            if (valeur == 'True')
                                monControl.checked = true;
                            else
                                monControl.checked = false;
                                
                            break;
                            
                case 'hidden':
                            monControl.value = valeur;
                            break;                           
                
                            
                default: alert('Composant inconnu! ' + monControl.Type);            
                
            }
                        
            return true;
        }
        else
        {
            return false;
        }
    }
    
    
    function modalWin(url,nom,width,height) {
    if (window.showModalDialog) {
    window.showModalDialog(url,nom,
    "dialogWidth:" + width + "px;dialogHeight:" + height + "px");
    } 
    else {
        window.open(url,nom,'height=' + height + ',width=' + width + ',toolbar=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes ,modal=yes');
    }
    } 
    
    
// Handle tree view click
function HandleCheckbox(UncheckParent,CheckAllParentIFEnfant)
{
    var element = event.srcElement;
    if (element.tagName == "INPUT" && element.type == "checkbox")
    {
        var checkedState = element.checked;
        while (element.tagName != "TABLE") // Get wrapping table
        {
            element = element.parentElement;
        }
        
        if (UncheckParent == true)
            UnCheckParents(element); // Uncheck all parents
            
        if (CheckAllParentIFEnfant == true)
            CheckParents(element); // check all parents
        
        element = element.nextSibling;
        
        if (element == null) // If no childrens than exit
            return;
        
        var childTables = element.getElementsByTagName("TABLE");
        for (var tableIndex = 0; tableIndex < childTables.length; tableIndex++)
        {
            CheckTable(childTables[tableIndex], checkedState);
        }
    }
}

// Uncheck the parents of the given table, Can remove the recurse (redundant)
function UnCheckParents(table)
{
    if (table == null || table.rows[0].cells.length == 2) // This is the root
    {
        return;
    }
    var parentTable = table.parentElement.previousSibling;
    CheckTable(parentTable, false);
    UnCheckParents(parentTable);
}

//Dès qu'on coche un enfant il faut tout cocher les parents
function CheckParents(table)
{
    if (table == null || table.rows[0].cells.length == 2) // This is the root
        {
            return;
        }
        var parentTable = table.parentElement.previousSibling;
        CheckTable(parentTable, true);
        CheckParents(parentTable);
}

// Handle the set of checkbox checked state
function CheckTable(table, checked)
{
    var checkboxIndex = table.rows[0].cells.length - 1;
    var cell = table.rows[0].cells[checkboxIndex];
    var checkboxes = cell.getElementsByTagName("INPUT");
    if (checkboxes.length == 1)
    {
        checkboxes[0].checked = checked;
    }
}

/******************************************************************************************************
FIN FONCTION TREEVIEW
*******************************************************************************************************/


function DoPostBack(ControlID)
{
    if (ControlID == '')
        document.getElementById('btnPostBack').click();
    else
        document.getElementById(ControlID).click();
}

function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  } 
  return '';
}

function MenuG_GestionNomenclature(NoAction)
{
    var Article = getQueryVariable('Article');
    var Variante = getQueryVariable('Variante');
    var Article;
    var Variante;
    var Url;   
   
    switch (NoAction)
    {
            case "0":
                Url = "Nomenclatures.aspx?TypeNom=" + Variante + "&RefArticle=" + Article + "&Variante=" + Variante + "&Article=" + Article;
            break;
            
            case "1":
                Url = "Liste_Nomenclature_Directe.aspx?Variante=" + Variante + "&Article=" + Article;
            break;
            
            case "2":
                Url = "Liste_Nomenclature_Achat.aspx?Variante=" + Variante + "&Article=" + Article;
            break;
            
            case "3":
                Url = "Liste_Nomenclature_Cumule.aspx?Variante=" + Variante + "&Article=" + Article;
            break;
            
            case "4":
                Url = "Liste_Nomenclature_Arbo.aspx?Variante=" + Variante + "&Article=" + Article;
            break;
            
            case "5":
                Url = "ListeEmploi_Direct.aspx?Variante=" + Variante + "&Article=" + Article;
            break;
            
            case "6":
                Url = "ListeEmploi_Arbo.aspx?Variante=" + Variante + "&Article=" + Article;
            break;
            
            case "7":
                Url = "Liste_Nomenclature_Charges.aspx?Variante=" + Variante + "&Article=" + Article;
            break;  
            
                  
               
    }
    
    window.location.href = Url;
}
function GetHauteurScreeen()
{
        //****Il faut prévoir 80px de perte en hauteur causer par la barre du haut
        var myHeight = 0; 
        var tab;
        
        if( typeof( window.innerWidth ) == 'number' ) { 
            //Non-IE 
            myHeight = window.innerHeight; 
        } else if( document.documentElement && 
            ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { 
            //IE 6+ in 'standards compliant mode' 
            myHeight = document.documentElement.clientHeight; 
        } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { 
            //IE 4 compatible 
            myHeight = document.body.clientHeight; 
        } 
        
        return myHeight;
}

/*
Cette fonction set la hauteur d'un composant
On doit passé le ID du composant et on peut passer un nombre
de pixel  à soustraire de la hauteur. Par exemple 100% est égale a la hauteur mais il faut enlever 80px pour la
barre du haut
*/
function SetHauteur(ControlID,Soustraire)
{
    if (Soustraire == null)
    {
        Soustraire = 0;    
    }
    
    document.getElementById(ControlID).style.height = (GetHauteurScreeen() - Soustraire)
}

function GetLargeurScreeen()
{
        var myWidth = 0; 
        var tab;
        
        if( typeof( window.innerWidth ) == 'number' ) { 
            //Non-IE 
            myWidth = window.innerWidth; 
        } else if( document.documentElement && 
            ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { 
            //IE 6+ in 'standards compliant mode' 
            myWidth = document.documentElement.clientWidth; 
        } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { 
            //IE 4 compatible 
            myWidth = document.body.clientWidth; 
        } 
        
        return myWidth
}

function ValideNomArticle(e)
{
    
    if(window.event) // IE
    {
       if ((e.keyCode == 34 || e.keyCode == 39)) 
          return false;
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
        
        if ((e.which == 34 || e.which == 39)) 
            return false;
    }
}

/*
Cette fonction permet la fermeture sans Warning message (Surtout sous FF)
Provient du le site http://www.interwebby.com/blog/2006/02/04/3/
*/
function closeWindow() {

        window.open('','_parent','');

        window.close();

    }
    
/*
Cette fonction repositionne une page en dehors de la Masterpage. Utilise dans le cas de la page de login
par exemple.
En gros, si on a un frame dans la page on élimine le frame.
*/
function SortirPageDuFrame(URL)
{    
    if (parent.frames.length != 0) 
    {
      if ((URL == null) || (URL == ''))
         window.top.location.replace("Login.asp");
      else
         window.top.location.replace(URL);
    }
    
}






 
 