(function(n){typeof define=="function"&&define.amd?define(["jquery"],n):typeof module=="object"&&module.exports?module.exports=n(require("jquery")):n(jQuery)})(function(n){"use strict";function t(t,i){var r=this,f=t.attr("name")||i.name||"",e=t.parent().attr("style")||"",u;t.parent().hide();u=t.css("width");t.parent().show().attr("style",e);u=="0px"&&(u=t.outerWidth()+20);this.$el=t.hide();this.options=i;this.$parent=n("<div"+n.map(["class","title"],function(n){var t=r.$el.attr(n)||"";return t=(n==="class"?"ms-parent"+(t?" ":""):"")+t,t?" "+n+'="'+t+'"':""}).join("")+" />");this.$choice=n('<button type="button" class="ms-choice"><span class="placeholder">'+i.placeholder+"<\/span><div><\/div><\/button>");this.$drop=n('<div class="ms-drop '+i.position+'"><\/div>');this.$el.after(this.$parent);this.$parent.append(this.$choice);this.$parent.append(this.$drop);this.$el.prop("disabled")&&this.$choice.addClass("disabled");this.$parent.css("width",i.width||u);this.options.keepOpen||n("body").click(function(t){n(t.target)[0]!==r.$choice[0]&&n(t.target).parents(".ms-choice")[0]!==r.$choice[0]&&(n(t.target)[0]===r.$drop[0]||n(t.target).parents(".ms-drop")[0]!==r.$drop[0])&&r.options.isOpen&&r.close()});this.selectAllName='data-ident="selectAll'+f+'"';this.selectGroupName='data-ident="selectGroup'+f+'"';this.selectItemName='data-ident="selectItem'+f+'"'}t.prototype={constructor:t,init:function(){var i=this,t;this.options.filter&&this.$drop.append('<div class="ms-search"><input type="text" autocomplete="off" autocorrect="off" autocapitilize="off" spellcheck="false"><\/div>');t=n("<ul><\/ul>");this.options.selectAll&&!this.options.single&&t.append('<li class="ms-select-all"><label><input type="checkbox" '+this.selectAllName+" /> "+this.options.selectAllDelimiter[0]+this.options.selectAllText+this.options.selectAllDelimiter[1]+"<\/label><\/li>");n.each(this.$el.children(),function(n,r){t.append(i.optionToHtml(n,r))});t.append('<li class="ms-no-results">'+this.options.noMatchesFound+"<\/li>");this.$drop.append(t);this.$drop.find("ul").css("max-height",this.options.maxHeight+"px");this.$drop.find(".multiple").css("width",this.options.multipleWidth+"px");this.$searchInput=this.$drop.find(".ms-search input");this.$selectAll=this.$drop.find("input["+this.selectAllName+"]");this.$selectGroups=this.$drop.find("input["+this.selectGroupName+"]");this.$selectItems=this.$drop.find("input["+this.selectItemName+"]:enabled");this.$disableItems=this.$drop.find("input["+this.selectItemName+"]:disabled");this.$noResults=this.$drop.find(".ms-no-results");this.events();this.updateSelectAll(!0);this.update(!0);this.options.isOpen&&this.open()},optionToHtml:function(t,i,r,u){var c=this,f=n(i),p=this.options.multiple,l=n.map(["class","title"],function(n){var i=n==="class"&&p,t=f.attr(n)||"";return i||t?" "+n+'="'+(i?"multiple"+(t?" ":""):"")+t+'"':""}).join(""),e,w=this.options.single?"radio":"checkbox",h,y,r;if(f.is("option")){var s=f.val(),a=c.options.textTemplate(f),b=f.prop("selected"),v=this.options.styler(s)?' style="'+this.options.styler(s)+'"':"",o;return e=u||f.prop("disabled"),this.options.blockSeparator>""&&this.options.blockSeparator==f.val()?o=n("<li"+l+v+">",'<label class="'+this.options.blockSeparator+(e?"disabled":"")+'">',"<\/label>","<\/li>"):(o=n("<li"+l+v+"><label"+(e?' class="disabled"':"")+'><input type="'+w+'" '+this.selectItemName+(b?' checked="checked"':"")+(e?' disabled="disabled"':"")+(r?' data-group="'+r+'"':"")+"/> <\/label><\/li>"),o.find("input").val(s)),o.find("label").append(document.createTextNode(a)),o}if(!r&&f.is("optgroup"))return h="group_"+t,y=f.attr("label"),e=f.prop("disabled"),r=n("<div/>"),r.append('<li class="group"><label class="optgroup'+(e?" disabled":"")+'" data-group="'+h+'">'+(this.options.hideOptgroupCheckboxes?"":'<input type="checkbox" '+this.selectGroupName+(e?' disabled="disabled"':"")+" /> ")+y+"<\/label><\/li>"),o.find("label").append(document.createTextNode(a)),n.each(f.children(),function(n,t){r.append(c.optionToHtml(n,t,h,e))}),r.html()},events:function(){function i(n){n.preventDefault();t[t.options.isOpen?"close":"open"]()}var t=this,r=this.$el.parent().closest("label")[0]||n("label[for="+this.$el.attr("id").split(":").join("\\:")+"]")[0];if(r)n(r).off("click").on("click",function(n){n.target.nodeName.toLowerCase()==="label"&&n.target===this&&(i(n),t.options.filter&&t.options.isOpen||t.focus(),n.stopPropagation())});this.$choice.off("click").on("click",i).off("focus").on("focus",this.options.onFocus).off("blur").on("blur",this.options.onBlur);this.$parent.off("keydown").on("keydown",function(n){switch(n.which){case 27:t.close();t.$choice.focus()}});this.$searchInput.off("keydown").on("keydown",function(n){n.keyCode===9&&n.shiftKey&&t.close()}).off("keyup").on("keyup",function(n){if(t.options.filterAcceptOnEnter&&(n.which===13||n.which==32)&&t.$searchInput.val()){t.$selectAll.click();t.close();t.focus();return}t.filter()});this.$selectAll.off("click").on("click",function(){var i=n(this).prop("checked"),r=t.$selectItems.filter(":visible");r.length===t.$selectItems.length?t[i?"checkAll":"uncheckAll"]():(t.$selectGroups.prop("checked",i),r.prop("checked",i),t.options[i?"onCheckAll":"onUncheckAll"](),t.update())});this.$selectGroups.off("click").on("click",function(){var u=n(this).parent().attr("data-group"),f=t.$selectItems.filter(":visible"),i=f.filter('[data-group="'+u+'"]'),r=i.length!==i.filter(":checked").length;i.prop("checked",r);t.updateSelectAll();t.update();t.options.onOptgroupClick({label:n(this).parent().text(),checked:r,children:i.get()})});this.$selectItems.off("click").on("click",function(){t.updateSelectAll();t.update();t.updateOptGroupSelect();t.options.onClick({label:n(this).parent().text(),value:n(this).val(),checked:n(this).prop("checked")});if(t.options.single&&t.options.isOpen&&!t.options.keepOpen&&t.close(),t.options.single){var i=n(this).val();t.$selectItems.filter(function(){return n(this).val()==i?!1:!0}).each(function(){n(this).prop("checked",!1)});t.update()}})},open:function(){if(!this.$choice.hasClass("disabled")){if(this.options.isOpen=!0,this.$choice.find(">div").addClass("open"),this.$drop.show(),this.$selectAll.parent().show(),this.$noResults.hide(),this.$el.children().length===0&&(this.$selectAll.parent().hide(),this.$noResults.show()),this.options.container){var t=this.$drop.offset();this.$drop.appendTo(n(this.options.container));this.$drop.offset({top:t.top,left:t.left})}this.options.filter&&(this.$searchInput.val(""),this.$searchInput.focus(),this.filter());this.options.onOpen()}},close:function(){this.options.isOpen=!1;this.$choice.find(">div").removeClass("open");this.$drop.hide();this.options.container&&(this.$parent.append(this.$drop),this.$drop.css({top:"auto",left:"auto"}));this.options.onClose()},update:function(t){var i=this.getSelects(),r=this.$choice.find(">span");i.length===0?r.addClass("placeholder").html(this.options.placeholder):this.options.countSelected&&i.length<this.options.minimumCountSelected?r.removeClass("placeholder").text((this.options.displayValues?i:this.getSelects("text")).join(this.options.delimiter)):this.options.allSelected&&i.length===this.$selectItems.length+this.$disableItems.length?r.removeClass("placeholder").html(this.options.allSelected):(this.options.countSelected||this.options.etcaetera)&&i.length>this.options.minimumCountSelected?this.options.etcaetera?r.removeClass("placeholder").text((this.options.displayValues?i:this.getSelects("text").slice(0,this.options.minimumCountSelected)).join(this.options.delimiter)+"..."):r.removeClass("placeholder").html(this.options.countSelected.replace("#",i.length).replace("%",this.$selectItems.length+this.$disableItems.length)):r.removeClass("placeholder").text((this.options.displayValues?i:this.getSelects("text")).join(this.options.delimiter));this.options.addTitle&&r.prop("title",this.getSelects("text"));this.$el.val(this.getSelects());this.$drop.find("li").removeClass("selected");this.$drop.find("input["+this.selectItemName+"]:checked").each(function(){n(this).parents("li").first().addClass("selected")});t||this.$el.trigger("change")},updateSelectAll:function(n){var t=this.$selectItems;n||(t=t.filter(":visible"));this.$selectAll.prop("checked",t.length&&t.length===t.filter(":checked").length);this.$selectAll.prop("checked")&&this.options.onCheckAll()},updateOptGroupSelect:function(){var t=this.$selectItems.filter(":visible");n.each(this.$selectGroups,function(i,r){var f=n(r).parent().attr("data-group"),u=t.filter('[data-group="'+f+'"]');n(r).prop("checked",u.length&&u.length===u.filter(":checked").length)})},getSelects:function(t){var r=this,i=[],u=[];return this.$drop.find("input["+this.selectItemName+"]:checked").each(function(){i.push(n(this).parents("li").first().text());u.push(n(this).val())}),t==="text"&&this.$selectGroups&&this.$selectGroups.length&&(i=[],this.$selectGroups.each(function(){var t=[],o=n.trim(n(this).parent().text()),s=n(this).parent().data("group"),e=r.$drop.find("["+r.selectItemName+'][data-group="'+s+'"]'),u=e.filter(":checked"),f;u.length!==0&&(t.push("["),t.push(o),e.length>u.length&&(f=[],u.each(function(){f.push(n(this).parent().text())}),t.push(": "+f.join(", "))),t.push("]"),i.push(t.join("")))})),t==="text"?i:u},setSelects:function(t){var i=this;this.$selectItems.prop("checked",!1);n.each(t,function(n,t){i.$selectItems.filter('[value="'+t+'"]').prop("checked",!0)});this.$selectAll.prop("checked",this.$selectItems.length===this.$selectItems.filter(":checked").length);this.update()},enable:function(){this.$choice.removeClass("disabled")},disable:function(){this.$choice.addClass("disabled")},checkAll:function(){this.$selectItems.prop("checked",!0);this.$selectGroups.prop("checked",!0);this.$selectAll.prop("checked",!0);this.update();this.options.onCheckAll()},uncheckAll:function(){this.$selectItems.prop("checked",!1);this.$selectGroups.prop("checked",!1);this.$selectAll.prop("checked",!1);this.update();this.options.onUncheckAll()},focus:function(){this.$choice.focus();this.options.onFocus()},blur:function(){this.$choice.blur();this.options.onBlur()},refresh:function(){this.init()},refreshAll:function(){this.$drop.html("");this.init()},filter:function(){var i=this,t=n.trim(this.$searchInput.val()).toLowerCase();t.length===0?(this.$selectItems.parent().show(),this.$disableItems.parent().show(),this.$selectGroups.parent().show()):(this.$selectItems.each(function(){var i=n(this).parent();i[i.text().toLowerCase().indexOf(t)<0?"hide":"show"]()}),this.$disableItems.parent().hide(),this.$selectGroups.each(function(){var t=n(this).parent(),r=t.attr("data-group"),u=i.$selectItems.filter(":visible");t[u.filter('[data-group="'+r+'"]').length===0?"hide":"show"]()}),this.$selectItems.filter(":visible").length?(this.$selectAll.parent().show(),this.$noResults.hide()):(this.$selectAll.parent().hide(),this.$noResults.show()));this.updateOptGroupSelect();this.updateSelectAll()}};n.fn.multipleSelect=function(){var i=arguments[0],r=arguments,u,f=["getSelects","setSelects","enable","disable","checkAll","uncheckAll","focus","blur","refresh","refreshAll","close"];return this.each(function(){var o=n(this),e=o.data("multipleSelect"),s=n.extend({},n.fn.multipleSelect.defaults,o.data(),typeof i=="object"&&i);if(e||(e=new t(o,s),o.data("multipleSelect",e)),typeof i=="string"){if(n.inArray(i,f)<0)throw"Unknown method: "+i;u=e[i](r[1])}else e.init(),r[1]&&(u=e[r[1]].apply(e,[].slice.call(r,2)))}),u?u:this};n.fn.multipleSelect.defaults={name:"",isOpen:!1,placeholder:"",selectAll:!0,selectAllText:"Select all",selectAllDelimiter:["[","]"],allSelected:"All selected",minimumCountSelected:3,countSelected:"# of % selected",noMatchesFound:"No matches found",multiple:!1,multipleWidth:80,single:!1,filter:!1,width:undefined,maxHeight:250,container:null,position:"bottom",keepOpen:!1,blockSeparator:"",displayValues:!1,delimiter:", ",addTitle:!1,styler:function(){return!1},textTemplate:function(n){return n.text()},onOpen:function(){return!1},onClose:function(){return!1},onCheckAll:function(){return!1},onUncheckAll:function(){return!1},onFocus:function(){return!1},onBlur:function(){return!1},onOptgroupClick:function(){return!1},onClick:function(){return!1}}})