(function($){var defaults={columns:1,search:false,searchOptions:{showOptGroups:false,onSearch:function(element){}},texts:{placeholder:'Select options',search:'Search',selectedOptions:' selected',selectAll:'Select all',noneSelected:'None Selected'},selectAll:false,selectGroup:false,minHeight:200,maxHeight:null,showCheckbox:true,jqActualOpts:{},optionAttributes:[],onLoad:function(element){},onOptionClick:function(element,option){},onControlClose:function(element){},maxWidth:null,minSelect:false,maxSelect:false,};var msCounter=1;if(typeof Array.prototype.map!=='function'){Array.prototype.map=function(callback,thisArg){if(typeof thisArg==='undefined'){thisArg=this;} return $.isArray(thisArg)?$.map(thisArg,callback):[];};} if(typeof String.prototype.trim!=='function'){String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,'');}} function MultiSelect(element,options) {this.element=element;this.options=$.extend(true,{},defaults,options);if('placeholder'in this.options){this.options.texts.placeholder=this.options.placeholder;delete this.options.placeholder;} if('default'in this.options.searchOptions){this.options.texts.search=this.options.searchOptions['default'];delete this.options.searchOptions['default'];} this.load();} function customHasOwnProperty(obj,key){return obj.hasOwnProperty&&obj.hasOwnProperty(key)||Object.prototype.hasOwnProperty.call(obj,key);} MultiSelect.prototype={load:function(){var instance=this;if((instance.element.nodeName!='SELECT')||$(instance.element).hasClass('jqmsLoaded')){return true;} $(instance.element).addClass('jqmsLoaded').data('plugin_multiselect-instance',instance);$(instance.element).after('
');var placeholder=$(instance.element).next('.ms-options-wrap').find('> button:first-child');var optionsWrap=$(instance.element).next('.ms-options-wrap').find('> .ms-options');var optionsList=optionsWrap.find('> ul');var hasOptGroup=$(instance.element).find('optgroup').length?true:false;if(!instance.options.showCheckbox){optionsWrap.addClass('hide-checkbox');} var maxWidth=null;if(typeof instance.options.width=='number'){optionsWrap.parent().css('position','relative');maxWidth=instance.options.width;} else if(typeof instance.options.width=='string'){$(instance.options.width).css('position','relative');maxWidth='100%';} else{optionsWrap.parent().css('position','relative');} var maxHeight=($(window).height()-optionsWrap.offset().top+$(window).scrollTop()-20);if(instance.options.maxHeight){maxHeight=instance.options.maxHeight;} maxHeight=maxHeight$(this)[0].scrollHeight){e.preventDefault();this.scrollTop+=(delta<0?1:-1);}}});$(document).off('click.ms-hideopts').on('click.ms-hideopts',function(event){if(!$(event.target).closest('.ms-options-wrap').length){if($('.ms-options-wrap > .ms-options:visible').length){$('.ms-options-wrap > .ms-options:visible').each(function(){$(this).hide();var thisInst=$(this).parent().prev('.jqmsLoaded').data('plugin_multiselect-instance');if(typeof thisInst.options.onControlClose=='function'){thisInst.options.onControlClose(thisInst.element);}});}}});placeholder.bind('mousedown',function(event){if(event.which!=1){return true;} $('.ms-options-wrap > .ms-options:visible').each(function(){if($(this).parent().prev()[0]!=optionsWrap.parent().prev()[0]){$(this).hide();}});optionsWrap.toggle();if(optionsWrap.is(':visible')){optionsWrap.css('maxHeight','');var maxHeight=($(window).height()-optionsWrap.offset().top+$(window).scrollTop()-20);if(instance.options.maxHeight){maxHeight=instance.options.maxHeight;} maxHeight=maxHeight');var search=optionsWrap.find('.ms-search input');search.on('keyup',function(){if($(this).data('lastsearch')==$(this).val()){return true;} $(this).data('lastsearch',$(this).val());if(typeof instance.options.searchOptions.onSearch=='function'){instance.options.searchOptions.onSearch(instance.element);} optionsList.find('li:not(.optgroup)').each(function(){var optText=$(this).text();if(optText.toLowerCase().indexOf(search.val().toLowerCase())>-1){$(this).show();} else if(!$(this).hasClass('selected')){$(this).hide();} if(!instance.options.searchOptions.showOptGroups&&$(this).closest('li.optgroup')){$(this).closest('li.optgroup').show();if($(this).closest('li.optgroup').find('li:visible').length){$(this).closest('li.optgroup').show();} else{$(this).closest('li.optgroup').hide();}}});});} if(instance.options.selectAll){optionsList.before(''+instance.options.texts.selectAll+'');} optionsWrap.on('click','.ms-selectall',function(event){event.preventDefault();if($(this).hasClass('global')){if(optionsList.find('li:not(.optgroup)').filter(':not(.selected)').filter(':visible').length){optionsList.find('li:not(.optgroup)').filter(':not(.selected)').filter(':visible').find('input[type="checkbox"]').trigger('click');} else{optionsList.find('li:not(.optgroup).selected:visible input[type="checkbox"]').trigger('click');}} else if($(this).closest('li').hasClass('optgroup')){var optgroup=$(this).closest('li.optgroup');if(optgroup.find('li:not(.selected)').filter(':visible').length){optgroup.find('li:not(.selected):visible input[type="checkbox"]').trigger('click');} else{optgroup.find('li.selected:visible input[type="checkbox"]').trigger('click');}}});var options=[];$(instance.element).children().each(function(){if(this.nodeName=='OPTGROUP'){var groupOptions=[];$(this).children('option').each(function(){var thisOptionAtts={};for(var i=0;i .ms-options > ul');var optionsWrap=$(instance.element).next('.ms-options-wrap').find('> .ms-options');var select=optionsWrap.parent().prev();if(overwrite){optionsList.find('> li').remove();if(updateSelect){select.find('> *').remove();}} for(var key in options){if(!customHasOwnProperty(options,key)){continue;} var thisOption=options[key];var container=$('
  • ');var appendContainer=true;if(customHasOwnProperty(thisOption,'options')){optionsList.find('> li.optgroup > span.label').each(function(){if($(this).text()==thisOption.label){container=$(this).closest('.optgroup');appendContainer=false;}});if(updateSelect){if(select.find('optgroup[label="'+thisOption.label+'"]').length){var optGroup=select.find('optgroup[label="'+thisOption.label+'"]');} else{var optGroup=$('');select.append(optGroup);}} if(appendContainer){container.addClass('optgroup');container.append(''+thisOption.label+'');container.find('> .label').css({clear:'both'});if(instance.options.selectGroup){container.append(''+instance.options.texts.selectAll+'')} container.append('
      ');} for(var gKey in thisOption.options){if(!customHasOwnProperty(thisOption,gKey)){continue;} var thisGOption=thisOption.options[gKey];var gContainer=$('
    • ').addClass('ms-reflow');instance._addOption(gContainer,thisGOption);container.find('> ul').append(gContainer);if(updateSelect){var selOption=$('');if(customHasOwnProperty(thisGOption,'attributes')&&Object.keys(thisGOption.attributes).length){} if(thisGOption.checked){selOption.prop('selected',true);} optGroup.append(selOption);}}} else if(customHasOwnProperty(thisOption,'value')){container.addClass('ms-reflow') instance._addOption(container,thisOption);if(updateSelect){var selOption=$('');if(customHasOwnProperty(thisOption,'attributes')&&Object.keys(thisOption.attributes).length){selOption.attr(thisOption.attributes);} if(thisOption.checked){selOption.prop('selected',true);} select.append(selOption);}} if(appendContainer){optionsList.append(container);}} optionsList.find('.ms-reflow input[type="checkbox"]').each(function(idx){if($(this).css('display').match(/block$/)){var checkboxWidth=$(this).outerWidth();checkboxWidth=checkboxWidth?checkboxWidth:15;$(this).closest('label').css('padding-left',(parseInt($(this).closest('label').css('padding-left'))*2)+checkboxWidth);$(this).closest('.ms-reflow').removeClass('ms-reflow');}});instance._updatePlaceholderText();optionsWrap.find('ul').css({'column-count':'','column-gap':'','-webkit-column-count':'','-webkit-column-gap':'','-moz-column-count':'','-moz-column-gap':''});if(select.find('optgroup').length){optionsList.find('> li:not(.optgroup)').css({'float':'left',width:(100/instance.options.columns)+'%'});optionsList.find('li.optgroup').css({clear:'both'}).find('> ul').css({'column-count':instance.options.columns,'column-gap':0,'-webkit-column-count':instance.options.columns,'-webkit-column-gap':0,'-moz-column-count':instance.options.columns,'-moz-column-gap':0});if(this._ieVersion()&&(this._ieVersion()<10)){optionsList.find('li.optgroup > ul > li').css({'float':'left',width:(100/instance.options.columns)+'%'});}} else{optionsList.css({'column-count':instance.options.columns,'column-gap':0,'-webkit-column-count':instance.options.columns,'-webkit-column-gap':0,'-moz-column-count':instance.options.columns,'-moz-column-gap':0});if(this._ieVersion()&&(this._ieVersion()<10)){optionsList.find('> li').css({'float':'left',width:(100/instance.options.columns)+'%'});}}},unload:function(){$(this.element).next('.ms-options-wrap').remove();$(this.element).show(function(){$(this).css('display','').removeClass('jqmsLoaded');});},reload:function(){$(this.element).next('.ms-options-wrap').remove();$(this.element).removeClass('jqmsLoaded');this.load();},_updatePlaceholderText:function(){var instance=this;var placeholder=$(instance.element).next('.ms-options-wrap').find('> button:first-child');var optionsWrap=$(instance.element).next('.ms-options-wrap').find('> .ms-options');var select=optionsWrap.parent().prev();var selOpts=[];select.find('option:selected').each(function(){selOpts.push($(this).text());});placeholder.text(selOpts.join(', '));var copy=placeholder.clone().css({display:'inline',width:'auto',visibility:'hidden'}).appendTo(optionsWrap.parent());var copyWidth=(typeof $.fn.actual!=='undefined')?copy.actual('width',instance.options.jqActualOpts):copy.width();var placeWidth=(typeof $.fn.actual!=='undefined')?placeholder.actual('width',instance.options.jqActualOpts):placeholder.width();if(copyWidth>placeWidth){placeholder.text(selOpts.length+instance.options.texts.selectedOptions);} else if(selOpts.length){placeholder.text(selOpts.map(function(element){return element.trim();}).join(', '));} else{placeholder.text(instance.options.texts.placeholder);} copy.remove();},_addOption:function(container,option){container.text(option.name);var thisCheckbox=$('').val(option.value).attr('title',option.name).attr('id','ms-opt-'+msCounter);if(customHasOwnProperty(option,'attributes')&&Object.keys(option.attributes).length){thisCheckbox.attr(option.attributes);} container.prepend(thisCheckbox);if(option.checked){container.addClass('default');container.addClass('selected');container.find('input[type="checkbox"]').prop('checked',true);} var label=$('').attr('for','ms-opt-'+msCounter);container.wrapInner(label);msCounter=msCounter+1;},_ieVersion:function(){var myNav=navigator.userAgent.toLowerCase();return(myNav.indexOf('msie')!=-1)?parseInt(myNav.split('msie')[1]):false;}};$.fn.multiselect=function(options){var args=arguments;var ret;if((options===undefined)||(typeof options==='object')){return this.each(function(){if(!$.data(this,'plugin_multiselect')){$.data(this,'plugin_multiselect',new MultiSelect(this,options));}});}else if((typeof options==='string')&&(options[0]!=='_')&&(options!=='init')){this.each(function(){var instance=$.data(this,'plugin_multiselect');if(instance instanceof MultiSelect&&typeof instance[options]==='function'){ret=instance[options].apply(instance,Array.prototype.slice.call(args,1));} if(options==='unload'){$.data(this,'plugin_multiselect',null);}});return ret;}};}(jQuery));