jQuery.superSelect = function(selector)
{
	var elements = jQuery(selector);
	var counter = 1;
	elements.each(function()
	{
		var node = jQuery(this);
		
		// We only act on select elements:
		if(this.nodeName == 'SELECT')
		{
			var select = jQuery('<ul class="ss-options"></ul>');
			var children = jQuery('option',node);
			children.each(function()
			{
				var option = jQuery(this);
				var optionHtml = '<li class="ss-option" id="'+option.attr('value')+'">';

				optionHtml += '<a href="#">';
				optionHtml += option.text().strip();
				optionHtml += '</a>';
				optionHtml += '</li>';
				
				newoption = jQuery(optionHtml);

				newoption.css({float:option.css('float')});
				select.append(newoption);
			});
			
			var id = '';
			if(node.attr('id') != '')
				id += node.attr('id');
			else
			{
				id += 'unnamed-'+counter;
				node.attr('id',id);
			}
			node.hide();
			var sid = 'ss-'+id;	
			var lid = 'ssl-'+id;
						
			var currentLabel = jQuery('<div class="ss-current-label" id="'+lid+'">'+jQuery('option:selected',node.parent()).text().strip()+'</div>');
				
			var container = jQuery('<div class="ss-container" id="'+sid+'"></div>'); 			

			container.append(select);
			node.parent().prepend(container);
			node.parent().prepend(currentLabel);
			

			var pos = node.parent().position().top + currentLabel.outerHeight();
			container.css({position:'absolute',top:pos,left:'0px',overflow:'hidden',zIndex:'9999'}).width(currentLabel.outerWidth());
			container.hide()	
		}		
		counter++;
	});
	function updateLabels()
	{
		jQuery('.ss-container').each(function()
		{
			var mylabel =  jQuery(this).prev();
			var identifier = jQuery(this).attr('id');
			var selectIdentifier = identifier.replace('ss-','select#');
			var value = jQuery('option:selected',jQuery(selectIdentifier,jQuery(this).parent())).text();
			mylabel.text(value);
		});
	}
	function setActive()
	{	
		jQuery('.ss-current-label').each(function()
		{ 
			var active = jQuery(this).text();
			jQuery('li a',jQuery(this).next()).removeClass('active');			
			jQuery('li a:contains('+active+')',jQuery(this).next()).addClass('active');
		});
	}
	function deactivateAllClicker()
	{
		jQuery(window).mouseup(deactivateAll);
	}
	function deactivateAll()
	{
		jQuery('div.ss-current-label').next().stop().slideUp(200);
		setActive();
	}
	//jQuery('div.ss-container').live('mouseleave',deactivateAllClicker);
	jQuery(window).mouseup(deactivateAll);
	jQuery(document).ready(function(){
	setActive();
	});
	jQuery('li.ss-option a').live('mouseover',function()
	{
		jQuery(this).addClass('hover');
	});
	jQuery('li.ss-option a').live('mouseout',function()
	{
		jQuery(this).removeClass('hover');
	});
	jQuery('div.ss-current-label').live('click',function()
	{
		var node = jQuery(this);
		var child = node.next()
		
		child.stop().slideToggle(200);
	});
	jQuery('li.ss-option').live('click',function()
	{
		var node = jQuery(this);
		var identifier = node.parent().parent().attr('id');
		var selectIdentifier = identifier.replace('ss-','select#');
		var value = node.attr('id');
		
		jQuery(selectIdentifier).val(value);
		setActive();		
		updateLabels();
		jQuery(selectIdentifier).change();
		return(false);
	});
}
