/**
	Adaptation du Script réalisé par zichun
	http://www.codeproject.com/jscript/jsactb.asp
	Sous licence Creative Common License http://creativecommons.org/licenses/by/2.0/" 
	
	-> Prise en compte d'une requete AJAX passee en parametre de la fonction liste_autocomplete
	http_url de la forme : "http://server/script?c="
	@author gcordier
	@version $Id: liste_autocomplete.js,v 1.1 2009/04/22 10:34:41 arth Exp $
	Référentiel Exigence: RM-003

*/
function getCumulativeOffset(element) {
	if(!element) return [0,0];
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
    } while (element);
    return [valueL, valueT];
  }

function liste_autocomplete(obj, http_url,couleur){

	//alert("entree dans la methode pour l'auto completion");
	
	/* ---- Variables publiques ---- */
	this.timeOut =-1; //  Timeout in ms (-1: autocomplete never time out)
	this.lim = 5;    // Number of elements autocomplete can show (-1: no limit)
	this.firstText = false; // should the auto complete be limited to the beginning of keyword?
	this.mouse = true; // Enable Mouse Support
	this.delimiter = new Array(';',',');  // Delimiter for multiple autocomplete. Set it to empty array for single autocomplete
	this.startcheck = 1; // Show widget only after this number of characters is typed in.

	/* ---- Public Variables ---- */

	/* ---- Element pour ajax ---- */
	var requete = null;
		
	/* --- Styles --- */
	this.bgColor = 'white';
	if (couleur=="accueil")
		this.textColor = '#C40534';
	else
		this.textColor = 'black';
	this.hColor = '#D7D7D7';
	this.fFamily = 'Verdana, Arial, Helvetica, sans-serif;';
	this.fSize = '10px';
	this.hStyle = 'text-decoration:underline;font-weight:bold';
	/* --- Styles --- */

	/* ---- Private Variables ---- */
	var delimwords = new Array();
	var cdelimword = 0;
	var delimchar = new Array();
	var display = false;
	var pos = 0;
	var total = 0;
	var touche=0;
	var curr = null;
	var rangeu = 0;
	var ranged = 0;
	var bool = new Array();
	var pre = 0;
	var toid;
	var tomake = false;
	var getpre = "";
	var mouse_on_list = 1;
	var kwcount = 0;
	var caretmove = false;
	this.keywords = new Array();
	/* ---- Private Variables---- */
	
	var self = this;

	curr = obj;
	
	
	addEvent(curr,"focus",setup);
	
	/* Creation d'un objet XMLhttp (ie + Mozilla) */
	function getXMLHTTP()
	{
		
		
		var cnx = null;
		try{
			cnx = new ActiveXObject("Msxml2.XMLHTTP")
		}catch(e){
			try{
				cnx=new ActiveXObject("Microsoft.XMLHTTP")
			} catch(oc){
				cnx=null
			}
		}
		if(!cnx && typeof XMLHttpRequest != "undefined") {
			cnx=new XMLHttpRequest()
		}
		return cnx
		
		/*
		var request = false;
		try 
		{
			
     		request = new XMLHttpRequest();
     		
  		} 
  		catch (trymicrosoft) 
  		{
     		try 
     		{
     			
       			request = new ActiveXObject("Msxml2.XMLHTTP");
     		} 
     		catch (othermicrosoft) 
     		{
       			try 
       			{
         			request = new ActiveXObject("Microsoft.XMLHTTP");
      			}
      			catch (failed) 
      			{
         			request = false;
       			}  
     		}
   		}
   		if (!request)
     		alert("Error initializing XMLHttpRequest!");
     	return request;
     	*/
		
		/*
		var xmlHttp = null;
		if (window.XMLHttpRequest)
		{

          // If IE7, Mozilla, Safari, etc: Use native object
          xmlHttp = new XMLHttpRequest();
          alert("toto for that");
         }
         else if (window.ActiveXObject)
         {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                alert("toto for this");
         }
		return xmlHttp;*/
	}

	/* Envoi de la requete AJAX et traitement du resultat */
	function SendQuery(key, keycode){
			if(requete && requete.readyState!=0){
				requete.abort()
			}
			if(key.length > 2) //Il faut au minimum 3 caratères pour envoyer la requete vers la base des données 
			{
				requete = getXMLHTTP(); 
				var url = http_url+key;
				
				if(requete!=null){
					requete.open("GET", url, true);
					requete.onreadystatechange = function(){
						if (requete.readyState == 4){
							if (requete.status == 200){
								requete.responseText;
								self.keywords = eval(requete.responseText);
								tocomplete(keycode);
							}
						}
					}
				}
				requete.send(null);
			}
	}

	
	function setup(){
		addEvent(document,"keydown",checkkey);
		addEvent(curr,"blur",clear);
		addEvent(document,"keypress",keypress);
	}

	function clear(evt){
		if (!evt) evt = event;
		removeEvent(document,"keydown",checkkey);
		removeEvent(curr,"blur",clear);
		removeEvent(document,"keypress",keypress);
		removedisp();
	}
	function parse(n){
	
	//permet de matcher les correspondances entre la ville et la saisie
		if (self.delimiter.length > 0){
			var t = delimwords[cdelimword].trim().addslashes();
			var plen = delimwords[cdelimword].trim().length;
		}else{
			var t = curr.value.addslashes();
			var plen = curr.value.length;
		}
		var tobuild = '';
		var i;
		
		if (self.firstText){
			var re = new RegExp("^" + t, "i");
		}else{
			//création des expressions régulières pour les caractères accentués
			
			var relettree     = new RegExp('[éèêë]','gi');
			var relettrea     = new RegExp('[àäâ]','gi');
			var relettreu     = new RegExp('[ùûü]','gi');
			var relettrec     = new RegExp('[ç]','gi');
			var re_espace     = new RegExp('[ ]','gi');
			var re_tiret    = new RegExp('[-]','gi');
			//HE@11/06/08 ANO 000176
			var relettreo     = new RegExp('[ôö]','gi');
			//
			
			var monexpress = /\s/gi;
			var re = new RegExp(t, "i");
		}
			//t=t.replace(monexpress,"-");
		re.compile(t,"i");
		
		var relettrest     = new RegExp('st','gi');

		var re2     = new RegExp('saint','gi');
	
		var ss_accent= n;
		
		//si pas de E accentué dans la saisie on remplace tous les E accentués par e dans ville
		if (relettree.test(t)==false)		
		{	
			if (relettree.test(ss_accent))
			{
				ss_accent= ss_accent.replace(relettree,"e");}
		}
		if (relettrea.test(t)==false)		
		{
			
			if (relettrea.test(ss_accent))
			{
				ss_accent= ss_accent.replace(relettrea,"a");
			}
		}
		if (relettreu.test(t)==false)		
		{
			if (relettreu.test(ss_accent))
			{
				ss_accent= ss_accent.replace(relettreu,"a");
			}
		}
		if (relettrec.test(t)==false)		
		{
			if (relettrec.test(ss_accent))
			{ss_accent= ss_accent.replace(relettrec,"a");
			}
		}
		//HE@11/06/08 ANO 000176
		if (relettreo.test(t)==false)		
		{
			if (relettreo.test(ss_accent))
			{
				ss_accent= ss_accent.replace(relettreo,"o");
			}
		}
		
		//si la première lettre tapée est é
		if (t.search(relettree)==0 && ss_accent.substr(0,1)=="E")
		{
			ss_accent="é".concat(ss_accent.substr(1,ss_accent.length));
		}	
		
		var p;
		var p1;
		if (re_espace.test(t)){
			
			p = ss_accent.search(re_espace);
			p1=ss_accent.search(re_tiret);
			
			//var p2= ss_accent.search(re2);
			//alert (p2);
			
			if (p==-1){
			
				t=t.replace(re_espace,"-");
				
				re.compile(t,"gi");
				p= ss_accent.search(re_espace);
				
				plen=t.length;
				}
			else if (p!=-1 && p1!=-1)
			{
				if (ss_accent.search(re)!=-1)
				{p= ss_accent.search(re);
					plen=t.length;
				}
				else {
				t=t.replace(re_espace,"-");
				
				re.compile(t,"gi");
				p= ss_accent.search(re);
				
				plen=t.length;
				}
			
			} 
		}
		
		if (relettrest.test(t)){
			p = ss_accent.search(re);
			var p2= ss_accent.search(re2);
			
			if (p==-1){
			
				t=t.replace(relettrest,"saint");
				
				re.compile(t,"gi");
				p= ss_accent.search(re);
				
				plen=t.length;
				}
		}
		else
			p = ss_accent.search(re);
				
		for (i=0;i<p;i++){
			tobuild += n.substr(i,1);
		}
		tobuild += "<font style='"+(self.hStyle)+"'>"
		for (i=p;i<plen+p;i++){
			tobuild += n.substr(i,1);
		}
		tobuild += "</font>";
			for (i=plen+p;i<n.length;i++){
			tobuild += n.substr(i,1);
		}
		
		return tobuild;
	}
	
	function generate(){
	//	genere la liste
	//console.log("on rentre dans le generate");
		var t = delimwords[cdelimword].trim().addslashes();
		var re ="";
		if (document.getElementById('tat_table')){ display = false;document.body.removeChild(document.getElementById('tat_table')); } 
		
		for (i=0;i<self.keywords.length;i++){
			re = new RegExp(self.keywords[i], "i");
			//pour empecher l'ecriture dans la textbox quand un element de la liste a été inséré
		 	if (total==0 && re.test(t)==true && t.length>self.keywords[i].length && self.keywords[i].length!=0 )
			{obj.value=self.keywords[i];	window.setTimeout(2000);	}
		}
		
		if (self.keywords.length==0){ //alert(obj.value.substr(0,obj.value.length-1));
		obj.value=obj.value.substr(0,obj.value.length-1);
		}
		
		if (kwcount == 0){
			display = false;
			hide_select();
			return;
		}
		
		a = document.createElement('table');
		a.cellSpacing='0px';
		a.cellPadding='0px';
		a.width='20%';
		//a.border='1';
		a.style.position='absolute';
		a.style.borderStyle='solid';
		a.style.borderColor='black';
		a.style.borderWidth='1px';
		
		a.style.top = eval(curTop(curr) + curr.offsetHeight) + "px";
		a.style.left = curLeft(curr) + "px";
		a.style.backgroundColor=self.bgColor;
		a.id = 'tat_table';
		document.body.appendChild(a);
		var i;
		var first = true;
		var j = 1;
		if (self.mouse){
			a.onmouseout = table_unfocus;
			a.onmouseover = table_focus;
		}

		var counter = 0;
		//alert(touche);
		for (i=0;i<self.keywords.length;i++){
			if (bool[i]){
				counter++;


				r = a.insertRow(-1);
				if (first && !tomake){
					//r.style.bgColor = self.hColor;
					r.style.backgroundColor = self.hColor;
					first = false;
					pos = counter;
				}else if(pre == i){
					r.style.backgroundColor = self.hColor;
					first = false;
					pos = counter;
				}else{
				r.style.backgroundColor = self.bgColor;
				}
			
				//s'il ne reste plus qu'une proposition et que backspace n'est pas pressé
				if(total==1 && touche!=8 && touche!="[object]" && touche!="[object HTMLTableElement]" && touche!=17 && touche!=16 && touche!=36 && touche!=35 && touche!=37 && touche!=39){
					//inputenable("test",false)
					display=true;
					caretmove = 1;
					penter();
					//window.setTimeout(inputenable("test",true),70000000000);
					
			
				break;				
				}
				//permet de faire fonctionner maj+origine, maj+fin, maj+droite, maj+gauche
				else if ( touche==16 || touche==17 || touche==36 || touche==35 || touche==37 || touche==39){
					
					break;
				}

				r.id = 'tat_tr'+(j);
				c = r.insertCell(-1);
				c.style.color = self.textColor;
				c.style.fontFamily = self.fFamily;
				c.style.fontSize = self.fSize;
				
				c.innerHTML = parse(self.keywords[i]);
				c.id = 'tat_td'+(j);
				c.setAttribute('pos',j);
				if (self.mouse){
					c.style.cursor = 'pointer';
					c.onclick=mouseclick;
					c.onmouseover = table_highlight;
				}
				j++;
			}
			if (j - 1 == self.lim && j < total){
				r = a.insertRow(-1);
				r.style.backgroundColor = self.bgColor;
				c = r.insertCell(-1);
				c.style.color = self.textColor;
				c.style.fontFamily = 'arial narrow';
				c.style.fontSize = '12px';
				c.style.fontWeight = 'bold';
				c.align='center';
				var img = document.createElement("img");
  				 var src = document.createAttribute("src");
  				 src.nodeValue = "images/fleche_bas3.jpg";
   				img.setAttributeNode(src);
				 c.appendChild(img);
				//replaceHTML(c,'<b>/</b>');
				if (self.mouse){
					c.style.cursor = 'pointer';
					c.onclick = mouse_down;
				}
				break;
			}
		}
		
		rangeu = 1;
		ranged = j-1;
		display = true;
		if (pos <= 0) pos = 1;

		hide_select();
		
		
		//console.log("< generate");
	}

	function remake(){
	//reconstruit la liste en cas de up and down
	//console.log("> remake");
		document.body.removeChild(document.getElementById('tat_table'));
		a = document.createElement('table');
		a.cellSpacing='0px';
		a.cellPadding='0px';
		a.width='20%';
		a.style.position='absolute';
		a.style.borderStyle='solid';
		a.style.borderColor='black';
		a.style.borderWidth='1px';
		a.style.top = eval(curTop(curr) + curr.offsetHeight) + "px";
		a.style.left = curLeft(curr) + "px";
		a.style.backgroundColor=self.bgColor;
		a.id = 'tat_table';
		if (self.mouse){
			a.onmouseout= table_unfocus;
			a.onmouseover=table_focus;
		}
		document.body.appendChild(a);
		var i;
		var first = true;
		var j = 1;
		if (rangeu > 1){
			r = a.insertRow(-1);
			r.style.backgroundColor = self.bgColor;
			r.style.height='5px';
			c = r.insertCell(-1);
			c.style.color = self.textColor;
			c.style.fontFamily = 'arial narrow';
			c.style.fontSize = self.fSize;
			c.align='center';
			
				var img = document.createElement("img");
  				 var src = document.createAttribute("src");
  				 src.nodeValue = "images/fleche_haut3.jpg";
   				img.setAttributeNode(src);
			 c.appendChild(img);
			//replaceHTML(c,'/\\');
			if (self.mouse){
				c.style.cursor = 'pointer';
				c.onclick = mouse_up;
			}
		}
		
		for (i=0;i<self.keywords.length;i++){
			if (bool[i]){
				if (j >= rangeu && j <= ranged){
					r = a.insertRow(-1);
					r.style.backgroundColor = self.bgColor;
					r.style.height='5px';
					r.id = 'tat_tr'+(j);
					c = r.insertCell(-1);
					c.style.color = self.textColor;
					c.style.fontFamily = self.fFamily;
					c.style.fontSize = self.fSize;
					c.innerHTML = parse(self.keywords[i]);
					c.id = 'tat_td'+(j);
					c.setAttribute('pos',j);
					if (self.mouse){
						c.style.cursor = 'pointer';
						c.onclick=mouseclick;
						c.onmouseover = table_highlight;
					}
					j++;
				}else{
					j++;
				}
			}
			if (j > ranged) break;
		}
		if (j-1 < total){
			r = a.insertRow(-1);
			r.style.backgroundColor = self.bgColor;
			r.style.height='5px';
			c = r.insertCell(-1);
			c.style.color = self.textColor;
			c.style.fontFamily = 'arial narrow';
			c.style.fontSize = self.fSize;
			c.align='center';
			
				var img = document.createElement("img");
  				 var src = document.createAttribute("src");
  				 src.nodeValue = "images/fleche_bas3.jpg";
   				img.setAttributeNode(src);
			 c.appendChild(img);
		//	replaceHTML(c,'\\/');
			if (self.mouse){
				c.style.cursor = 'pointer';
				c.onclick = mouse_down;
			}
		}
		
			//console.log("< remake");
	}
	function goup(){
		if (!display) return;
		if (pos == 1) return;
		document.getElementById('tat_tr'+pos).style.backgroundColor = self.bgColor;
		pos--;
		if (pos < rangeu) moveup();
		document.getElementById('tat_tr'+pos).style.backgroundColor = self.hColor;
		if (toid) clearTimeout(toid);
		if (self.timeOut > 0) toid = setTimeout(function(){mouse_on_list=0;removedisp();},self.timeOut);
	}
	function godown(){
		if (!display) return;
		if (pos == total) return;
		document.getElementById('tat_tr'+pos).style.backgroundColor = self.bgColor;
		pos++;
		if (pos > ranged) movedown();
		document.getElementById('tat_tr'+pos).style.backgroundColor = self.hColor;
		if (toid) clearTimeout(toid);
		if (self.timeOut > 0) toid = setTimeout(function(){mouse_on_list=0;removedisp();},self.timeOut);
	}
	function movedown(){
		rangeu++;
		ranged++;
		remake();
	}
	function moveup(){
		rangeu--;
		ranged--;
		remake();
	}

	/* Mouse */
	function mouse_down(){
		document.getElementById('tat_tr'+pos).style.backgroundColor = self.bgColor;
		pos++;
		movedown();
		document.getElementById('tat_tr'+pos).style.backgroundColor = self.hColor;
		curr.focus();
		mouse_on_list = 0;
		if (toid) clearTimeout(toid);
		if (self.timeOut > 0) toid = setTimeout(function(){mouse_on_list=0;removedisp();},self.timeOut);
	}
	function mouse_up(evt){
		if (!evt) evt = event;
		if (evt.stopPropagation){
			evt.stopPropagation();
		}else{
			evt.cancelBubble = true;
		}
		document.getElementById('tat_tr'+pos).style.backgroundColor = self.bgColor;
		pos--;
		moveup();
		document.getElementById('tat_tr'+pos).style.backgroundColor = self.hColor;
		curr.focus();
		mouse_on_list = 0;
		if (toid) clearTimeout(toid);
		if (self.timeOut > 0) toid = setTimeout(function(){mouse_on_list=0;removedisp();},self.timeOut);
	}
	function mouseclick(evt){
		if (!evt) evt = event;
		if (!display) return;
		mouse_on_list = 0;
		pos = this.getAttribute('pos');
		penter();
	}
	function table_focus(){
		mouse_on_list = 1;
	}
	function table_unfocus(){
		mouse_on_list = 0;
		if (toid) clearTimeout(toid);
		if (self.timeOut > 0) toid = setTimeout(function(){mouse_on_list = 0;removedisp();},self.timeOut);
	}
	function table_highlight(){
		mouse_on_list = 1;
		document.getElementById('tat_tr'+pos).style.backgroundColor = self.bgColor;
		pos = this.getAttribute('pos');
		while (pos < rangeu) moveup();
		while (pos > ranged) movedown();
		document.getElementById('tat_tr'+pos).style.backgroundColor = self.hColor;
		if (toid) clearTimeout(toid);
		if (self.timeOut > 0) toid = setTimeout(function(){mouse_on_list = 0;removedisp();},self.timeOut);
	}
	/* ---- */

	function insertword(a){
		if (self.delimiter.length > 0){
			str = '';
			l=0;
			for (i=0;i<delimwords.length;i++){
				if (cdelimword == i){
					prespace = postspace = '';
					gotbreak = false;
					for (j=0;j<delimwords[i].length;++j){
						if (delimwords[i].charAt(j) != ' '){
							gotbreak = true;
							break;
						}
						prespace += ' ';
					}
					for (j=delimwords[i].length-1;j>=0;--j){
						if (delimwords[i].charAt(j) != ' ') break;
						postspace += ' ';
					}
					str += prespace;
					str += a;
					l = str.length;
					if (gotbreak) str += postspace;
				}else{
					str += delimwords[i];
				}
				if (i != delimwords.length - 1){
					str += delimchar[i];
				}
			}
			curr.value = str;
			setCaret(curr,l);
		}else{
			curr.value = a;
		}
		mouse_on_list = 0;
		removedisp();
	}
	function penter(){
	
		if (!display) return;
		display = false;
		var word = '';
		var c = 0;

		for (var i=0;i<=self.keywords.length;i++){
			if (bool[i]) c++;
			if (c == pos){
				word = self.keywords[i];
				break;
			}
		}
		insertword(word);
		l = getCaretStart(curr);
	}
	function removedisp(){
		if (mouse_on_list==0){
			display = 0;
			if (document.getElementById('tat_table')){ document.body.removeChild(document.getElementById('tat_table')); }
			if (toid) clearTimeout(toid);

			//AJOUT AMIVIF			
			var list_to_delete = document.getElementsByTagName("select");
			var i,m ;
			for(i=0,m=list_to_delete.length;i<m;i++)
			{
				//console.log("    show select id "+i);
				list_to_delete[i].style.visibility = "visible";					
			}
		
		}
	}
	function keypress(e){
		//document.getElementById("resultat").innerHTML=" : "+curr.value;
			if (caretmove) stopEvent(e);
		return !caretmove;
	}
	function checkkey(evt){
	
		if (!evt) evt = event;
		a = evt.keyCode;
		caret_pos_start = getCaretStart(curr);
		caretmove = 0;

		switch (a){
			case 38:
				goup();
				caretmove = 1;
				return false;
				break;
			case 38:
				goup();
				caretmove = 1;
				return false;
				break;
			case 9: 
  				mouse_on_list = 0;
  				removedisp();
  				return true;
  				break;
  			case 27: // ADDED to disable autocomplete list on TAB
  				mouse_on_list = 0;
  				removedisp();
  				return true;
  				break;
			case 40:
				godown();
				caretmove = 1;
				return false;
				break;
			case 13: //touche Entrée
				if (display){
					caretmove = 1;
					penter();
					return false;
				}else{
					return true;
				}
				break;
			default:
				setTimeout(function(){SendQuery(curr.value,a)},50);
				break;
		}
	}
/*	function inputenable(id,state) {
 var divObj = null;
  if (document.getElementById) {
  divObj = document.getElementById(id);
 } else if(document.all) {
  divObj = document.all(id);
 } else if (document.layers) {
  divObj = document.layers[id];
 }
 if(state && divObj) {
  divObj.removeAttribute("readonly");
 } else if(divObj) {
  divObj.setAttribute("readonly","readonly");
 }
}*/

	function tocomplete(kc){
	
		if (kc == 38 || kc == 40 || kc == 13) return;
		var i;
		touche=kc;
		if (display){ 
			var word = 0;
			var c = 0;
			for (var i=0;i<=self.keywords.length;i++){
			
				if (bool[i]) c++;
				if (c == pos){
				
					word = i;
					
					break;
				}
			}
			pre = word;
		}else{ pre = -1};
	
		// si valeur dans la textebox vide on enleve le div
		if (curr.value == ''){
			mouse_on_list = 0;
			removedisp();
			return;
		}

		if (self.delimiter.length > 0){
			caret_pos_start = getCaretStart(curr);
			caret_pos_end = getCaretEnd(curr);
			
			delim_split = '';
			for (i=0;i<self.delimiter.length;i++){
				delim_split += self.delimiter[i];
			}
			delim_split = delim_split.addslashes();
			delim_split_rx = new RegExp("(["+delim_split+"])");
			c = 0;
			delimwords = new Array();
			delimwords[0] = '';
			for (i=0,j=curr.value.length;i<curr.value.length;i++,j--){
				if (curr.value.substr(i,j).search(delim_split_rx) == 0){
					ma = curr.value.substr(i,j).match(delim_split_rx);
					
					delimchar[c] = ma[1];
					c++;
					delimwords[c] = '';
				}else{
					delimwords[c] += curr.value.charAt(i);
				
				}
			}

			var l = 0;
			cdelimword = -1;
			for (i=0;i<delimwords.length;i++){
				if (caret_pos_end >= l && caret_pos_end <= l + delimwords[i].length){
					cdelimword = i;
				}
				l+=delimwords[i].length + 1;
			}
			var ot = delimwords[cdelimword].trim(); 
			var t = delimwords[cdelimword].addslashes().trim();

		}else{
			var ot = curr.value;
			var t = curr.value.addslashes();
		}
		
		if (ot.length == 0){
			mouse_on_list = 0;
			removedisp();
		}
	
		if (ot.length < self.startcheck) return this;
		
		if (self.firstText){
			var relettree     = new RegExp('^[éèêë]','gi');
			var relettrea     = new RegExp('^[àäâ]','gi');
			var relettreu     = new RegExp('^[ùûü]','gi');
			var relettrec     = new RegExp('^[ç]','gi');
			//HE@11/06/08 ANO 000176
			var relettreo     = new RegExp('^[ôö]','gi');
			//
			var re = new RegExp("^" + t, "i");
			
		}else{
			var relettree     = new RegExp('[éèêë]','gi');
			var lettre_e = new RegExp('[e]','gi');
			var relettrea     = new RegExp('[àäâ]','gi');
			var relettreu     = new RegExp('[ùûü]','gi');
			var relettrec     = new RegExp('[ç]','gi');
			//HE@11/06/08 ANO 000176
			var relettreo     = new RegExp('[ôö]','gi');
			//
			var relettrest    = new RegExp('st','gi');
			var relettreste    = new RegExp('ste','gi');
			var monexpress = /\s/gi;
			//HE@13/06/08 ANO 000175
			//var relettrecdg1     = new RegExp('cdg1','gi');
			//var relettrecdg2     = new RegExp('cdg2','gi');
			//
			
			var re = new RegExp(t, "i");
		}
		var expressst    = new RegExp('saint','gi');
		var express_ste_deb    = new RegExp('^sainte','gi');
			var expressste    = new RegExp('sainte','gi');
		var express_tiret    = new RegExp('[-]','gi');
		var express_espace    = new RegExp(' ','gi');
	
		//t=t.replace(monexpress,"-");
		//re.compile(t,"i");

		total = 0;
		tomake = false;
		kwcount = 0;
		var e_ok=relettree.test(t);
		var a_ok=relettrea.test(t);
		var u_ok=relettreu.test(t);
		var c_ok=relettrec.test(t);
		var st_ok=relettrest.test(t);
		var ste_ok=relettreste.test(t);
		var st_tiret=express_tiret.test(t);
		var espace_ok=express_espace.test(t);
		//HE@11/06/08 ANO 000176
		var o_ok=relettreo.test(t);
		//		
		//HE@13/06/08 ANO 000175
		//var cdg1_ok=relettrecdg1.test(t);
		//var cdg2_ok=relettrecdg2 .test(t);
		//
		
		
		for (i=0;i<self.keywords.length;i++){
			bool[i] = false;
			
			var ville=self.keywords[i];
			
			var saint_ville=expressst.test(ville);
			var ste_deb=express_ste_deb.test(ville);
			var sainte_ville=expressste.test(ville);
			//var testouill2=express_tiret.test(ville);
			//HE@13/06/08 ANO 000175
			/*if(cdg1_ok==true)
			{
				t=t.replace(relettrecdg1,"cdg 1");
				re.compile(t,"gi");
			}
			if(cdg2_ok==true)
			{
				t=t.replace(relettrecdg2,"cdg 2");
				re.compile(t,"gi");
			}*/
			//
			if (st_tiret==true && saint_ville==true && st_ok==true)
			{t=t.replace(relettrest,"saint");
			re.compile(t,"gi");
				}
			if (st_tiret==true && sainte_ville==true && ste_ok==true)
			{t=t.replace(relettreste,"sainte");
			re.compile(t,"gi");
				}
	
			if (e_ok==false)
			{ 
			ville = ville.replace(relettree,"e");
			}
			
			if (t.search(relettree)==0 && ville.substr(0,1)=="E")
			{
				ville="é".concat(ville.substr(1,ville.length));
			}
			if (a_ok==false)
			{ 
			ville = ville.replace(relettrea,"a");
			}
			if (u_ok==false)
			{ 
			ville = ville.replace(relettreu,"u");
			}
			if (c_ok==false)
			{ 
			ville = ville.replace(relettrec,"c");
			}
			//HE@11/06/08 ANO 000176
			if (o_ok==false)
			{ 
				ville = ville.replace(relettreo,"o");
			}
			//

		if(espace_ok==true){
		var tiret = ville.search(express_tiret);
		//if (tiret!=-1){
		//	if (express_tiret.test(ville)){
			total++;
				bool[i] = true;
				kwcount++;
				
				if (pre == i) tomake = true;
		//	}
		}

		else if (st_ok==true || ste_ok==true){
	
			if ( re.test(ville)|| saint_ville==true && (t=="St" || t=="st") ){
			if (ste_ok==false){

				total++;
				bool[i] = true;
				kwcount++;
				
				if (pre == i) tomake = true;}
			}
			if (ste_ok==true) {
			 if ( re.test(ville)|| sainte_ville==true  || ste_deb==true && (t=="ste" || t=="Ste")){

				total++;
				bool[i] = true;
				kwcount++;
			
				if (pre == i) tomake = true;
			}
			}
	
				}
			else {
			if (re.test(ville)){
	
				total++;
				bool[i] = true;
				kwcount++;
				
				if (pre == i) tomake = true;
			}
			
			}
		}

		if (toid) clearTimeout(toid);
		if (self.timeOut > 0) toid = setTimeout(function(){mouse_on_list = 0;removedisp();},self.timeOut);
		generate();
	}

	function hide_select()
	{
		//console.log("> hide_select");
		//ftei(hat]sqli.com => AJOUT AMIVIF 24/01/07 afin de permetre la disparition des dropdownlist 
		//lorsque la liste d'autocompletion apparait suite a ano sous I.E
		
		/* liste des réseaux */
		var tat_table = document.getElementById('tat_table'); 	//la liste qu'on génère
		if(tat_table == null){
			var list_to_delete = document.getElementsByTagName("select");
			var i,m ;
			for(i=0,m=list_to_delete.length;i<m;i++)
			{
				//console.log("    show select id "+i);
				list_to_delete[i].style.visibility = "visible";					
			}
			return;
		}
		
		var t_pos = getCumulativeOffset(tat_table);
		var t_top = t_pos[1];						//différentes positions pour detecter si un select est présent sous la liste
		var t_left = t_pos[0];
		var t_bottom = t_top + tat_table.offsetHeight;
		var t_right = t_left + tat_table.offsetWidth;
		
		var liste_select = document.getElementsByTagName('select');
		var i,m;
		
		/* sélection des menus déroulants */
		for(i=0,m=liste_select.length;i<m;i++){
		        var s = liste_select[i];
		        var s_pos = getCumulativeOffset(s);
		        var s_top = s_pos[1];
		        var s_left = s_pos[0];
		        var s_bottom = s_top + s.offsetHeight;
		        var s_right = s_left + s.offsetWidth;
		        
		        var t1 = (s_top > t_top && s_top < t_bottom);
		        var t2 = (s_bottom > t_top && s_bottom < t_bottom);
		        var t3 = (s_left > t_left && s_left < t_right);
		        var t4 = (s_right > t_left && s_right < t_right);
		        //console.log("Conditions: "+t1+" | "+t2+" | "+t3+" | "+t4);
		        //console.log("t4: "+s_right+" > "+t_left+" && "+s_right+" < "+t_right);
		        t4: 485 > 300 && 485 < 552
		        
		        /*
		              c1              c2
		                +------------+
		                |            |
		                +------------+
		              c3              c4
		         */
		        /* <--c1-->    <--c2-->    <--c3-->    <--c4--> */
		        if(t1 && t3 || t1 && t4 || t2 && t3 || t2 && t4)
		        /*
		        if(
		            (s_top > t_top && s_top < t_bottom) ||
		            (s_bottom > t_top && s_bottom < t_bottom) ||
		            (s_left > t_left && s_left < t_right) ||
		            (s_right > t_left && s_right < t_right)
		        )*/
		        {
		        	//console.log("    hide select id "+i);
		            s.style.visibility = "hidden";
		        }else{
		        	//console.log("    show select id "+i);
		            s.style.visibility = "visible";
		        }
		}
		//console.log("< hide_select");
		//FIN DE L'AJOUT
	
	}
	return this;
}

