/*
        Author  :   Anand Kumar Sharma
        Date    :   30-10-2009
        Purpose :   Display ul and li list in a multi lavel menu.
 */

jQuery.fn.extend({
	/* Sometimes fadeIn and fadeOut with 0 values have caused problems, so put in a manual version here */
	fadeInOrShow: function(speed) {
		return speed == 0 ? jQuery(this).show() : jQuery(this).fadeIn(speed);
	},
	fadeOutOrHide: function(speed) {
		return speed == 0 ? jQuery(this).hide() : jQuery(this).fadeOut(speed);
	},

	simplemenu: function(options) {
		var settings = {
			allowMouseover : true,
			mouseoverDelay : 200,
			fadeInSpeed : 150, 
			fadeOutSpeed : 200,
			submenuOffset : -5,
			menuHeight: 26,
			menuWidth: 240
		};
	
		jQuery.extend(settings, options);
	
		jQuery(this).addClass("simplemenu");

		var menuHeight = settings.menuHeight;
		var menuWidth = settings.menuWidth;
		
		jQuery(this).css("height", menuHeight);
		jQuery(this).css("width", menuWidth);

		var menubar = jQuery(this);
		jQuery(document).click(function() {
			menubar.children("li").children("ul").fadeOutOrHide(settings.fadeOutSpeed);
		});

		jQuery(this).children("li").addClass("simplemenu_topitem");
		jQuery(this).children("li.simplemenu_topitem").children("ul").children("li").find("ul").addClass("simplemenu_submenu");

		// apply css styles
		jQuery(this).css("listStyle", "none");
		jQuery(this).find("ul").css("listStyle", "none");
		jQuery(this).find("li").css({ position: "relative", top: 0, left: 0 });
		jQuery(this).find("li.simplemenu_topitem").css("float", "left");
		jQuery(this).find("li.simplemenu_topitem").children("ul").css({ position: "absolute", bottom: 0, left: menuWidth });//-------
		jQuery(this).find("li.simplemenu_topitem").find("ul.simplemenu_submenu").css({ position: "absolute", top: 0, left: "1em" });
		
		jQuery(this).children("li.simplemenu_topitem").children("ul").find("li:has(ul)").addClass("simplemenu_hassubmenu").mouseover(function() 
		{
			jQuery(this).children("ul").css("left", jQuery(this).parent().outerWidth() + settings.submenuOffset);
			
		});
	
		        jQuery(this).find("li").mouseover(function(event)
		        {
			        event.stopPropagation();
			        if (jQuery(this).children("ul:visible").size() == 0) 
			        {
				        jQuery(this).siblings("li").children("ul").fadeOutOrHide(settings.fadeOutSpeed);
				        menubar.children("li").children("ul").not(jQuery(this).parents("ul")).fadeOutOrHide(settings.fadeOutSpeed);
				        jQuery(this).children("ul").fadeInOrShow(settings.fadeInSpeed);
				        //jQuery(this).children("ul").animate({ top: "200px" }, "normal");
				        // NB have to call this after the fadeIn or else IE mucks up
				        jQuery(this).children("ul").children("li").children("ul").hide();
			        }
			        else
			        {
			            jQuery(this).siblings("li").children("ul").fadeOutOrHide(settings.fadeOutSpeed);
			        }
			    });
		
		jQuery(this).data("context", false);
		jQuery(this).data("cancelCallback", function() {});
		
		if (settings.allowMouseover) jQuery(this).find("li").mouseout(function(event) 
		{
			 jQuery(this).siblings("li").children("ul").fadeOutOrHide(settings.fadeOutSpeed);
		});
	
		jQuery(this).find("ul").hide();
	}
});


