/* * jQuery MultiSelect UI Widget 1.6 * Copyright (c) 2010 Eric Hynds * * http://www.erichynds.com/jquery/jquery-ui-multiselect-widget/ * * Depends: * - jQuery 1.4.2+ * - jQuery UI 1.8 widget factory * * Optional: * - jQuery UI effects * - jQuery UI position utility * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * */ (function(e){var o=0;e.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 b=this.element,a=this.options,c=[],d=[],i=b.attr("title"),f=b.attr("id")||o++;this.speed=e.fx.speeds._default;this._isOpen=false;c.push('");c.push('
");this.button=b.hide().after(c.join("")).next("button");this.menu=this.button.next("div.ui-multiselect-menu");this.labels=this.menu.find("label");this.buttonlabel=this.button.find("span").eq(-1);this._setButtonWidth();this._setMenuWidth();this._bindEvents();this.button[0].defaultValue=this.update()},_init:function(){this.options.header|| this.menu.find("div.ui-multiselect-header").hide();this.options.autoOpen&&this.open();this.element.is(":disabled")&&this.disable()},_bindEvents:function(){function b(){a[a._isOpen?"close":"open"]();return false}var a=this,c=this.button;c.find("span").bind("click.multiselect",b);c.bind({click:b,keypress:function(d){switch(d.keyCode){case 27:case 38:case 37:a.close();break;case 39:case 40:a.open()}},mouseenter:function(){c.hasClass("ui-state-disabled")||e(this).addClass("ui-state-hover")},mouseleave:function(){e(this).removeClass("ui-state-hover")}, focus:function(){c.hasClass("ui-state-disabled")||e(this).addClass("ui-state-focus")},blur:function(){e(this).removeClass("ui-state-focus")}});this.menu.find("div.ui-multiselect-header a").bind("click.multiselect",function(d){e(this).hasClass("ui-multiselect-close")?a.close():a[e(this).hasClass("ui-multiselect-all")?"checkAll":"uncheckAll"]();d.preventDefault()}).end().find("li.ui-multiselect-optgroup-label a").bind("click.multiselect",function(d){var i=e(this),f=i.parent().nextUntil("li.ui-multiselect-optgroup-label").find("input:visible"); a._toggleChecked(f.filter(":checked").length!==f.length,f);a._trigger("optgrouptoggle",d,{inputs:f.get(),label:i.parent().text(),checked:f[0].checked});d.preventDefault()}).end().delegate("label","mouseenter",function(){if(!e(this).hasClass("ui-state-disabled")){a.labels.removeClass("ui-state-hover");e(this).addClass("ui-state-hover").find("input").focus()}}).delegate("label","keydown",function(d){switch(d.keyCode){case 9:case 27:a.close();break;case 38:case 40:case 37:case 39:a._traverse(d.keyCode, this);d.preventDefault();break;case 13:d.preventDefault();e(this).find("input").trigger("click")}}).delegate(":checkbox, :radio","click",function(d){var i=e(this),f=this.value,g=this.checked,h=a.element.find("option");if(i.is(":disabled")||a._trigger("click",d,{value:f,text:this.title,checked:g})===false)d.preventDefault();else{a.options.multiple||h.not(function(){return this.value===f}).removeAttr("selected");h.filter(function(){return this.value===f}).attr("selected",g?"selected":"");a.update(!d.originalEvent? g?-1:1:0)}});e(document).bind("click.multiselect",function(d){d=e(d.target);a._isOpen&&!d.closest("div.ui-multiselect-menu").length&&!d.is("button.ui-multiselect")&&a.close()});this.element.closest("form").bind("reset",function(){setTimeout(e.proxy(a,"update"),1)})},_setButtonWidth:function(){var b=this.element.outerWidth(),a=this.options;if(/\d/.test(a.minWidth)&&b