/*
 * jQuery selectBox (version 0.1)
 *
 * A cosmetic, styleable replacement for SELECT elements
 *
 * Homepage:   http://abeautifulsite.net/blog/2011/01/jquery-selectbox-plugin/
 * Demo page:  http://labs.abeautifulsite.net/projects/js/jquery/selectBox/
 *
 * Copyright 2011 A Beautiful Site, LLC.
 *
 * Licensed under both the MIT license and the GNU GPL (same as jQuery)
*/
if(jQuery)(function($){$.extend($.fn,{selectBox:function(o,data){var _show=function(event){var select=event.data.select;var control=event.data.control;if($(control).hasClass('ui-selectBox-disabled'))return false;if($(control).hasClass('ui-selectBox-focus')&&$("#ui-selectBox-dropdown").size()===1){_hide(event,true);return false;}
$('.ui-selectBox').not(control).trigger('blur');_focus(event);event.stopPropagation();$("#ui-selectBox-dropdown").remove();var dropdown=$('<div id="ui-selectBox-dropdown" class="ui-corner-bottom" />');var options=$('<ul />');if($(select).children('optgroup').size()===0){$(select).children('option').each(function(){var text=$(this).text()!==''?$(this).text():'\u00A0';var extraClasses='';if($(this).attr('disabled'))extraClasses+=' ui-selectBox-disabled';$(options).append('<li class="ui-selectBox-option'+extraClasses+'">'+text+'</li>');});}else{$(dropdown).addClass('ui-selectBox-hasOptgroups');$(select).children('optgroup').each(function(){$(options).append('<li class="ui-selectBox-optgroup">'+$(this).attr('label')+'</li>');$(this).children('option').each(function(){var text=$(this).text()!==''?$(this).text():'\u00A0';var extraClasses='';if($(this).attr('disabled'))extraClasses+=' ui-selectBox-disabled';$(options).append('<li class="ui-selectBox-option'+extraClasses+'">'+text+'</li>');});});}
$(dropdown).append(options);var selectedIndex=$(select)[0].selectedIndex;$(dropdown).find('LI.ui-selectBox-option').eq(selectedIndex).addClass('ui-selectBox-initial ui-selectBox-current');$(dropdown).find('LI.ui-selectBox-option').hover(function(){$(dropdown).find('.ui-selectBox-current').removeClass('ui-selectBox-current');$(this).addClass('ui-selectBox-current');},function(){$(this).removeClass('ui-selectBox-current');}).click({select:select,control:control},function(event){_select(event);}).mouseup({select:select,control:control},function(event){$(event.target).trigger('click');});$('BODY').append(dropdown);var cPos=$(control).offset();var cHeight=$(control).outerHeight();var cWidth=$(control).outerWidth();var borderAdjustment=parseInt($(dropdown).css('borderLeftWidth'))+parseInt($(dropdown).css('borderRightWidth'));$(dropdown).css({position:'absolute',zIndex:'999999',top:cPos.top+cHeight,left:cPos.left,width:cWidth-borderAdjustment}).show();$(control).removeClass('ui-corner-all').addClass('ui-corner-top');_disableSelection(dropdown);_dropdownScrollFix(true);};var _hide=function(event,preventBlur){var select=event.data.select;var control=event.data.control;$("#ui-selectBox-dropdown").remove();$(control).removeClass('ui-corner-top').addClass('ui-corner-all');if(!preventBlur){_blur(event);}else{$(control).focus();}};var _select=function(event,option){var select=event.data.select;var control=event.data.control;option=option?option:event.target;if($(option).hasClass('ui-selectBox-disabled'))return false;var oldSelectedIndex=$(select)[0].selectedIndex;$('#ui-selectBox-dropdown .ui-selectBox-optgroup').remove();var newSelectedIndex=$('#ui-selectBox-dropdown').find('LI.ui-selectBox-current').index();if(oldSelectedIndex!==newSelectedIndex){$(select)[0].selectedIndex=newSelectedIndex;$(control).find('.ui-selectBox-label').text($(option).text());$(select).trigger('change');}
_hide(event,true);};var _focus=function(event){var select=event.data.select;var control=event.data.control;if($(control).hasClass('ui-selectBox-disabled'))return true;if($(control).hasClass('ui-selectBox-focus'))return false;$(".ui-selectBox.ui-selectBox-focus").removeClass("ui-selectBox-focus");$("#ui-selectBox-dropdown").remove();$(control).addClass('ui-selectBox-focus');$(document).bind('mousedown',{select:select,control:control},_blur);$(document).bind('keydown',{select:select,control:control},_key);$(select).trigger('focus');$(control).focus();};var _blur=function(event){var select=event.data.select;var control=event.data.control;if(event.target.id==='ui-selectBox-dropdown'||$(event.target).parents('#ui-selectBox-dropdown').size()===1){$(control).trigger('focus');return false;}
if($(control).hasClass('ui-selectBox-focus')){$(control).removeClass('ui-selectBox-focus');$(document).unbind('mousedown',_blur);$(document).unbind('keydown',_key);$(select).trigger('blur');_hide(event);}};var _key=function(event){var select=event.data.select;var control=event.data.control;var dropdown=$("#ui-selectBox-dropdown");if($(control).hasClass('ui-selectBox-disabled'))return false;switch(event.keyCode){case 9:_blur(event);break;case 13:if($(dropdown).size()===0)return false;var siblings=$(dropdown).find('.ui-selectBox-option');var currentIndex=-1;$.each(siblings,function(index,option){if($(option).hasClass('ui-selectBox-current')){currentIndex=index;return;}});if(currentIndex>=0){_select(event,$(siblings).eq(currentIndex));}
return false;break;case 27:_hide(event,true);break;case 38:case 37:case 33:var interval=event.keyCode===33?20:1;if($(dropdown).size()===0){if(event.altKey){_show(event);return false;}
var totalIndexes=$(select).find('OPTION').size(),oldSelectedIndex=$(select)[0].selectedIndex,newSelectedIndex=$(select)[0].selectedIndex-interval;while($(select).find('OPTION').eq(newSelectedIndex).attr('disabled')===true&&newSelectedIndex>=0){newSelectedIndex--;}
if(newSelectedIndex<0){newSelectedIndex=$(select).find('OPTION:not([disabled]):first').index();}
$(select)[0].selectedIndex=newSelectedIndex;if($(select)[0].selectedIndex===-1){newSelectedIndex=0;$(select)[0].selectedIndex=newSelectedIndex;}
var label=$(select).find('OPTION:selected').text();if(label==='')label='\u00A0';$(control).find('.ui-selectBox-label').text(label);if(newSelectedIndex!==oldSelectedIndex)$(select).trigger('change');return false;}
var siblings=$(dropdown).find('.ui-selectBox-option');var currentIndex=-1;$.each(siblings,function(index,option){if($(option).hasClass('ui-selectBox-current')){currentIndex=index;return;}});currentIndex=currentIndex-interval;if(currentIndex<0)currentIndex=0;$(siblings).removeClass('ui-selectBox-current');$(siblings).eq(currentIndex).addClass('ui-selectBox-current');_dropdownScrollFix();return false;break;case 40:case 39:case 34:var interval=event.keyCode===34?20:1;if($(dropdown).size()===0){if(event.altKey){_show(event);return false;}
var totalIndexes=$(select).find('OPTION').size(),oldSelectedIndex=$(select)[0].selectedIndex,newSelectedIndex=$(select)[0].selectedIndex+interval;while($(select).find('OPTION').eq(newSelectedIndex).attr('disabled')===true&&newSelectedIndex<=$(select).find('OPTION').size()){newSelectedIndex++;}
if(newSelectedIndex>totalIndexes-1){newSelectedIndex=$(select).find('OPTION:not([disabled]):last').index();}
$(select)[0].selectedIndex=newSelectedIndex;if($(select)[0].selectedIndex===-1){newSelectedIndex=$(select).find('OPTION').size()-1;$(select)[0].selectedIndex=newSelectedIndex;}
var label=$(select).find('OPTION:selected').text();if(label==='')label='\u00A0';$(control).find('.ui-selectBox-label').text(label);if(newSelectedIndex!=oldSelectedIndex)$(select).trigger('change');return false;}
var siblings=$(dropdown).find('.ui-selectBox-option');var currentIndex=-1;$.each(siblings,function(index,option){if($(option).hasClass('ui-selectBox-current')){currentIndex=index;return;}});currentIndex=currentIndex+interval;if(currentIndex>$(siblings).size()-1)currentIndex=$(siblings).size()-1;$(siblings).removeClass('ui-selectBox-current');$(siblings).eq(currentIndex).addClass('ui-selectBox-current');_dropdownScrollFix();return false;break;case 36:case 35:if($(dropdown).size()===0){if(event.altKey){_show(event);return false;}
var oldSelectedIndex=$(select)[0].selectedIndex,newSelectedIndex;if(event.keyCode===36){newSelectedIndex=0;}else{newSelectedIndex=$(select).find('OPTION').size()-1;}
if($(select).find('OPTION').eq(newSelectedIndex).attr('disabled')===true){if(event.keyCode===36){newSelectedIndex=$(select).find('OPTION:not([disabled]):first').index();}else{newSelectedIndex=$(select).find('OPTION:not([disabled]):last').index();}}
$(select)[0].selectedIndex=newSelectedIndex;var label=$(select).find('OPTION:selected').text();if(label==='')label='\u00A0';$(control).find('.ui-selectBox-label').text(label);if(newSelectedIndex!=oldSelectedIndex)$(select).trigger('change');return false;}
$(dropdown).find('.ui-selectBox-current').removeClass('ui-selectBox-current');if(event.keyCode===36){$(dropdown).find('.ui-selectBox-option:first').addClass('ui-selectBox-current');}else{$(dropdown).find('.ui-selectBox-option:last').addClass('ui-selectBox-current');}
_dropdownScrollFix();return false;break;}};var _dropdownScrollFix=function(centerSelection){var dropdown=$("#ui-selectBox-dropdown");if($(dropdown).size()===0)return false;var target=$(dropdown).find('.ui-selectBox-current');if($(target).size()===0)return false;var targetTop=parseInt($(target).offset().top-$(dropdown).position().top);var targetBottom=parseInt(targetTop+$(target).outerHeight());if(centerSelection){$(dropdown).scrollTop($(target).offset().top-$(dropdown).offset().top+$(dropdown).scrollTop()-($(dropdown).height()/2));}else{if(targetTop<0){$(dropdown).scrollTop($(target).offset().top-$(dropdown).offset().top+$(dropdown).scrollTop());}
if(targetBottom>$(dropdown).height()){$(dropdown).scrollTop(($(target).offset().top+$(target).outerHeight())-$(dropdown).offset().top+$(dropdown).scrollTop()-$(dropdown).height());}}};var _disableSelection=function(selector){$(selector).css('MozUserSelect','none').bind('selectstart',function(){return false;}).bind('mousedown',function(){return false;});return true;};switch(o){case'destroy':$(this).each(function(){var select=$(this);var control=$(this).next('.ui-selectBox');if($(select)[0].tagName.toLowerCase()==='select'){$(control).remove();$(select).show();}});return $(this);break;case'disable':$(this).each(function(){var select=$(this);var control=$(this).next('.ui-selectBox');$(select).attr('disabled',true);$(control).addClass('ui-selectBox-disabled');});return $(this);break;case'enable':$(this).each(function(){var select=$(this);var control=$(this).next('.ui-selectBox');$(select).attr('disabled',false);$(control).removeClass('ui-selectBox-disabled');});return $(this);break;default:$(this).each(function(){var select=$(this);if($(this).next('.ui-selectBox').size()===0){var control=$('<a href="#" class="ui-selectBox ui-corner-all" tabindex="'+parseInt($(select).attr('tabindex'))+'" />');if($(select)[0].tagName.toLowerCase()!=='select'||$(select).attr('multiple')===true)return;if($(select).attr('disabled')===true)$(control).addClass('ui-selectBox-disabled');var label=$(select).find('OPTION:selected').text();if(label==='')label='\u00A0';$(control).append('<span class="ui-selectBox-label">'+label+'</span>');$(control).append('<span class="ui-selectBox-arrow"></span>');$(select).hide().after(control);_disableSelection(control);$(control).bind('click',function(){return false;}).bind('mousedown',{select:select,control:control},_show).bind('focus',{select:select,control:control},_focus).bind('blur',{select:select,control:control},_blur);}});return $(this);break;}}});})(jQuery);
