/*
 * jSelect for jQuery v1.3.2 +
 * Copyright (c) 2009 Paul Amelin
 * Dual licensed under the MIT and GPL licenses.
 *
 * Date: 2009-01-01
 */
(function($){$.extend($.fn,{jSelect:function(options,callback){if(!options)var options={};options.isMultiple=$(this).attr('multiple');var jSelectClass="";if(!options.isMultiple){options.hasSelectAll=false;options.preSelectAll=false;jSelectClass=" jRadio";}
if(options.hasSelectAll==undefined)options.hasSelectAll=true;if(options.preSelectAll==undefined&&options.hasSelectAll)options.preSelectAll=true;if(options.displayLabel==undefined)options.displayLabel=true;if(options.selectAllLabel==undefined)options.selectAllLabel="Select All";if(options.unselectAllLabel==undefined)options.unselectAllLabel="Unselect All";if(options.noneSelectedLabel==undefined)options.noneSelectedLabel='Select options';$(this).each(function(){var jOption='li.jOption';var id=this.id;var name=$(this).attr('name');var html='<div class="jSelect'+jSelectClass+'" name="'+name+'" id="'+id+'"><textarea type="text" readonly="readonly" class="jSelectedOptions" />';html+='<ul class="jOptions">';if(options.hasSelectAll){html+='<li class="jOptionsMenu"><div class="selectAll">Select All</div> | <div class="unselectAll">Unselect All</div></li>';}
$(this).find('option').each(function(){var liClass=$(this).attr('selected')?'jOption jSelected':'jOption';html+='<li title="'+$(this).val()+'" class="'+liClass+'">'+$(this).html()+'</li>';});html+='</ul><div class="jSelections" style="display:none"></div></div>';$(this).replaceWith(html);var jSelect=$("#"+id);jSelect.find('.jSelectedOptions').mouseover(function(){$(this).addClass('hover');}).mouseout(function(){$(this).removeClass('hover');}).click(function(){if($(this).hasClass('active')){$(this).hideJOptions();}else{$(this).showJOptions();}
return false;}).focus(function(){$(this).addClass('focus');}).blur(function(){$(this).removeClass('focus');});jSelect.find('.selectAll').click(function(){$(this).parent().parent().find(jOption).addClass('jSelected');$(this).parent().parent().updateSelected(options);});jSelect.find('.unselectAll').click(function(){$(this).parent().parent().find(jOption).removeClass('jSelected');$(this).parent().parent().updateSelected(options);});jSelect.find(jOption).click(function(){if(!options.isMultiple){$(this).parent().find(jOption).removeClass('jSelected');}
$(this).toggleClass('jSelected');$(this).parent().updateSelected(options);if(callback)callback($(this));});jSelect.find(jOption).mousemove(function(){jSelect.find(jOption).removeClass('hover');$(this).addClass('hover');});jSelect.find('.jSelectedOptions').keydown(function(e){$(this).keybordSupport(e,options,callback);if(e.keyCode==13)return false;});jSelect.find('.jOptions').each(function(){if(options.preSelectAll){$(this).find(jOption).addClass('jSelected');}
$(this).updateSelected(options);});});},hideJOptions:function(){$(this).removeClass('active').next('.jOptions').hide();},showJOptions:function(){$('.jSelectedOptions').hideJOptions();$(this).parent().find('li.jOption').removeClass('hover');$(this).addClass('active').next('.jOptions').show();$(this).parent().find('li.jOption:first').addClass('hover');var offset=$(this).position();$(this).next('.jOptions').css({top:offset.top+$(this).outerHeight()+'px'});$(this).next('.jOptions').css({left:offset.left+'px'});multiSelectCurrent=$(this);var timer='';$(this).next('.jOptions').hover(function(){clearTimeout(timer);},function(){timer=setTimeout('jQuery(multiSelectCurrent).hideJOptions(); $(multiSelectCurrent).unbind("hover");',250);});},updateSelected:function(options,name){var display='';var selected='';var name=$(this).parent().attr('name');$(this).find('li.jSelected').each(function(){var displayValue=$(this).attr('title');if(options.displayLabel){displayValue=$(this).html();}
if(options.isMultiple){display+=displayValue+', ';selected+='<input type="hidden" name="'+name+'" value="'+$(this).attr('title')+'" />';}else{display=displayValue;selected='<input type="hidden" name="'+name+'" value="'+$(this).attr('title')+'" />';}})
if(display=='')display=options.noneSelectedLabel;$(this).prev('.jSelectedOptions').text(display);$(this).next('.jSelections').html(selected);},keybordSupport:function(e,options,callback){var jOption='li.jOption';if($(this).parent().find('ul.jOptions').is(':visible')){if(e.keyCode==27||e.keyCode==37||e.keyCode==39){$(this).addClass('focus').trigger('click');}
if(e.keyCode==40){$(this).parent().find('li.hover').removeClass('hover').next(jOption).addClass('hover');if(!$(this).parent().find(jOption).hasClass('hover')){$(this).parent().find(jOption+':first').addClass('hover');}
$(this).adjustViewport();}
if(e.keyCode==38){$(this).parent().find('li.hover').removeClass('hover').prev(jOption).addClass('hover');if(!$(this).parent().find(jOption).hasClass('hover')){$(this).parent().find(jOption+':last').addClass('hover');}
$(this).adjustViewport();}
if(e.keyCode==13||e.keyCode==32){var currentOption=$(this).parent().find('li.hover');if(!options.isMultiple){currentOption.parent().find(jOption).removeClass('jSelected');}
currentOption.toggleClass('jSelected');currentOption.parent().updateSelected(options);if(callback)callback(currentOption);}
return false;}else{if(e.keyCode==38||e.keyCode==40||e.keyCode==13||e.keyCode==32){$(this).removeClass('focus').trigger('click');return false;}}},adjustViewport:function(){var jOptions=$(this).next('.jOptions');var divHeight=jOptions.height();var i=0;var selectionTop=0,selectionHeight=0;jOptions.find('li').each(function(){if($(this).hasClass('hover')){selectionTop=i;selectionHeight=$(this).outerHeight();return;}
i+=$(this).outerHeight();});jOptions.scrollTop(selectionTop-((divHeight/2)-(selectionHeight/2)));}});})(jQuery);
