(function(a){var b=/[\-\[\]{}()*+?.,\\\^$|#\s]/g;a.widget("ech.multiselectfilter",{options:{label:"Filter:",width:null,placeholder:"Enter keywords",autoReset:false},_create:function(){var b=this,c=this.options,d=this.instance=a(this.element).data("multiselect"),g=this.header=d.menu.find(".ui-multiselect-header").addClass("ui-multiselect-hasfilter"),e=this.wrapper=a('<div class="ui-multiselect-filter">'+(c.label.length?c.label:"")+'<input placeholder="'+c.placeholder+'" type="search"'+(/\d/.test(c.width)?'style="width:'+c.width+'px"':"")+" /></div>").prependTo(this.header);this.inputs=d.menu.find('input[type="checkbox"], input[type="radio"]');this.input=e.find("input").bind({keydown:function(a){a.which===13&&a.preventDefault()},keyup:a.proxy(b._handler,b),click:a.proxy(b._handler,b)});this.updateCache();d._toggleChecked=function(e,d){var c=d&&d.length?d:this.labels.find("input"),h=this,f=b.instance._isOpen?":disabled, :hidden":":disabled";c=c.not(f).each(this._toggleState("checked",e));this.update();var g=c.map(function(){return this.value}).get();this.element.find("option").filter(function(){!this.disabled&&a.inArray(this.value,g)>-1&&h._toggleState("selected",e).call(this)})};var f=a(document).bind("multiselectrefresh",function(){b.updateCache();b._handler()});this.options.autoReset&&f.bind("multiselectclose",a.proxy(this._reset,this))},_handler:function(h){var d=a.trim(this.input[0].value.toLowerCase()),c=this.rows,e=this.inputs,f=this.cache;if(!d)c.show();else{c.hide();var g=new RegExp(d.replace(b,"\\$&"),"gi");this._trigger("filter",h,a.map(f,function(b,a){if(b.search(g)!==-1){c.eq(a).show();return e.get(a)}return null}))}this.instance.menu.find(".ui-multiselect-optgroup-label").each(function(){var b=a(this),c=b.nextUntil(".ui-multiselect-optgroup-label").filter(function(){return a.css(this,"display")!=="none"}).length;b[c?"show":"hide"]()})},_reset:function(){this.input.val("").trigger("keyup")},updateCache:function(){this.rows=this.instance.menu.find(".ui-multiselect-checkboxes li:not(.ui-multiselect-optgroup-label)");this.cache=this.element.children().map(function(){var b=a(this);if(this.tagName.toLowerCase()==="optgroup")b=b.children();return b.map(function(){return this.innerHTML.toLowerCase()}).get()}).get()},widget:function(){return this.wrapper},destroy:function(){a.Widget.prototype.destroy.call(this);this.input.val("").trigger("keyup");this.wrapper.remove()}})})(jQuery);(function(a){var b=0;a.widget("ech.multiselect",{options:{header:true,height:175,minWidth:225,classes:"",checkAllText:"Check all",uncheckAllText:"Uncheck all",noneSelectedText:"Select options",selectedText:"# selected",selectedList:0,show:"",hide:"",autoOpen:false,multiple:true,position:{}},_create:function(){var d=this.element.hide(),b=this.options;this.speed=a.fx.speeds._default;this._isOpen=false;var e=(this.button=a('<button type="button"><span class="ui-icon ui-icon-triangle-2-n-s"></span></button>')).addClass("ui-multiselect ui-widget ui-state-default ui-corner-all").addClass(b.classes).attr({title:d.attr("title"),"aria-haspopup":true,tabIndex:d.attr("tabIndex")}).insertAfter(d),i=(this.buttonlabel=a("<span />")).html(b.noneSelectedText).appendTo(e),c=(this.menu=a("<div />")).addClass("ui-multiselect-menu ui-widget ui-widget-content ui-corner-all").addClass(b.classes).appendTo(document.body),f=(this.header=a("<div />")).addClass("ui-widget-header ui-corner-all ui-multiselect-header ui-helper-clearfix").appendTo(c),g=(this.headerLinkContainer=a("<ul />")).addClass("ui-helper-reset").html(function(){return b.header===true?'<li><a class="ui-multiselect-all" href="#"><span class="ui-icon ui-icon-check"></span><span>'+b.checkAllText+'</span></a></li><li><a class="ui-multiselect-none" href="#"><span class="ui-icon ui-icon-closethick"></span><span>'+b.uncheckAllText+"</span></a></li>":typeof b.header==="string"?"<li>"+b.header+"</li>":""}).append('<li class="ui-multiselect-close"><a href="#" class="ui-multiselect-close"><span class="ui-icon ui-icon-circle-close"></span></a></li>').appendTo(f),h=(this.checkboxContainer=a("<ul />")).addClass("ui-multiselect-checkboxes ui-helper-reset").appendTo(c);this._bindEvents();this.refresh(true);!b.multiple&&c.addClass("ui-multiselect-single")},_init:function(){this.options.header===false&&this.header.hide();!this.options.multiple&&this.headerLinkContainer.find(".ui-multiselect-all, .ui-multiselect-none").hide();this.options.autoOpen&&this.open();this.element.is(":disabled")&&this.disable()},refresh:function(i){var e=this.element,g=this.options,j=this.menu,h=this.checkboxContainer,d=[],c=[],f=e.attr("id")||b++;e.find("option").each(function(o){var p=a(this),k=this.parentNode,l=this.innerHTML,m=this.title,n=this.value,j=this.id||"ui-multiselect-"+f+"-option-"+o,h=this.disabled,i=this.selected,e=["ui-corner-all"],b;if(k.tagName.toLowerCase()==="optgroup"){b=k.getAttribute("label");if(a.inArray(b,d)===-1){c.push('<li class="ui-multiselect-optgroup-label"><a href="#">'+b+"</a></li>");d.push(b)}}h&&e.push("ui-state-disabled");i&&!g.multiple&&e.push("ui-state-active");c.push('<li class="'+(h?"ui-multiselect-disabled":"")+'">');c.push('<label for="'+j+'" title="'+m+'" class="'+e.join(" ")+'">');c.push('<input id="'+j+'" name="multiselect_'+f+'" type="'+(g.multiple?"checkbox":"radio")+'" value="'+n+'" title="'+l+'"');if(i){c.push(' checked="checked"');c.push(' aria-selected="true"')}if(h){c.push(' disabled="disabled"');c.push(' aria-disabled="true"')}c.push(" /><span>"+l+"</span></label></li>")});h.html(c.join(""));this.labels=j.find("label");this._setButtonWidth();this._setMenuWidth();this.button[0].defaultValue=this.update();!i&&this._trigger("refresh")},update:function(){var b=this.options,f=this.labels.find("input"),e=f.filter("[checked]"),d=e.length,c;if(d===0)c=b.noneSelectedText;else if(a.isFunction(b.selectedText))c=b.selectedText.call(this,d,f.length,e.get());else if(/\d/.test(b.selectedList)&&b.selectedList>0&&d<=b.selectedList)c=e.map(function(){return a(this).next().text()}).get().join(", ");else c=b.selectedText.replace("#",d).replace("#",f.length);this.buttonlabel.html(c);return c},_bindEvents:function(){var b=this,c=this.button;function d(){b[b._isOpen?"close":"open"]();return false}c.find("span").bind("click.multiselect",d);c.bind({click:d,keypress:function(a){switch(a.which){case 27:case 38:case 37:b.close();break;case 39:case 40:b.open()}},mouseenter:function(){!c.hasClass("ui-state-disabled")&&a(this).addClass("ui-state-hover")},mouseleave:function(){a(this).removeClass("ui-state-hover")},focus:function(){!c.hasClass("ui-state-disabled")&&a(this).addClass("ui-state-focus")},blur:function(){a(this).removeClass("ui-state-focus")}});this.header.delegate("a","click.multiselect",function(c){if(a(this).hasClass("ui-multiselect-close"))b.close();else b[a(this).hasClass("ui-multiselect-all")?"checkAll":"uncheckAll"]();c.preventDefault()});this.menu.delegate("li.ui-multiselect-optgroup-label a","click.multiselect",function(e){e.preventDefault();var f=a(this),c=f.parent().nextUntil("li.ui-multiselect-optgroup-label").find("input:visible:not(:disabled)"),d=c.get(),g=f.parent().text();if(b._trigger("beforeoptgrouptoggle",e,{inputs:d,label:g})===false)return;b._toggleChecked(c.filter("[checked]").length!==c.length,c);b._trigger("optgrouptoggle",e,{inputs:d,label:g,checked:d[0].checked})}).delegate("label","mouseenter.multiselect",function(){if(!a(this).hasClass("ui-state-disabled")){b.labels.removeClass("ui-state-hover");a(this).addClass("ui-state-hover").find("input").focus()}}).delegate("label","keydown.multiselect",function(c){c.preventDefault();switch(c.which){case 9:case 27:b.close();break;case 38:case 40:case 37:case 39:b._traverse(c.which,this);break;case 13:a(this).find("input")[0].click()}}).delegate('input[type="checkbox"], input[type="radio"]',"click.multiselect",function(f){var d=a(this),e=this.value,c=this.checked,g=b.element.find("option");if(this.disabled||b._trigger("click",f,{value:e,text:this.title,checked:c})===false){f.preventDefault();return}d.focus();d.attr("aria-selected",c);g.each(function(){if(this.value===e)this.selected=c;else if(!b.options.multiple)this.selected=false});if(!b.options.multiple){b.labels.removeClass("ui-state-active");d.closest("label").toggleClass("ui-state-active",c);b.close()}b.element.trigger("change");setTimeout(a.proxy(b.update,b),10)});a(document).bind("mousedown.multiselect",function(c){b._isOpen&&!a.contains(b.menu[0],c.target)&&!a.contains(b.button[0],c.target)&&c.target!==b.button[0]&&b.close()});a(this.element[0].form).bind("reset.multiselect",function(){setTimeout(a.proxy(b.refresh,b),10)})},_setButtonWidth:function(){},_setMenuWidth:function(){},_traverse:function(e,g){var f=a(g),b=e===38||e===37,d=f.parent()[b?"prevAll":"nextAll"]("li:not(.ui-multiselect-disabled, .ui-multiselect-optgroup-label)")[b?"last":"first"]();if(!d.length){var c=this.menu.find("ul").last();this.menu.find("label")[b?"last":"first"]().trigger("mouseover");c.scrollTop(b?c.height():0)}else d.find("label").trigger("mouseover")},_toggleState:function(b,a){return function(){if(!this.disabled)this[b]=a;if(a)this.setAttribute("aria-selected",true);else this.removeAttribute("aria-selected")}},_toggleChecked:function(d,c){var b=c&&c.length?c:this.labels.find("input"),f=this;b.each(this._toggleState("checked",d));b.eq(0).focus();this.update();var e=b.map(function(){return this.value}).get();this.element.find("option").each(function(){!this.disabled&&a.inArray(this.value,e)>-1&&f._toggleState("selected",d).call(this)});b.length&&this.element.trigger("change")},_toggleDisabled:function(a){this.button.attr({disabled:a,"aria-disabled":a})[a?"addClass":"removeClass"]("ui-state-disabled");this.menu.find("input").attr({disabled:a,"aria-disabled":a}).parent()[a?"addClass":"removeClass"]("ui-state-disabled");this.element.attr({disabled:a,"aria-disabled":a})},open:function(){var i=this,c=this.button,f=this.menu,e=this.speed,b=this.options;if(this._trigger("beforeopen")===false||c.hasClass("ui-state-disabled")||this._isOpen)return;var h=f.find("ul").last(),d=b.show,g=c.offset();if(a.isArray(b.show)){d=b.show[0];e=b.show[1]||i.speed}h.scrollTop(0).height(b.height);if(a.ui.position&&!a.isEmptyObject(b.position)){b.position.of=b.position.of||c;f.show().position(b.position).hide().show(d,e)}else f.css({top:g.top+c.outerHeight(),left:g.left}).show(d,e);this.labels.eq(0).trigger("mouseover").trigger("mouseenter").find("input").trigger("focus");c.addClass("ui-state-active");this._isOpen=true;this._trigger("open")},close:function(){if(this._trigger("beforeclose")===false)return;var b=this.options,c=b.hide,d=this.speed;if(a.isArray(b.hide)){c=b.hide[0];d=b.hide[1]||this.speed}this.menu.hide(c,d);this.button.removeClass("ui-state-active").trigger("blur").trigger("mouseleave");this._isOpen=false;this._trigger("close")},enable:function(){this._toggleDisabled(false)},disable:function(){this._toggleDisabled(true)},checkAll:function(){this._toggleChecked(true);this._trigger("checkAll")},uncheckAll:function(){this._toggleChecked(false);this._trigger("uncheckAll")},getChecked:function(){return this.menu.find("input").filter("[checked]")},destroy:function(){a.Widget.prototype.destroy.call(this);this.button.remove();this.menu.remove();this.element.show();return this},isOpen:function(){return this._isOpen},widget:function(){return this.menu},_setOption:function(d,b){var c=this.menu;switch(d){case"header":c.find("div.ui-multiselect-header")[b?"show":"hide"]();break;case"checkAllText":c.find("a.ui-multiselect-all span").eq(-1).text(b);break;case"uncheckAllText":c.find("a.ui-multiselect-none span").eq(-1).text(b);break;case"height":c.find("ul").last().height(parseInt(b,10));break;case"minWidth":this.options[d]=parseInt(b,10);this._setButtonWidth();this._setMenuWidth();break;case"selectedText":case"selectedList":case"noneSelectedText":this.options[d]=b;this.update();break;case"classes":c.add(this.button).removeClass(this.options.classes).addClass(b)}a.Widget.prototype._setOption.apply(this,arguments)}})})(jQuery)
