/*
 * jQuery MultiSelect UI Widget 1.8
 * 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(a,b){var c=0;a.widget("ech.multiselect",{options:{header:true,height:175,minWidth:225,classes:"",checkAllText:"Seleccionar todo",uncheckAllText:"Deseleccionar todo",noneSelectedText:"Seleccionar",selectedText:"# seleccionados",selectedList:0,show:"",hide:"",autoOpen:false,multiple:true,position:{}},_create:function(){var b=this.element.hide(),c=this.options;this.element.attr("name_",this.element.attr("name"));this.element.removeAttr("name");this.speed=a.fx.speeds._default;this._isOpen=false;var d=(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(c.classes).attr({title:b.attr("title"),"aria-haspopup":true}).insertAfter(b),e=(this.buttonlabel=a("<span />")).html(c.noneSelectedText).appendTo(d),f=(this.menu=a("<div />")).addClass("ui-multiselect-menu ui-widget ui-widget-content ui-corner-all").addClass(c.classes).insertAfter(d),g=(this.header=a("<div />")).addClass("ui-widget-header ui-corner-all ui-multiselect-header ui-helper-clearfix").appendTo(f),h=(this.headerLinkContainer=a("<ul />")).addClass("ui-helper-reset").html(function(){if(c.header===true){return'<li><a class="ui-multiselect-all" href="#"><span class="ui-icon ui-icon-check"></span><span>'+c.checkAllText+'</span></a></li><li><a class="ui-multiselect-none" href="#"><span class="ui-icon ui-icon-closethick"></span><span>'+c.uncheckAllText+"</span></a></li>"}else if(typeof c.header==="string"){return"<li>"+c.header+"</li>"}else{return""}}).append('<li class="ui-multiselect-close"><a href="#" class="ui-multiselect-close"><span class="ui-icon ui-icon-circle-close"></span></a></li>').appendTo(g),i=(this.checkboxContainer=a("<ul />")).addClass("ui-multiselect-checkboxes ui-helper-reset").appendTo(f);this._bindEvents();this.refresh(true);if(!c.multiple){f.addClass("ui-multiselect-single")}},_init:function(){if(this.options.header===false){this.header.hide()}if(!this.options.multiple){this.headerLinkContainer.find(".ui-multiselect-all, .ui-multiselect-none").hide()}if(this.options.autoOpen){this.open()}if(this.element.is(":disabled")){this.disable()}},contener_div:function(){return this.checkboxContainer},refresh:function(d){var e=this.element,f=this.options,g=this.menu,h=this.button,i=this.checkboxContainer,j=[],k=e.attr("id")||c++;i.empty();this.element.find("option").each(function(c){var d=a(this),e=d.html(),g=d.attr("style_"),h=this.value,l=this.id||"ui-multiselect-"+k+"-option-"+c,m=d.parent(),n=d.is(":disabled"),p=["ui-corner-all"],q,r,s;if(m.is("optgroup")){var t=m.attr("label");if(a.inArray(t,j)===-1){a('<li><a href="#">'+t+"</a></li>").addClass("ui-multiselect-optgroup-label").appendTo(i);j.push(t)}}if(h.length>0||true){if(n){p.push("ui-state-disabled")}s=a("<li />").addClass(n?"ui-multiselect-disabled":"").appendTo(i);q=a("<label />").attr("for",l).addClass(p.join(" ")).appendTo(s);plus_name="";if(d.parent().attr("arreglo")){plus_name="["+c+"][default]";a('<input type="hidden" name="'+(d.parent().attr("name_")==b?"multiselect_"+k:d.parent().attr("name_"))+"["+c+"][valor]"+'" >').val(h).appendTo(q);a('<input type="hidden" name="'+(d.parent().attr("name_")==b?"multiselect_"+k:d.parent().attr("name_"))+"["+c+"][titulo]"+'" >').val(e).appendTo(q)}a('<input type="'+(f.multiple?"checkbox":"radio")+'" '+(this.selected?'checked="checked"':"")+' name="'+(d.parent().attr("name_")==b?"multiselect_"+k:d.parent().attr("name_"))+plus_name+'" />').attr({id:l,checked:this.selected,title:e,disabled:n,"aria-disabled":n,"aria-selected":this.selected,style:g}).val(h).appendTo(q).after("<span>"+e+"</span>")}});this.labels=g.find("label");this._setButtonWidth();this._setMenuWidth();h[0].defaultValue=this.update();if(!d){this._trigger("refresh")}},update:function(){var b=this.options,c=this.labels.find("input"),d=c.filter(":checked"),e=d.length,f;if(e===0){f=b.noneSelectedText}else{if(a.isFunction(b.selectedText)){f=b.selectedText.call(this,e,c.length,d.get())}else if(/\d/.test(b.selectedList)&&b.selectedList>0&&e<=b.selectedList){f=d.map(function(){return this.title}).get().join(", ")}else{f=b.selectedText.replace("#",e).replace("#",c.length)}}this.buttonlabel.html(f);return f},_bindEvents:function(){function d(){b[b._isOpen?"close":"open"]();return false}var b=this,c=this.button;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();break}},mouseenter:function(){if(!c.hasClass("ui-state-disabled")){a(this).addClass("ui-state-hover")}},mouseleave:function(){a(this).removeClass("ui-state-hover")},focus:function(){if(!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(c){var d=a(this),e=d.parent().nextUntil("li.ui-multiselect-optgroup-label").find("input:visible:not(:disabled)");b._toggleChecked(e.filter(":checked").length!==e.length,e);b._trigger("optgrouptoggle",c,{inputs:e.get(),label:d.parent().text(),checked:e[0].checked});c.preventDefault()}).delegate("label","mouseenter",function(){if(!a(this).hasClass("ui-state-disabled")){b.labels.removeClass("ui-state-hover");a(this).addClass("ui-state-hover")}}).delegate("label","keydown",function(c){switch(c.which){case 9:case 27:b.close();break;case 38:case 40:case 37:case 39:b._traverse(c.which,this);c.preventDefault();break;case 13:c.preventDefault();a(this).find("input").trigger("click");break}}).delegate('input[type="checkbox"], input[type="radio"]',"click",function(c){var d=a(this),e=this.value,f=this.checked,g=b.element.find("option");if(d.is(":disabled")||b._trigger("click",c,{value:e,text:this.title,checked:f})===false){c.preventDefault();return}if(!b.options.multiple){g.not(function(){return this.value===e}).removeAttr("selected");b.labels.removeClass("ui-state-active");d.closest("label").toggleClass("ui-state-active",f)}d.attr("aria-selected",f);g.filter(function(){return this.value===e}).attr("selected",f?"selected":"");setTimeout(a.proxy(b.update,b),10)});a(document).bind("click.multiselect",function(c){var d=a(c.target);if(b._isOpen&&!a.contains(b.menu[0],c.target)&&!d.is("button.ui-multiselect")){b.close()}});a(this.element[0].form).bind("reset",function(){setTimeout(function(){b.update()},10)})},_setButtonWidth:function(){var a=this.element.outerWidth(),b=this.options;if(/\d/.test(b.minWidth)&&a<b.minWidth){a=b.minWidth}this.button.width(a)},_setMenuWidth:function(){var a=this.menu,b=this.button.outerWidth()-parseInt(a.css("padding-left"),10)-parseInt(a.css("padding-right"),10)-parseInt(a.css("border-right-width"),10)-parseInt(a.css("border-left-width"),10);a.width(b||this.button.outerWidth())},_traverse:function(b,c){var d=a(c),e=b===38||b===37,f=d.parent()[e?"prevAll":"nextAll"]("li:not(.ui-multiselect-disabled, .ui-multiselect-optgroup-label)")[e?"last":"first"]();if(!f.length){var g=this.menu.find("ul:last");this.menu.find("label")[e?"last":"first"]().trigger("mouseover");g.scrollTop(e?g.height():0)}else{f.find("label").trigger("mouseover")}},_toggleChecked:function(b,c){var d=c&&c.length?c:this.labels.find("input");d.not(":disabled").attr({checked:b,"aria-selected":b});this.update();var e=d.map(function(){return this.value}).get();this.element.find("option").filter(function(){return!this.disabled&&a.inArray(this.value,e)>-1}).attr({selected:b,"aria-selected":b})},_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(b){var c=this,d=this.button,e=this.menu,f=this.speed,g=this.options;if(this._trigger("beforeopen")===false||d.hasClass("ui-state-disabled")||this._isOpen){return}if(!c.options.multiple){a("input:checked",e).closest("label").toggleClass("ui-state-active",true)}a(":ech-multiselect").not(this.element).each(function(){var b=a(this);if(b.multiselect("isOpen")){b.multiselect("close")}});var h=e.find("ul:last"),i=g.show,j=d.position();if(a.isArray(g.show)){i=g.show[0];f=g.show[1]||c.speed}h.scrollTop(0).height(g.height);if(a.ui.position&&!a.isEmptyObject(g.position)){g.position.of=g.position.of||d;e.show().position(g.position).hide().show(i,f)}else{e.css({top:j.top+d.outerHeight(),left:j.left}).show(i,f)}this.labels.eq(0).trigger("mouseover").trigger("mouseenter");d.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._trigger("close");this._isOpen=false},enable:function(){this._toggleDisabled(false)},disable:function(){this._toggleDisabled(true)},checkAll:function(a){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(b,c){var d=this.menu;switch(b){case"header":d.find("div.ui-multiselect-header")[c?"show":"hide"]();break;case"checkAllText":d.find("a.ui-multiselect-all span").eq(-1).text(c);break;case"uncheckAllText":d.find("a.ui-multiselect-none span").eq(-1).text(c);break;case"height":d.find("ul:last").height(parseInt(c,10));break;case"minWidth":this.options[b]=parseInt(c,10);this._setButtonWidth();this._setMenuWidth();break;case"selectedText":case"selectedList":case"noneSelectedText":this.options[b]=c;this.update();break;case"classes":d.add(this.button).removeClass(this.options.classes).addClass(c);break}a.Widget.prototype._setOption.apply(this,arguments)}})})(jQuery)
