/*************************************************************************
jQuery MultiSelect v2.0.1

based on arc90_multiselect.js (c) Arc90, Inc.
  {@link http://www.arc90.com}
  {@link http://lab.arc90.com}
based off of MultiSelect v1.0 by Joel Nagy,
based off the jQueryMultiSelect by Chris Dary.

Revised by Mika Babcock 08-05-2011
Revised by Matt Baer 08-25-2011
Revised by Matt Baer 10-06-2011
*************************************************************************/
(function($){$.fn.multiSelect=function(options,callBackFn){return this.each(function(){var defaults={no_selection:'No selection',selected_text:' Options selected',select_all_min:3,toggle_class:'collapsed',klass:'multiselect-init',checkBoxIdPrefix:'ms_'};var settings=$.extend(defaults,options,callBackFn),t=$(this),timeout=0,multiSelect_timer=null,select_state=false,is_clicked=false,hiddenSet=new Array(),id=t.attr('id'),title=t.attr('title'),name=t.attr('name'),doc=$(document),selectDiv,selectTitle,selectContent,selectList,on={init:function(){if(t.hasClass(settings.klass))return;t.addClass(settings.klass).bind(on);t.trigger('setup')},setup:function(){selectDiv=$('<div id="multiSelect-'+id+'" class="multiSelect">');selectTitle=$('<div id="multiSelect-'+id+'-title" class="title" title="'+title+'">').text(settings.no_selection);selectContent=$('<div id="multiSelect-'+id+'-content" class="multiSelectContent collapsed">');selectList=$('<ul id="multiSelect-'+id+'-list">');selectDiv.append(selectTitle);selectContent.append(selectList);selectTitle.click(function(){select_state=(select_state?false:true);selectContent.toggleClass(settings.toggle_class);});var selectors=[selectDiv.get(0),selectContent.get(0),selectList.get(0)];$(selectors).hoverIntent({sensitivity:1,interval:50,over:on.multiSelect_mOvr,timeout:100,out:on.multiSelect_mOut});$('body').bind("click",on.multiSelect_close);if($('option',t).length>=settings.select_all_min){var li=$('<li class="a9selectall">').appendTo(selectList);var checkbox=$('<input type="checkbox" id="multiSelect-options-selectAll-'+id+'" name="multiSelect-options-selectAll-'+id+'" value="1" title="Select All" />').appendTo(li);var label=$('<label for="multiSelect-options-selectAll">Select All</label>').appendTo(li);on.setHandCursor(checkbox,label);checkbox.click(function(){on.toggleAllLabelsAndCheckboxes(this.checked,selectList,true);on.updateSelectTitle(selectList,selectTitle);is_clicked=true;});label.click(function(){on.toggleAllLabelsAndCheckboxes(Boolean($('input',$(this).parent()).attr('checked')),selectList,false);on.updateSelectTitle(selectList,selectTitle);is_clicked=true;});li.click(function(){if(is_clicked==false){on.toggleAllLabelsAndCheckboxes(Boolean($(':checkbox',$(this)).attr('checked')),selectList,false);on.updateSelectTitle(selectList,selectTitle);}is_clicked=true;});}$('option',this).each(function(i){var value=$(this).attr('value');var text=$(this).text();var isSelected=$(this).attr('selected')=="selected"?'checked="checked"':'';var fontWeight=(isSelected!='')?'bold':'normal';var checkBoxID=settings.checkBoxIdPrefix+id+'-'+i;var li=$('<li>').appendTo(selectList);var checkbox=$('<input type="checkbox" id="'+checkBoxID+'" name="'+settings.checkBoxIdPrefix+id+'[]" value="'+value+'" title="'+text+'"'+isSelected+'/>').appendTo(li);var label=$('<label for="'+checkBoxID+'">'+checkBoxID+'</label>').text(text).css('font-weight',fontWeight).appendTo(li);on.setHandCursor(checkbox,label);on.updateSelectTitle(selectList,selectTitle);checkbox.click(function(){fontWeight=(this.checked==1)?'bold':'normal';$('label',$(this).parent()).css('font-weight',fontWeight);on.updateSelectTitle(selectList,selectTitle);is_clicked=true;});});$('label',selectList).click(function(){is_clicked=true;});$('li',selectList).click(function(){if(is_clicked==false){var fontWeight='normal';var isChecked='';if($(':checkbox',$(this)).attr('checked')!=true){isChecked='checked';fontWeight='bold';}$('label',$(this)).css('font-weight',fontWeight);$(':checkbox',$(this)).attr('checked',isChecked);on.updateSelectTitle(selectList,selectTitle);}is_clicked=false;});t.before(selectDiv);t.before(selectContent);t.remove('#'+id);},multiSelect_mOvr:function(){$('body').unbind("click",on.multiSelect_closeWindow);if(multiSelect_timer==null)return;clearTimeout(multiSelect_timer);multiSelect_timer=null;},multiSelect_mOut:function(){multiSelect_timer=setTimeout(function(){if(multiSelect_timer!=null){clearTimeout(multiSelect_timer);multiSelect_timer=null;if(select_state==true){$('body').bind("click",on.multiSelect_close);}}},timeout);},multiSelect_close:function(){if(!selectContent.hasClass('collapsed'))selectTitle.click();},setHandCursor:function(checkbox,label){checkbox.css('cursor','pointer');checkbox.css('cursor','hand');label.css('cursor','pointer');label.css('cursor','hand');},updateSelectTitle:function(selectList,selectTitle){var selectCount=$('li:not(.selectall) :checkbox:checked',selectList).length+1-(this.checked?1:1);selectTitle.text(selectCount>0?(selectCount+settings.selected_text):settings.no_selection);},toggleAllLabelsAndCheckboxes:function(checked,selectList,condition){var fontWeight='normal';var isChecked='';if(checked==condition){isChecked='checked';fontWeight='bold';}$('label',selectList).css({'font-weight':fontWeight});$(':checkbox',selectList).attr('checked',isChecked)}};t.ready(on.init)})}})(jQuery);
