(function(jQuery)
{
	var timerHandle = null;
	var settings = {
		pixelsAwayFromMenu : 10,
		fadingSpeed        : 0,
		slidingSpeed       : 700
	};

	jQuery.fn.jqueryMenu = function(options)
	{
		if (options) 
			jQuery.extend(settings, options);

		jQuery("#jquerymenu li").bind({
			mouseover : function(){
				var setTitle = jQuery(this).find("a").attr("rel");
				if(setExists(setTitle))
					showMenu(setTitle);
			},
			mouseleave : scheduleBubbleRemoval
		});

		jQuery("#jquerymenububble").bind({
			mouseenter : cancelBubbleRemoval,
			mouseleave : scheduleBubbleRemoval
		});
		
		adjustSliderWidth();
	};

	function adjustSliderWidth() 
	{
		var slider     = jQuery(".slider");
		var childNodes = slider.find(".set");
		
		var width = 0;
		childNodes.each(function(){
			width += jQuery(this).width();   
		});
		
		slider.css("width", width + "px");
	};

	function scheduleBubbleRemoval() 
	{
		if (timerHandle != null)
			return;
		timerHandle = window.setTimeout(hideMenu, 1000);
	};
	
	function cancelBubbleRemoval()
	{
		window.clearTimeout(timerHandle);
		timerHandle = null;
	};

	function setExists(setTitle) 
	{
		if (!setTitle || jQuery("#jquerymenububble .slider ." + setTitle).length == 0)
			return false;
		return true;				
	};

	function showMenu(setTitle)
	{
		cancelBubbleRemoval();

		if (!setTitle || jQuery("#jquerymenububble .slider ." + setTitle).length == 0)
			return;
			
		var position = jQuery("#jquerymenu").position();			
		var height   = jQuery("#jquerymenu").height();			
		var bubble   = jQuery("#jquerymenububble");
			
		bubble.css({
				"top"  : (position.top + height + settings.pixelsAwayFromMenu) + "px",
				"left" : position.left
			})
			.stop()
			.fadeTo(settings.fadingSpeed, 1.0, "easeInOutCirc");

		if (bubble.parent()[0].nodeName != "BODY")
		{
			bubble.detach();
			jQuery("body").append(bubble);						
		}
			
		showSet(setTitle);
	};

	function hideMenu()
	{
		if (timerHandle == null)
			return;
		
		var bubble = jQuery("#jquerymenububble");
		bubble.fadeOut(settings.fadingSpeed, "easeInOutCirc", function(){
			bubble.hide();
		});
	};
	
	function showSet(setTitle)
	{
		var left     = 0;
		var foundSet = false;
		var slider   = jQuery(".slider");
		var sets     = slider.find(".set");

		for(var i = 0; i < sets.length; i++)
		{
			var item = jQuery(sets[i]);

			if (i > 0) {
				left += item.width();   
			}

			if (item.hasClass(setTitle)) {
				foundSet = true;
				break;
			}
		}
		
		if (foundSet == false)
			return; 
		
		var options = { "left": -left + "px"};
		slider.stop().animate(options, settings.slidingSpeed, "easeInOutCirc");
	};

})(jQuery);


