Wtf.apply(Wtf.DataView.prototype,{deselect:function(B,A){if(this.isSelected(B)){var B=this.getNode(B);this.selected.removeElement(B);if(this.last==B.viewIndex){this.last=false}Wtf.fly(B).removeClass(this.selectedClass);if(!A){this.fireEvent("selectionchange",this,this.selected.elements)}}}});Wtf.common.Select=function(A){if(A.transform&&typeof A.multiSelect=="undefined"){var B=Wtf.getDom(A.transform);A.multiSelect=(Wtf.isIE?B.getAttributeNode("multiple").specified:B.hasAttribute("multiple"))}A.hideTrigger2=A.hideTrigger2||A.hideTrigger;Wtf.common.Select.superclass.constructor.call(this,A)};Wtf.extend(Wtf.common.Select,Wtf.form.ComboBox,{multiSelect:false,minLength:0,minLengthText:"Minimum {0} items required",maxLength:Number.MAX_VALUE,maxLengthText:"Maximum {0} items allowed",clearTrigger:true,history:false,historyMaxLength:0,separator:",",displaySeparator:",",valueArray:[],rawValueArray:[],initComponent:function(){this.triggerConfig={tag:"span",cls:"x-form-twin-triggers",cn:[{tag:"img",cls:"x-form-trigger "+this.trigger1Class},{tag:"img",cls:"x-form-trigger "+this.trigger2Class}]};Wtf.common.Select.superclass.initComponent.call(this);if(this.multiSelect){this.typeAhead=false;this.editable=false;this.triggerAction="all";this.selectOnFocus=false}if(this.history){this.forceSelection=false}if(this.value){this.setValue(this.value)}},hideTrigger1:true,getTrigger:Wtf.form.TwinTriggerField.prototype.getTrigger,initTrigger:Wtf.form.TwinTriggerField.prototype.initTrigger,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-arrow-trigger",onTrigger2Click:function(){this.onTriggerClick()},onTrigger1Click:function(){this.clearValue()},initList:function(){if(!this.list){var A="x-combo-list";this.list=new Wtf.Layer({shadow:this.shadow,cls:[A,this.listClass].join(" "),constrain:false});var B=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth);this.list.setWidth(B);this.list.swallowEvent("mousewheel");this.assetHeight=0;if(this.title){this.header=this.list.createChild({cls:A+"-hd",html:this.title});this.assetHeight+=this.header.getHeight()}this.innerList=this.list.createChild({cls:A+"-inner"});this.innerList.on("mouseover",this.onViewOver,this);this.innerList.on("mousemove",this.onViewMove,this);this.innerList.setWidth(B-this.list.getFrameWidth("lr"));if(this.pageSize){this.footer=this.list.createChild({cls:A+"-ft"});this.pageTb=new Wtf.PagingToolbar({store:this.store,pageSize:this.pageSize,renderTo:this.footer});this.assetHeight+=this.footer.getHeight()}if(!this.tpl){this.tpl='<tpl for="."><div class="'+A+'-item">{'+this.displayField+"}</div></tpl>"}this.view=new Wtf.DataView({applyTo:this.innerList,tpl:this.tpl,singleSelect:true,multiSelect:this.multiSelect,simpleSelect:true,overClass:A+"-cursor",selectedClass:this.selectedClass,itemSelector:this.itemSelector||"."+A+"-item"});this.view.on("click",this.onViewClick,this);this.view.on("beforeClick",this.onViewBeforeClick,this);this.bindStore(this.store,true);if(this.valueArray.length){this.selectByValue(this.valueArray)}if(this.resizable){this.resizer=new Wtf.Resizable(this.list,{pinned:true,handles:"se"});this.resizer.on("resize",function(E,C,D){this.maxHeight=D-this.handleHeight-this.list.getFrameWidth("tb")-this.assetHeight;this.listWidth=C;this.innerList.setWidth(C-this.list.getFrameWidth("lr"));this.restrictHeight()},this);this[this.pageSize?"footer":"innerList"].setStyle("margin-bottom",this.handleHeight+"px")}}},initEvents:function(){Wtf.form.ComboBox.superclass.initEvents.call(this);this.keyNav=new Wtf.KeyNav(this.el,{"up":function(A){this.inKeyMode=true;this.hoverPrev()},"down":function(A){if(!this.isExpanded()){this.onTriggerClick()}else{this.inKeyMode=true;this.hoverNext()}},"enter":function(B){if(this.isExpanded()){this.inKeyMode=true;if(this.view.lastItem){var A=this.view.indexOf(this.view.lastItem);this.onViewBeforeClick(this.view,A,this.view.getNode(A),B);this.onViewClick(this.view,A,this.view.getNode(A),B)}}else{this.onSingleBlur()}return true},"esc":function(A){this.collapse()},"tab":function(A){this.collapse();return true},"home":function(A){this.hoverFirst();return false},"end":function(A){this.hoverLast();return false},scope:this,doRelay:function(C,B,A){if(A=="down"||this.scope.isExpanded()){return Wtf.KeyNav.prototype.doRelay.apply(this,arguments)}if(A=="enter"||this.scope.isExpanded()){return Wtf.KeyNav.prototype.doRelay.apply(this,arguments)}return true},forceKeyDown:true});this.queryDelay=Math.max(this.queryDelay||10,this.mode=="local"?10:250);this.dqTask=new Wtf.util.DelayedTask(this.initQuery,this);if(this.typeAhead){this.taTask=new Wtf.util.DelayedTask(this.onTypeAhead,this)}if(this.editable!==false){this.el.on("keyup",this.onKeyUp,this)}if(!this.multiSelect){if(this.forceSelection){this.on("blur",this.doForce,this)}this.on("focus",this.onSingleFocus,this);this.on("blur",this.onSingleBlur,this)}this.on("change",this.onChange,this)},doForce:function(){if(this.el.dom.value.length>0){if(this.el.dom.value==this.emptyText){this.clearValue()}else{if(!this.multiSelect){this.el.dom.value=this.lastSelectionText===undefined?"":this.lastSelectionText;this.applyEmptyText()}}}},onLoad:function(){if(!this.hasFocus){return }if(this.store.getCount()>0){this.expand();this.restrictHeight();if(this.lastQuery==this.allQuery){if(this.editable){this.el.dom.select()}this.selectByValue(this.value,true)}else{this.selectNext();if(this.typeAhead&&this.lastKey!=Wtf.EventObject.BACKSPACE&&this.lastKey!=Wtf.EventObject.DELETE){this.taTask.delay(this.typeAheadDelay)}}}else{this.onEmptyResults()}},onSelect:function(B,A){if(this.fireEvent("beforeselect",this,B,A)!==false){this.addValue(B.data[this.valueField||this.displayField]);this.fireEvent("select",this,B,A);if(!this.multiSelect){this.collapse()}}},onSingleFocus:function(){this.oldValue=this.getRawValue()},onSingleBlur:function(){var A=this.findRecord(this.displayField,this.getRawValue());if(A){this.select(this.store.indexOf(A));return }if(String(this.oldValue)!=String(this.getRawValue())){this.setValue(this.getRawValue());this.fireEvent("change",this,this.oldValue,this.getRawValue())}this.oldValue=String(this.getRawValue())},onChange:function(){if(!this.clearTrigger){return }if(this.getValue()!=""){this.triggers[0].show()}else{this.triggers[0].hide()}},collapse:function(){this.hoverOut();Wtf.common.Select.superclass.collapse.call(this)},expand:function(){Wtf.common.Select.superclass.expand.call(this);this.hoverFirst()},onViewOver:function(B,A){if(this.inKeyMode){return }},onViewBeforeClick:function(C,A,B,D){this.preClickSelections=this.view.getSelectedIndexes()},onViewClick:function(E,A,D,F){if(typeof A!="undefined"){var B=this.preClickSelections.indexOf(A);if(B!=-1&&this.multiSelect){this.removeValue(this.store.getAt(A).data[this.valueField||this.displayField]);if(this.inKeyMode){this.view.deselect(A,true)}this.hover(A,true)}else{var C=this.store.getAt(A);if(C){if(this.inKeyMode){this.view.select(A,true)}this.onSelect(C,A);this.hover(A,true)}}}if(E!==false){this.el.focus()}},addValue:function(A){if(!this.multiSelect){this.setValue(A);return }if(A instanceof Array){A=A[0]}A=String(A);if(this.valueArray.indexOf(A)==-1){var E=A;var B=this.findRecord(this.valueField||displayField,A);if(B){E=B.data[this.displayField];if(this.view){this.select(this.store.indexOf(B))}}else{if(this.forceSelection){return }}var C=Wtf.apply([],this.valueArray);C.push(A);var D=Wtf.apply([],this.rawValueArray);D.push(E);A=C.join(this.separator||",");E=D.join(this.displaySeparator||this.separator||",");this.commonChangeValue(A,E,C,D)}},removeValue:function(A){if(A instanceof Array){A=A[0]}A=String(A);if(this.valueArray.indexOf(A)!=-1){var E=A;var B=this.findRecord(this.valueField||displayField,A);if(B){E=B.data[this.displayField];if(this.view){this.deselect(this.store.indexOf(B))}}else{if(this.forceSelection){return }}var C=Wtf.apply([],this.valueArray);C.remove(A);var D=Wtf.apply([],this.rawValueArray);D.remove(E);A=C.join(this.separator||",");E=D.join(this.displaySeparator||this.separator||",");this.commonChangeValue(A,E,C,D)}},setValue:function(B){var F=[],H=[];if(!(B instanceof Array)){if(this.separator&&this.separator!==true){B=B.split(String(this.separator))}else{B=[B]}}else{if(!this.multiSelect){B=B.slice(0,1)}}for(var C=0,A=B.length;C<A;C++){var E=B[C];var G=E;if(this.valueField){var D=this.findRecord(this.valueField||this.displayField,E);if(D){G=D.data[this.displayField]}else{if(this.forceSelection){continue}}}F.push(E);H.push(G)}B=F.join(this.separator||",");G=H.join(this.displaySeparator||this.separator||",");this.commonChangeValue(B,G,F,H);if(this.history&&!this.multiSelect&&this.mode=="local"){this.addHistory(this.valueField?this.getValue():this.getRawValue())}if(this.view){this.view.clearSelections();this.selectByValue(this.valueArray)}},commonChangeValue:function(A,D,B,C){this.lastSelectionText=D;this.valueArray=B;this.rawValueArray=C;if(this.hiddenField){this.hiddenField.value=A}Wtf.form.ComboBox.superclass.setValue.call(this,D);this.value=A;if(this.oldValueArray!=this.valueArray){this.fireEvent("change",this,this.oldValueArray,this.valueArray)}this.oldValueArray=Wtf.apply([],this.valueArray)},validateValue:function(A){if(!Wtf.common.Select.superclass.validateValue.call(this,A)){return false}if(this.valueArray.length<this.minLength){this.markInvalid(String.format(this.minLengthText,this.minLength));return false}if(this.valueArray.length>this.maxLength){this.markInvalid(String.format(this.maxLengthText,this.maxLength));return false}return true},clearValue:function(){this.commonChangeValue("","",[],[]);if(this.view){this.view.clearSelections()}Wtf.common.Select.superclass.clearValue.call(this)},reset:function(){if(this.view){this.view.clearSelections()}Wtf.common.Select.superclass.reset.call(this)},getValue:function(A){if(A){return typeof this.valueArray!="undefined"?this.valueArray:[]}return Wtf.common.Select.superclass.getValue.call(this)},getRawValue:function(A){if(A){return typeof this.rawValueArray!="undefined"?this.rawValueArray:[]}return Wtf.common.Select.superclass.getRawValue.call(this)},select:function(A,C){this.selectedIndex=A;if(!this.view){return }this.view.select(A,this.multiSelect);if(C!==false){var B=this.view.getNode(A);if(B){this.innerList.scrollChildIntoView(B,false)}}},deselect:function(A,C){this.selectedIndex=A;this.view.deselect(A,this.multiSelect);if(C!==false){var B=this.view.getNode(A);if(B){this.innerList.scrollChildIntoView(B,false)}}},selectByValue:function(B,G){this.hoverOut();if(B!==undefined&&B!==null){if(!(B instanceof Array)){B=[B]}var F=[];for(var C=0,A=B.length;C<A;C++){var E=B[C];var D=this.findRecord(this.valueField||this.displayField,E);if(D){this.select(this.store.indexOf(D),G);F.push(E)}}return F.join(",")}return false},selectFirst:function(){var A=this.store.getCount();if(A>0){this.select(0)}},selectLast:function(){var A=this.store.getCount();if(A>0){this.select(A)}},hover:function(A,D){if(!this.view){return }this.hoverOut();var C=this.view.getNode(A);this.view.lastItem=C;Wtf.fly(C).addClass(this.view.overClass);if(D!==false){var B=this.view.getNode(A);if(B){this.innerList.scrollChildIntoView(B,false)}}},hoverOut:function(){if(!this.view){return }if(this.view.lastItem){Wtf.fly(this.view.lastItem).removeClass(this.view.overClass);delete this.view.lastItem}},hoverNext:function(){if(!this.view){return }var A=this.store.getCount();if(A>0){if(!this.view.lastItem){this.hover(0)}else{var B=this.view.indexOf(this.view.lastItem);if(B<A-1){this.hover(B+1)}}}},hoverPrev:function(){if(!this.view){return }var A=this.store.getCount();if(A>0){if(!this.view.lastItem){this.hover(0)}else{var B=this.view.indexOf(this.view.lastItem);if(B!=0){this.hover(B-1)}}}},hoverFirst:function(){var A=this.store.getCount();if(A>0){this.hover(0)}},hoverLast:function(){var A=this.store.getCount();if(A>0){this.hover(A)}},addHistory:function(B){if(!B.length){return }var A=this.findRecord(this.valueField||this.displayField,B);if(A){this.store.remove(A)}else{var C={};if(this.valueField){C[this.valueField]=B}C[this.displayField]=B;A=new this.store.reader.recordType(C)}this.store.clearFilter();this.store.insert(0,A);this.pruneHistory()},pruneHistory:function(){if(this.historyMaxLength==0){return }if(this.store.getCount()>this.historyMaxLength){var C=this.store.getRange(this.historyMaxLength,this.store.getCount());for(var B=0,A=C.length;B<A;B++){this.store.remove(C[B])}}}});Wtf.reg("select",Wtf.common.Select)