var AutocompletePopup=function(){this.$super.apply(this,arguments);return this;}.$extends(LayerPopup);AutocompletePopup.prototype.autocompleteElements=[];AutocompletePopup.prototype._addLayerPopupListener=function(){var A=this;var B=function(E){E=window.event||E;var D=BBEvent.target(E);if(!A._popup.contains(D)&&A.isVisible()){if(A.isVisible()){for(var C=0;C<A.autocompleteElements.length;C++){if(A.autocompleteElements[C]==D){return ;}}CustEvent.fireEvent(A,"blur",E);A.hide();}}};CustEvent.observe(this,"aftershow",function(){BBEvent.stopObserving(document,"mousedown",B);BBEvent.stopObserving(document,"keyup",B);BBEvent.observe(document,"mousedown",B);BBEvent.observe(document,"keyup",B);});};function AutocompleteCache(){this.cache={};return this;}AutocompleteCache.prototype.read=function(A){if(this.cache[A]){return this.cache[A];}return null;};AutocompleteCache.prototype.write=function(A,B){A=A+"";if(!this.read(A)){this.cache[A]=B;}};var AutocompleteStyle={CONTAINER:"autocomplete",UNSELECTED_ENTRY:"unselectedentry",SELECTED_ENTRY:"selectedentry",UNSELECTED_KEY:"unselectedkey",UNSELECTED_VAL:"unselectedval",SELECTED_KEY:"selectedkey",SELECTED_VAL:"unselectedval"};var AutocompleteKeyMgr={DOWN:40,UP:38,ESC:27,ENTER:13,availableKeyCode:function(D){var C=[40,39,38,37,27,13,17,16];var A=C.length;for(var B=0;B<A;B++){if(C[B]==D){return false;}}return true;}};var AUTOCOMPLETE_EVENT={SHOW:"onshow",HIDE:"onhide",SELECT:"onselect",CHANGE:"onchange",INPUT:"oninput",ENTER:"onenter"};function getScript(B,E){var C=document.getElementsByTagName("head")[0];var D=document.createElement("script");var A=false;D.src=B;if(E){D.onload=D.onreadystatechange=function(){if(!A&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){A=true;E();}};}C.appendChild(D);}function AutocompleteDataMgr(A){this.tblPrefix="_table";this.tableId=this.tblPrefix+A.instanceName;this.instanceName=A.instanceName;this.multipleData=A.multipleData||true;this.classNames=A.classNames;this.dataSource=A.data||[];return this;}AutocompleteDataMgr.prototype.getDataLength=function(){return this.dataSource.length;};AutocompleteDataMgr.prototype.format=function(C){this.dataSource=C||this.dataSource;var D=this.dataSource.length;var A=[];A.push('<table onselectstart="return false" cellspacing="0" cellpadding="0" border="0" id="'+this.tableId+'" class="'+this.classNames.CONTAINER+'" width="100%">');for(var B=0;B<D;B++){A.push('<tr class="'+this.classNames.UNSELECTED_ENTRY+' " onmousedown="'+this.instanceName+".mousedownHandler(event, "+B+')" onclick="'+this.instanceName+".clickHandler("+B+')" onmouseover="'+this.instanceName+".overHandler("+B+')" onmouseout="'+this.instanceName+".outHandler("+B+')"><td class="'+this.classNames.UNSELECTED_KEY+'">'+this.dataSource[B].key+"</td>"+(this.multipleData?'<td class="'+this.classNames.UNSELECTED_VAL+'" align="right">'+this.dataSource[B].val+"Ìõ½á¹û</td></tr>":""));}A.push("</table>");return A.join("");};AutocompleteDataMgr.prototype.replaceClassName=function(C,B){var F=this.classNames;var A=this.getKeyNode(C);var E=this.getValNode(C);var I=this.getKeyNode(B);var G=this.getValNode(B);var H=this.getEntryNode(C);var D=this.getEntryNode(B);Dom.replaceClassName(H,F.SELECTED_ENTRY,F.UNSELECTED_ENTRY);Dom.replaceClassName(A,F.SELECTED_KEY,F.UNSELECTED_KEY);Dom.replaceClassName(E,F.SELECTED_VAL,F.UNSELECTED_VAL);Dom.replaceClassName(I,F.UNSELECTED_KEY,F.SELECTED_KEY);Dom.replaceClassName(G,F.UNSELECTED_VAL,F.SELECTED_VAL);Dom.replaceClassName(D,F.UNSELECTED_ENTRY,F.SELECTED_ENTRY);};AutocompleteDataMgr.prototype.clear=function(){this.dataSource={};};AutocompleteDataMgr.prototype.getEntryNode=function(B){var A=document.getElementById(this.tableId);return B>=0?A.rows[B]:null;};AutocompleteDataMgr.prototype.getKeyNode=function(B){var A=this.getEntryNode(B);return A?A.cells[0]:null;};AutocompleteDataMgr.prototype.getValNode=function(B){var A=this.getEntryNode(B);return A?A.cells[1]:null;};AutocompleteDataMgr.prototype.getEntryData=function(A){return this.dataSource[A];};AutocompleteDataMgr.prototype.getEntryKey=function(A){return this.getEntryData(A)?this.getEntryData(A).key:null;};AutocompleteDataMgr.prototype.getEntryVal=function(A){return this.getEntryData(A)?this.getEntryData(A).val:null;};function Autocomplete(A){return this._constructor.apply(this,arguments);}Autocomplete.prototype={EVENT:AUTOCOMPLETE_EVENT,keyMgr:AutocompleteKeyMgr,classNames:AutocompleteStyle,width:null,left:null,height:null,top:null,dataMgr:null,queryEventType:[!!window.ActiveXObject?"keyup":"input"],selectEventType:[navigator.userAgent.toLowerCase().indexOf("opera")!=-1?"keypress":"keydown"],instanceName:"",listenTextbox:null,returnTextbox:null,selectedIndex:-1,requestURL:"",disabled:false,userInputValue:"",textboxValue:"",userSelectedValue:"",container:null,selectEventInterval:100,interval:50,_completeItemFlag:0,_lastSelectTime:null,_textChangeTimer:null,_autocompletePanel:null,_constructor:function(B){Object.extendJson(this,B||{});this.dataMgr=new AutocompleteDataMgr({instanceName:this.instanceName,classNames:this.classNames});var A=this.instanceName;this.returnTextbox=this.returnTextbox||this.listenTextbox;this.addTextboxEventListener();this._autocompletePanel=new AutocompletePopup($(this.container));this._autocompletePanel.autoPosition=false;this._autocompletePanel.autocompleteElements=[this.listenTextbox,this.returnTextbox];this.listenTextbox.setAttribute("autocomplete","off");return this;},addTextboxEventListener:function(){this.bindAllEventToTextbox(this.queryEventType,function(B){var C=window.event?event.keyCode:B.which;A.addTextChangeHandler();A.queryKeyEventHandler(B);});this.bindAllEventToTextbox(this.selectEventType,function(D){var C=(new Date()).valueOf();var B=parseInt(C-this._lastSelectTime,10)||0;if(B>=this.selectEventInterval){this._lastSelectTime=C;this.selectKeyEventHandler(D);}});var A=this;BBEvent.observe(this.listenTextbox,"blur",function(){A.clearTextChangeTimer();});BBEvent.observe(this.listenTextbox,"focus",function(){A.addTextChangeHandler();});BBEvent.observe(this.listenTextbox,"keypress",function(){A.addTextChangeHandler();});if(!!window.ActiveXObject){BBEvent.observe(this.listenTextbox,"beforedeactivate",function(){if(A._completeItemFlag){window.event.cancelBubble=true;window.event.returnValue=false;A.listenTextbox.focus();A._completeItemFlag=0;}});}},clearTextChangeTimer:function(){clearInterval(this._textChangeTimer);},addTextChangeHandler:function(){var A=this;A.clearTextChangeTimer();A._textChangeTimer=window.setInterval(function(){var B=A.getTextboxValue();if((A.textboxValue!=B&&A.userSelectedValue!=B)||0==B.trim().length){A.fireInputEvent(A.EVENT.INPUT,B);}A.textboxValue=B;},A.interval);},bindAllEventToTextbox:function(E,D){if(!E.constructor){throw new Error(["Autocomplete","bindEventToTextbox","event type is not valid"]);}if(E.constructor!=Array){E=[E];}var A=E.length;var B=this;for(var C=0;C<A;C++){BBEvent.observe(this.listenTextbox,E[C],function(F){return D.apply(B,arguments);});}},fireInputEvent:function(A){this.dispatchEvent(this.EVENT.INPUT,{selectedIndex:this.selectedIndex,dataSource:this.dataMgr.dataSource,inputValue:A});},clickHandler:function(A){this.listenTextbox.blur();this.setTextboxValue(this.dataMgr.getEntryKey(this.selectedIndex));this.enterKeyEventHandler();},overHandler:function(A){this.entryChangeHandler(this.selectedIndex,A);},outHandler:function(A){this.entryChangeHandler(A,this.selectedIndex);},mousedownHandler:function(C,B){var A=this;this._completeItemFlag=1;},selectKeyEventHandler:function(D){var E=window.event?event.keyCode:D.which;var C=this.selectedIndex;switch(E){case this.keyMgr.UP:C--;break;case this.keyMgr.DOWN:C++;break;case this.keyMgr.ESC:this.hide();return ;case this.keyMgr.ENTER:this.dispatchEvent(this.EVENT.ENTER);this.enterKeyEventHandler();return ;default:return ;}if(!this._autocompletePanel.isVisible()){this.show();C=this.selectedIndex;}C=this.fixSelectedIndex(C);this.entryChangeHandler(this.selectedIndex,C);var A=this;if(-1!=C){var B=A.dataMgr.getEntryKey(C);A.userSelectedValue=B;A.setTextboxValue(B);}},dispatchEvent:function(B,A){A=A||{selectedIndex:this.selectedIndex,dataSource:this.dataMgr.dataSource,inputValue:this.userInputValue};CustEvent.fireEvent(this,B,A);},queryKeyEventHandler:function(A){var B=window.event?event.keyCode:A.which;if(!this.keyMgr.availableKeyCode(B)){return ;}this.userInputValue=this.getTextboxValue();},showDataSource:function(A){this.hide();this.setDataSource(A);this.resetSelectedIndex();this.show();},resetSelectedIndex:function(){this.selectedIndex=-1;},fixSelectedIndex:function(A){if(A>=this.dataMgr.getDataLength()){A=-1;}if(A<-1){A=this.dataMgr.getDataLength()-1;}return A;},entryChangeHandler:function(B,A){if(B!=A){this.dispatchEvent(this.EVENT.CHANGE);}this.dataMgr.replaceClassName(B,A);if(-1===A&&this.userInputValue){this.setTextboxValue(this.userInputValue);}this.selectedIndex=A;},enterKeyEventHandler:function(){this.dispatchEvent(this.EVENT.SELECT);this.hide();},setDataSource:function(A){this.dataMgr.dataSource=A||[];},clearDataSource:function(){this.dataMgr.clear();},getTextboxValue:function(){return this.listenTextbox.value;},setTextboxValue:function(A){if(null===A){return ;}if(this.returnTextbox.createTextRange){this.returnTextbox.createTextRange().text=A;}else{this.returnTextbox.value=A;}},show:function(A,E,B,D,C){if(!this.dataMgr.getDataLength()||!!this.disabled){return ;}this.dispatchEvent(this.EVENT.SHOW);this._autocompletePanel.setContent(this.dataMgr.format());this._autocompletePanel.show();},hide:function(){this.dispatchEvent(this.EVENT.HIDE);this._autocompletePanel.hide();}};