(function($){

	var defaults = {
	};

	$.selectBoxes = [];

	$.selectbox = function(node,o){
		var	$sb = this;
		$.selectBoxes.push($sb);
		$sb.options = $.extend({},defaults,o||{});
		$sb.nodeParent = node.parent();
		$sb.opened = false;
		$sb.node = $("<div />").addClass("selectbox-node closed").appendTo($sb.nodeParent);
		$sb.marker = $("<a />").addClass("selectbox-marker").appendTo($sb.node);
		$sb.list = $("<ul />").addClass("selectbox-list").appendTo($sb.node);
		$sb.items = [];
		selected = node.find('option:selected')?node.find('option:selected'):node.find('option:first');
		$sb.inputHidden = $('<input />').attr({'name':node.attr('name')});
        $sb.change = node.attr('onchange2');
        $('<div style="display:none;" />').append($sb.inputHidden).prependTo($sb.node);
		$.each(node.find('option'),function(i,item){
			text=$(item).html();
			value=$(item).val();
			var itemNode = $("<li/>").html("<a value="+value+">"+text+"</a>").appendTo($sb.list);
			$sb.items.push(itemNode);
			if(selected.index()==i){
				itemNode.addClass("selected");
				$sb.selected = itemNode;
				$sb.inputHidden.val(value);
			}
		});
		node.hide().remove();
		$sb.bindClicks = function(){
			$sb.marker.unbind('click').click(function(){
				if($sb.opened){
					$sb.close();
				}else{
					$sb.open();
				}
				return false;
			});
			$sb.selected.find('a').unbind('click').click(function(){
				if($sb.opened){
					$sb.close();
				}else{
					$sb.open();
				}
				return false;
			});
			$.each($sb.items,function(i,item){
				if($(this).hasClass('selected')){

				}else{
					$(item).find('a').unbind('click').click(function(){
						if($sb.opened){
							$sb.close($(this));
						}
					});
				}
			});
		}
		$sb.bindClicks();
		$sb.open = function(){
			$.selectboxCloseAll();
			$sb.opened = true;
			$sb.node.removeClass('closed');
			return false;
		}
		$sb.close = function(item){
			if(item){
				$sb.selected.removeClass('selected')
				$sb.selected=item.parents('li').addClass('selected');
				$sb.bindClicks();
				$sb.inputHidden.val(item.attr('value'));
                eval($sb.change);
			}
			$sb.node.addClass('closed');
			$sb.opened = false;
			return false;
		}
		$(window).click(function(e){
			if(!$(e.target).hasClass('selectbox-node')&&!$(e.target).parents('selectbox-node').length){
				$.selectboxCloseAll();
			}
		});
        $sb.select = function(val){
            var 
                item = $sb.list.find("li a[value='"+val+"']");
            if (item.size()) {
        		$sb.selected.removeClass('selected')
        		$sb.selected=item.parents('li').addClass('selected');
        		$sb.bindClicks();
        		$sb.inputHidden.val(item.attr('value'));
            }
        }
        $sb.nodeParent.data('selectbox', $sb);
	}

	$.selectboxCloseAll = function(){
		$.each($.selectBoxes,function(i,item){
			item.close();
		});
	};

	$.fn.selectbox = function(o){
		var self = $(this);
		return self.each(function(){
			var instance = $(this).data('selectbox');
			if(instance){
				if(o){
					$.extend(instance.options, o);
				}
			}else{
                $sb = new $.selectbox($(this), o);
				$(this).data('selectbox', $sb);
			}
		})
	}

})(jQuery);
