var timeout    = 250;
var ddmenuTimer = 0;
var ddmenuVisibleChildMenu = null;
var ddmenuOverMenuItem = null;
var ddmenuParentMenuItem = null;
		
		function ddmenu_mouseover()
		{
			var menuItemName = $(this).attr("menuItemName");
			//console.log("ddmenu_mouseover: %s", menuItemName);

			ddmenu_timer_cancel();
			
		    $(this).bind('mouseout', ddmenu_mouseout)

			// Find the parent and child menu elements.
			var newParent = $(this).parents('li');
			var newChildMenu = $(this).find('ul');

			// Find the top level menu menuItemName (if this is not a top level menu menuItemName itself).
			if (newParent.length == 0)
			{
				//console.log('ddmenu_mouseover: This is a top level menu item');
				//console.log('ddmenu_mouseover: ddmenuVisibleChildMenu = %s', ddmenuVisibleChildMenu ? '(object)' : 'null');
				if (ddmenuVisibleChildMenu)
				{
					//console.log('ddmenu_mouseover: ddmenuVisibleChildMenu[0] != newChildMenu[0] = %s', 
						//ddmenuVisibleChildMenu[0] != newChildMenu[0] ? 'true' : 'false');
				}
																						 
				if (!ddmenuVisibleChildMenu || ddmenuVisibleChildMenu[0] != newChildMenu[0])
				{
					ddmenu_hide(); // Make sure the previously selected top level menu menuItemName's child menu is hidden.					
					//console.log('ddmenu_mouseover: Setting new parent');
					ddmenuParentMenuItem = $(this);
				}
			}

			// Close previous menu (if it is different than the one we want to open now).
			if (newChildMenu.length > 0)
			{
				//console.log("ddmenu_mouseover: %s -> %s",
					//ddmenuVisibleChildMenu ? ddmenuVisibleChildMenu[0].getAttribute('menuItemName') : 'empty',
					//newChildMenu && newChildMenu.length ? newChildMenu[0].getAttribute('menuItemName') : 'empty');
				
				if (!ddmenuVisibleChildMenu || ddmenuVisibleChildMenu[0] != newChildMenu[0])
				{
					//console.log("ddmenu_mouseover: Showing new menu item");
					ddmenuVisibleChildMenu = newChildMenu;
					ddmenuOverMenuItem = $(this);
					ddmenu_show();
				}

    			else				
				{
					//console.log('ddmenu_mouseover: Setting child menu to null');
                    //ddmenuVisibleChildMenu = null;
					//console.log("ddmenu_mouseover: Doing nothing");
				}
				
			}

			else			
			{
				//console.log('ddmenu_mouseover: No child menu to show.');
			}
			
			return false;
		}

		function ddmenu_mouseout()
		{
			var menuItemName = $(this).attr("menuItemName");
			//console.log("ddmenu_mouseout: %s", menuItemName);
			ddmenuTimer = window.setTimeout(ddmenu_timer_handler, timeout);

			$(this).unbind('mouseout', ddmenu_mouseout)
		}
		
		function ddmenu_timer_handler()
		{
			if (ddmenuVisibleChildMenu && ddmenuVisibleChildMenu.length)
			{
				//console.log("ddmenu_timer_handler");
				//console.log("ddmenu_timer_handler: %s -> empty", ddmenuVisibleChildMenu[0].getAttribute('menuItemName'));
				ddmenu_hide();
				//console.log("ddmenu_timer_handler: Showing new menu item");
				ddmenuVisibleChildMenu = null;			
			}
		}
		
		function ddmenu_timer_cancel()
		{  
			if (ddmenuVisibleChildMenu && ddmenuVisibleChildMenu.length)
			{
				//console.log("ddmenu_timer_cancel: %s", ddmenuVisibleChildMenu[0].getAttribute('menuItemName'));
			}

			if (ddmenuTimer)
			{  
				window.clearTimeout(ddmenuTimer);
		        ddmenuTimer = null;
			}
		}
		
		function ddmenu_show()
		{			
			if (ddmenuVisibleChildMenu && ddmenuVisibleChildMenu.length)
			{
				//console.log("ddmenu_show: %s", ddmenuVisibleChildMenu[0].getAttribute('menuItemName'));
				ddmenuVisibleChildMenu.show('fast');
			}
		}
		
		function ddmenu_hide()
		{ 
			if (ddmenuVisibleChildMenu && ddmenuVisibleChildMenu.length) 
			{
				//console.log("ddmenu_hide: %s", ddmenuVisibleChildMenu[0].getAttribute('menuItemName'));
				
				//console.log('ddmenu_hide: Hiding child menu.');
				ddmenuVisibleChildMenu.hide("fast");
				//console.log("ddmenu_hide: Showing new menu item");
				ddmenuVisibleChildMenu = null;
			}
				
			if (ddmenuParentMenuItem)
			{
				//console.log('ddmenu_hide: Removing rollover image from parent.');
				var anchor = ddmenuParentMenuItem.children('a');
				if (anchor.length > 0)
				{
					//console.log('ddmenu_hide: Found anchor.');
					var image = anchor.children('img');
					
					if (image.length > 0)
					{
						//console.log('ddmenu_hide: Found image.');
						IMG.rollover.hideRollover(image);
						
					}
				}
			}
		}
		
