/*
 * jQuery MultiSelect Plugin 0.2
 * Copyright (c) 2010 Eric Hynds
 *
 * Inspired by Cory S.N. LaViska's implementation, A Beautiful Site (http://abeautifulsite.net/) 2009
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
*/
(function(d){d.fn.extend({multiSelect:function(j){j=d.extend({},m.defaults,j);return this.each(function(){new m(this,j)})}});var m=function(j,g){function n(){var a=h.find("input"),c=k.find("input"),e=c.filter(":checked"),i="",l=e.length;if(l===0)a.val(g.noneSelected);else{if(g.selectedList)e.each(function(){var o=d(this).parent().text();i=i.length?(i+=", "+o):o});else i=g.selectedText.replace("#",l).replace("#",c.length);a.val(i).attr("title",i)}}var h=$original=d(j),b,k,f=[],p=[];f.push('<a class="ui-multiselect ui-state-default ui-corner-all"><input readonly="readonly" type="text" value="" /><span class="ui-icon ui-icon-triangle-1-s"></span></a>'); f.push('<div class="ui-multiselect-options'+(g.shadow?" ui-multiselect-shadow":"")+' ui-widget ui-widget-content ui-corner-bl ui-corner-br ui-corner-tr">');if(g.showHeader){f.push('<div class="ui-widget-header ui-helper-clearfix ui-corner-all ui-multiselect-header">');f.push('<ul class="ui-helper-reset">');f.push('<li><a class="ui-multiselect-all" href=""><span class="ui-icon ui-icon-check"></span>'+g.checkAllText+"</a></li>");f.push('<li><a class="ui-multiselect-none" href=""><span class="ui-icon ui-icon-closethick"></span>'+ g.unCheckAllText+"</a></li>");f.push('<li class="ui-multiselect-close"><a href="" class="ui-multiselect-close ui-icon ui-icon-circle-close"></a></li>');f.push("</ul>");f.push("</div>")}f.push('<ul class="ui-multiselect-checkboxes ui-helper-reset">');h.find("option").each(function(){var a=d(this),c=a.val(),e=c.length,i=a.parent(),l=i.is("optgroup");if(l){i=i.attr("label");if(d.inArray(i,p)===-1){f.push('<li class="ui-multiselect-optgroup-label"><span>'+i+"</span></li>");p.push(i)}}if(e>0){f.push(l? '<li class="multiSelect-optgroup">':"<li>");f.push('<label class="ui-corner-all"><input type="checkbox" name="'+h.attr("name")+'" value="'+c+'"');a.is(":selected")&&f.push(' checked="checked"');f.push(" />"+a.html()+"</label></li>")}});f.push("</ul></div>");h=h.after(f.join("")).next("a.ui-multiselect");b=h.next("div.ui-multiselect-options");$header=b.find("div.ui-multiselect-header");k=b.find("label");g.showHeader&&$header.find("a").click(function(a){var c=d(a.target);c.hasClass("ui-multiselect-close")? b.trigger("close"):b.trigger("toggleChecked",[c.hasClass("ui-multiselect-all")?true:false]);a.preventDefault()});h.bind({click:function(){b.trigger(b.is(":hidden")?"open":"close")},keypress:function(a){a.keyCode===27&&b.trigger("close")},mouseover:function(){d(this).addClass("ui-state-hover")},mouseout:function(){d(this).removeClass("ui-state-hover")},focus:function(){d(this).addClass("ui-state-focus")},blur:function(){d(this).removeClass("ui-state-focus")}});b.bind({close:function(a,c){c=c||false; if(c===true)d("div.ui-multiselect-options").filter(":visible").fadeOut(g.fadeSpeed).prev("a.ui-multiselect").removeClass("ui-state-active").trigger("mouseout");else{h.removeClass("ui-state-active").trigger("mouseout");b.fadeOut(g.fadeSpeed)}},open:function(){var a=h.position(),c=b.find("ul:eq(1)"),e;h.addClass("ui-state-active");b.trigger("close",[true]);e=g.position==="middle"?a.top+h.height()/2-b.outerHeight()/2:g.position==="top"?a.top-b.outerHeight():a.top+h.outerHeight();width=h.width()-parseInt(b.css("padding-left"))- parseInt(b.css("padding-right"));k.filter("label:first").trigger("mouseenter");b.css({position:"absolute",top:e+"px",left:a.left+"px",width:width+"px"}).show();c.scrollTop(0);g.maxHeight&&c.css("height",g.maxHeight);g.onOpen.call(b[0])},traverse:function(a,c,e){a=d(c);e=e===38||e===37?true:false;if(!a.parent()[e?"prev":"next"]("li").find("label").trigger("mouseenter").length){a=b.find("ul:eq(1)");b.find("label")[e?"last":"first"]().trigger("mouseover");a.scrollTop(e?a.height():0)}},toggleChecked:function(a, c){a=k.find("input");c?a.attr("checked","checked"):a.removeAttr("checked");n()}});k.bind({mouseenter:function(){k.removeClass("ui-state-hover");d(this).addClass("ui-state-hover").find("input").focus()},click:function(a){a.preventDefault();d(this).find("input").trigger("click",[true])},keyup:function(a){switch(a.keyCode){case 9:b.trigger("close");h.next(":input").focus();break;case 27:b.trigger("close");break;case 38:case 40:case 37:case 39:b.trigger("traverse",[this,a.keyCode]);break;case 13:a.preventDefault(); d(this).click();break}}}).find("input").bind("click",function(a,c){var e=d(this);c=c||false;a.stopPropagation();if(c){a.preventDefault();e.is(":checked")?e.removeAttr("checked"):e.attr("checked","checked")}g.onCheck.call(e[0]);n()});d.fn.bgiframe&&b.bgiframe();$original.remove();n();return b};d(document).bind("click",function(j){j=d(j.target);!j.closest("div.ui-multiselect-options").length&&!j.parent().hasClass("ui-multiselect")&&d("div.ui-multiselect-options").trigger("close",[true])});m.defaults= {showHeader:true,maxHeight:175,checkAllText:"Check all",unCheckAllText:"Uncheck all",noneSelected:"Select options",selectedList:false,selectedText:"# selected",position:"bottom",shadow:false,fadeSpeed:200,onCheck:function(){},onOpen:function(){}}})(jQuery);

