  
   // Les différentes fonction AJAX utilisés sur le site Web
   
   var ns4 = (document.layers)? true:false;         //NS 4
   var ie4 = (document.all)? true:false;         //IE 4
   var dom = (document.getElementById)? true:false;   //NS 6 ou IE 5
	var xmlDoc;
	var parser;
	var monTabRegion;
	
  // Afficher le contenu d'un élément dans une div tous les deux passé en paramètre	
   function SetDiv(ID,Content) {
      if (dom) {
      document.getElementById(ID).innerHTML = Content;
         return;
      }
      if (ie4) {
      		
          document.all[ID].innerHTML = Content;
         return;
      }
      if (ns4) {
          with (eval('document.'+ID+'.document')) {
             open();
             write(Content);
             close();
         }
         return;
      }
      document.all[ID].innerHTML = Content;
      return;
   }

	function envoi(val){
		var req = null; 
		req = new XMLHttpRequestSupport();
		req.open("POST", val, true); 
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		req.send(null); 
	}

	// Effectue un appel vers le lien passé en paramètre
	// afin d'obtenir la réponse et la mettre dans la div passé en paramètre
	function submitForm(val,div)
	{ 
		var req = null; 

		//if(window.XMLHttpRequest)
			req = new XMLHttpRequestSupport();
			 
			
		req.onreadystatechange = function()
		{ 
			if ( req.readyState == 1 ){
			if(document.getElementById('wait')){
				msgWait();
				}
			}
			if(req.readyState == 4)
			{
			if(document.getElementById('wait')){
					cacherDiv('wait');
					}
					SetDiv(div,req.responseText);	
				
			} 
		
		};
		req.open("POST", val, true); 
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		req.send(null); 
	} 
	
	
	// Effectue un appel vers le lien passé en paramètre
	// afin d'obtenir la réponse et la mettre dans la div passé en paramètre
	function submitForm2(val,div)
	{ 
		var req = null; 

		//if(window.XMLHttpRequest)
			req = new XMLHttpRequestSupport();
			 
			
		req.onreadystatechange = function()
		{ 
			if ( req.readyState == 1 ){
			if(document.getElementById('wait')){
				msgWait();
				}
			}
			if(req.readyState == 4)
			{
			if(document.getElementById('wait')){
					cacherDiv('wait');
					}
					SetDiv(div,req.responseText);	
				
			} 
		
		};
		req.open("GET", val, true); 
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		req.send(null); 
	} 

	function msgWait(){
	
					affDiv('wait');
     				//var content = '<table class="tableWait" align="center"><tr><td><p><img src="images/Ajax/ajax-loader.gif"><br>Veuillez patienter...</p></td></tr></table>';
					//SetDiv('wait',content);
	}
	function affDiv(ID) {
      if (dom) {
      document.getElementById(ID).style.display = "block";
         return;
      }
      if (ie4) {
      		
          document.all[ID].style.display = "block";
         return;
      }
   }
   
   function cacherDiv(ID) {
      if (dom) {
      document.getElementById(ID).style.display = "none";
         return;
      }
      if (ie4) {
      		
          document.all[ID].style.display = "none";
         return;
      }else document.getElementById(ID).style.display = "none";
   }
   
	// Effectue un appel vers le lien passé en paramètre
	// afin d'obtenir la réponse et la mettre dans la div passé en paramètre
	function recuperer(val)
	{ 
		var req = null; 

		//if(window.XMLHttpRequest)
			req = new XMLHttpRequestSupport();
			 
		//else if (window.ActiveXObject)
			//req  = new ActiveXObject("Microsoft.XMLHTTP"); 
			
		req.onreadystatechange = function()
		{ 
			if(req.readyState == 4)
			{
				
					
				
			} 
		};
		req.open("POST", val, true); 
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		req.send(null); 
	} 
	
	
	
	// Récupération de l'objet XHR
		function getXhr()
	{
		var xhr;
			xhr = new XMLHttpRequestSupport();
			parser= new DOMParserSupport();//}
			return xhr;  	
	}

	
// Recherche des villes avec le champ texte, la liste déroulant, la div, le lien vers la
// servlet, la divAid, le texteAide passé en paramètre
var contenuPrecedent = "";
function suggerer(nomZoneLib,nomZoneSugg,div,lienServlet,divAide,texteAide){
	//  Récupération des objets passé en paramètre le champ texte et 
	// la liste déroulante
	var zoneLib = document.getElementById(nomZoneLib);
    var zoneSugg = document.getElementById(nomZoneSugg);
    	
    // Si le champ est vide
	if(zoneLib.value==""){
		document.getElementById(div).style.visibility="hidden";
		aideDisparaitre(divAide,"");
		viderChamp("CP");
		
	}
		
	// Si le champ a qu'une lettre saisie
	else if(zoneLib.value.length==1){
		document.getElementById(div).style.visibility="hidden";
		aideDisparaitre(divAide,"");
	}
	else{
		aideApparaitre(divAide,texteAide);
	}
    	
   	// Vérification que le champ texte et la liste déroulante existe
   	if(zoneLib != undefined && zoneSugg != undefined){
    	if (contenuPrecedent != zoneLib.value){
	    	// Vérification si le cahmp a texte a 2 ou + lettres saisies
	    	if(zoneLib.value.length<1){
	    	
	    	}
	    	else{
	    		// Récupération du XHR	
	    		var xhr = getXhr();
				contenuPrecedent = zoneLib.value;
	   			xhr.onreadystatechange = function ()
	   		{
	   		document.getElementById(div).style.visibility="hidden"; 
	   		if(xhr.readyState == 4 && xhr.status == 200){
	   			// Récupération de la réponse XML de la recherche 
      			var XML = xhr.responseText;
      			xmlDoc=parser.parseFromString(XML,"text/xml");
      			// Vide la liste déroulante
      			document.getElementById("suggestions").options.length = 0;
      			// Si il n'y a pas de résultat
 				if(XML==""||XML==null){
 					document.getElementById(div).style.visibility="hidden"; 
 				}								
 				else{     			
      				document.getElementById(div).style.visibility="visible";
      				var monTabVille = xmlDoc.getElementsByTagName("Nom");
      				var monTabCp = xmlDoc.getElementsByTagName("Cp");
      				monTabRegion =  xmlDoc.getElementsByTagName("Region");
      				// Si il n'y a pas de resultat
      				if(monTabVille[0]==null){
      					document.getElementById(div).style.visibility="hidden"; 
      				}
      				else{
      					// Adapter la taille de la liste en fonction du nombre de
      					// résultat 
      					if(monTabVille.length<12){
      						document.getElementById("suggestions").size=monTabVille.length+1;
      					}
      					else{
      						document.getElementById("suggestions").size=13;
      					}
      					// Récupération des noms des villes et des codes postaux
      					for (var i=0; i<monTabVille.length; i++) {
      						// Formatage comme ceux-ci par exemple Bordeaux (33000)
      						var maVille =monTabVille[i].childNodes[0].nodeValue;
      						if(monTabCp[i].childNodes[0].nodeValue != "0"){
      							maVille =  maVille +" ("+ monTabCp[i].childNodes[0].nodeValue+")";
      						}
      					//		if(monTabRegion[i].childNodes[0].nodeValue != "0"){
      						//	maVille =  maVille + " / "+monTabRegion[i].childNodes[0].nodeValue;
      					//	}
      					//	if((monTabRegion[i].childNodes[0].nodeValue != "0") || (monTabCp[i].childNodes[0].nodeValue != "0")){
      					//		maVille = maVille +")";
      					//	}
      						// Ajout dans la liste déroulante
      						document.getElementById("suggestions").options[i] = new Option(maVille ,maVille);
      					}
      				}
      			}
      			return;
      					
      		}
      		if (ie4) {
      			document.all["suggestions"].innerText = xhr.responseText;
         		return;
      		}
      		if (ns4) {
          		with (eval('document.suggestions.document')) {
             		open();
             		write(xhr.responseText);
             		close();
         		}
         		return;
      		}

	   	}
	   	xhr.open("POST",lienServlet,true);
	   	xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
	var qstr = "data=" + chaineToASCII(zoneLib.value);
	   	xhr.send(qstr);
	 	}
	  	}
	   }
}   
    	
    	
	// Permet de mettre la ville et le code postal dans le champ texte approprié
	// Paramètre : champ texte ville , champ texte cp, la liste déroulante, 
	// la div de la liste déroulante, la div d'aide
	function modifChamp(champ,champ2,select,div,div2){
	
	var zoneLib = document.getElementById(champ);
	var zoneLib2 = document.getElementById(champ2);
	var firstParenthese = 	document.getElementById(select).options[document.getElementById(select).selectedIndex].value.indexOf("(");
	var lastParenthese = document.getElementById(select).options[document.getElementById(select).selectedIndex].value.lastIndexOf(")");
		if(firstParenthese != -1 &&  lastParenthese != -1){ 
	zoneLib.value = document.getElementById(select).options[document.getElementById(select).selectedIndex].value.substring(0, firstParenthese-1);
	zoneLib2.value = document.getElementById(select).options[document.getElementById(select).selectedIndex].value.substring( firstParenthese+1, lastParenthese);
	} else zoneLib.value = document.getElementById(select).options[document.getElementById(select).selectedIndex].value;
	
	
	var test = monTabRegion[document.getElementById(select).selectedIndex].childNodes[0].nodeValue;
	testRegion('Region',test);
	//var monTab = document.getElementById(select).options[document.getElementById(select).selectedIndex].value.split("(");
	//zoneLib.value = monTab[0].substring;
	//var monTab2 = monTab[1].split(")")
	//zoneLib2.value = monTab2[0];
	document.getElementById(div).style.visibility="hidden";
	document.getElementById(div2).style.visibility="hidden";
	}
	

	
	function testRegion(selectID,val){
		var liste = document.getElementById(selectID);
		if(liste != null && liste != 'undefined'){
			for(i=0;i<liste.options.length;i++){
				if(liste.options[i].value == val){
					liste.selectedIndex = i;
					//	alert(liste.options[i].text);
				}
			}
		}
	} 
	
	// Vider le champ texte passé en paramètre
	function viderChamp(champ){
	document.getElementById(champ).value="";
	}

	// Faire disparaitre la div passée en paramètre
	function enleverSuggestion(div){

	document.getElementById(div).style.visibility="hidden";

	}
	
	// Faire apparaitre la div d'aide et met le texte passé en paramètre
	function aideApparaitre(div,texte){
	
	document.getElementById(div).style.visibility="visible";
	
	var bulle = document.getElementById("LaBulle");
	bulle.innerHTML = texte;
	}
	
	// Faire disparaitre la div d'aide
	function aideDisparaitre(div,texte){
	document.getElementById(div).style.visibility="hidden";
	var bulle = document.getElementById("LaBulle");
	bulle.innerHTML = texte;
		}
	

var regExpBeginning = /^\s+/;

var regExpEnd       = /\s+$/;

 

// Supprime les espaces inutiles en début et fin de la chaîne passée en paramètre.

function trim(aString) {

    return aString.replace(regExpBeginning, "").replace(regExpEnd, "");

}


/*
	IE7, version 0.9 (alpha) (2005-08-19)
	Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
	License: http://creativecommons.org/licenses/LGPL/2.1/
*/

// modelled after: http://www.mozilla.org/xmlextras/

function XMLHttpRequestSupport() {
	// IE6 has a better version
	var $LIB = /MSIE 5/.test(navigator.userAgent) ? "Microsoft" : "Msxml2";
	if (window.ActiveXObject){
		return new ActiveXObject($LIB + ".XMLHTTP");
	}
	else return new XMLHttpRequest()
};

function DOMParserSupport() {/* empty constructor */};
DOMParserSupport.prototype = {
	toString: function() {return "[object DOMParser]"},
	parseFromString: function($str, $contentType) {
		if (window.ActiveXObject){
			var $xmlDocument = new ActiveXObject("Microsoft.XMLDOM");
			$xmlDocument.loadXML($str);
		return $xmlDocument;
		}
		else {
			var $parser = new DOMParser();
			$xmlDocument = $parser.parseFromString($str,$contentType);
			return $xmlDocument;
		}
	},
	// not supported
	parseFromStream: new Function,
	baseURI: ""
};

function XMLSerializer() {/* empty constructor */};
XMLSerializer.prototype = {
	toString: function() {return "[object XMLSerializer]"},
	serializeToString: function($root) {
		return $root.xml || $root.outerHTML;
	},
	// not supported
	serializeToStream: new Function
};

//Transforme une chaine en code ASCII avec le caractère | comme séparateur
function chaineToASCII(chaine) {
	var chaineAsc = "";
	for (var i = 0; i < chaine.length; i++) {
		chaineAsc += chaine.charCodeAt(i)+"|";
	}
	return chaineAsc;
}

function ASCIIToChaine(ascii){
	var chaineStr = "";
	var tab = ascii.split('|');
	for(var i=0; i <tab.length; i++){
		chaineStr = chaineStr + tab[i];
	}
	return chaineStr;
}
	 