var AutoCompleteField={template:new Template("Ajax=AutoCompleteField&table_name=#{TableName}&field_name=#{FieldName}&id=#{Id}&input_text=#{data}"),AjaxRoot:"",insts:{},init:function(id,tableName,fieldName,inputId,minLetterCount){var objId="obj"+id;var ie8=checkVersion();this.insts[objId]={Id:encodeURIComponent(id),onItemSelect:null,TableName:encodeURIComponent(tableName),FieldName:encodeURIComponent(fieldName),data:"",inited:false,rendertimer:null,valueSelected:false,keep:false,escblur:false,minLettersCount:(minLetterCount?minLetterCount:3),value:{id:0,text:""},visible:false,InputId:inputId,ie8:ie8};Event.observe($(inputId),"blur",this.blur.bind(this,objId));Event.observe($(inputId),"keyup",this.inputKeyHandler.bindAsEventListener(this,objId));this.insts[objId].inited=true},clearTimer:function(inst){window.clearTimeout(inst.rendertimer);inst.rendertimer=null},blur:function(objId){var inst=this.insts[objId];if(inst.rendertimer!=null)this.clearTimer(inst);this.insts[objId].keep=false;this.tryHide(objId);if(!inst.escblur&&$(inst.InputId).value.length>=inst.minLettersCount){inst.rendertimer=window.setTimeout(this.loadData.bind(this,$(inst.InputId).value,objId,this.injectValues.bind(this,objId,$(inst.InputId).value)),300)}inst.escblur=false},keepAlive:function(objId){this.insts[objId].keep=true},tryHide:function(objId){this.insts[objId].rendertimer=window.setTimeout(this.hide.bind(this,objId),300)},hide:function(objId,escFocus){var inst=this.insts[objId];if(!inst.visible||inst.keep){inst.keep=false;this.clearTimer(inst);return}$(inst.Id+"_dropDown").hide();$(inst.Id+"_dropDown").innerHTML="";if(!escFocus)$(inst.Id+"_text").focus();inst.visible=false},loadData:function(text,objId,handler){this.insts[objId].data=encodeURIComponent(text);var myAjax=new Ajax.Request(this.AjaxRoot+"work/autocompletefield.php",{method:"post",parameters:this.template.evaluate(this.insts[objId]),onSuccess:handler,onFailure:this.notifyError.bind(this)})},show:function(objId,focusOnRender){var inst=this.insts[objId];if(inst.rendertimer!=null)this.clearTimer(inst);if(!$(inst.InputId))return;if($(inst.InputId).value.length<inst.minLettersCount)return;inst.rendertimer=window.setTimeout(this.loadData.bind(this,$(inst.InputId).value,objId,this.render.bind(this,objId,focusOnRender)),300)},render:function(objId,focusOnRender,result){result=eval("("+result.responseText+")");var inst=this.insts[objId];if(result.error){alert(result.error.message);return}if(result.emptyset)return;var html=[];html.push('<select id="',inst.Id,'_select" size="6">');html.push(result.html);html.push('</select>');var objDD=$(inst.Id+"_dropDown");objDD.update(html.join(""));if(inst.ie8==true){objDD.show();Position.clone($(inst.Id+"_holder"),objDD,{offsetTop:($(inst.Id+"_holder").clientHeight||$(inst.Id+"_holder").offsetHeight)})}else{Position.clone($(inst.Id+"_holder"),objDD,{offsetTop:($(inst.Id+"_holder").clientHeight||$(inst.Id+"_holder").offsetHeight)});objDD.show()}var ddselect=$(inst.Id+"_select");Event.observe(ddselect,"focus",this.listFocusHandler.bind(this,objId));Event.observe(ddselect,"blur",this.tryHide.bind(this,objId));Event.observe(ddselect,"keyup",this.listKeyHandler.bindAsEventListener(this,objId));Event.observe(ddselect,"click",this.listClickHandler.bind(this,objId));inst.visible=true;this.keepAlive(objId);if(focusOnRender)this.focusSelect(objId)},listFocusHandler:function(objId){if(this.insts[objId].rendertimer!=null)this.clearTimer(this.insts[objId]);this.keepAlive(objId)},focusSelect:function(objId){this.insts[objId].escblur=true;var ddselect=$(this.insts[objId].Id+"_select");try{ddselect.options[0].selected=true;ddselect.focus()}catch(e){}},inputKeyHandler:function(evt,objId){evt=window.event?window.event:evt;var inst=this.insts[objId];var isDown=evt.keyCode==Event.KEY_DOWN;if(evt.keyCode==Event.KEY_ESC||evt.keyCode==Event.KEY_TAB){inst.escblur=(evt.keyCode==Event.KEY_ESC);this.hide(objId,true);return}if(isDown&&inst.visible){this.focusSelect(objId);return}this.resetValues(objId);inst.valueSelected=false;this.hide(objId);this.show(objId,isDown)},listKeyHandler:function(evt,objId){evt=window.event?window.event:evt;var inst=this.insts[objId];if(evt.keyCode==Event.KEY_ESC&&inst.visible){inst.keep=false;this.hide(objId);return}if(evt.keyCode==Event.KEY_ENTER){var select=$(inst.Id+"_select");this.changeValue(objId,select.options[select.selectedIndex].innerHTML,select.value,false);inst.valueSelected=true;inst.keep=false;this.hide(objId)}},listClickHandler:function(objId){var inst=this.insts[objId];var select=$(inst.Id+"_select");this.changeValue(objId,select.options[select.selectedIndex].innerHTML,select.value,false);inst.keep=false;this.hide(objId)},injectValues:function(objId,text,result){result=eval("("+result.responseText+")");if(result.error)return;if(result.emptyset)return;result.data=[].concat(result.data);if(result.data.length<1)return;this.changeValue(objId,result.data[0][this.insts[objId].FieldName],result.data[0].id,true)},changeValue:function(objId,valueText,valueId,escFocus){var inst=this.insts[objId];this.insts[objId].value={text:valueText,id:valueId};$(inst.Id+"_text").value=valueText;$(inst.Id).value=valueId;inst.keep=false;inst.valueSelected=true;inst.escblur=true;this.hide(objId,escFocus);if(inst.onItemSelect)inst.onItemSelect(inst)},resetValues:function(objId){this.insts[objId].value={text:"",id:0};$(this.insts[objId].Id).value=0},notifyError:function(){for(var i=0,l=arguments.length;i<l;i++){for(var prop in arguments[i]){}}}};function getInternetExplorerVersion(){var rv=-1;if(navigator.appName=='Microsoft Internet Explorer'){var ua=navigator.userAgent;var re=new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");if(re.exec(ua)!=null)rv=parseFloat(RegExp.$1)}return rv}function checkVersion(){var ver=getInternetExplorerVersion();if(ver>-1){if(ver>=8.0)return true;else return false}}