(function(b){var a=0;b.widget("ech.multiselect",{options:{header:true,height:175,minWidth:225,checkAllText:"Check all",uncheckAllText:"Uncheck all",noneSelectedText:"Select options",selectedText:"# selected",selectedList:0,show:"",hide:"",autoOpen:false,multiple:true},_create:function(){var d=this,f=this.element,h=this.options,e=[],c=[],g=f.attr("title");id=f.id||a++,name=f.attr("name");this.speed=400;this._isOpen=false;this.optiontags=f.children();e.push('<button type="button" class="ui-multiselect ui-widget ui-state-default ui-corner-all"');if(g.length){e.push(' title="'+g+'"')}e.push('><span class="ui-icon ui-icon-triangle-2-n-s"></span>'+h.noneSelectedText+"</button>");e.push('<div class="ui-multiselect-menu ui-widget ui-widget-content ui-corner-all">');e.push('<div class="ui-widget-header ui-corner-all ui-multiselect-header ui-helper-clearfix">');e.push('<ul class="ui-helper-reset">');if(h.header===true){e.push('<li><a class="ui-multiselect-all" href=""><span class="ui-icon ui-icon-check"></span><span>'+h.checkAllText+"</span></a></li>");e.push('<li><a class="ui-multiselect-none" href=""><span class="ui-icon ui-icon-closethick"></span><span>'+h.uncheckAllText+"</span></a></li>")}else{if(typeof h.header==="string"){e.push("<li>"+h.header+"</li>")}}e.push('<li class="ui-multiselect-close"><a href="" class="ui-multiselect-close"><span class="ui-icon ui-icon-circle-close"></span></a></li>');e.push("</ul>");e.push("</div>");e.push('<ul class="ui-multiselect-checkboxes ui-helper-reset">');f.find("option").each(function(l){var m=b(this),o=m.html(),q=this.value,j=this.id||"ui-multiselect-"+id+"-option-"+l,k=m.parent(),r=m.is(":disabled"),p=["ui-corner-all"];if(k.is("optgroup")){var n=k.attr("label");if(b.inArray(n,c)===-1){e.push('<li class="ui-multiselect-optgroup-label"><a href="#">'+n+"</a></li>");c.push(n)}}if(q.length>0){if(r){p.push("ui-state-disabled")}e.push('<li class="'+(r?"ui-multiselect-disabled":"")+'">');e.push('<label for="'+j+'" class="'+p.join(" ")+'"><input id="'+j+'" type="'+(h.multiple?"checkbox":"radio")+'" name="'+name+'" value="'+q+'" title="'+o+'"');if(m.is(":selected")){e.push(' checked="checked"')}if(r){e.push(' disabled="disabled"')}e.push(" />"+o+"</label></li>")}});e.push("</ul></div>");this.button=f.children().detach().end().after(e.join("")).hide().next("button");this.menu=this.button.next("div.ui-multiselect-menu");this.labels=this.menu.find("label");this._setButtonWidth();this._setMenuWidth();this._bindEvents();this.button[0].defaultValue=this.update()},_init:function(){if(!this.options.header){this.menu.find("div.ui-multiselect-header").hide()}if(this.options.autoOpen){this.open()}if(this.element.is(":disabled")){this.disable()}},_bindEvents:function(){var c=this;function d(){c[c._isOpen?"close":"open"]();return false}this.button.find("span").bind("click",d);this.button.bind({click:d,keypress:function(f){switch(f.keyCode){case 27:case 38:case 37:c.close();break;case 39:case 40:c.open();break}},mouseenter:function(){if(!c.button.hasClass("ui-state-disabled")){b(this).addClass("ui-state-hover")}},mouseleave:function(){b(this).removeClass("ui-state-hover")},focus:function(){if(!c.button.hasClass("ui-state-disabled")){b(this).addClass("ui-state-focus")}},blur:function(){b(this).removeClass("ui-state-focus")}});this.menu.find("div.ui-multiselect-header a").bind("click",function(f){if(b(this).hasClass("ui-multiselect-close")){c.close()}else{c[b(this).hasClass("ui-multiselect-all")?"checkAll":"uncheckAll"]()}f.preventDefault()}).end().find("li.ui-multiselect-optgroup-label a").bind("click",function(h){var g=b(this),f=g.parent().nextUntil("li.ui-multiselect-optgroup-label").find("input");c._toggleChecked(f.filter(":checked").length!==f.length,f);c._trigger("optgrouptoggle",h,{inputs:f.get(),label:g.parent().text(),checked:f[0].checked});h.preventDefault()}).end().delegate("label","mouseenter",function(){if(!b(this).hasClass("ui-state-disabled")){c.labels.removeClass("ui-state-hover");b(this).addClass("ui-state-hover").find("input").focus()}}).delegate("label","keydown",function(f){switch(f.keyCode){case 9:case 27:c.close();break;case 38:case 40:case 37:case 39:c._traverse(f.keyCode,this);break;case 13:f.preventDefault();b(this).find("input").trigger("click");break}}).delegate("input","click",function(h){var g=b(this),i=this.value,f=this.checked;if(g.is(":disabled")||c._trigger("click",h,{value:this.value,text:this.title,checked:f})===false){h.preventDefault();return}c.optiontags.filter(function(){return this.value===i}).attr("selected",f?"selected":"");c.update()});b(document).bind("click",function(g){var f=b(g.target);if(c._isOpen&&!f.closest("div.ui-multiselect-menu").length&&!f.is("button.ui-multiselect")){c.close()}})},_setButtonWidth:function(){var c=this.element.outerWidth(),d=this.options;if(/\d/.test(d.minWidth)&&c<d.minWidth){c=d.minWidth}this.button.width(c)},_setMenuWidth:function(){var c=this.menu,d=this.button.outerWidth()-parseInt(c.css("padding-left"),10)-parseInt(c.css("padding-right"),10)-parseInt(c.css("border-right-width"),10)-parseInt(c.css("border-left-width"),10);c.width(d||this.button.outerWidth())},_traverse:function(c,h){var f=b(h),e=(c===38||c===37)?true:false,d=f.parent()[e?"prevAll":"nextAll"]("li:not(.ui-multiselect-disabled, .ui-multiselect-optgroup-label)")[e?"last":"first"]();if(!d.length){var g=this.menu.find("ul:last");this.menu.find("label")[e?"last":"first"]().trigger("mouseover");g.scrollTop(e?g.height():0)}else{d.find("label").trigger("mouseover")}},_toggleChecked:function(c,e){var d=(e&&e.length)?e:this.labels.find("input");d.not(":disabled").attr("checked",(c?"checked":""));this.update();this.optiontags.not("disabled").attr("selected",(c?"selected":""))},_toggleDisabled:function(c){this.button.attr("disabled",(c?"disabled":""))[c?"addClass":"removeClass"]("ui-state-disabled");this.menu.find("input").attr("disabled",(c?"disabled":"")).parent()[c?"addClass":"removeClass"]("ui-state-disabled");this.element.attr("disabled",(c?"disabled":""))},update:function(){var g=this.options,d=this.labels.find("input"),c=d.filter(":checked"),f,e=c.length;if(e===0){f=g.noneSelectedText}else{if(b.isFunction(g.selectedText)){f=g.selectedText.call(this,e,d.length,c.get())}else{if(/\d/.test(g.selectedList)&&g.selectedList>0&&e<=g.selectedList){f=c.map(function(){return this.title}).get().join(", ")}else{f=g.selectedText.replace("#",e).replace("#",d.length)}}}this.button.contents()[1].nodeValue=f;return f},open:function(g){var c=this;if(this._trigger("beforeopen")===false||this.button.hasClass("ui-state-disabled")||this._isOpen){return}b(":ech-multiselect").not(this.element).each(function(){var e=b(this);if(e.multiselect("isOpen")){e.multiselect("close")}});var i=this.menu.find("ul:last"),h=this.options,d=h.show,f=this.speed,j=this.button.position();this.button.addClass("ui-state-active");this.labels.first().trigger("mouseover").trigger("mouseenter").find("input").trigger("focus");if(b.isArray(h.show)){d=h.show[0];f=h.show[1]||c.speed}this.menu.css({top:j.top+this.button.outerHeight(),left:j.left}).show(d,f);this._isOpen=true;i.scrollTop(0).height(h.height);this._trigger("open")},close:function(){if(this._trigger("beforeclose")===false){return}var c=this,f=this.options,d=f.hide,e=this.speed;if(b.isArray(f.hide)){d=f.hide[0];e=f.hide[1]||this.speed}this.menu.hide(d,e);this.button.removeClass("ui-state-active").trigger("blur").trigger("mouseleave");c._isOpen=false;this._trigger("close")},enable:function(){this._toggleDisabled(false)},disable:function(){this._toggleDisabled(true)},checkAll:function(c){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(){b.Widget.prototype.destroy.call(this);this.button.remove();this.menu.remove();this.element.append(this.optiontags).show();return this},isOpen:function(){return this._isOpen},widget:function(){return this.menu},_setOption:function(c,d){this.options[c]=d;switch(c){case"header":this.menu.find("div.ui-multiselect-header")[d?"show":"hide"]();break;case"checkAllText":this.menu.find("a.ui-multiselect-all span").eq(-1).text(d);break;case"uncheckAllText":this.menu.find("a.ui-multiselect-none span").eq(-1).text(d);break;case"height":this.menu.find("ul:last").height(parseInt(d,10));break;case"minWidth":this.options[c]=parseInt(d,10);this._setButtonWidth();this._setMenuWidth();break;case"selectedText":case"selectedList":case"noneSelectedText":this.update();break}}})})(jQuery);(function(a){a.widget("ech.multiselectfilter",{options:{label:"Filter:",width:null,placeholder:"Enter keywords"},_create:function(){var c=this,d=this.options,b=(this.instance=a(this.element).data("multiselect")),f=(this.header=b.menu.find(".ui-multiselect-header").addClass("ui-multiselect-hasfilter")),e=(this.wrapper=a('<div class="ui-multiselect-filter">'+(d.label.length?d.label:"")+'<input placeholder="'+d.placeholder+'" type="text"'+(/\d/.test(d.width)?'style="width:'+d.width+'px"':"")+" /></div>").prependTo(this.header));this.inputs=b.menu.find(":checkbox, :radio");this.input=e.find("input").bind("keydown",function(g){if(g.keyCode===13){return false}}).bind("keyup",a.proxy(c._handler,c));this.updateCache();this.rows=b.menu.find(".ui-multiselect-checkboxes li:not(.ui-multiselect-optgroup-label)");b._toggleChecked=function(h,j){var i=(j&&j.length)?j:this.labels.find("input"),g=c.instance._isOpen?":disabled, :hidden":":disabled";i.not(g).attr("checked",(h?"checked":""));this.update();this.optiontags.not("disabled").attr("selected",(h?"selected":""))}},_handler:function(g){var d=a.trim(this.input[0].value.toLowerCase()),f=this.rows,b=this.inputs,c=this.cache;if(!d){f.show()}else{f.hide();this._trigger("filter",g,a.map(c,function(e,h){if(e.indexOf(d)!==-1){f.eq(h).show();return b.get(h)}return null}))}},updateCache:function(){var b=this.instance.optiontags[0].tagName==="OPTGROUP"||false;this.cache=this.instance.optiontags.map(function(){var d=a(this),c=d;if(a(d).val().length>0){if(b){c=d.children()}return c.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);
