/*
 * 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.4
 * 
 * Changelog :
 *  - 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
 */
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||"selected";opt.debug=opt.debug||false;opt.direction=opt.direction||"bottom";var elm_id=selectobj.id;var active=-1;var inFocus=false;var hasfocus=0;var $select=$(selectobj);var $container=setupContainer(opt);var $input=setupInput(opt);var $span=setupSpan(opt);$select.hide().before($input).after($span).before($container);init();$span.click(function(){id="#"+elm_id+"_container";height=getHiddenHeight(id);if(opt.direction=="top"){if(height!=-1){height=(height+5)*(-1);$(id).css("top",height+"px")}}$container.toggle()});function hideMe(){hasfocus=0;$container.hide()}function init(){$container.append(getSelectOptions($input.attr('id'))).hide();var width=$input.css('width');$container.width(width)}function getHiddenHeight(element){if($(element).is(":visible")){clientHeight=-1}else{$(element).show();clientHeight=$(element).attr("clientHeight");$(element).hide()}return clientHeight}function setupContainer(options){var container=document.createElement("div");$container=$(container);$container.attr('class','container');$container.attr('id',elm_id+'_container');$container.addClass(options.containerClass);return $container}function setupInput(options){var input=document.createElement("input");var $input=$(input);$input.attr("id",elm_id+"_input");$input.attr("type","text");$input.addClass(options.inputClass);$input.attr("autocomplete","off");$input.attr("readonly","readonly");$input.attr("tabIndex",$select.attr("tabindex"));return $input}function setupSpan(options){var span=document.createElement("span");var $span=$(span);$span.attr("id",elm_id+"_Arrow");$span.attr("class","searchArrow");return $span}function moveSelect(step){var lis=$("li",$container);if(!lis)return;active+=step;if(active<0){active=0}else if(active>=lis.size()){active=lis.size()-1}lis.removeClass(opt.hoverClass);$(lis[active]).addClass(opt.hoverClass)}function setCurrent(pLi){var li=pLi;var ar=(''+li.id).split('_');var el=ar[ar.length-1];$select.val(el);$input.val($(li).html());return true}function getCurrentSelected(){return $select.val()}function getCurrentValue(){return $input.val()}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.innerHTML=$(this).html();if($(this).is(':selected')){$input.val($(this).html());$(li).addClass(opt.hoverClass)}ul.appendChild(li);$(li).mouseover(function(event){hasfocus=1;if(opt.debug)console.log('out on : '+this.id);jQuery(event.target,$container).addClass(opt.hoverClass)}).hover(function(){$(this).toggleClass("hover")},function(){$(this).toggleClass("hover")}).mouseout(function(event){hasfocus=-1;if(opt.debug)console.log('out on : '+this.id);jQuery(event.target,$container).removeClass(opt.hoverClass)}).click(function(event){if(opt.debug)console.log('click on :'+this.id);$(this).addClass(opt.hoverClass);setCurrent($(this));hideMe()})});return ul}};