﻿
Ext.namespace("Credit360");Credit360.MultiSelectItemPicker=function(config){Credit360.MultiSelectItemPicker.superclass.constructor.call(this,config);Ext.apply(this,config);this.addEvents({"show":true,"hide":true,"apply":true,"beforeapply":true});this.list=new Ext.Layer({shadow:this.shadow,cls:"multiselectitempicker-list",constrain:true});if(this.items){this.setItems(items);}};Ext.extend(Credit360.MultiSelectItemPicker,Ext.util.Observable,{listAlign:'tl-bl?',items:null,shadow:"sides",inKeyMode:true,labelName:"label",applyBtnText:__tr('Apply'),scrollItemLimit:0,setItems:function(items){this.items=items;this.list.update("");var scrollList=false;var container=this.list;if(this.scrollItemLimit>0&&this.items.length>this.scrollItemLimit){scrollList=true;container=this.list.createChild({tag:"div",style:"overflow:auto;"});}
var height=0,maxWidth=0;if(this.items!=null){for(var i=0,len=this.items.length;i<len;i++){var item=this.items[i];if(typeof(item.checked)=="undefined"){item.checked=false;}
item.checkBox=new Ext.form.Checkbox({boxLabel:item[this.labelName],checked:item.checked}).render(container.createChild({tag:"div",cls:"multiselectitempicker-list-item"}));var el=item.checkBox.getEl().parent("div.multiselectitempicker-list-item");maxWidth=Math.max(el.getWidth(),maxWidth);if(i<this.scrollItemLimit){el=item.checkBox.getEl().parent("div.x-form-check-wrap");height+=el.getComputedHeight();if(Ext.isIE){height-=1;}else{height+=2;}}}}
var btn=new Ext.Button({text:this.applyBtnText,renderTo:this.list.createChild({tag:"div",cls:"multiselectitempicker-list-item"}),scope:this,handler:function(){this.onApply();}});if(scrollList&&this.scrollItemLimit>0){this.list.setWidth(maxWidth+20);container.dom.style.height=height+"px";}},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});},show:function(button){if(this.list.isVisible()){return;}
if(this.items!=null){for(var i=0,len=this.items.length;i<len;i++){var item=this.items[i];if(typeof(item.checked)=="undefined"){item.checked=false;}
if(item.checkBox){item.checkBox.setValue(item.checked);}}}
if(typeof button!="undefined"){this.button=button;this.list.alignTo(button,this.listAlign);this.initEvents();}else{this.button=null;this.keyNav=null;}
this.selectedIndex=null;this.list.show();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){Ext.fly(this.listClickable.getNode(this.selectedIndex)).removeClass("multiselectitempicker-list-item-selected");}},onClick:function(){},onApply:function(){var sel=[];if(this.items!=null){for(var i=0;i<this.items.length;i++){var item=this.items[i];if(!item.checkBox){continue;}
item.checked=item.checkBox.getValue();if(item.checked){sel.push(item);}}}
if(this.fireEvent("beforeapply",this,sel)!==false){this.fireEvent("apply",this,sel);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("multiselectitempicker-list-item-selected");}
this.selectedIndex=index;var n=this.listClickable.getNode(index);Ext.fly(n).addClass("multiselectitempicker-list-item-selected");if(scrollIntoView!==false){if(n){this.list.scrollChildIntoView(n,false);}}},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.items.length-1:this.selectedIndex-1;if(prevIndex>=0){this.select(prevIndex,false);}},destroy:function(){this.listClickable.destroy();},getSelectedItems:function(){var sel=[];if(this.items!=null){for(var i=0;i<this.items.length;i++){var item=this.items[i];if(!item.checkBox){continue;}
item.checked=item.checkBox.getValue();if(item.checked){sel.push(item);}}}
return sel;}});