/*
 * jQuery MultiSelect UI Widget 1.3
 * 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 and effects if you want to use them)
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
*/
(function(d){var n=0;d.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 c=this.element,a=this.options,b=[],e=[],f=c.attr("title");id=c.id||n++;name=c.attr("name");this.speed=400;this._isOpen=false;this.optiontags=c.children();b.push('<button type="button" class="ui-multiselect ui-widget ui-state-default ui-corner-all"'); f.length&&b.push(' title="'+f+'"');b.push('><span class="ui-icon ui-icon-triangle-2-n-s"></span>'+a.noneSelectedText+"</button>");b.push('<div class="ui-multiselect-menu ui-widget ui-widget-content ui-corner-all">');b.push('<div class="ui-widget-header ui-corner-all ui-multiselect-header ui-helper-clearfix">');b.push('<ul class="ui-helper-reset">');if(a.header===true){b.push('<li><a class="ui-multiselect-all" href=""><span class="ui-icon ui-icon-check"></span><span>'+a.checkAllText+"</span></a></li>"); b.push('<li><a class="ui-multiselect-none" href=""><span class="ui-icon ui-icon-closethick"></span><span>'+a.uncheckAllText+"</span></a></li>")}else typeof a.header==="string"&&b.push("<li>"+a.header+"</li>");b.push('<li class="ui-multiselect-close"><a href="" class="ui-multiselect-close"><span class="ui-icon ui-icon-circle-close"></span></a></li>');b.push("</ul>");b.push("</div>");b.push('<ul class="ui-multiselect-checkboxes ui-helper-reset">');c.find("option").each(function(g){var i=d(this),k=i.html(), l=this.value;g=this.id||"ui-multiselect-"+id+"-option-"+g;var h=i.parent(),j=i.is(":disabled"),m=["ui-corner-all"];if(h.is("optgroup")){h=h.attr("label");if(d.inArray(h,e)===-1){b.push('<li class="ui-multiselect-optgroup-label"><a href="#">'+h+"</a></li>");e.push(h)}}if(l.length>0){j&&m.push("ui-state-disabled");b.push('<li class="'+(j?"ui-multiselect-disabled":"")+'">');b.push('<label for="'+g+'" class="'+m.join(" ")+'"><input id="'+g+'" type="'+(a.multiple?"checkbox":"radio")+'" name="'+name+'" value="'+ l+'" title="'+k+'"');i.is(":selected")&&b.push(' checked="checked"');j&&b.push(' disabled="disabled"');b.push(" />"+k+"</label></li>")}});b.push("</ul></div>");this.button=c.children().detach().end().after(b.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(){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 c(){a[a._isOpen?"close":"open"]();return false}var a=this;this.button.find("span").bind("click",c);this.button.bind({click:c,keypress:function(b){switch(b.keyCode){case 27:case 38:case 37:a.close();break;case 39:case 40:a.open();break}},mouseenter:function(){a.button.hasClass("ui-state-disabled")||d(this).addClass("ui-state-hover")},mouseleave:function(){d(this).removeClass("ui-state-hover")}, focus:function(){a.button.hasClass("ui-state-disabled")||d(this).addClass("ui-state-focus")},blur:function(){d(this).removeClass("ui-state-focus")}});this.menu.find("div.ui-multiselect-header a").bind("click",function(b){d(this).hasClass("ui-multiselect-close")?a.close():a[d(this).hasClass("ui-multiselect-all")?"checkAll":"uncheckAll"]();b.preventDefault()}).end().find("li.ui-multiselect-optgroup-label a").bind("click",function(b){var e=d(this),f=e.parent().nextUntil("li.ui-multiselect-optgroup-label").find("input"); a._toggleChecked(f.filter(":checked").length!==f.length,f);a._trigger("optgrouptoggle",b,{inputs:f.get(),label:e.parent().text(),checked:f[0].checked});b.preventDefault()}).end().delegate("label","mouseenter",function(){if(!d(this).hasClass("ui-state-disabled")){a.labels.removeClass("ui-state-hover");d(this).addClass("ui-state-hover").find("input").focus()}}).delegate("label","keydown",function(b){switch(b.keyCode){case 9:case 27:a.close();break;case 38:case 40:case 37:case 39:a._traverse(b.keyCode, this);break;case 13:b.preventDefault();d(this).find("input").trigger("click");break}}).delegate("input","click",function(b){var e=this.value,f=this.checked;if(d(this).is(":disabled")||a._trigger("click",b,{value:this.value,text:this.title,checked:f})===false)b.preventDefault();else{a.optiontags.filter(function(){return this.value===e}).attr("selected",f?"selected":"");a.update()}});d(document).bind("click",function(b){b=d(b.target);a._isOpen&&!b.closest("div.ui-multiselect-menu").length&&!b.is("button.ui-multiselect")&& a.close()})},_setButtonWidth:function(){var c=this.element.outerWidth(),a=this.options;if(/\d/.test(a.minWidth)&&c<a.minWidth)c=a.minWidth;this.button.width(c)},_setMenuWidth:function(){var c=this.menu,a=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(a||this.button.outerWidth())},_traverse:function(c,a){var b=d(a),e=c===38||c===37?true:false;b=b.parent()[e?"prevAll": "nextAll"]("li:not(.ui-multiselect-disabled, .ui-multiselect-optgroup-label)")[e?"last":"first"]();if(b.length)b.find("label").trigger("mouseover");else{b=this.menu.find("ul:last");this.menu.find("label")[e?"last":"first"]().trigger("mouseover");b.scrollTop(e?b.height():0)}},_toggleChecked:function(c,a){(a&&a.length?a:this.labels.find("input")).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 c=this.options,a=this.labels.find("input"),b=a.filter(":checked"),e=b.length;c=e===0?c.noneSelectedText:d.isFunction(c.selectedText)?c.selectedText.call(this,e,a.length,b.get()):/\d/.test(c.selectedList)&&c.selectedList>0&&e<=c.selectedList?b.map(function(){return this.title}).get().join(", "): c.selectedText.replace("#",e).replace("#",a.length);return this.button.contents()[1].nodeValue=c},open:function(){if(!(this._trigger("beforeopen")===false||this.button.hasClass("ui-state-disabled")||this._isOpen)){d(":ech-multiselect").not(this.element).each(function(){var g=d(this);g.multiselect("isOpen")&&g.multiselect("close")});var c=this.menu.find("ul:last"),a=this.options,b=a.show,e=this.speed,f=this.button.position();this.button.addClass("ui-state-active");this.labels.first().trigger("mouseover").trigger("mouseenter").find("input").trigger("focus"); if(d.isArray(a.show)){b=a.show[0];e=a.show[1]||this.speed}this.menu.css({top:f.top+this.button.outerHeight(),left:f.left}).show(b,e);this._isOpen=true;c.scrollTop(0).height(a.height);this._trigger("open")}},close:function(){if(this._trigger("beforeclose")!==false){var c=this.options,a=c.hide,b=this.speed;if(d.isArray(c.hide)){a=c.hide[0];b=c.hide[1]||this.speed}this.menu.hide(a,b);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(){d.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,a){this.options[c]=a;switch(c){case "header":this.menu.find("div.ui-multiselect-header")[a?"show":"hide"]();break;case "checkAllText":this.menu.find("a.ui-multiselect-all span").eq(-1).text(a);break;case "uncheckAllText":this.menu.find("a.ui-multiselect-none span").eq(-1).text(a);break;case "height":this.menu.find("ul:last").height(parseInt(a,10));break;case "minWidth":this.options[c]=parseInt(a,10);this._setButtonWidth();this._setMenuWidth(); break;case "selectedText":case "selectedList":case "noneSelectedText":this.update();break}}})})(jQuery);

