Formidable.Classes.Autocomplete=Formidable.Classes.RdtBaseClass.extend({oText:null,oList:null,oLoader:null,iLoaderCount:0,onListSelect:null,itemSelected:null,constructor:function(a){this.base(a)},initialize:function(){if(!this.domNode())return;this.config.counter=0;this.config.isDbEntry=false;var a={};if(this.config.item.width){a["width"]=this.config.item.width+"px"}if(this.config.item.height){a["height"]=this.config.item.height+"px"}if(this.config.item.style){var b=this.config.item.style.split(";");for(var i=0;i<b.length;++i){if(!b[i].strip().empty()){var c=b[i].strip().split(":");a[c[0].strip().camelize()]=c[1].strip()}}}this.config.item.style=a;var d=MKWrapper.id(this.domNode());this.oText=MKWrapper.$(d);this.oList=MKWrapper.$(d+Formidable.SEP+'list');this.oLoader=MKWrapper.$(d+Formidable.SEP+'loader');this.oText.parentNode.insertBefore(this.oLoader,this.oList);this.initStartPosition();this.addScript(this)},initStartPosition:function(){if(MKWrapper.isIE(7)){var b=MKWrapper.parent(this.oList);MKWrapper.setStyle(b,{"height":MKWrapper.getDimensions(b).height});MKWrapper.each(MKWrapper.findChilds(b),function(a){MKWrapper.setStyle(a,{"position":"relative"})})}MKWrapper.setStyle(MKWrapper.parent(this.oList),{"position":"relative"});MKWrapper.setStyle(this.oList,{"position":"absolute"});MKWrapper.setStyle(this.oLoader,{'display':'block','height':'16px','width':'16px','background':'transparent url('+Formidable.path+'widgets/autocomplete/res/img/loader.gif) no-repeat scroll 0 0'});var c=MKWrapper.showParents(this.oList);MKWrapper.clonePosition(this.oList,this.oText,{setLeft:true,setTop:true,setWidth:false,setHeight:false,offsetLeft:0,offsetTop:MKWrapper.getDimensions(this.oText,'outermargin').height});MKWrapper.clonePosition(this.oLoader,this.oText,{setLeft:true,setTop:true,setWidth:false,setHeight:false,offsetLeft:MKWrapper.getDimensions(this.oText,'outermargin').width,offsetTop:1});MKWrapper.setStyle(this.oLoader,{"position":"absolute",'display':'none'});MKWrapper.hideElements(c)},execEvents:function(){this.oText.oObserver=MKWrapper.delayedObserver(this.oText,this.config.timeObserver,this.execAjaxRequest.bind(this));if(this.config.selectionRequired){MKWrapper.attachEvent(this.oText,'blur',this.checkSelection,this);MKWrapper.attachEvent(this.oText,'keydown',this.textChange,this)}},loaderShow:function(){MKWrapper.setStyle(this.oLoader,{"display":"block"});this.iLoaderCount++},loaderHide:function(){this.iLoaderCount--;if(this.iLoaderCount===0)MKWrapper.setStyle(this.oLoader,{"display":"none"})},addScript:function(a){var b=this.config.jsExtend;if(b!==false){window.setTimeout(function(){b=b.split(':');MKWrapper.loadScript(b[0],function(){Formidable.Classes.Autocomplete[b[1]](a,b[2])});a.execEvents()},500)}else{a.execEvents()}},execAjaxRequest:function(){if(this.itemSelected===true){this.itemSelected=null;return}var d=this;var e=MKWrapper.$F(d.oText);if(e.length<2){d.hideItemList(d);return}d.config.counter++;d.loaderShow();MKWrapper.ajaxCall(d.config.searchUrl,{'method':'post','asynchronous':false,'parameters':{'searchType':d.config.searchType,'searchText':e,'searchCounter':d.config.counter},'onSuccess':function(a){var b=a;if(!MKWrapper.isJSON(b))return;var c=MKWrapper.evalJSON(b,true);if(c.tasks.counter==d.config.counter){d.executeAjaxTasks(c.tasks)}d.loaderHide()}})},executeAjaxTasks:function(a){if(a.results>0){this.generateItemList(this,Formidable.objValues(a.html))}else{this.hideItemList(this)}},textChange:function(a){if(a.keyCode==9)return;if(a.keyCode==40){if(this.oList.style.visibility==='visible'){this.itemSelect(this,MKWrapper.next(this.itemSelected))}}if(a.keyCode==38){if(this.oList.style.visibility==='visible'){this.itemSelect(this,MKWrapper.previous(this.itemSelected))}}if(a.keyCode==13){if(!this.config.isDbEntry&&this.itemSelected!==null){this.listSelect(this,this.itemSelected);this.enableButtons();this.itemSelected=true;return false}return true}if(a.keyCode==27){var b=this;if(!this.config.isDbEntry){if(typeof(b.onlistselect)!='undefined'&&b.onlistselect!==null)b.onlistselect('');setTimeout(function(){b.oText.value=''},50)}if(this.oList.style.visibility==='visible')this.hideItemList(this);return}this.setDbEntryState(false)},checkSelection:function(a){var b=this;if(b.oList.style.visibility==='visible'){if(!b.oText.value.length){b.hideItemList(b)}else{window.setTimeout(function(){b.oText.focus()},10)}}},itemSelect:function(a,b){if(typeof(b)=='undefined')return false;MKWrapper.removeClass(a.itemSelected,a.config.selectedItemClass);MKWrapper.addClass(b,a.config.selectedItemClass);a.itemSelected=b},listSelect:function(a,b){var c=MKWrapper.stripTags(b.innerHTML);c=c.replace(/\s+/g," ").replace(/^\s+|\s+$/,"");a.setDbEntryState(true);a.oText.value=c;a.hideItemList(a);if(typeof(a.onlistselect)!='undefined'&&a.onlistselect!==null)a.onlistselect(c)},generateItemList:function(d,e){var f=e[1]?e[1]:'<!-- last -->';d.oList.innerHTML=e[0]+f;MKWrapper.each(Formidable.objValues(e[2]),function(a,b){var c=MKWrapper.$tag('div',{});c.className=d.config.item['class'];MKWrapper.setStyle(c,d.config.item.style);c.innerHTML=a;if(b===0){d.itemSelected=c}MKWrapper.attachEvent(c,'mouseover',function(){d.itemSelect(d,this)},c);MKWrapper.attachEvent(c,'click',function(){d.listSelect(d,this)},c);d.oList.insertBefore(c,d.oList.lastChild)});MKWrapper.setStyle(d.oList,{"width":'auto',"height":'auto'});var g=0;var h=0;var j=MKWrapper.findChilds(d.oList);for(var i=0,len=j.length;i<len;++i){var k=MKWrapper.getDimensions(j[i]);g=(k.width>g)?k.width:g;h+=k.height;MKWrapper.attachEvent(j[i],'mouseover',function(){MKWrapper.setStyle((this),{'visibility':'visible'})});MKWrapper.attachEvent(j[i],'mouseout',function(){MKWrapper.setStyle((this),{'visibility':'hidden'})})}MKWrapper.setStyle(d.oList,{"width":g+"px","height":h+"px"});this.showItemList(d)},disableButtons:function(){MKWrapper.each(MKWrapper.findChilds(MKWrapper.$(this.oForm.sFormId),'input[type=submit]'),function(o,i){MKWrapper.$(o).disabled=true});MKWrapper.each(MKWrapper.findChilds(MKWrapper.$(this.oForm.sFormId),'input[type=button]'),function(o,i){MKWrapper.$(o).disabled=true})},enableButtons:function(){MKWrapper.each(MKWrapper.findChilds(MKWrapper.$(this.oForm.sFormId),'input[type=submit]'),function(o,i){MKWrapper.$(o).disabled=false});MKWrapper.each(MKWrapper.findChilds(MKWrapper.$(this.oForm.sFormId),'input[type=button]'),function(o,i){MKWrapper.$(o).disabled=false})},setDbEntryState:function(b){this.config.isDbEntry=b},showItemList:function(a){MKWrapper.setStyle(MKWrapper.parent(a.oList),{'zIndex':'20000'});MKWrapper.setStyle((a.oList),{'zIndex':'30000'});a.oList.style.visibility='visible';a.oText.focus();if(this.config.selectionRequired)this.disableButtons();a.itemSelect(a,a.itemSelected)},hideItemList:function(a){a.oList.innerHTML="";MKWrapper.setStyle(MKWrapper.parent(a.oList),{'zIndex':'10000'});MKWrapper.setStyle((a.oList),{'zIndex':'0'});a.oList.style.visibility='hidden';if(this.config.selectionRequired)this.enableButtons();a.itemSelected=null},addHandler:function(a,b){switch(a){case'onlistselect':this.onlistselect=b;break}}});
