(function($) {
	$.fn.selectbox = function(options) {  
	
		var defaults = {
			className: "jquery-selectbox",
			speed: 0
		}
		
		var options = $.extend(defaults, options);
	
		return this.each( function() {  
			
			if (!$(this).is("select"))
				return;
			
			var main = $(this)
			var select = $("<div></div>").addClass(options.className);
			var selected = "";
			
			main.change( function (e) {
				init();
			});
			
			function toggle() {
				select.toggleClass("jquery-selectbox-opened");
				select.children("ul").slideToggle(options.speed).scrollTop(0);
			}
			
			function set(i) {
				main.find("option").eq(i).attr("selected", "selected");
				main.change().blur();
			}
			
			function init() {
				
				select.children().remove();
				select.append($("<ul></ul>").hide());
			
				main.find("option").each( function (i) {
			
					if ($(this).is(":selected") || i == 0) {
						select.children("ul").children("li").removeClass("selected");
						selected = [i, $.trim($(this).text())];
					}
						
					select.children("ul").append(
							$("<li></li>")
								.html($.trim($(this).text()))
								.click(function (e) {
									set(i);
									e.stopPropagation();
								})
								.addClass(selected[0] == i ? "selected" : "")
						)
				});
					
				select.prepend(
					$("<span></span>")
						.addClass("jquery-selectbox-toggle")
				).prepend(
					$("<span></span>")
						.addClass("jquery-selectbox-text")
						.html(selected[1])
				);
				
			}
		
			$(this).hide();
			
			init();
			
			select.insertAfter(main);
			
			select.click( function (e) {
				if (e.button != 0) return;
				
				if (select.children("ul").is(":hidden")) {
					$(document).click();
				}	
				toggle();
				e.stopPropagation();
			});
			
			$(document).bind('click', function (e) {
				if (!select.children("ul").is(":hidden")) {
					toggle();
				}
			}).bind('keydown', function (e) {
				if (e.keyCode == 27 && !select.children("ul").is(":hidden")) {
					toggle();
					e.stopPropagation();
				}
			});
			
		});
	};  
})(jQuery);  

