//MultiSelect.js
Ext.ns('Ext.ux.form');Ext.ux.form.MultiSelect=Ext.extend(Ext.form.Field,{ddReorder:false,appendOnly:false,width:100,height:100,displayField:0,valueField:1,allowBlank:true,minSelections:0,maxSelections:Number.MAX_VALUE,blankText:Ext.form.TextField.prototype.blankText,minSelectionsText:'Minimum {0} item(s) required',maxSelectionsText:'Maximum {0} item(s) allowed',delimiter:',',defaultAutoCreate:{tag:"div"},initComponent:function(){Ext.ux.form.MultiSelect.superclass.initComponent.call(this);if(Ext.isArray(this.store)){if(Ext.isArray(this.store[0])){this.store=new Ext.data.ArrayStore({fields:['value','text'],data:this.store});this.valueField='value'}else{this.store=new Ext.data.ArrayStore({fields:['text'],data:this.store,expandData:true});this.valueField='text'}this.displayField='text'}else{this.store=Ext.StoreMgr.lookup(this.store)}this.addEvents({'dblclick':true,'click':true,'change':true,'drop':true})},onRender:function(a,b){Ext.ux.form.MultiSelect.superclass.onRender.call(this,a,b);var c=this.fs=new Ext.form.FieldSet({renderTo:this.el,title:this.legend,height:this.height,width:this.width,style:"padding:0;",tbar:this.tbar});c.body.addClass('ux-mselect');this.view=new Ext.ListView({multiSelect:true,store:this.store,columns:[{header:'Value',width:1,dataIndex:this.displayField}],hideHeaders:true});c.add(this.view);this.view.on('click',this.onViewClick,this);this.view.on('beforeclick',this.onViewBeforeClick,this);this.view.on('dblclick',this.onViewDblClick,this);this.hiddenName=this.name||Ext.id();var d={tag:"input",type:"hidden",value:"",name:this.hiddenName};this.hiddenField=this.el.createChild(d);this.hiddenField.dom.disabled=this.hiddenName!=this.name;c.doLayout()},afterRender:function(){Ext.ux.form.MultiSelect.superclass.afterRender.call(this);if(this.ddReorder&&!this.dragGroup&&!this.dropGroup){this.dragGroup=this.dropGroup='MultiselectDD-'+Ext.id()}if(this.draggable||this.dragGroup){this.dragZone=new Ext.ux.form.MultiSelect.DragZone(this,{ddGroup:this.dragGroup})}if(this.droppable||this.dropGroup){this.dropZone=new Ext.ux.form.MultiSelect.DropZone(this,{ddGroup:this.dropGroup})}},onViewClick:function(a,b,c,e){this.fireEvent('change',this,this.getValue(),this.hiddenField.dom.value);this.hiddenField.dom.value=this.getValue();this.fireEvent('click',this,e);this.validate()},onViewBeforeClick:function(a,b,c,e){if(this.disabled){return false}},onViewDblClick:function(a,b,c,e){return this.fireEvent('dblclick',a,b,c,e)},getValue:function(a){var b=[];var c=this.view.getSelectedIndexes();if(c.length==0){return''}for(var i=0;i<c.length;i++){b.push(this.store.getAt(c[i]).get((a!=null)?a:this.valueField))}return b.join(this.delimiter)},setValue:function(a){var b;var c=[];this.view.clearSelections();this.hiddenField.dom.value='';if(!a||(a=='')){return}if(!Ext.isArray(a)){a=a.split(this.delimiter)}for(var i=0;i<a.length;i++){b=this.view.store.indexOf(this.view.store.query(this.valueField,new RegExp('^'+a[i]+'$',"i")).itemAt(0));c.push(b)}this.view.select(c);this.hiddenField.dom.value=this.getValue();this.validate()},reset:function(){this.setValue('')},getRawValue:function(a){var b=this.getValue(a);if(b.length){b=b.split(this.delimiter)}else{b=[]}return b},setRawValue:function(a){setValue(a)},validateValue:function(a){if(a.length<1){if(this.allowBlank){this.clearInvalid();return true}else{this.markInvalid(this.blankText);return false}}if(a.length<this.minSelections){this.markInvalid(String.format(this.minSelectionsText,this.minSelections));return false}if(a.length>this.maxSelections){this.markInvalid(String.format(this.maxSelectionsText,this.maxSelections));return false}return true},disable:function(){this.disabled=true;this.hiddenField.dom.disabled=true;this.fs.disable()},enable:function(){this.disabled=false;this.hiddenField.dom.disabled=false;this.fs.enable()},destroy:function(){Ext.destroy(this.fs,this.dragZone,this.dropZone);Ext.ux.form.MultiSelect.superclass.destroy.call(this)}});Ext.reg('multiselect',Ext.ux.form.MultiSelect);Ext.ux.Multiselect=Ext.ux.form.MultiSelect;Ext.ux.form.MultiSelect.DragZone=function(a,b){this.ms=a;this.view=a.view;var c=b.ddGroup||'MultiselectDD';var d;if(Ext.isArray(c)){d=c.shift()}else{d=c;c=null}Ext.ux.form.MultiSelect.DragZone.superclass.constructor.call(this,this.ms.fs.body,{containerScroll:true,ddGroup:d});this.setDraggable(c)};Ext.extend(Ext.ux.form.MultiSelect.DragZone,Ext.dd.DragZone,{onInitDrag:function(x,y){var a=Ext.get(this.dragData.ddel.cloneNode(true));this.proxy.update(a.dom);a.setWidth(a.child('em').getWidth());this.onStartDrag(x,y);return true},collectSelection:function(c){c.repairXY=Ext.fly(this.view.getSelectedNodes()[0]).getXY();var i=0;this.view.store.each(function(a){if(this.view.isSelected(i)){var n=this.view.getNode(i);var b=n.cloneNode(true);b.id=Ext.id();c.ddel.appendChild(b);c.records.push(this.view.store.getAt(i));c.viewNodes.push(n)}i++},this)},onEndDrag:function(a,e){var d=Ext.get(this.dragData.ddel);if(d&&d.hasClass("multi-proxy")){d.remove()}},getDragData:function(e){var a=this.view.findItemFromChild(e.getTarget());if(a){if(!this.view.isSelected(a)&&!e.ctrlKey&&!e.shiftKey){this.view.select(a);this.ms.setValue(this.ms.getValue())}if(this.view.getSelectionCount()==0||e.ctrlKey||e.shiftKey)return false;var b={sourceView:this.view,viewNodes:[],records:[]};if(this.view.getSelectionCount()==1){var i=this.view.getSelectedIndexes()[0];var n=this.view.getNode(i);b.viewNodes.push(b.ddel=n);b.records.push(this.view.store.getAt(i));b.repairXY=Ext.fly(n).getXY()}else{b.ddel=document.createElement('div');b.ddel.className='multi-proxy';this.collectSelection(b)}return b}return false},getRepairXY:function(e){return this.dragData.repairXY},setDraggable:function(a){if(!a)return;if(Ext.isArray(a)){Ext.each(a,this.setDraggable,this);return}this.addToGroup(a)}});Ext.ux.form.MultiSelect.DropZone=function(a,b){this.ms=a;this.view=a.view;var c=b.ddGroup||'MultiselectDD';var d;if(Ext.isArray(c)){d=c.shift()}else{d=c;c=null}Ext.ux.form.MultiSelect.DropZone.superclass.constructor.call(this,this.ms.fs.body,{containerScroll:true,ddGroup:d});this.setDroppable(c)};Ext.extend(Ext.ux.form.MultiSelect.DropZone,Ext.dd.DropZone,{getTargetFromEvent:function(e){var a=e.getTarget();return a},getDropPoint:function(e,n,a){if(n==this.ms.fs.body.dom){return"below"}var t=Ext.lib.Dom.getY(n),b=t+n.offsetHeight;var c=t+(b-t)/2;var y=Ext.lib.Event.getPageY(e);if(y<=c){return"above"}else{return"below"}},isValidDropPoint:function(a,n,b){if(!b.viewNodes||(b.viewNodes.length!=1)){return true}var d=b.viewNodes[0];if(d==n){return false}if((a=="below")&&(n.nextSibling==d)){return false}if((a=="above")&&(n.previousSibling==d)){return false}return true},onNodeEnter:function(n,a,e,b){return false},onNodeOver:function(n,a,e,b){var c=this.dropNotAllowed;var d=this.getDropPoint(e,n,a);if(this.isValidDropPoint(d,n,b)){if(this.ms.appendOnly){return"x-tree-drop-ok-below"}if(d){var f;if(d=="above"){c=n.previousSibling?"x-tree-drop-ok-between":"x-tree-drop-ok-above";f="x-view-drag-insert-above"}else{c=n.nextSibling?"x-tree-drop-ok-between":"x-tree-drop-ok-below";f="x-view-drag-insert-below"}if(this.lastInsertClass!=f){Ext.fly(n).replaceClass(this.lastInsertClass,f);this.lastInsertClass=f}}}return c},onNodeOut:function(n,a,e,b){this.removeDropIndicators(n)},onNodeDrop:function(n,a,e,b){if(this.ms.fireEvent("drop",this,n,a,e,b)===false){return false}var c=this.getDropPoint(e,n,a);if(n!=this.ms.fs.body.dom)n=this.view.findItemFromChild(n);if(this.ms.appendOnly){insertAt=this.view.store.getCount()}else{insertAt=n==this.ms.fs.body.dom?this.view.store.getCount()-1:this.view.indexOf(n);if(c=="below"){insertAt++}}var d=false;if(b.sourceView==this.view){if(c=="below"){if(b.viewNodes[0]==n){b.viewNodes.shift()}}else{if(b.viewNodes[b.viewNodes.length-1]==n){b.viewNodes.pop()}}if(!b.viewNodes.length){return false}if(insertAt>this.view.store.indexOf(b.records[0])){d='down';insertAt--}}for(var i=0;i<b.records.length;i++){var r=b.records[i];if(b.sourceView){b.sourceView.store.remove(r)}this.view.store.insert(d=='down'?insertAt:insertAt++,r);var f=this.view.store.sortInfo;if(f){this.view.store.sort(f.field,f.direction)}}return true},removeDropIndicators:function(n){if(n){Ext.fly(n).removeClass(["x-view-drag-insert-above","x-view-drag-insert-left","x-view-drag-insert-right","x-view-drag-insert-below"]);this.lastInsertClass="_noclass"}},setDroppable:function(a){if(!a)return;if(Ext.isArray(a)){Ext.each(a,this.setDroppable,this);return}this.addToGroup(a)}});
//ListMenu.js
Ext.namespace('Ext.ux.menu');Ext.ux.menu.ListMenu=Ext.extend(Ext.menu.Menu,{labelField:'text',loadingText:'Loading...',loadOnShow:true,single:false,constructor:function(a){this.selected=[];this.addEvents('checkchange');Ext.ux.menu.ListMenu.superclass.constructor.call(this,a=a||{});if(!a.store&&a.options){var b=[];for(var i=0,len=a.options.length;i<len;i++){var c=a.options[i];switch(Ext.type(c)){case'array':b.push(c);break;case'object':b.push([c.id,c[this.labelField]]);break;case'string':b.push([c,c]);break}}this.store=new Ext.data.Store({reader:new Ext.data.ArrayReader({id:0},['id',this.labelField]),data:b,listeners:{'load':this.onLoad,scope:this}});this.loaded=true}else{this.add({text:this.loadingText,iconCls:'loading-indicator'});this.store.on('load',this.onLoad,this)}},destroy:function(){if(this.store){this.store.destroy()}Ext.ux.menu.ListMenu.superclass.destroy.call(this)},show:function(){var a=null;return function(){if(arguments.length===0){Ext.ux.menu.ListMenu.superclass.show.apply(this,a)}else{a=arguments;if(this.loadOnShow&&!this.loaded){this.store.load()}Ext.ux.menu.ListMenu.superclass.show.apply(this,arguments)}}}(),onLoad:function(a,b){var c=this.isVisible();this.hide(false);this.removeAll(true);var d=this.single?Ext.id():null;for(var i=0,len=b.length;i<len;i++){var e=new Ext.menu.CheckItem({text:b[i].get(this.labelField),group:d,checked:this.selected.indexOf(b[i].id)>-1,hideOnClick:false});e.itemId=b[i].id;e.on('checkchange',this.checkChange,this);this.add(e)}this.loaded=true;if(c){this.show()}this.fireEvent('load',this,b)},getSelected:function(){return this.selected},setSelected:function(b){b=this.selected=[].concat(b);if(this.loaded){this.items.each(function(a){a.setChecked(false,true);for(var i=0,len=b.length;i<len;i++){if(a.itemId==b[i]){a.setChecked(true,true)}}},this)}},checkChange:function(b,c){var d=[];this.items.each(function(a){if(a.checked){d.push(a.itemId)}},this);this.selected=d;this.fireEvent('checkchange',b,c)}});
//GridFilters.js
Ext.namespace('Ext.ux.grid');Ext.ux.grid.GridFilters=Ext.extend(Ext.util.Observable,{autoReload:true,filterCls:'ux-filtered-column',local:false,menuFilterText:'Filters',paramPrefix:'filter',showMenu:true,stateId:undefined,updateBuffer:500,constructor:function(a){a=a||{};this.deferredUpdate=new Ext.util.DelayedTask(this.reload,this);this.filters=new Ext.util.MixedCollection();this.filters.getKey=function(o){return o?o.dataIndex:null};this.addFilters(a.filters);delete a.filters;Ext.apply(this,a)},init:function(a){if(a instanceof Ext.grid.GridPanel){this.grid=a;this.bindStore(this.grid.getStore(),true);if(this.filters.getCount()==0){this.addFilters(this.grid.getColumnModel())}this.grid.filters=this;this.grid.addEvents({'filterupdate':true});a.on({scope:this,beforestaterestore:this.applyState,beforestatesave:this.saveState,beforedestroy:this.destroy,reconfigure:this.onReconfigure});if(a.rendered){this.onRender()}else{a.on({scope:this,single:true,render:this.onRender})}}else if(a instanceof Ext.PagingToolbar){this.toolbar=a}},applyState:function(a,b){var c,filter;this.applyingState=true;this.clearFilters();if(b.filters){for(c in b.filters){filter=this.filters.get(c);if(filter){filter.setValue(b.filters[c]);filter.setActive(true)}}}this.deferredUpdate.cancel();if(this.local){this.reload()}delete this.applyingState},saveState:function(b,c){var d={};this.filters.each(function(a){if(a.active){d[a.dataIndex]=a.getValue()}});return(c.filters=d)},onRender:function(){this.grid.getView().on('refresh',this.onRefresh,this);this.createMenu()},destroy:function(){this.removeAll();this.purgeListeners();if(this.filterMenu){Ext.menu.MenuMgr.unregister(this.filterMenu);this.filterMenu.destroy();this.filterMenu=this.menu.menu=null}},removeAll:function(){if(this.filters){Ext.destroy.apply(Ext,this.filters.items);this.filters.clear()}},bindStore:function(a,b){if(!b&&this.store){if(this.local){a.un('load',this.onLoad,this)}else{a.un('beforeload',this.onBeforeLoad,this)}}if(a){if(this.local){a.on('load',this.onLoad,this)}else{a.on('beforeload',this.onBeforeLoad,this)}}this.store=a},onReconfigure:function(){this.bindStore(this.grid.getStore());this.store.clearFilter();this.removeAll();this.addFilters(this.grid.getColumnModel());this.updateColumnHeadings()},createMenu:function(){var a=this.grid.getView(),hmenu=a.hmenu;if(this.showMenu&&hmenu){this.sep=hmenu.addSeparator();this.filterMenu=new Ext.menu.Menu({id:this.grid.id+'-filters-menu'});this.menu=hmenu.add({checked:false,itemId:'filters',text:this.menuFilterText,menu:this.filterMenu});this.menu.on({scope:this,checkchange:this.onCheckChange,beforecheckchange:this.onBeforeCheck});hmenu.on('beforeshow',this.onMenu,this)}this.updateColumnHeadings()},getMenuFilter:function(){var a=this.grid.getView();if(!a||a.hdCtxIndex===undefined){return null}return this.filters.get(a.cm.config[a.hdCtxIndex].dataIndex)},onMenu:function(a){var b=this.getMenuFilter();if(b){this.menu.menu=b.menu;this.menu.setChecked(b.active,false);this.menu.setDisabled(b.disabled===true)}this.menu.setVisible(b!==undefined);this.sep.setVisible(b!==undefined)},onCheckChange:function(a,b){this.getMenuFilter().setActive(b)},onBeforeCheck:function(a,b){return!b||this.getMenuFilter().isActivatable()},onStateChange:function(a,b){if(a==='serialize'){return}if(b==this.getMenuFilter()){this.menu.setChecked(b.active,false)}if((this.autoReload||this.local)&&!this.applyingState){this.deferredUpdate.delay(this.updateBuffer)}this.updateColumnHeadings();if(!this.applyingState){this.grid.saveState()}this.grid.fireEvent('filterupdate',this,b)},onBeforeLoad:function(a,b){b.params=b.params||{};this.cleanParams(b.params);var c=this.buildQuery(this.getFilterData());Ext.apply(b.params,c)},onLoad:function(a,b){a.filterBy(this.getRecordFilter())},onRefresh:function(){this.updateColumnHeadings()},updateColumnHeadings:function(){var a=this.grid.getView(),i,len,filter;if(a.mainHd){for(i=0,len=a.cm.config.length;i<len;i++){filter=this.getFilter(a.cm.config[i].dataIndex);Ext.fly(a.getHeaderCell(i))[filter&&filter.active?'addClass':'removeClass'](this.filterCls)}}},reload:function(){if(this.local){this.grid.store.clearFilter(true);this.grid.store.filterBy(this.getRecordFilter())}else{var a,store=this.grid.store;this.deferredUpdate.cancel();if(this.toolbar){a=store.paramNames.start;if(store.lastOptions&&store.lastOptions.params&&store.lastOptions.params[a]){store.lastOptions.params[a]=0}}store.reload()}},getRecordFilter:function(){var f=[],len,i;this.filters.each(function(a){if(a.active){f.push(a)}});len=f.length;return function(a){for(i=0;i<len;i++){if(!f[i].validateRecord(a)){return false}}return true}},addFilter:function(a){var b=this.getFilterClass(a.type),filter=a.menu?a:(new b(a));this.filters.add(filter);Ext.util.Observable.capture(filter,this.onStateChange,this);return filter},addFilters:function(a){if(a){var i,len,filter,cm=false,dI;if(a instanceof Ext.grid.ColumnModel){a=a.config;cm=true}for(i=0,len=a.length;i<len;i++){filter=false;if(cm){dI=a[i].dataIndex;filter=a[i].filter||a[i].filterable;if(filter){filter=(filter===true)?{}:filter;Ext.apply(filter,{dataIndex:dI});filter.type=filter.type||this.store.fields.get(dI).type}}else{filter=a[i]}if(filter){this.addFilter(filter)}}}},getFilter:function(a){return this.filters.get(a)},clearFilters:function(){this.filters.each(function(a){a.setActive(false)})},getFilterData:function(){var a=[],i,len;this.filters.each(function(f){if(f.active){var d=[].concat(f.serialize());for(i=0,len=d.length;i<len;i++){a.push({field:f.dataIndex,data:d[i]})}}});return a},buildQuery:function(a){var p={},i,f,root,dataPrefix,key,tmp,len=a.length;if(!this.encode){for(i=0;i<len;i++){f=a[i];root=[this.paramPrefix,'[',i,']'].join('');p[root+'[field]']=f.field;dataPrefix=root+'[data]';for(key in f.data){p[[dataPrefix,'[',key,']'].join('')]=f.data[key]}}}else{tmp=[];for(i=0;i<len;i++){f=a[i];tmp.push(Ext.apply({},{field:f.field},f.data))}if(tmp.length>0){p[this.paramPrefix]=Ext.util.JSON.encode(tmp)}}return p},cleanParams:function(p){if(this.encode){delete p[this.paramPrefix]}else{var a,key;a=new RegExp('^'+this.paramPrefix+'\[[0-9]+\]');for(key in p){if(a.test(key)){delete p[key]}}}},getFilterClass:function(a){switch(a){case'auto':a='string';break;case'int':case'float':a='numeric';break}return Ext.ux.grid.filter[a.substr(0,1).toUpperCase()+a.substr(1)+'Filter']}});Ext.preg('gridfilters',Ext.ux.grid.GridFilters);
//Filter.js
Ext.namespace('Ext.ux.grid.filter');Ext.ux.grid.filter.Filter=Ext.extend(Ext.util.Observable,{active:false,dataIndex:null,menu:null,updateBuffer:500,constructor:function(a){Ext.apply(this,a);this.addEvents('activate','deactivate','serialize','update');Ext.ux.grid.filter.Filter.superclass.constructor.call(this);this.menu=new Ext.menu.Menu();this.init(a);if(a&&a.value){this.setValue(a.value);this.setActive(a.active!==false,true);delete a.value}},destroy:function(){if(this.menu){this.menu.destroy()}this.purgeListeners()},init:Ext.emptyFn,getValue:Ext.emptyFn,setValue:Ext.emptyFn,isActivatable:function(){return true},getSerialArgs:Ext.emptyFn,validateRecord:function(){return true},serialize:function(){var a=this.getSerialArgs();this.fireEvent('serialize',a,this);return a},fireUpdate:function(){if(this.active){this.fireEvent('update',this)}this.setActive(this.isActivatable())},setActive:function(a,b){if(this.active!=a){this.active=a;if(b!==true){this.fireEvent(a?'activate':'deactivate',this)}}}});
//ListFilter.js
Ext.ux.grid.filter.ListFilter=Ext.extend(Ext.ux.grid.filter.Filter,{phpMode:false,init:function(a){this.dt=new Ext.util.DelayedTask(this.fireUpdate,this);if(this.menu){this.menu.destroy()}this.menu=new Ext.ux.menu.ListMenu(a);this.menu.on('checkchange',this.onCheckChange,this)},getValue:function(){return this.menu.getSelected()},setValue:function(a){this.menu.setSelected(a);this.fireEvent('update',this)},isActivatable:function(){return this.getValue().length>0},getSerialArgs:function(){var a={type:'list',value:this.phpMode?this.getValue().join(','):this.getValue()};return a},onCheckChange:function(){this.dt.delay(this.updateBuffer)},validateRecord:function(a){return this.getValue().indexOf(a.get(this.dataIndex))>-1}});
//PriceFilter.js
Ext.ux.grid.filter.PriceFilter=Ext.extend(Ext.ux.grid.filter.ListFilter,{validateRecord:function(a){var b=a.get(this.dataIndex);var c=String(this.getValue()).split(",");var d='';var e,upper=0.00;for(var i=0;i<c.length;i++){d=String(c[i]).split("/");e=parseFloat(d[0]);upper=parseFloat(d[1]);if(b>=e&&b<=upper){return true}}}});
//VType.Daterange.js
Ext.apply(Ext.form.VTypes,{daterange:function(a,b){var c=b.parseDate(a);if(!c){return false}if(b.startDateField&&(!this.dateRangeMax||(c.getTime()!=this.dateRangeMax.getTime()))){var d=Ext.getCmp(b.startDateField);d.setMaxValue(c);d.validate();this.dateRangeMax=c}else if(b.endDateField&&(!this.dateRangeMin||(c.getTime()!=this.dateRangeMin.getTime()))){var e=Ext.getCmp(b.endDateField);e.setMinValue(c);e.validate();this.dateRangeMin=c}return true}});
