function kk_autosuggest_AutoSuggest(elem,suggestions,baseurl,autosuggestDiv,nbItems,className,navigation,separator) {
var me=this;
this.elem=elem;this.suggestions=suggestions;this.eligible=new Array();this.inputText=null;
this.baseurl=baseurl;this.highlighted=-1;this.div=document.getElementById(autosuggestDiv);
this.data="dynamic";this.navigation=navigation;this.toDisable=false;
this.separator=separator;this.addIframe=false;
this.myLastValue="";this.buffer="";this.startList=0;this.sizeList=nbItems;
this.itemLess = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<< << <<";
this.itemMore = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;>> >> >>";
this.timeToDisable = 10000;this.startWith = false;this.boldSelection = true;this.nbLetters = 3;this.sep = "&nbsp;";this.uniqueRequest = true;
this.timeNotReceived = 0;

if (suggestions!="") this.data="static";
if (this.data!="static") var obj=ygConn.getObject();

var lessId=-1;var moreId=-1;
var TAB=9;var ESC=27;var KEYUP=38;var KEYDN=40;var KEYRIGHT=39;var KEYLEFT=37;var ENTER=13;var DEL=8;

elem.setAttribute("autocomplete","off");
if(!elem.id) {var id="autosuggest"+idCounter;idCounter++;elem.id=id;}

this.kk_autosuggest_disableAutosuggest=function() {
var ul=document.createElement('ul');this.div.replaceChild(ul,this.div.childNodes[0]);
this.toDisable=true;this.suggestions=[];
ygConn.http.abort(obj);ygConn.releaseObject(obj);
elem.setAttribute("autocomplete","on");
};

this.kk_autosuggest_isValidBrowser=function() {
var ua=navigator.userAgent.toLowerCase();
isGecko=(ua.indexOf('gecko')!=-1&&ua.indexOf('safari')==-1);isSafari=(ua.indexOf('safari')!=- 1);isOpera=(ua.indexOf('opera')!=-1);isIE=(ua.indexOf('msie')!=-1&&!isOpera&&(ua.indexOf('webtv')==-1));isMozilla=(isGecko&&ua.indexOf('gecko/')+14==ua.length);
isNS=((isGecko)?(ua.indexOf('netscape')!=-1):((ua.indexOf('mozilla')!=-1)&&!isOpera&&!isSafari&&(ua.indexOf('spoofer')==-1)&&(ua.indexOf('compatible')==-1)&&(ua.indexOf('webtv')==-1)&&(ua.indexOf('hotjava')==-1)));
isIECompatible=((ua.indexOf('msie')!=-1)&&!isIE);
isNSCompatible=((ua.indexOf('mozilla')!=-1)&&!isNS&&!isMozilla&&!isIECompatible&&!isIE);
geckoVersion=((isGecko)?ua.substring((ua.lastIndexOf('gecko/')+6),(ua.lastIndexOf('gecko/')+14)):-1);
equivalentMozilla=((isGecko)?parseFloat(ua.substring(ua.indexOf('rv:')+3)):-1);versionMinor=parseFloat(navigator.appVersion);
if (isGecko&&!isMozilla) {versionMinor=parseFloat(ua.substring(ua.indexOf('/',ua.indexOf('gecko/')+6)+1));}
else if (isMozilla) {versionMinor=parseFloat(ua.substring(ua.indexOf('rv:')+3));}
else if (isIE&&versionMinor>=4) {versionMinor=parseFloat(ua.substring( ua.indexOf('msie')+5));}
else if (isSafari) {versionMinor=parseFloat(ua.substring(ua.lastIndexOf('safari/')+7));}
else if (isOpera) {versionMinor=parseFloat(ua.substring(ua.indexOf('opera')+6));}
versionMajor=parseInt(versionMinor);
isNS6up=(isNS&&versionMajor>=6);
isIE55up=(isIE&&versionMinor>=5.5);
this.addIframe=isIE55up;
if (!isMozilla&&!isNSCompatible&&!isNS6up&&!isIE55up&&!isOpera) this.kk_autosuggest_disableAutosuggest();
};
this.kk_autosuggest_isValidBrowser();

this.kk_autosuggest_showAutosuggest=function() {
this.toDisable=false;
elem.setAttribute("autocomplete","off");
var obj=ygConn.getObject();
this.kk_autosuggest_isValidBrowser();
setTimeout("document.getElementById('"+me.elem.id+"').focus()",0);
if (elem.value.length>=me.nbLetters) this.kk_autosuggest_sendQuery(elem.value);
};

this.kk_autosuggest_updateStatus=function(id,str_hide,str_show) {
if (this.toDisable) {this.kk_autosuggest_showAutosuggest();document.getElementById(id).innerHTML=str_hide;}
else {this.kk_autosuggest_disableAutosuggest();document.getElementById(id).innerHTML=str_show;}
};

this.kk_autosuggest_sendQuery=function(key) {
if (!this.toDisable) {
var url=baseurl+key;
if (!ygConn.http.isCallInProgress(obj)) {
ygConn.http.asyncRequest(obj,'GET',url,false,this.kk_autosuggest_callBack);}
else {
timeNotReceived = 0;
if (this.buffer!=null) {this.buffer=key;setTimeout("reSendQuery()",500);}
else this.buffer=key;
}
}

reSendQuery=function() {
if (!this.toDisable) {
timeNotReceived = timeNotReceived + 500;
if (me.timeToDisable <= timeNotReceived) {this.toDisable=true;me.kk_autosuggest_disableAutosuggest();}
if (me.buffer!=null) {
if (!ygConn.http.isCallInProgress(obj)) {var url=baseurl+me.buffer;ygConn.http.asyncRequest(obj,'GET',url,false,me.kk_autosuggest_callBack);me.buffer=null;counter=0;}
else setTimeout("reSendQuery();",500);
}
}
}
};

this.kk_autosuggest_callBack=function() {
if (arguments[0].readyState==4) {
if (arguments[0].status==200) {
if(arguments[0].responseText=="") {me.kk_autosuggest_hideDiv();}
else {
suggestions=eval(arguments[0].responseText);
me.suggestions=suggestions;
me.kk_autosuggest_getEligible();
if (me.eligible.length>0) {me.kk_autosuggest_createDiv();me.kk_autosuggest_positionDiv();me.kk_autosuggest_showDiv();}
else {me.kk_autosuggest_hideDiv();}
}
}
else {me.kk_autosuggest_hideDiv();}
}
else {me.kk_autosuggest_hideDiv();}
ygConn.releaseObject(obj);
}

elem.onfocus=function() {
if (!this.toDisable&&(elem.value.length>=me.nbLetters||me.data=="static")&&(me.div.style.display=="none"||me.div.style.display=="")) {
me.inputText=elem.value;me.kk_autosuggest_getEligible();
if (me.eligible.length>0) {me.kk_autosuggest_createDiv();me.kk_autosuggest_positionDiv();me.kk_autosuggest_showDiv();}
}
}

elem.onblur=function() {
if (me.highlighted>-1&&(me.highlighted==moreId||me.highlighted==lessId)) {setTimeout("document.getElementById('"+me.elem.id+"').focus()",0);}
else {setTimeout("hideDiv()",200);}
hideDiv=function() {me.div.style.display='none';me.highlighted=-1;me.startList=0;}
}

elem.onkeydown=function(ev) {
var key=me.kk_autosuggest_getKeyCode(ev);
switch(key) {
case TAB:
if (me.highlighted>0) {me.kk_autosuggest_useSuggestion();me.kk_autosuggest_hideDiv();}
else {me.kk_autosuggest_createDiv();me.kk_autosuggest_positionDiv();me.kk_autosuggest_showDiv();}
break;
case ESC:me.kk_autosuggest_hideDiv();break;
case KEYRIGHT:case KEYLEFT:
if (me.highlighted==moreId &&me.highlighted!=-1) {
me.startList=me.startList+me.sizeList;
me.kk_autosuggest_createDiv();me.kk_autosuggest_positionDiv();me.kk_autosuggest_showDiv();
}
else if (me.highlighted==lessId&&me.highlighted!=-1) {
me.startList=me.startList-me.sizeList;
me.kk_autosuggest_createDiv();me.kk_autosuggest_positionDiv();me.kk_autosuggest_showDiv();
}
else if (me.highlighted==-1) me.kk_autosuggest_hideDiv();
else me.kk_autosuggest_useSuggestion();
break;
case KEYUP:
if (me.highlighted>0) {me.highlighted--;}
me.kk_autosuggest_changeHighlight(key);
break;
case KEYDN:
if (me.navigation==true) {
if (moreId!=-1) max=moreId;
else max=me.eligible.length % me.sizeList;
}
else max=me.eligible.length-1;
if (me.highlighted<max) {me.highlighted++;}
me.kk_autosuggest_changeHighlight(key);
break;
default:me.kk_autosuggest_positionDiv();break;
}
};

elem.onkeypress=function(ev) {
var key=me.kk_autosuggest_getKeyCode(ev);
switch(key){case ENTER:if (me.highlighted>-1) {me.kk_autosuggest_useSuggestion();return false;}}
}

elem.onkeyup=function(ev)  {
var key=me.kk_autosuggest_getKeyCode(ev);
switch(key)
{
case TAB:case ESC:case ENTER:case KEYUP:case KEYDN:case KEYRIGHT:case KEYLEFT:return;
default:
me.startList=0;
if (me.data=="static") {
if (this.value !=me.inputText) {
me.inputText=this.value;me.kk_autosuggest_getEligible();
if (me.eligible.length>0) {me.kk_autosuggest_createDiv();me.kk_autosuggest_positionDiv();me.kk_autosuggest_showDiv();}
else {me.kk_autosuggest_hideDiv();}
}
else {me.kk_autosuggest_hideDiv();}
}
else {
if (me.uniqueRequest) {
if (this.value.length==me.nbLetters && this.value!="") {myValue=this.value;me.inputText=this.value;if (key==DEL) me.kk_autosuggest_hideDiv();me.kk_autosuggest_sendQuery(myValue);}
else {
if (this.value !=me.inputText && this.value.length>me.nbLetters) {
me.inputText=this.value;me.kk_autosuggest_getEligible();
if (me.eligible.length>0) {me.kk_autosuggest_createDiv();me.kk_autosuggest_positionDiv();me.kk_autosuggest_showDiv();}
else {me.kk_autosuggest_hideDiv();}
}
else {me.kk_autosuggest_hideDiv();}
}
}
else {
if (this.value.length>=me.nbLetters && this.value!="") {myValue=this.value;me.inputText=this.value;if (key==DEL) me.kk_autosuggest_hideDiv();setTimeout("kk_autosuggest_waitSendQuery(myValue)",300);}
else {me.kk_autosuggest_hideDiv();}
}
}
}

kk_autosuggest_waitSendQuery=function(key) {
if (me.inputText==key&&key!=me.myLastValue) {me.kk_autosuggest_sendQuery(key);}
me.myLastValue=key;
}
};

this.kk_autosuggest_useSuggestion=function() {
if (this.highlighted>-1&&me.navigation!=true)
{
if (separator==true)
this.elem.value=this.eligible[this.highlighted].substring(0,this.eligible[this.highlighted].indexOf(me.sep));
else
this.elem.value=this.eligible[this.highlighted];
this.kk_autosuggest_hideDiv();
}
else if (this.highlighted==moreId) {
this.startList=this.startList+this.sizeList;
me.kk_autosuggest_createDiv();me.kk_autosuggest_positionDiv();me.kk_autosuggest_showDiv();
}
else if (this.highlighted==lessId) {
this.startList=this.startList-this.sizeList;
if (this.startList<=0) {this.startList=0; lessId=0;}
me.kk_autosuggest_createDiv();me.kk_autosuggest_positionDiv();me.kk_autosuggest_showDiv();
}
else  {
itemId=this.startList+parseInt(this.highlighted)-(lessId+1);
val=this.eligible[itemId];
if (separator==true) me.inputText=val.substring(0,val.indexOf(me.sep));
else me.inputText=val;
this.elem.value=me.inputText;
this.kk_autosuggest_hideDiv();
}
};

this.kk_autosuggest_showDiv=function() {this.div.style.display='block';};

this.kk_autosuggest_hideDiv=function() {this.div.style.display='none';this.highlighted=-1;this.startList=0;};

this.kk_autosuggest_changeHighlight=function() {
var lis=this.div.getElementsByTagName('LI');
for (i=0;i<lis.length;i++) {
var li=lis[i];
if (this.highlighted==i) {li.className="selected";}
else {li.className="";}
}
};

this.kk_autosuggest_positionDiv=function() {
var el=this.elem;var x=0;var y=el.offsetHeight;
while (el.offsetParent&&el.tagName.toUpperCase() !='BODY') {x+=el.offsetLeft;y+=el.offsetTop;el=el.offsetParent;}
x+=el.offsetLeft;y+=el.offsetTop;
this.div.style.left=x+'px';this.div.style.top=y+'px';
};

this.kk_autosuggest_createDiv=function() {
var ul=document.createElement('ul');
if (this.navigation!=true) {
for (i=0;i<this.eligible.length;i++) {
var word=this.eligible[i];
var li=document.createElement('li');
var a=document.createElement('a');a.href="javascript:false";a.innerHTML=word;li.appendChild(a);
if (me.highlighted==i) {li.className="selected";}
ul.appendChild(li);
}
endList=this.suggestions.length;
}
else {
endList=this.startList+this.sizeList;
if (endList>this.eligible.length) endList=this.eligible.length;
if (this.startList>=this.sizeList) {
var li=document.createElement('li');
var a=document.createElement('a');a.href="javascript:false";a.innerHTML=this.itemLess;li.appendChild(a);
lessId=0;
ul.appendChild(li);
}
else lessId=-1;
me.highlighted=-1;
for (i=this.startList;i<endList; i++) {
var word= new String(this.eligible[i]);
var li=document.createElement('li');
var a=document.createElement('a');a.href="javascript:false";
if (me.boldSelection) {
wordFormatted = word.replace(cnvrt2Title(me.inputText),"<b>"+cnvrt2Title(me.inputText)+"</b>");
if (wordFormatted.indexOf("<b>")==-1)
wordFormatted=wordFormatted.replace(me.inputText,"<b>"+me.inputText+"</b>");
if (wordFormatted.indexOf("<b>")==-1)
wordFormatted = wordFormatted.replace(me.inputText.toUpperCase(),"<b>"+me.inputText.toUpperCase()+"</b>");
 wordFormatted = wordFormatted.replace("&<b>nbsp</b>;","&nbsp;").replace("&<b>nbs</b>p;","&nbsp;").replace("&<b>n</b>bsp;","&nbsp;").replace("&<b>nb</b>sp;","&nbsp;").replace("&<b>nbsp;</b>","&nbsp;");
a.innerHTML=wordFormatted;
}
else a.innerHTML=word;
li.appendChild(a);
ul.appendChild(li);
}
if (this.eligible.length>endList) {
var li=document.createElement('li');
var a=document.createElement('a');a.href="javascript:false";a.innerHTML=this.itemMore;li.appendChild(a);
if (lessId==0) moreId=lessId+this.sizeList+1; else moreId=this.startList+this.sizeList;
ul.appendChild(li);
}
else moreId=-1;
}
if (this.addIframe) {
var iframe=document.createElement('iframe');iframe.frameBorder=0;iframe.style.display='block';iframe.style.position='absolute';iframe.style.top=ul.offsetTop;
iframe.style.left=0;iframe.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';iframe.id=this.div.id+"BackGround";
iframe.style.zIndex="-10";
ul.appendChild(iframe);
}
this.div.replaceChild(ul,this.div.childNodes[0]);

ul.onmouseover=function(ev) {
var target=me.kk_autosuggest_getEventSource(ev);
while (target.parentNode&&target.nodeName.toUpperCase() !='LI') {target=target.parentNode;}
var lis=me.div.getElementsByTagName('LI');
for (i=0;i<lis.length;i++) {
var li=lis[i];
if (li==target) {me.highlighted=i;break;}
}
me.kk_autosuggest_changeHighlight();
};
ul.onclick=function(ev) {me.kk_autosuggest_useSuggestion();me.kk_autosuggest_cancelEvent(ev);return false;};

this.div.className=className;this.div.style.position='absolute';
if (this.addIframe) {
if (this.div.offsetHeight>0) height=this.div.offsetHeight;
else if (endList>0) height=endList*17+20;
document.getElementById(this.div.id+"BackGround").style.height=height+"px";
}

function cnvrt2Title(str) {return str.toLowerCase().replace(/\b[a-z]/g, cnvrt);function cnvrt() {return arguments[0].toUpperCase();}}
};

this.kk_autosuggest_getEligible=function() {
this.eligible=new Array();
if (me.navigation!=true) this.suggestions.length=this.sizeList;
for (i in this.suggestions) {
var suggestion=this.suggestions[i];
if ((me.startWith&&suggestion.toLowerCase().indexOf(me.inputText.toLowerCase())==0)) {this.eligible[this.eligible.length]=suggestion;}
else if (!me.startWith&&suggestion.toLowerCase().indexOf(me.inputText.toLowerCase())>=0){this.eligible[this.eligible.length]=suggestion;}
}
};

this.kk_autosuggest_getKeyCode=function(ev) {if(ev) {return ev.keyCode;} if(window.event) {return window.event.keyCode;}};

this.kk_autosuggest_getEventSource=function(ev) {if(ev) {return ev.target;} if(window.event) {return window.event.srcElement;}};

this.kk_autosuggest_cancelEvent=function(ev) {if(ev) {ev.preventDefault();ev.stopPropagation();} if(window.event) {window.event.returnValue=false;}}

}
var idCounter=0;
