/*
 * jQuery selectbox plugin
 *
 * Copyright (c) 2007 Sadri Sahraoui (brainfault.com)
 * Licensed under the GPL license and MIT:
 *   http://www.opensource.org/licenses/GPL-license.php
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * The code is inspired from Autocomplete plugin (http://www.dyve.net/jquery/?autocomplete)
 *
 * Revision: $Id$
 * Version: 0.6
 *
 * Changelog :
 *  Version 0.6.2 - changes by Jakob Ã–hman - Vinnovera
 *  - Added option class names inherits to replacement
 *  Version 0.6.1 - changes by Jakob Ã–hman - Vinnovera
 *  - Added $select.change(); to trigger the onchange event on the original selectbox
 *  - Added $input.focus() to the click event
 *  - <input/> changed to <a><span/></a>
 *  - The value chosen is now reflected in the original selectbox now
 *  - Added .focus class
 *  Version 0.6
 *  - Fix IE scrolling problem
 *  Version 0.5
 *  - separate css style for current selected element and hover element which solve the highlight issue
 *  Version 0.4
 *  - Fix width when the select is in a hidden div   @Pawel Maziarz
 *  - Add a unique id for generated li to avoid conflict with other selects and empty values @Pawel Maziarz
 */
function hideSelectboxList() {
    $("a.selectbox").removeClass("focus");
    $('div.selectbox-wrapper').hide();
}

jQuery.fn.extend({selectbox:function(options){return this.each(function(){new jQuery.SelectBox(this,options)})}});if(!window.console){var console={log:function(msg){}}}jQuery.SelectBox=function(selectobj,options){var opt=options||{};opt.inputClass=opt.inputClass||"selectbox";opt.containerClass=opt.containerClass||"selectbox-wrapper";opt.hoverClass=opt.hoverClass||"current";opt.currentClass=opt.selectedClass||"selected";opt.debug=opt.debug||false;var elm_id=selectobj.id;var active=0;var inFocus=false;var hasfocus=0;var $select=$(selectobj);var $input=setupInput(opt);var $container=setupContainer(opt);$select.hide().before($input);$('html > body').append($container);init();$input.click(function(){if(opt.debug)console.log('click');var bodyOffset=$('body').offset();var offset=$input.offset();if($(document).height()>offset.top+$input.height()+$container.height()){$container.css({width:($input.width()<$container.width())?'auto':$input.width()+'px',left:offset.left-bodyOffset.left+'px',top:(offset.top+$input.height()+2)-bodyOffset.top+'px',bottom:'auto'})}else{$container.css({width:($input.width()<$container.width())?'auto':$input.width()+'px',left:offset.left-bodyOffset.left+'px',bottom:($(window).height()-offset.top+2)-bodyOffset.top+'px',top:'auto'})}if($container.is(':visible')){$input.blur()}else{hideSelectboxList();$input.addClass('focus');inFocus=true;$container.show()}return false}).focus(function(){if(opt.debug)console.log('focus')}).keydown(function(event){switch(event.keyCode){case 38:event.preventDefault();moveSelect(-1);break;case 40:event.preventDefault();moveSelect(1);break;case 13:event.preventDefault();$('li.'+opt.hoverClass).trigger('click');break;case 27:hideMe();break}}).blur(function(){if(opt.debug)console.log('blur');if($container.is(':visible')&&hasfocus>0){if(opt.debug)console.log('container visible and has focus')}else{if($.browser.msie){if(document.activeElement.getAttribute('id').indexOf('_container')==-1){hideMe()}else{$input.click()}}else{hideMe()}}});function hideMe(){hasfocus=0;$container.hide();$input.removeClass('focus')}function init(){$container.append(getSelectOptions($input.attr('id'))).hide()}function setupContainer(options){var container=document.createElement("div");$container=$(container);$container.attr('id',elm_id+'_container');$container.addClass(options.containerClass);return $container}function setupInput(options){var input=document.createElement("a");var $input=$(input);$input.attr("href","#");$input.attr("id",elm_id+"_input");$input.addClass($select.attr('class'));$input.append($(document.createElement("span")));return $input}function moveSelect(step){var lis=$("li",$container);if(!lis||lis.length==0)return false;active+=step;if(active<0){active=lis.size()}else if(active>lis.size()){active=0}scroll(lis,active);lis.removeClass(opt.hoverClass);$(lis[active]).addClass(opt.hoverClass)}function scroll(list,active){var el=$(list[active]).get(0);var list=$container.get(0);if(el.offsetTop+el.offsetHeight>list.scrollTop+list.clientHeight){list.scrollTop=el.offsetTop+el.offsetHeight-list.clientHeight}else if(el.offsetTop<list.scrollTop){list.scrollTop=el.offsetTop}}function setCurrent(){var li=$("li."+opt.currentClass,$container).get(0);var ar=(''+li.id).split('_');var el=ar[ar.length-1];$select.val(el);$input.children().text($(li).text());return true}function getCurrentSelected(){return $select.val()}function getCurrentValue(){return $input.children().text()}function getSelectOptions(parentid){var select_options=new Array();var ul=document.createElement('ul');$select.children('option').each(function(){var li=document.createElement('li');li.setAttribute('id',parentid+'_'+$(this).val());li.setAttribute('class',$(this).attr('class'));li.innerHTML=$(this).text();if($(this).is(':selected')){$input.children().text($(this).text());$(li).addClass(opt.currentClass)}ul.appendChild(li);$(li).mouseover(function(event){hasfocus=1;if(opt.debug)console.log('over on : '+this.id);jQuery(event.target,$container).addClass(opt.hoverClass)}).mouseout(function(event){hasfocus=-1;if(opt.debug)console.log('out on : '+this.id);jQuery(event.target,$container).removeClass(opt.hoverClass)}).click(function(event){var fl=$('li.'+opt.hoverClass,$container).get(0);if(opt.debug)console.log('click on :'+this.id);$('li.'+opt.currentClass).removeClass(opt.currentClass);$(this).addClass(opt.currentClass);setCurrent();$select.change();$select.get(0).blur();hideMe()})});return ul}};
