/**
 * ************************************************************
 * 13.11.2008 - Modified by Ben - removed a lot of components
 * 				 from the original select box extension.
 * ************************************************************
 * jQuery custom selectboxes
 * 
 * Copyright (c) 2008 Krzysztof Suszynski (suszynski.org)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * @version 0.6.1
 * @category visual
 * @package jquery
 * @subpakage ui.selectbox
 * @author Krzysztof Suszynski <k.suszynski@wit.edu.pl>
**/
jQuery.fn.selectbox = function(options){
	
	/* Default settings */
	var settings = {
	};

	var listOpen = false;
	var status = false;
	var className = ''; // this variable only allows one drop down to be opened at one time.
	
	var showList = function(listObj, selectedClass) {
		var selectbox = listObj.next('#'+selectedClass);
		listOpen = true;
		status = false;
		className = selectedClass;
		$('ul#'+selectedClass).show();
		jQuery(document).bind('click', onBlurList);
		return listObj;
	}
	var hideList = function(listObj, selectedClass) {
		var selectbox = listObj.next('#'+selectedClass);
		listOpen = false;
		$('ul#'+selectedClass).hide();
		jQuery(document).unbind('click', onBlurList);
		return listObj;
	}
	var onBlurList = function(e) {
		var trgt = e.target;

		if(status == true && listOpen == true) {
			hideList( jQuery('#'+className), className );
		}
		status = true;
	}
	
	/* Processing settings */
	settings = jQuery.extend(settings, options || {});
	/* Wrapping all passed elements */
	return this.each(function() {
		var _this = jQuery(this);
		var className = _this.attr('class');
		
		var replacement = jQuery('<div class="dropdown"></div>'); 
		
		replacement.click(
			function(){
				var thisList = jQuery(this).find('.'+className);
				$('.dropdownList').each(function(){
					$(this).hide();
				});
				if(listOpen == true){
					hideList( thisList, className );
				}
				else{
					showList(thisList, className);
					return _this;
				}
				
			}
		);
		
		_this.replaceWith(replacement).appendTo(replacement);
	});
}
