function TypeAhead(pInputId){
//this.typeAheadServiceURL="http://"+window.location.host+"/shopping/srvc-type-ahead.php";
//this.typeAheadServiceURL="http://www.apache.fr/shopping/typeahead.php";
this.typeAheadServiceURL="http://"+location.host+"/shopping/typeahead.php";
this.inputId=pInputId;
this.inputElement=null;
this.suggestions=new Array();
this.suggestedText="";
this.userText="";
this.suggestionDropDown=null;
var suggestedIndex=0;
var isWaitingForSuggestions=false;
var self=this;
var HTTPReq;
var HTTPReqPost;
var pressedKeyCount=0;
var debugOutput=document.getElementById('debugOutput');
function debug(text){
if(typeof debugOutput !="undefined" && debugOutput)
debugOutput.innerHTML=debugOutput.innerHTML+"
"+text;
}
this.init=function(){
debug("TypeAhead Object Initialization");
if(window.ActiveXObject)
HTTPReq=new ActiveXObject("Microsoft.XMLHTTP");
else
HTTPReq=new XMLHttpRequest();
if (HTTPReq){
if(!self.inputElement && self.inputId) self.inputElement=document.getElementById(self.inputId);
if(self.inputElement){
self.suggestionDropDown=document.getElementById("THDropDown-"+self.inputId);
if(!self.suggestionDropDown){
self.suggestionDropDown=document.createElement('DIV');
self.suggestionDropDown.id="THDropDown-"+self.inputId;
self.suggestionDropDown.className="THHideDropDown";
self.suggestionDropDown=self.inputElement.parentNode.insertBefore(self.suggestionDropDown, self.inputElement.nextSibling);
self.suggestionDropDown.style.top="195px";
self.suggestionDropDown.style.left=self.inputElement.offsetLeft.toString()+"px";
self.suggestionDropDown.style.width=self.inputElement.offsetWidth.toString()+"px";
}
self.inputElement.onkeyup=function (evt){
if(!evt) evt=window.event;
switch(evt.keyCode){
case 8:
self.userText=self.inputElement.value;
suggestedIndex=0;
isWaitingForSuggestions=true;
self.getSuggestions();
return;
case 46:
self.userText=self.inputElement.value;
suggestedIndex=0;
isWaitingForSuggestions=true;
self.getSuggestions();
return;
case 40:
if(suggestedIndex1) suggestedIndex --;
self.suggest();
break;
default:
pressedKeyCount--;
if (self.userText !=self.inputElement.value){
suggestedIndex=0;
self.userText=self.inputElement.value.toLowerCase();
self.suggest();
}
}
}
self.inputElement.onkeydown=function (evt){
if(!evt) evt=window.event;
if(evt.keyCode !=38 && evt.keyCode !=40 && evt.keyCode !=46 && evt.keyCode !=8)
pressedKeyCount++;
}
self.inputElement.onblur=function(evt){
window.setTimeout(function(){
self.suggestionDropDown.className=self.suggestionDropDown.className.replace("THShowDropDown","THHideDropDown");
},500);
}
}
}
}
this.getSuggestions=function(text){
if(text) self.userText=text;
if (self.userText.length>3){
HTTPReq.abort();
HTTPReq.onreadystatechange=self.populateSuggestions;
HTTPReq.open("GET", self.typeAheadServiceURL+"?inputid="+encodeURIComponent(self.inputId)+"&inputtxt="+encodeURIComponent(self.userText), true);
HTTPReq.send(null);
debug("request sent: "+"inputid="+encodeURIComponent(self.inputId)+"&inputtxt="+encodeURIComponent(self.userText));
}
}
this.addSuggestion=function(text){
if(text) self.userText=text;
if(HTTPReqPost) HTTPReqPost.abort();
if(window.ActiveXObject)
HTTPReqPost=new ActiveXObject("Microsoft.XMLHTTP");
else
HTTPReqPost=new XMLHttpRequest();
HTTPReqPost.onreadystatechange=self.populateSuggestions;
HTTPReqPost.open("POST", self.typeAheadServiceURL, true);
try{HTTPReqPost.setRequestHeader('Content-Type','application/x-www-form-urlencoded');}catch(e){};
HTTPReqPost.send("inputid="+encodeURIComponent(self.inputId)+"&inputtxt="+encodeURIComponent(self.userText));
debug("request posted: "+"inputid="+encodeURIComponent(self.inputId)+"&inputtxt="+encodeURIComponent(self.userText));
self.getSuggestions();
}
this.populateSuggestions=function(evt){
if (HTTPReq.readyState==4){
self.suggestions=HTTPReq.responseText.split("&");
debug("response: "+HTTPReq.responseText);
if(isWaitingForSuggestions) self.showSuggestionList();
}
}
this.suggest=function(text){
if(!HTTPReq) return;
if(text) self.userText=text;
if(self.userText=="") return;
self.suggestedText="";
if(suggestedIndex==0){
var newSuggestionArray=new Array();
for (var i=0;i"+self.suggestions[i]+"";
else
htmlList+=""+self.suggestions[i]+"";
}
}
var isHidden=false;
if(htmlList=="")
if(!isWaitingForSuggestions)
self.suggestionDropDown.innerHTML="Recherche des suggestions...";
else{
self.suggestionDropDown.innerHTML="";
self.suggestionDropDown.className=self.suggestionDropDown.className.replace("THShowDropDown","THHideDropDown");
isHidden=true
}
else
self.suggestionDropDown.innerHTML="";
if (!isHidden)
self.suggestionDropDown.className=self.suggestionDropDown.className.replace("THHideDropDown","THShowDropDown");
}
this.init();
}
var XBrowserAddHandler=function (target,eventName,handlerName){
if(!target) return;
if (target.addEventListener){
target.addEventListener(eventName, function(e){eval(handlerName)(e);}, false);
}else if (target.attachEvent){
target.attachEvent("on"+eventName, function(e){eval(handlerName)(e);});
}else{
var originalHandler=target["on"+eventName];
if (originalHandler){
target["on"+eventName]=function(e){originalHandler(e);eval(handlerName)(e);};
}else{
target["on"+eventName]=eval(handlerName);
}
}
}
var ta;
XBrowserAddHandler(window,'load', function(){ta=new TypeAhead('txtSearch')});