	var xmldoc=null;
	var xmldoc_save=null;
	var id_save=null;
	var _completeListe=document.getElementById("liste_choix");
	var liste_id=new Array();
	var key=0;
	var mouse=0;
	var test=null;
	
	var indice_ul=-1;
	var url="";
	var myhttpRequest=null;
	
	var last_word="";
	var ind_focus=0;
	var previous_word="";
	var update_word="";
	var key_choice=false;
	var cpt_inaction=0;
	var last_print="";
	var limit_first=0;
	var limit_last=20;
	var statut_connect="";
	var tab_lieux_separes=null;
	var last_answer=new Array();
	var last_test="";
	var last_mouse_over=-1;
	var xml_in_tab=new Array();
	var sql_limit=50;
	var max_xml_word="";
	var last_chaine="";
	var old_chaine="";
	var min_length=3;
	var myzone=null;
	var max_nb_requete=1000;
	var nb_requete=0;
	var temp_limite=50;
	var type_save=null;
	var temp_mouse_focus=0;
	
	var paysMin="1";
	var paysMax="141281";
	
	
	
	
	
	/*
		Fonction permettant de lancer une requete au serveur
		avec
		@param boolean efface_old_xml 
	/**//*	
	function chargement(efface_old_xml) {
	
		if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    		httpRequest = new XMLHttpRequest();
    		
		}
		else if (window.ActiveXObject) { // IE
   			 httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
		}	
		 if (!httpRequest) {
            alert('Abandon :Impossible de cr�er une instance XMLHTTP');
            return false;
        }
        
		//action �ffectu� quand l'�tat de la requ�te change!!!
		httpRequest.onreadystatechange = function() {
			
			
			//si le r�sultat re�u
			if(httpRequest.readyState == 4 && httpRequest!=null && httpRequest.responseXML!=null){
				myhttpRequest=httpRequest;
				if(efface_old_xml==true){
				//alert("reinitialistaion");
					//si  efface_old_xml = true on reinitialise les donn�es
					xmldoc_save=new Array();
					id_save=null;
					id_save=new Array();
					type_save=null;
					type_save=new Array();
					last_test='';
				}
				
				
				
				//remplissage des differents champs 
				for(var i=0;myhttpRequest.responseXML.getElementsByTagName('lieu').item(i)!=null;i++){
					xmldoc_save.push(myhttpRequest.responseXML.getElementsByTagName('lieu').item(i).firstChild.data);//a modifier
					id_save.push(myhttpRequest.responseXML.getElementsByTagName('lieu').item(i).getAttribute("id"));
					type_save.push(myhttpRequest.responseXML.getElementsByTagName('lieu').item(i).getAttribute("type"));
				 }
				 
				 tab_lieux_separes=new Array(xmldoc_save.length,8);
				var i;
				for(i=0;i<xmldoc_save.length;i++){
					tab_lieux_separes[i]=xmldoc_save[i].split(",");
					if(sup_speciaux(tab_lieux_separes[i][0])>max_xml_word) max_xml_word=sup_speciaux(tab_lieux_separes[i][0]);
				}
				
				get_proposition(true);
			}
    	}
		
		//envoie de la requ�te http au server avec true specifiant le mode asynchrone
        httpRequest.open("GET", url, true);
        httpRequest.send(null);        
		temp_limite+=50;
		myhttpRequest= httpRequest;
	}
	/**/
	
	function chargementMini(){
		if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    		httpRequest = new XMLHttpRequest();
		}
		else
			if (window.ActiveXObject) { // IE
   			 httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}	
		if (!httpRequest) {
			alert('Abandon :Impossible de creer une instance XMLHTTP');
			return false;
		}
		myhttpRequest=null;
		//envoie de la requete http au server avec true specifiant le mode asynchrone
		httpRequest.open("GET", url, true);
		
		//action effectuee quand l'etat de la requete change!!!
		httpRequest.onreadystatechange = function() {
			
			//si le resultat est recu
			if(httpRequest.readyState == 4){
				 if(httpRequest.status == 200){
					//alert("maj xmldoc : "+xmldoc_save)
					myhttpRequest=httpRequest;
					xmldoc_save=null;
					xmldoc_save=new Array();
					id_save=null;
					id_save=new Array();
					type_save=null;
					type_save=new Array();
					//remplissage des differents champs 
					for(var i=0;myhttpRequest.responseXML.getElementsByTagName('lieu').item(i)!=null;i++){
						xmldoc_save.push(myhttpRequest.responseXML.getElementsByTagName('lieu').item(i).firstChild.data);//a modifier
						id_save.push(myhttpRequest.responseXML.getElementsByTagName('lieu').item(i).getAttribute("id"));
						type_save.push(myhttpRequest.responseXML.getElementsByTagName('lieu').item(i).getAttribute("type"));
					}
					getPropositionMini();
				 }
				 //else
					 //alert("Error loading page\n"+ httpRequest.status +":"+ httpRequest.statusText); 
			}
		}
		httpRequest.send(null);        
		temp_limite+=50;
		myhttpRequest= httpRequest;
	}
	
	
	
	
	
	/*Fonction permettant la connexion � la base de donn�e
	*/
	function gere_connexion(connect){
		
		//etat similaire � l'�tat en cours
		if(statut_connect==connect) return true;
		statut_connect=connect;
		
		var httpconnexion=null;
		if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    		httpconnexion = new XMLHttpRequest();	
		}
		else if (window.ActiveXObject) { // IE
   			 httpconnexion = new ActiveXObject("Microsoft.XMLHTTP");
		}	
		 if (!httpconnexion) {
            alert('Abandon :Impossible de cr�er une instance XMLHTTP');
            return false;
        }
        url = context_path;
		url += "/gere_connection.jsp?action=";
		if(connect==true){
		 	url+="connect";
		}
		else{
		 	url+="deconnect";
		}
		httpconnexion.open("GET",url, true);
        httpconnexion.send(null);
		return true;
	}
	
	/*
		Fonction permettant d'initialiser le document xml
		contenant la liste des choix correspondant � la saisie
	/**//*	
	function init_tab(limit){
		init_tab2(limit,sup_speciaux(myzone.value));
		
	}
	/**//*	
	function init_tab2(limit,saisie_envoie){
	
		nb_requete+=1;
		if(nb_requete>max_nb_requete) return;
		url = context_path;
		//cas premiere recherche correspondant � une chaine
		
		if(limit<=0){

			
			//on garde une trace de l'ancienne chaine
			last_chaine=saisie_envoie;		
			
			url += "/reponse_ajax.jsp?chaine="+last_chaine+"&limit=0";
			chargement(true);
			
		}
		else{
			//cas suite des resultats de la recherche pr�c�dente
			
			url += "/reponse_ajax.jsp?chaine="+last_chaine+"&limit="+limit;
			chargement(false);
		}
	}
	/**/
	function initMini(){
		if(myzone.value.length>=min_length){
			ind_focus=1;
			//xmldoc_save=null;
			url = context_path;
			var pays=myzone.form.pays.value;
			url += "/reponse_ajax.jsp?chaine="+myzone.value+"&limit=0&min="+paysMin+"&max="+paysMax+"&pays="+pays;
			chargementMini();
		}
	}
	
	function choixPays(){
		var pays=myzone.form.pays.value;
		if(pays == "fr"){
			paysMin="0";
			paysMax="200000";
			return;
		}
		if(pays == "be"){
			paysMin="200000";
			paysMax="400000";
			return;
		}
		if(pays == "ch"){
			paysMin="600000";
			paysMax="800000";
			return;
		}
		if(pays == "ca"){
			paysMin="400000";
			paysMax="600000";
			return;
		}
		if(pays == "it"){
			paysMin="800000";
			paysMax="1000000";
			return;
		}
		if(pays == "de"){
			paysMin="1000000";
			paysMax="1200000";
			return;
		}
		if(pays == "lu"){
			paysMin="1200000";
			paysMax="1400000";
			return;
		}
		if(pays == "uk"){
			paysMin="1400000";
			paysMax="1600000";
			return;
		}
		if(pays == "sp"){
			paysMin="1600000";
			paysMax="1800000";
			return;
		}
		if(pays == "an"){
			paysMin="1800000";
			paysMax="2000000";
			return;
		}
		if(pays == "po"){
			paysMin="2000000";
			paysMax="2200000";
			return;
		}
		paysMin="0";
		paysMax="2200000";
		//alert("choixPays()");
		return;
	}
	
	window.onunload = function(){
		gere_connexion(false);
	}
	/*
		
	*/
	document.onclick = function(){	
		
		
		//pour eviter une erreur �ventuelle
		if(myhttpRequest==null) return;
		cpt_inaction==0;
		if(_completeListe!=null && ind_focus!=1 && ind_focus!=2 && key!=40 && key!=38 ){
			//si le click n'est ni sur la zone de saisie ni sur une proposition on ferme la liste des choix
			viderListeMini(true);
			indice_ul=-1;
		}
	}
	
	/**action effectuer sur le relachement d'une touche du clavier **/
	document.onkeyup = function(event)
	{
		//if(myhttpRequest==null) return true;
		// verification de presence sur la zone des lieux
		if(ind_focus==1 || ind_focus==2){
			
			 if(window.event)
			{
					//ie
					key=window.event.keyCode;
			}
			else
			{				
				//firefox,netscape
				key=event.which;					
			}
			//si appui sur Entree
			if(key==13) return;
			//si appui sur une autre touche
			//if(key==8){
				//rechercheMini();
				//getPropositionMini();
				//return;
			//}
			//si la touche est un caract�re standard
			if(key!=38 && key!=40 && key!=37 && key!=39 && key!=17 && key!=18 && key!=13){ 
				gere_connexion(true);
				myzone.form.idLieu.value="";
				//alert(myzone.form.pays.value);
				choixPays();
				viderListeMini(true);
				initMini();
				return;
			 }
		}
		return true;
	}
	
document.onkeydown = function(event){	
		if(ind_focus==1 || ind_focus==2){
				//si on appuie sur une touche dans les lieux c'est qu'il y a de l'action donc 
				//on remet le compteur a 0
			cpt_inaction==0;
		        //On v�rifie le navigateur
			if(window.event){
		        //ie
		        key=window.event.keyCode;
			}
			else{		            
				//firefox,netscape
				key=event.which;
			}
		        //gestion de la touche entr�e
			if(key==13){
				if(indice_ul>-1){
					//si un �l�ment est surlign�, on le choisit comme lieu 
					var reg=new RegExp("[0-9]+", "g");
					if(liste_id[indice_ul].match(reg)){
						myzone.form.idLieu.value=liste_id[indice_ul];
					}
					//et on l'affiche
					print_last_word(_completeListe.childNodes[indice_ul].innerHTML);
					
					//puis on vide la liste des choix
					viderListeMini(true);
					//le focus n'est donc plus sur la liste d�roulante mais sur la zone de texte
					ind_focus=1;
						//on n'est plus en mode s�lection clavier
					key_choice=false;
						//on retourne false pour empecher la validation du formulaire
					return false;
				}
				
			}
			if(key==9){
				if(indice_ul>-1){
					//si un �l�ment est surlign�, on le choisit comme lieu 
					var reg=new RegExp("[0-9]+", "g");
					if(liste_id[indice_ul].match(reg))
						myzone.form.idLieu.value=liste_id[indice_ul];
					//alert(liste_id[indice_ul]);
					//et on l'affiche
					print_last_word(_completeListe.childNodes[indice_ul].innerHTML);		
				}
				//puis on vide la liste des choix
				viderListeMini(true);
				ind_focus=0;
				key_choice=false;
				return false;
			}
			//si on effectue un choix clavier mais qu'il n'y a aucune proposition, 
			if(key==40 || key==38){
				if(_completeListe==null || _completeListe.childNodes.length==0){ 
					return;
				}
			//si on appuie sur la touche bas
			if(key==40){
				key_choice=true;
				//et que l'on est pas sur le dernier �l�ment de la liste affich�e
				if(indice_ul!=(_completeListe.childNodes.length-1)){
					//si indice_ul est diff�rent de -1, ca veut dire qu'il y a un lieu surlign�
					//il faut donc remettre ca couleur a blanc
					if(indice_ul!=-1){
						_completeListe.childNodes[indice_ul].style.backgroundColor="white";
						_completeListe.childNodes[indice_ul].style.color="black";

					}				
					//on incr�mente le pointeur de slection
					indice_ul++;
					//on retiens l'idlieu du nouvel �l�ment s�lectionn�
					myzone.form.idLieu.value=liste_id[indice_ul];
					myzone.value=_completeListe.childNodes[indice_ul].innerHTML;
					//on affiche dans la zone de texte l'�l�ment s�lectionn�
					print_last_word(_completeListe.childNodes[indice_ul].innerHTML);
					//on surligne le choix
					_completeListe.childNodes[indice_ul].style.backgroundColor="blue";
					_completeListe.childNodes[indice_ul].style.color="white";
					if(_completeListe.childNodes[indice_ul].offsetTop<_completeListe.scrollTop){
						//alert("remonter scroll");
						_completeListe.scrollTop=_completeListe.childNodes[indice_ul].offsetTop;
					}
					else
						if((_completeListe.childNodes[indice_ul].offsetTop+_completeListe.childNodes[indice_ul].offsetHeight)>(_completeListe.scrollTop+_completeListe.offsetHeight)){
							//alert("descendre scroll");
							_completeListe.scrollTop=_completeListe.childNodes[indice_ul].offsetTop+_completeListe.childNodes[indice_ul].offsetHeight-_completeListe.offsetHeight;
						}
				}
				else{
					//si on est sur le dernier �l�ment de la liste de s�lection
				}
			}
			if(key==38){
				key_choice=true;
				if(indice_ul>0){
					_completeListe.childNodes[indice_ul].style.backgroundColor="white";
					_completeListe.childNodes[indice_ul].style.color="black";
					indice_ul--;
					myzone.form.idLieu.value=liste_id[indice_ul];
					print_last_word(_completeListe.childNodes[indice_ul].innerHTML);
					_completeListe.childNodes[indice_ul].style.backgroundColor="blue";
					_completeListe.childNodes[indice_ul].style.color="white"; 
						if(_completeListe.childNodes[indice_ul].offsetTop<_completeListe.scrollTop)
							_completeListe.scrollTop=_completeListe.childNodes[indice_ul].offsetTop;
						else
							if((_completeListe.childNodes[indice_ul].offsetTop+_completeListe.childNodes[indice_ul].offsetHeight)>(_completeListe.scrollTop+_completeListe.offsetHeight))
								_completeListe.scrollTop=_completeListe.childNodes[indice_ul].offsetTop+_completeListe.childNodes[indice_ul].offsetHeight-_completeListe.offsetHeight;
				}
				else{
					if(limit_first-1!=null){
						limit_first--;
						limit_last--;
						indice_ul=0;
							
						myzone.form.idLieu.value=liste_id[indice_ul];
						print_last_word(_completeListe.childNodes[indice_ul].innerHTML);
						_completeListe.childNodes[indice_ul].style.backgroundColor="blue";
						_completeListe.childNodes[indice_ul].style.color="white";
						if(_completeListe.childNodes[indice_ul].offsetTop<_completeListe.scrollTop)
							_completeListe.scrollTop=_completeListe.childNodes[indice_ul].offsetTop;
						else
							if((_completeListe.childNodes[indice_ul].offsetTop+_completeListe.childNodes[indice_ul].offsetHeight)>(_completeListe.scrollTop+_completeListe.offsetHeight))
								_completeListe.scrollTop=_completeListe.childNodes[indice_ul].offsetTop+_completeListe.childNodes[indice_ul].offsetHeight-_completeListe.offsetHeight;
					}
				}
			}
			}
			if((key==37 || key==39) && ind_focus==1){
				ind_focus=1;
				indice_ul=-1;
				key_choice=false;
				return;
			}
			if(key!=40 && key!=38){
				key_choice=false;
			}
		}else{								
			key_choice=false;
			if (window.event!=null && window.event.keyCode==13)
				return true;
			if(event!=null && event.which==13)
				return true;
		}
		return true;
	}
/* fin onkeydown/**//*	
	function change_last_word(saisie){
		if(key_choice==false) last_word=get_last_word(saisie);
	}
	/**//*	
		Fonction permettant de supprimer les accents et autres
		caract�res sp�ciaux d'une cha�ne et de mettre cette 
		derni�re en minuscule
/**//*	
	
	function  separeCodeandNom(chaine){
		
		reg=new RegExp("^[0-9]*%?$", "g");
		reg2=new RegExp("^[a-zA-Z ,]*%$", "g");
		if(chaine.match(reg)){
		alert(chaine);
		 return chaine.substring(0,chaine.length);
		 }
		else if(chaine.match(reg2) || chaine==""){
		alert(chaine);
		 return chaine;
		}
		else{
			 firstPartie=" ";
			i=0;
			reg=new RegExp("[0-9]", "g");
			firstCharIsNum =(chaine.charAt(0)).match(reg);
			
			while((""+chaine.charAt(i)).match(reg)==firstCharIsNum){
				firstPartie+=chaine.charAt(i);
				i++;
			}
		   
			sousChaine=chaine.substring(i, chaine.length);
			
			return firstPartie + ","+ separeCodeandNom(sousChaine);
			

		}
	}

	/**//*	
	function sup_speciaux(saisie){
	
		var tpetits_mots=new Array("le","la","l","les","de","du","d","des","sur","sous","en","au","aux");
		//on met la saisie en minuscule pour faciliter le traitement
		saisie = saisie.toLowerCase();
	   // alert(saisie +" avant sup");
		//on remplace tous les caract�res sp�ciaux
		var reg=new RegExp("[�������]+", "g");
		saisie = saisie.replace(reg, 'e');
	
		reg=new RegExp("[�����]+", "g");
		saisie = saisie.replace(reg, 'a');
		
		reg=new RegExp("[�����]+", "g");
		saisie = saisie.replace(reg, 'u');
		
		reg=new RegExp("[����]+", "g");
		saisie = saisie.replace(reg, 'o');
		
		reg=new RegExp("[����]+", "g");
		saisie = saisie.replace(reg, 'i');
		
		reg=new RegExp("[�]+", "g");
		saisie = saisie.replace(reg, 'c');
		
		//on remplace les s�parateurs int�rieur de mots (-_') � ne pas 
		//confondre avec (, ; : ) qui sont des s�parateurs entre mots
		//diff�rents: par exemple "Plessis-Bouchard; france"
		reg=new RegExp("[,;:]+", "g");
		saisie = saisie.replace(reg, ',');
		reg=new RegExp("[-_']+", "g");
		saisie = saisie.replace(reg, ' ');
		//reg=new RegExp("[,;:]+", "g");
		//saisie = saisie.replace(reg, ',');
		//on remplace les espaces multiples parUN ESPACEKEY
		
		reg=new RegExp("[ ]+", "g");
		saisie = saisie.replace(reg, ' ');
		var i=0;
		//on effectue un "trim" � gauche et � droite
		for(;i<saisie.length && saisie[i]==' ';i++);
		saisie=saisie.substring(i);
		i=saisie.length-1;
		for(;i>=0 && saisie[i]==' ';i--);
		saisie=saisie.substring(0,i+1);
		var saisie_finale='';
		
		var j=0;
		
		if(! is_code(saisie))
		for(var i=0;i<saisie.length;i=j){
			saisie_finale+=saisie.charAt(i);
			j=i+1;
			for(;j<saisie.length && saisie.charAt(j)==saisie.charAt(i);j++);

		}
		else saisie_finale+=saisie;
		
	
		//saisie_finale =separeCodeandNom(saisie_finale);
		
	  
		//on recupere les diff�rents mots de la saisie
		var tsaisie=saisie_finale.split(",");
		saisie_finale="";
		var isfind=false;
		var coller=false;
		var temp_coller=false;
		var tsaint=new Array("saint","saints","sainte","saintes","ste","st");
		
		for(var i=0;i<tsaisie.length;i++){
			isfind=false;
			//pour chacun des mots du libell� on parcourt le tableau
			//des termes pour "saint" afin de savoir s'il y en a un dans le libell�
			chargementMini()
			
			for(var j=0;j<tsaint.length && isfind==false;j++){
				if(tsaisie[i]==tsaint[j]) isfind=true;
			}
			//si c'est le cas on transfrome le terme en "st" pour que saint, sainnte...
			//correspondent � la m�me recherche
			if(isfind==true && i>0)
				saisie_finale+=" st";
				
			if(isfind==true && i==0) saisie_finale+="st ";
			
			if(isfind==false){
				
				for(var j=0;j<tpetits_mots.length && isfind==false;j++){
					if(tsaisie[i]==tpetits_mots[j]) isfind=true;
				}
				if(isfind==true) saisie_finale+="";				
			}
			reg=new RegExp("^(.*)s{1}$", "gi");
			
		
			
			if(tsaisie[i].length>3 && tsaisie[i].match(reg)) tsaisie[i]=tsaisie[i].substring(0,tsaisie[i].length-1);
			if(isfind==false && saisie_finale!="" ) saisie_finale+=""+tsaisie[i];
			if(isfind==false && saisie_finale=="") saisie_finale+=tsaisie[i];
			coller=temp_coller;
			temp_coller=false;
			
		}
		
		//alert(saisie_finale +"juste apres sup ");
		//alert(saisie+ " saisie "); 
	//	saisie_finale=saisie;
		return saisie_finale;
		
	}
	
	
		
	
	
	
	/**//*	
		Fonction renvoyant le dernier mot de la saisie
	/**//*	
	function get_last_word(saisie){
		var reg=new RegExp("[ ,;]+", "g");
		var tableau=saisie.split(reg);
		
		return tableau[tableau.length-1];
	}
	
	/**//*	
		Fonction renvoyant la liste des mots de la
		saisie dans l'ordre, except� le dernier mot
	/**//*	
	function get_other_words(saisie){
		var reg=new RegExp("[ ,;]+", "g");
		var tableau=saisie.split(reg);
		var tableau_bis=null;
		if(tableau.length > 1){
			tableau_bis=new Array();
			for(var i=0;i<(tableau.length-1);i++){
				tableau_bis[i]=tableau[i];
			}
		}
		return tableau_bis;
	}
	/**//*	
	
	/*
		Fonction permettant d'afficher le dernier
		mot ou groupe de mot que l'utilisateur vient 
		de choisir
	*/
	
	function print_last_word(mot){
		myzone.value=mot;
	}
	
	
	/*
		Fonction permettant de recueillir les propositons de
		lieux correspondant � la saisie utilisateur
		entr�e:which_xmldoc est un bool�en qui vaut true lorsqu'on 
		d�sire utiliser les derniers lieux envoy�s par le serveur
		et qui vaut false quand on veut travailler avec les anciens
		lieux qu'on avait conserver
	/**//*	
	function get_proposition(which_xmldoc){
	
		
		if(myhttpRequest==null){
			return;
		}
		//alert(myzone.value);
		var saisie_propre=sup_speciaux(myzone.value);
		//alert(saisie_propre + " SupFin");
		var test_saisie='';
		if(myzone.value.length<max_xml_word) test=myzone.value>max_xml_word.substring(0,myzone.value.length);
		else test=myzone.value.substring(0,max_xml_word.length)>max_xml_word;	
		if(xmldoc_save!=null && saisie_propre.length>=min_length && key!=40 && key!=38){			
			var stop_search=false;
			
			var test_xml_length=0;
			if((xmldoc_save.length-test_xml_length)<50) stop_search=true;
			while(myhttpRequest.responseXML!=null && myhttpRequest.responseXML.getElementsByTagName('lieu').item(0)!=null && stop_search==false  && saisie_propre>max_xml_word.substring(0,saisie_propre.length) && nb_requete<max_nb_requete && temp_limite<=400){
				if(nb_requete<max_nb_requete)  init_tab(temp_limite);//a modifier
				last_test='';
				if((xmldoc_save.length-test_xml_length)<50  || temp_limite>=250){
					stop_search=true;
					init_tab(0);
				}
				
				test_xml_length=xmldoc_save.length;
			}
			////////////////////////////////////////////////////////////////////////////////
			if(xmldoc_save!=null
			 && saisie_propre.length>min_length 
			 	&& saisie_propre!=last_chaine 
			 	&& ((saisie_propre.length<last_chaine.length 
			 	&& saisie_propre!=last_chaine.substring(0,saisie_propre.length)) || (saisie_propre.length>last_chaine.length && saisie_propre.substring(0,last_chaine.length)!=last_chaine))){
				init_tab(0);
			}
			////////////////////////////////////////////////////////////////////////////////
			which_xmldoc=true;
		 }
		if(xmldoc_save!=null && key!=40 && key!=38){
			if(key_choice==false){
				limit_first=0;
				limit_last=20;
			}
			//si il y a d�ja eu une r�ponse du serveur et qu'on d�sire r�cup�rer 
			//les valeurs renvoy�es par le serveur
			xmldoc=xmldoc_save;
			//il n'y a pas encore de choix correspondant donc indice ul vaut 0
			indice_ul=-1;
			//on enl�ve toutes les anciennes valeurs de la liste des choix
			//alert("supprsseion en cours7");
			while(_completeListe!=null && _completeListe.childNodes.length>0) {
				_completeListe.removeChild(_completeListe.childNodes[0]);
				liste_id.pop();
				//liste_type.pop();
		    }
			var reg=new RegExp("-", "g");
			var nbcorrespond=1;
			var tres=comparaison2();
			affiche_prop(0,xmldoc_save.length);
			
			//on effectue une boucle sur les mots du document afin de trouver ceux qui correspondent � la saisie
			
			if(_completeListe.childNodes.length==0){
				_completeListe.style.display='none';
				indice_ul=-1;
			}
		}
	}
	/**/
	function viderListeMini(close){
		while(_completeListe!=null && _completeListe.childNodes.length>0) {
			_completeListe.removeChild(_completeListe.childNodes[0]);
			liste_id.pop();
	    }
		if(close){
			_completeListe.style.display='none';
		}
	}
	
	function getPropositionMini(){
		viderListeMini(true);
		if(myzone.value.length>=min_length){
			//xmldoc=null;
			//xmldoc=xmldoc_save;
			
			//il n'y a pas encore de choix correspondant donc indice ul vaut 0
			indice_ul=-1;
			//on enleve toutes les anciennes valeurs de la liste des choix

			if(xmldoc_save!=null && xmldoc_save.length>0){
				affichePropMini(0,xmldoc_save.length);	
			}
			_completeListe.style.display='block';
			if(_completeListe.childNodes.length==0){
				viderListeMini(true);
				indice_ul=-1;
			}
		}
	}
	
	/*
		Fonction bouclante qui permet de mettre a jour le
		fichier xml
	*/
	function rechercheMini(){
		//ind_focus=1;
		//viderListeMini(true);
		//initMini();
		//if(xmldoc_save!=null && xmldoc_save.length>0)
			//alert(xmldoc_save);
		getPropositionMini();
	}
	/**//*	
	function boucle_recherche(){
		
		//*
		//on n'effectue la boucle que si le focus est sur la zone de texte ou
		//la liste des choix
		if(ind_focus==1  || ind_focus==2){
			//si on est sur la zone de texte et que la taille du dernier mot de la saisie est sup�rieur � 2
			//(pour �viter une requ�te trop couteuse au serveur) et que le dernier mot de la saisie est n'est
			//pas compatible avec le mot pour lequel on avait fait la derni�re mise � jour(c'est � dire qu'il faut refaire une mise � jour)
			//var saisie_propre=sup_speciaux(myzone.value);
			
		    //if(saisie_propre!=old_chaine)
			if(key!=40 && key!=38){
				//le mot mis � jour devient donc le dernier mot de la saisie
				//on lib�re xmldoc
				xmldoc=null;
				//on appelle la fonction qui effectue la demande au serveur
				if(nb_requete<max_nb_requete )  init_tab(0);
				
				//et on r�cup�re la liste des propositions en signalant qu'on
				//veut les derni�res envoy�es par le serveur
				get_proposition(true);
				
			
			}
			else {
				//si il n'y a pas de changement depuis le dernier tour de recherche
				//alors on incr�mente le compteur d'inaction
			
				if(myzone.value==update_word) cpt_inaction++;
				if(cpt_inaction==3 ){
					//si il vaut 2 on rel�che la connexion
					cpt_inaction==0;					
					gere_connexion(false);
				}
			}
			
			//la recherche se r�effectuera dans 1,5 secondes
			//setTimeout("boucle_recherche()",1500); 
			//old_chaine=saisie_propre;
			
		}
	}
	
	
	/**//*	
		Fonction utilis�e pour changer les propositions,
		ce qui inclut vider la liste si iil n'y a plus de saisie...
		et appeler la fonction get_propositon si besoin pour
		r�cup�rer les choix
	/**//*	
	function change_liste(){
	
		if(myhttpRequest==null) return;
		if(key_choice==false){
			if(get_last_word(myzone.value)!=""){
				last_word=get_last_word(myzone.value);
				//alert(last_world);
				previous_word=last_word;
				get_proposition(false);
			}
			else{
				last_word=get_last_word(myzone.value);
				previous_word=last_word;
				get_proposition(false);
			}
			
			if(myzone.value==""){
				while(_completeListe!=null && _completeListe.childNodes.length>0) {
					_completeListe.removeChild(_completeListe.childNodes[0]);
				}
				return;
			}
			if(_completeListe!=null && _completeListe.childNodes.length==0){
				init_tab(0);
				var tab_word=get_other_words(myzone.value);
				if(tab_word!=null){
					var i=tab_word.length-1;
				}
			}
			while(_completeListe!=null && tab_word!=null && _completeListe.childNodes.length==0 && i!=-1){
				last_word=tab_word[i]+" "+last_word;
				get_proposition(false);
				i--;
			}
			last_word=get_last_word(myzone.value);
		}
	}
	/**/	

	/**//*	
 //fonction pemrettant de trouver les lieux du document xml renvoy� par le serveur  correspondant � la saisie
 function comparaison2(){
	 //tres est le tableau des r�sultats de la comparaison
	 var tres=new Array();
	 var liste_id_temp=new Array();
	 var liste_type_temp=new Array();
	 var test_find=true;
	 var tab_rech=new Array();
	 //si il n'y avait deja pas de r�ponse avant alors qu'on avait deja effectu� une demande de r�ponse au serveur
	 //et que la saisie a test� a la meme base que la saisie pr�c�demment test�e (par exemple si on avait teste "zxy" 
	 // qu'il n 'y avait pas de r�ponse, il n'y en aura pas non plus pour "zxya"
	 if((last_answer==null || last_answer.length==0) && last_test!='' && last_test==sup_speciaux(myzone.value).substring(0,last_test.length)){
		//il ne sert � rien de continuer on sait d�ja qu'il n'y a pas d� r�sultat		
		return last_answer;
	}
	  //si la zone saisie est exactement �gale au libell� d'un des lieux de la liste des choix
	  if(  key!=38 && key!=40 && last_answer.length!=0 && myzone.value==affiche_bien(xmldoc_save[last_answer[0]],type_save[last_answer[0]])){
		//on vide la liste (en g�n�ral elle sera d�ja vide car l'utilisateur �crit rarement le lieu entier
		//il aura probablement deja effectue son choix dans la liste, ce qui entraine le vidage de celle-ci)
		//alert("supprsseion en cours10");
		while(_completeListe.childNodes[0]!=null){
		
			_completeListe.removeChild(_completeListe.childNodes[0]);
			liste_id.pop();
		}
		//on cache l'aide � la saisie
		_completeListe.style.display='none';
		indice_ul=-1;
	  }
	  else{
		if(_completeListe.childNodes.length>0) _completeListe.style.display='block';
	 }
	 //si le saisie a compar� n'a pas boug� depuis le dernier r�sultat, on renvoie l'ancien r�sultat
	 if(last_test==sup_speciaux(myzone.value)) return last_answer;
	  if(last_test=='' || last_test.length>=myzone.value.length){
		for(var i=0;i<xmldoc_save.length;i++){
			tab_rech.push(xmldoc_save[i]);
			liste_id_temp.push(id_save[i]);
			liste_type_temp.push(type_save[i]);
		}
	 }
	 else{
		
		for(var i=0;i<last_answer.length;i++){
			tab_rech.push(xmldoc_save[last_answer[i]]);
			liste_id_temp.push(id_save[last_answer[i]]);
			liste_type_temp.push(type_save[last_answer[i]]);
		}
	}
	 
	
	 var liste_lieux=myzone.value.split(new RegExp("[:,;]+", "g"));	 
	 for(var i=0;i<tab_rech.length && test_find==true;i++){	 	
		var temp=tab_rech[i];
		var j;		
		for(j=0;j<liste_lieux.length && test_find==true;j++){
			temp = temp.replace(new RegExp("^( ;)*", "g"), '');
			
			//alert(temp);		
			var tabtemp=temp.split(new RegExp("[:,;]+", "g"));						
			test_find=false;
			var lieupropre=sup_speciaux(liste_lieux[j]);
			for(var k=0;(k<=1 || (k>1 && j>0) || (is_code(lieupropre)  && k<4))  && k<tabtemp.length && test_find==false;k++){				
				var tabtemp_k=sup_speciaux(tabtemp[k]);				
				if(lieupropre.length<=tabtemp_k.length && lieupropre==sup_speciaux(mylefttrim(tabtemp[k]).substring(0,mylefttrim(liste_lieux[j]).length)) ){
					test_find=true;
				}
				if(lieupropre.length<=tabtemp_k.length && lieupropre==tabtemp_k.substring(0,lieupropre.length)){
					test_find=true;
				}
			}
		}
		if(j==liste_lieux.length && test_find==true){
			if(last_test=='' || last_test.length>=myzone.value.length) {
				tres.push(i);				
			} else  tres.push(last_answer[i]);
		}
		test_find=true;
	 }
	 
	
	last_answer=tres;
	last_test=sup_speciaux(myzone.value);
	if(tres!=null && tres.length>0) _completeListe.style.display='block';
	return tres;
 }
 /**/
 
	
	
	
	
	//cette fonction permet d'afficher les propositions de lieux du tableau last_answer
	//, c'est � dire des derni�res r�ponses trouv�es dans le document xml qui correspondent � la saisie
	// , il affiche les propositions entre les indices first et last
 	/**//*	
	function affiche_prop(first,last){
		//on vide d'abord l'ancienne liste affich�e
		while(_completeListe!=null && _completeListe.childNodes.length>0) {
			
			_completeListe.removeChild(_completeListe.childNodes[0]);
			liste_id.pop();
			//liste_type.pop();
		}
		for(var i=first;i<last && last_answer[i]!=null;i++){
			//puis pour chaque r�ponse de last_answer entre first et last,
			//on cr�e un nouvel �l�ment de type <p>
			
			var nouveauElmt = document.createElement("P");
			//on affiche que le contenu qui nous int�resse en fonction des deux arguments
			// qui sont 1) le string repr�sentant le lieu ("franconville, 95130...") et 
			// 2) le type du lieu ("VILLE","REGION"...)
			nouveauElmt.innerHTML = affiche_bien(xmldoc[last_answer[i]],type_save[last_answer[i]]);
			
			//on affecte � la balise <p> un style selon le navigateur 
			if(navigator.appName == 'Microsoft Internet Explorer'){
				nouveauElmt.className  = 'suggestpie';
			}
			else{
				nouveauElmt.className  = 'suggestpmoz';
			}
				//on donne un id � l'�l�ment afin de pouvoir pointer dessus lorsque la souris 
				//le survolera, qu'on fera un choix au clavier... l'id est i-first pour d�marrer � 0
				nouveauElmt.id=i-first;
				//et on lui donne des gestions d'�v�nements
				nouveauElmt.onclick=function(){
						//si le mot est click� on l'affiche dans la saisie et le focus n'est plus 
						//ni dans la zone de saisie ni dans la liste d�roulante
						ind_focus=0;
						// on garde l'idLieu du lieu choisit
						myzone.form.idLieu.value=liste_id[indice_ul];
						//on affiche le lieu
						print_last_word(_completeListe.childNodes[indice_ul].innerHTML);
						//si il est click� on vide la liste des choix
						while(_completeListe!=null && _completeListe.childNodes.length>0) {
						
							_completeListe.removeChild(_completeListe.childNodes[0]);
							liste_id.pop();
		    			}
						//on vide aussi le tableau correspondant � la derni�re recherche
						//on ne garde que l'�l�ment qui vient d'�tre click� dans last_answer
						while(last_answer.length>1){
							var temp=last_answer.pop();
							var indice_find=false;
							if(indice_find==false && xmldoc[temp]==this.innerHTML){
								//on a trouv� l'�l�ment sur lequel l'utilisateur a click�
								//on le sauvegarde
								last_answer[0]=temp;
								indice_find=true
							}
						}
						//on remet l'indice de choix et de choix souris� -1 puisqu'il ne pointe plus sur rien
						indice_ul=-1;
						last_mouse_over=-1;
						//on masque la zone d'aide � la saisie
		    			_completeListe.style.display='none';
						
				}
				
					nouveauElmt.onmouseover = function(){
					if(last_mouse_over!=this.id ||indice_ul==-1){
						last_mouse_over=this.id
						mouse=1;
						temp_mouse_focus=ind_focus;
						ind_focus=2;
						
						//ici l'�l�ment sur lequel on passe est mis en surbrillance
						if(indice_ul!=-1){ 
							_completeListe.childNodes[indice_ul].style.backgroundColor="white";
							_completeListe.childNodes[indice_ul].style.color="black";
						}
						this.style.backgroundColor="blue";
						this.style.color="white";
						//le pointeur est positionn� sur l'�l�ment en surbrillance
						indice_ul=this.id;
					}
					
				}
				nouveauElmt.onmouseout = function(){
					ind_focus=temp_mouse_focus;
					temp_mouse_focus=0;
				}
				nouveauElmt.onfocus= function(){
					//on indique que le focus est sur la liste des choix
					ind_focus=2;
				}
				nouveauElmt.onblur= function(){
					
					//le focus n'est plus sur la liste des choix
					ind_focus=0;
				}
			//on a fini de cr�er l'�l�ment de la liste d'aide
			//on l'ajoute donc � celle-ci
			_completeListe.appendChild(nouveauElmt);
			//et on garde son id dans la liste des id
			liste_id.push(id_save[last_answer[i]]);
			
		}
	}
	/**/
	//cette fonction affiche diff�remment dans la zone d'aide selon
	//l type de lieu, par exemple on n'affiche pas le num�ro
	//de d�partement pour les lieux de type villes, code insee et codes postaux
	//par exemple, on n'affiche pas "franconville, 95252, 95, val d'oise..."
	// mais "franconville, 95252, val d'oise" car franconville est une ville
	function affiche_bien(lieu,type){
	    if(lieu==null|| type==null) return lieu;
		if(type=="DEPARTEMENT" || type=="REGION" || type=="PAYS") return lieu;
		var reg=new RegExp("[,;:]+", "g");
		
		var tab_lieu=lieu.split(reg);
		var lieu_temp='';
		if(type=="POSTAL" || type=="CODE"){
			for(var i=0;i<tab_lieu.length;i++){
				if(i!=2 && i!=3 && i!=0)  lieu_temp+=","+tab_lieu[i];
				if(i==0)  lieu_temp=tab_lieu[i];
			}
		}
		if(type=="VILLE"){
			for(var i=0;i<tab_lieu.length;i++){
				if(i!=1 && i!=3 && i!=4 && i!=0)  lieu_temp+=","+tab_lieu[i];
				if(i==0)  lieu_temp=tab_lieu[i];
			}
		}
		if(lieu_temp!='') return lieu_temp;
		else return lieu;
	}
	/**//*	
	function is_code(saisie){
		var reg=new RegExp("[0-9]+", "g");
		if(saisie.match(reg)) return true;
	}
	
	function mylefttrim(saisie){
		var i=0;
		for(;i<saisie.length && saisie[i]==' ';i++);
		saisie=saisie.substring(i);
		return saisie;
	}
	function myrighttrim(saisie){
		var i;
		i=saisie.length-1;
		for(;i>=0 && saisie[i]==' ';i--);
		saisie=saisie.substring(0,i+1);
		return saisie;
	}	
	/**/	
	
	
	function affichePropMini(first,last){
		//ViderListeMini();
		for(var i=first;i<last;i++){
			//puis pour chaque r�ponse de last_answer entre first et last,
			//on cr�e un nouvel �l�ment de type <p>
			var nouveauElmt = document.createElement("P");
			//on affiche que le contenu qui nous int�resse en fonction des deux arguments
			// qui sont 1) le string repr�sentant le lieu ("franconville, 95130...") et 
			// 2) le type du lieu ("VILLE","REGION"...)
			nouveauElmt.innerHTML = affiche_bien(xmldoc_save[i],type_save[i]);
			
			//on affecte � la balise <p> un style selon le navigateur 
			if(navigator.appName == 'Microsoft Internet Explorer'){
				nouveauElmt.className  = 'suggestpie';
			}
			else{
				nouveauElmt.className  = 'suggestpmoz';
			}
				//on donne un id � l'�l�ment afin de pouvoir pointer dessus lorsque la souris 
				//le survolera, qu'on fera un choix au clavier... l'id est i-first pour d�marrer � 0
				nouveauElmt.id=i-first;
				//et on lui donne des gestions d'�v�nements
				nouveauElmt.onclick=function(){
						//si le mot est click� on l'affiche dans la saisie et le focus n'est plus 
						//ni dans la zone de saisie ni dans la liste d�roulante
						ind_focus=0;
						// on garde l'idLieu du lieu choisit
						myzone.form.idLieu.value=liste_id[indice_ul];
						//on affiche le lieu
						print_last_word(_completeListe.childNodes[indice_ul].innerHTML);
						//si il est click� on vide la liste des choix
						viderListeMini(true);
						//on vide aussi le tableau correspondant � la derni�re recherche
						//on ne garde que l'�l�ment qui vient d'�tre click� dans last_answer

						//on remet l'indice de choix et de choix souris� -1 puisqu'il ne pointe plus sur rien
						indice_ul=-1;
						last_mouse_over=-1;					
				}
				
					nouveauElmt.onmouseover = function(){
					if(last_mouse_over!=this.id || indice_ul==-1){
						last_mouse_over=this.id
						mouse=1;
						temp_mouse_focus=ind_focus;
						ind_focus=2;
						
						//ici l'�l�ment sur lequel on passe est mis en surbrillance
						if(indice_ul!=-1){ 
							_completeListe.childNodes[indice_ul].style.backgroundColor="white";
							_completeListe.childNodes[indice_ul].style.color="black";
						}
						this.style.backgroundColor="blue";
						this.style.color="white";
						//le pointeur est positionn� sur l'�l�ment en surbrillance
						indice_ul=this.id;
					}
					
				}
				nouveauElmt.onmouseout = function(){
					
					ind_focus=temp_mouse_focus;
					temp_mouse_focus=0;
					if(indice_ul!=-1){ 
						_completeListe.childNodes[indice_ul].style.backgroundColor="white";
						_completeListe.childNodes[indice_ul].style.color="black";
					}
				}
				nouveauElmt.onfocus= function(){
					//on indique que le focus est sur la liste des choix
					ind_focus=2;
				}
				nouveauElmt.onblur= function(){
					
					//le focus n'est plus sur la liste des choix
					ind_focus=0;
				}
			//on a fini de cr�er l'�l�ment de la liste d'aide
			//on l'ajoute donc � celle-ci
			_completeListe.appendChild(nouveauElmt);
			//et on garde son id dans la liste des id
			liste_id.push(id_save[i]);
			
		}
	}