﻿
Ext.namespace("Ext.ux");Ext.ux.ItemPicker=function(config){Ext.ux.ItemPicker.superclass.constructor.call(this,config);Ext.apply(this,config);this.addEvents({"show":true,"hide":true,"select":true,"beforeselect":true});this.list=new Ext.Layer({shadow:this.shadow,cls:"x-panel-bwrap",constrain:true});this.listBody=Ext.DomHelper.append(this.list,{cls:"x-panel-body",style:{'overflow':'auto','border':'1px solid #000'}},true);this.itemContainer=Ext.DomHelper.append(this.listBody,{cls:"itempicker-list"},true);if(typeof this.tpl=="string"){this.tpl=new Ext.XTemplate(this.tpl);}
this.tpl.compile();if(this.items){this.setItems(this.items)}else if(this.store){this.setStore(this.store,true);}else{throw"No store or items properties set";}
this.listClickable=new Credit360.Clickable(this.itemContainer);this.listClickable.on({"click":function(clickable,index,node,e){this.onClick(index);},"mouseover":function(clickable,index,node,e){if(this.inKeyMode){return;}
this.select(index);},"mousemove":function(clickable,index,node,e){this.inKeyMode=false;},scope:this});};Ext.extend(Ext.ux.ItemPicker,Ext.util.Observable,{listAlign:'tl-bl?',tpl:"<tpl for='.'><div class='itempicker-list-item'>{text}</div></tpl>",items:null,store:null,shadow:"sides",inKeyMode:true,autoSizeList:true,minListHeight:null,maxListHeight:300,minListWidth:null,maxListWidth:null,vScrollWidth:20,initEvents:function(){if(!this.button){return;}
this.keyNav=new Ext.KeyNav(this.button,{"up":function(e){this.inKeyMode=true;this.selectPrev();},"down":function(e){this.inKeyMode=true;this.selectNext();},"enter":function(e){this.onClick();},"esc":function(e){this.hide();},"tab":function(e){return true;},scope:this});},setItems:function(items){this.items=items;this.refreshItems(items)},refreshItems:function(){this.itemContainer.update("");var data=[];for(var i=0,len=this.items.length;i<len;i++){data.push(typeof this.items[i]=="string"?{text:this.items[i]}:this.items[i]);}
this.appendToList(data);},setStore:function(store,initial){if(!initial&&this.store){this.store.un("datachanged",this.refreshStore,this);this.store.un("add",this.refreshStore,this);this.store.un("remove",this.refreshStore,this);this.store.un("update",this.refreshStore,this);this.store.un("clear",this.refreshStore,this);}
if(store){store=Ext.StoreMgr.lookup(store);store.on("datachanged",this.refreshStore,this);store.on("add",this.refreshStore,this);store.on("remove",this.refreshStore,this);store.on("update",this.refreshStore,this);store.on("clear",this.refreshStore,this);}
this.store=store;if(store&&store.getCount()>0){this.refreshStore();}},refreshStore:function(){this.itemContainer.update("");var data=[];for(var i=0,len=this.store.getCount();i<len;i++){data.push(this.store.getAt(i).data);}
this.appendToList(data);},appendToList:function(data){if(this.autoSizeList){this.listSizeHelper=this.listSizeHelper||Ext.DomHelper.append(Ext.getBody(),{tag:'div',cls:'x-hidden',style:'position:absolute; z-index:9995; border:1px solid #000'},true);Ext.each(data,function(o){this.tpl.append(this.listSizeHelper,o);},this);var calWidth=this.listSizeHelper.getWidth()+this.vScrollWidth;var setHeight=this.listSizeHelper.getHeight();var setWidth=Math.max(calWidth,this.curListWidth||0);if(this.minListWidth){setWidth=Math.max(setWidth,this.minListWidth);}
if(this.minListHeight){setHeight=Math.max(setHeight,this.minListHeight);}
if(this.maxListWidth){setWidth=Math.min(setWidth,this.maxListWidth);}
if(this.maxListHeight){setHeight=Math.min(setHeight,this.maxListHeight);}
this.curListWidth=setWidth
this.listBody.setWidth(setWidth);this.itemContainer.setHeight(setHeight);this.listBody.setHeight(setHeight);this.list.setHeight(setHeight+this.itemContainer.getFrameWidth('tb'));while(this.listSizeHelper.dom.firstChild){this.itemContainer.appendChild(this.listSizeHelper.dom.firstChild);}}else{Ext.each(data,function(o){this.tpl.append(this.itemContainer,o);},this);}},show:function(button){if(this.list.isVisible()){return;}
if(typeof button!="undefined"){this.button=button;this.list.alignTo(button,this.listAlign);this.initEvents();}else{this.button=null;this.keyNav=null;}
if(this.value!=null){this.select(this.value);}else{this.selectedIndex=null;}
this.list.show();if(this.keyNav){this.keyNav.enable();}
Ext.get(document).on("mousedown",this.hideIf,this);this.fireEvent("show",this);},hide:function(){if(!this.list.isVisible()){return;}
this.list.hide();this.keyNav.disable();Ext.get(document).un("mousedown",this.hideIf,this);this.fireEvent("hide",this);if(this.keyNav){this.keyNav.disable();}
if(this.selectedIndex!=null){var n=this.listClickable.getNode(this.selectedIndex);Ext.fly(n).removeClass("itempicker-list-item-selected");}},onClick:function(){if(this.selectedIndex==null){return;}
if(this.fireEvent("beforeselect",this,this.selectedIndex,this.getItem(this.selectedIndex))!==false){this.fireEvent("select",this,this.selectedIndex,this.getItem(this.selectedIndex));this.hide();}},hideIf:function(e){if(!e.within(this.button)&&!e.within(this.list)){this.hide();}},select:function(index,scrollIntoView){if(this.selectedIndex!=null){Ext.fly(this.listClickable.getNode(this.selectedIndex)).removeClass("itempicker-list-item-selected");}
var n=this.listClickable.getNode(index);if(!n){this.selectedIndex=null;return;}
Ext.fly(n).addClass("itempicker-list-item-selected");this.selectedIndex=index;if(scrollIntoView!==false){if(n){this.itemContainer.scrollChildIntoView(n,false);}}},getCount:function(){return this.items?this.items.length:this.store.getCount();},getItem:function(idx){return this.items?this.items[idx]:this.store.getAt(idx);},selectNext:function(){var nextIndex=(this.selectedIndex==null)?0:this.selectedIndex+1;if(nextIndex<this.items.length){this.select(nextIndex,false);}},selectPrev:function(){var prevIndex=(this.selectedIndex==null)?this.getCount()-1:this.selectedIndex-1;if(prevIndex>=0){this.select(prevIndex,false);}},destroy:function(){if(this.store){this.setStore(null);}
this.listClickable.destroy();}});