var a;
AutoSuggest=function(b,c,d,e){include("js/default/keys.js");b=Html.get(b);if(typeof d=="undefined")d="search";if(typeof e=="undefined")e="autoSuggest";this.canceled=this.busy=false;this.Class="AutoSuggest";this.div=document.createElement("DIV");this.element=b;this.hTimer=null;this.index=AutoSuggest.instances.add(this);this.links=[];this.pressed=false;this.search=d;this.selected=-1;this.value=this.timer=this.text=this.template=null;this.ongetdata=TEvent.find(b.id+"GetData",b.name+"GetData","autoGetData");this.onrequest=
TEvent.find(b.id+"Request",b.name+"Request","autoRequest");this.onsuggest=TEvent.find(b.id+"Suggest",b.name+"Suggest","autoSuggest");this.url=typeof c!="undefined"?new Url(c):null;this.div.className=e;this.div.style.display="none";this.div.style.overflow="hidden";this.div.style.position="absolute";this.div.style.clear="both";if(b.parentNode.nodeName=="TD"){d=b.parentNode.parentNode;c=d.parentNode.appendChild(document.createElement("TR"));d=d.getElementsByTagName("TD").length;c=c.appendChild(document.createElement("TD"));
c.colspan=d;c.appendChild(this.div)}else b.parentNode.appendChild(this.div);addEvent(b,"keydown","return AutoSuggest.instances["+this.index+"].keyDown( event );");addEvent(b,"keyup","return AutoSuggest.instances["+this.index+"].keyUp( event );");addEvent(b,"blur","return AutoSuggest.instances["+this.index+"].blur( event );")};a=AutoSuggest.prototype;a.blur=function(){Log.write("AutoSuggest.blur( event );");this.hTimer=setTimeout("AutoSuggest.instances["+this.index+"].hide();",200);return true};
a.click=function(b,c){Log.write("AutoSuggest.click( sender, event );");for(this.stopHide();b.nodeName!="A";)b=b.parentNode;this.value=b.value;this.onsuggest&&this.onsuggest(this,c);if(this.busy)this.canceled=true;this.hide();return true};a.dispose=function(){clearTimeout(this.timer);this.element=this.div=null;this.links=[]};
a.gotten=function(b){Log.write("AutoSuggest.gotten( HTTP );");this.busy=false;if(this.canceled)this.canceled=false;else{if(b.responseText!=""){this.div.innerHTML=b.responseText;this.div.style.display="";this.selected=-1;this.links=this.div.getElementsByTagName("A");for(b=0;b<this.links.length;b++){var c=this.links[b];c.index=b;c.href="javascript:;";c.value=null;Element.removeClassName(c,"selected");try{eval("this.links["+b+"].value = "+c.title+";")}catch(d){c.value=c.title}c.removeAttribute("title");
if(c.value=="")c.value=null;Log.write("a.value",c.value);addEvent(c,"click","AutoSuggest.instances["+this.index+"].click( event.srcElement || event.target, event );");addEvent(c,"mouseover","AutoSuggest.instances["+this.index+"].over( event );")}}else this.div.style.display="none";if(this.pressed){this.pressed=false;this.initRequest()}}};a.hasResults=function(){return this.links.length>0};
a.hide=function(){Log.write("AutoSuggest.hide();");if(this.busy)this.canceled=true;this.div.style.display="none";clearTimeout(this.timer);this.pressed=false;this.timer=null};
a.initRequest=function(){Log.write("AutoSuggest.initRequest();");clearTimeout(this.timer);if(!this.canceled){var b=String(this.element.value);if(b==null)b="";if(this.url)this.timer=setTimeout("AutoSuggest.instances["+this.index+"].request("+b.toJs()+");",500);else if(this.ongetdata){b=this.ongetdata(this);if(typeof b=="undefined"||b==null||typeof b.length=="undefined"){this.links=[];this.div.innerHTML="";this.div.style.display="";this.selected=-1}else{for(var c="",d=0;d<b.length;d++){var e=b[d],g=
"",f="";if(typeof e=="string")g=f=e;else if(typeof e=="object"){g="{";for(var h in e){if(f==""&&typeof e[h]=="string")f=e[h];g+=h+":"+AutoSuggest.toJs(e[h])}g+="}"}else throw new Error("Illegal return value encountered during ongetdata event. One of the returned objects is not a string and not an object.");f=f.htmlEncode();f=f.replace(new RegExp("("+RegExp.escape(this.element.value)+")","i"),"<b>$1</b>");c+='\r\n<a title="'+g+'">'+f+"</a>"}this.gotten({responseText:c})}}else throw new Error("Illegal initialisation of AutoSuggest class. No Url was given and no ongetdata event was found ("+
this.element.id+").");}};a.isVisible=function(){return this.div.style.display!="none"};
a.keyDown=function(b){var c=KeyStroke.create(b);Log.write('AutoSuggest.keyDown( key:"'+c+'");');if(this.isVisible()&&this.hasResults())if(c.equalTo("Return")||c.equalTo("Tab")){if(this.selected>-1){this.click(this.links[this.selected],b);return cancelEvent(b)}}else if(c.equalTo("Down")){if(this.selected+1<this.links.length){this.selected>-1&&Element.removeClassName(this.links[this.selected],"selected");this.selected++;Element.addClassName(this.links[this.selected],"selected")}return cancelEvent(b)}else if(c.equalTo("Up")){if(this.selected>
0){this.selected<this.links.length&&Element.removeClassName(this.links[this.selected],"selected");this.selected--;Element.addClassName(this.links[this.selected],"selected")}return cancelEvent(b)}return true};a.keyUp=function(b){b=KeyStroke.create(b);Log.write('AutoSuggest.keyUp( key:"'+b+'");');if(this.busy)this.pressed=true;else if(b.isVisible()&&!(b.equalTo("Return")&&this.selected>-1)){this.hide();this.initRequest()}};
a.over=function(b){this.stopHide();b=b.srcElement||b.target;this.selected>-1&&Element.removeClassName(this.links[this.selected],"selected");this.selected=b.index;Element.addClassName(this.links[this.selected],"selected")};
a.request=function(b){if(!this.busy)if(this.text==b)this.isVisible()||this.show();else{var c=this.url;if(this.onrequest){c=this.onrequest(this,c);if(Url.isUrl(c))c=c;else if(c==null)return;else throw new Error("Illegal return value ("+valueString(c)+") encountered in AutoSuggest.onrequest.");}Log.write('AutoSuggest.request( search:"'+b+'" );');this.canceled=false;this.text=b;this.busy=true;c=c.add(this.search,b);c.onreadystatechange=new Function("HTTP","AutoSuggest.instances["+this.index+"].gotten( HTTP );");
c.async()}};a.show=function(){this.stopHide();this.div.style.display=""};a.stopHide=function(){if(this.hTimer){clearTimeout(this.hTimer);this.hTimer=null}};AutoSuggest.toJs=function(b){if(b==null)return"null";switch(typeof b){case "boolean":return b?"true":"false";case "number":return String(b);case "object":if(b instanceof Date)return b.jsDate();default:return String(b).toJs()}};AutoSuggest.instances=[];
AutoSuggest.dispose=function(){if(AutoSuggest.instances){for(var b=0;b<AutoSuggest.instances.length;b++){AutoSuggest.instances[b].dispose();AutoSuggest.instances[b]=null}AutoSuggest.instances=null}};addEvent(window,"unload","AutoSuggest.dispose();");

