/*
 * 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:"Alles auswählen",uncheckAllText:"Nichts auswählen",noneSelectedText:"Ausgewählte Optionen",selectedText:"# ausgewählt",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('<button type="button" class="ui-multiselect ui-widget ui-state-default ui-corner-all'); a.classes.length&&c.push(" "+a.classes);c.push('"');i.length&&c.push(' title="'+i+'"');c.push('><span class="ui-icon ui-icon-triangle-2-n-s"></span><span>'+a.noneSelectedText+"</span></button>");c.push('<div class="ui-multiselect-menu ui-widget ui-widget-content ui-corner-all '+(a.classes.length?a.classes:"")+'">');c.push('<div class="ui-widget-header ui-corner-all ui-multiselect-header ui-helper-clearfix">');c.push('<ul class="ui-helper-reset">');if(a.header===true&&a.multiple){c.push('<li><a class="ui-multiselect-all" href="#"><span class="ui-icon ui-icon-check"></span><span>'+ a.checkAllText+"</span></a></li>");c.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"&&c.push("<li>"+a.header+"</li>");c.push('<li class="ui-multiselect-close"><a href="#" class="ui-multiselect-close"><span class="ui-icon ui-icon-circle-close"></span></a></li>');c.push("</ul>");c.push("</div>");c.push('<ul class="ui-multiselect-checkboxes ui-helper-reset">');b.find("option").each(function(g){var h= e(this),l=h.html(),m=this.value;g=this.id||"ui-multiselect-"+f+"-option-"+g;var j=h.parent(),k=h.is(":disabled"),n=["ui-corner-all"];if(j.is("optgroup")){j=j.attr("label");if(e.inArray(j,d)===-1){c.push('<li class="ui-multiselect-optgroup-label"><a href="#">'+j+"</a></li>");d.push(j)}}if(m.length>0){k&&n.push("ui-state-disabled");c.push('<li class="'+(k?"ui-multiselect-disabled":"")+'">');c.push('<label for="'+g+'" class="'+n.join(" ")+'"><input id="'+g+'" name="multiselect_'+f+'" type="'+(a.multiple? "checkbox":"radio")+'" value="'+m+'" title="'+l+'"');h.is(":selected")&&c.push(' checked="checked"');k&&c.push(' disabled="disabled"');c.push(" />"+l+"</label></li>")}});c.push("</ul></div>");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<a.minWidth)b=a.minWidth;this.button.width(b)},_setMenuWidth:function(){var b=this.menu,a=this.button.outerWidth()-parseInt(b.css("padding-left"), 10)-parseInt(b.css("padding-right"),10)-parseInt(b.css("border-right-width"),10)-parseInt(b.css("border-left-width"),10);b.width(a||this.button.outerWidth())},_traverse:function(b,a){var c=e(a),d=b===38||b===37?true:false;c=c.parent()[d?"prevAll":"nextAll"]("li:not(.ui-multiselect-disabled, .ui-multiselect-optgroup-label)")[d?"last":"first"]();if(c.length)c.find("label").trigger("mouseover");else{c=this.menu.find("ul:last");this.menu.find("label")[d?"last":"first"]().trigger("mouseover");c.scrollTop(d? c.height():0)}},_toggleChecked:function(b,a){(a&&a.length?a:this.labels.find("input")).not(":disabled").attr("checked",b?"checked":"");this.update();this.element.find("option").not(":disabled").attr("selected",b?"selected":"")},_toggleDisabled:function(b){this.button.attr("disabled",b?"disabled":"")[b?"addClass":"removeClass"]("ui-state-disabled");this.menu.find("input").attr("disabled",b?"disabled":"").parent()[b?"addClass":"removeClass"]("ui-state-disabled");this.element.attr("disabled",b?"disabled": "")},update:function(){var b=this.options,a=this.labels.find("input"),c=a.filter(":checked"),d=c.length;b=d===0?b.noneSelectedText:e.isFunction(b.selectedText)?b.selectedText.call(this,d,a.length,c.get()):/\d/.test(b.selectedList)&&b.selectedList>0&&d<=b.selectedList?c.map(function(){return this.title}).get().join(", "):b.selectedText.replace("#",d).replace("#",a.length);this.buttonlabel.html(b);return b},open:function(){var b=this.button,a=this.menu,c=this.speed,d=this.options;if(!(this._trigger("beforeopen")=== false||b.hasClass("ui-state-disabled")||this._isOpen)){e(":ech-multiselect").not(this.element).each(function(){var h=e(this);h.multiselect("isOpen")&&h.multiselect("close")});var i=a.find("ul:last"),f=d.show,g=b.position();if(e.isArray(d.show)){f=d.show[0];c=d.show[1]||this.speed}i.scrollTop(0).height(d.height);if(e.ui.position&&!e.isEmptyObject(d.position)){d.position.of=d.position.of||b;a.show().position(d.position).hide().show(f,c)}else a.css({top:g.top+b.outerHeight(),left:g.left}).show(f,c); this.labels.eq(0).trigger("mouseover").trigger("mouseenter").find("input").trigger("focus");b.addClass("ui-state-active");this._isOpen=true;this._trigger("open")}},close:function(){if(this._trigger("beforeclose")!==false){var b=this.options,a=b.hide,c=this.speed;if(e.isArray(b.hide)){a=b.hide[0];c=b.hide[1]||this.speed}this.menu.hide(a,c);this.button.removeClass("ui-state-active").trigger("blur").trigger("mouseleave");this._trigger("close");this._isOpen=false}},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(){e.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(b,a){var c= this.menu;switch(b){case "header":c.find("div.ui-multiselect-header")[a?"show":"hide"]();break;case "checkAllText":c.find("a.ui-multiselect-all span").eq(-1).text(a);break;case "uncheckAllText":c.find("a.ui-multiselect-none span").eq(-1).text(a);break;case "height":c.find("ul:last").height(parseInt(a,10));break;case "minWidth":this.options[b]=parseInt(a,10);this._setButtonWidth();this._setMenuWidth();break;case "selectedText":case "selectedList":case "noneSelectedText":this.options[b]=a;this.update(); break;case "classes":c.add(this.button).removeClass(this.options.classes).addClass(a)}e.Widget.prototype._setOption.apply(this,arguments)}})})(jQuery);
