var menuActive = false;
var menuSubactive = false;
var menuVisible = false;
var menuTriggered = false;
var menuShowTimerHandle = null;
var menuHideTimerHandle = null;
var menuButtonTimerHandle = null;
var menuPopupdelay = 300;
var menuButton;
var menuItem = null;
var menuItemflag;
var menuSubitem = null;
var menuSubitemflag;
var menuActiveMenu = null;
var menuSubactiveMenu = null;

var debugWin;

var menuDebug = false;

function menuInit(delay)
{
	menuPopupdelay = delay;
	if(menuDebug)
		setDebugger();
}

function setDebugger()
{
	menuDebug = true;
	var url = '/etc/stub.html';
	debugWin = window.open(url,"pixwiz2","scrollbars,menubar,status,width=400,height=1000,top=50,left=200");
	debugWin.focus();
	window.focus();
}

var menuDebugFirst = true;
function debugMsg(s)
{
	if(! menuDebug)
		return;
		
	if(menuDebugFirst)
	{
		debugWin.document.write("<font color=\"#FF0000\"><b>Debug Window Ready</b></font><br><pre>");
		menuDebugFirst = false;
	}
	debugWin.document.write(s + "\n");
}

function menuHighlight(e, flag)
{
	debugMsg("menuHighlight");
	e.className='menuitemhover' + flag;

	if(menuItem != null && menuItem != e)
		menuItem.className = 'menuitem' + menuItemflag;
		
	menuItem = e;
	menuItemflag = flag;
	
	menuActive = true;
}

function menuSubhighlight(e, flag)
{
	debugMsg("menuHighlight");
	e.className='submenuitemhover' + flag;

	if(menuSubitem != null && menuSubitem != e)
		menuSubitem.className = 'submenuitem' + menuSubitemflag;
	menuSubitem = e;
	menuSubitemflag = flag;
	
	menuActive = true;
	menuSubactive = true;
}

function menuSubdeactivate(menu)
{
	debugMsg("menuSubdeactivate(" + menu + ")");
	menuSubactive = false;
	menuSubhideTimerHandle = window.setTimeout("menuSubhideTimer('" + menu + "');", 10);
}

function menuDeactivate(menu)
{
	debugMsg("menuDeactivate(" + menu + ")");
	menuActive = false;
	menuHideTimerHandle = window.setTimeout("menuHideTimer('" + menu + "');", 10);
}

function menuSubactivate(menu)
{
	debugMsg("menuSubctivate(" + menu + ")");
	menuSubactive = true;
}

function menuActivate(menu)
{
	debugMsg("menuActivate(" + menu + ")");
	menuActive = true;
	menuButton.onmouseout = null;
}

function menuSubhideTimer(menu)
{
	debugMsg("menuSubhideTimer(" + menu + ")");
	if(! menuSubactive)
	{
		debugMsg("menuSubhideTimer - not active");
		menuSubkill(menu)
	}
	menuSubhideTimerHandle = null;
}

function menuSubhide(menu)
{
	debugMsg("menuSubhide()");
	if(menuVisible)
	{
		debugMsg("menuSubhide(" + menu + ") - visible");
		menuSubhideTimerHandle = window.setTimeout("menuSubhideTimer('" + menu + "');", 10);
	}
}

function menuHideTimer(menu)
{
	debugMsg("menuHideTimer(" + menu + ")");
	if(! menuActive && ! menuTriggered)
	{
		debugMsg("menuHideTimer - not active");
		menuKill(menu);
	}
	menuHideTimerHandle = null;
}

function menuHide(menu)
{
	if(menuVisible)
	{
		debugMsg("menuHide(" + menu + ") - visible");
		menuHideTimerHandle = window.setTimeout("menuHideTimer('" + menu + "');", 10);
	}
	else
	{
		debugMsg("menuHide(" + menu + ") - not visible");
		if(menuShowTimerHandle)
		{
			window.clearTimeout(menuShowTimerHandle);
			menuShowTimerHandle = null;
		}
		menuTriggered = false;
	}
}

function menuShowTimer(menu, triggercode)
{
	debugMsg("menuShowTimer(" + menu + ")");
	menuVisible = true;
	$(menu).style.visibility='visible';
	menuTriggered = false;
	menuActiveMenu = menu;
	menuShowTimerHandle = null;
	pageMenuOverCleanup(menu);
}

function menuCheckButton()
{
	debugMsg("menuCheckButton()");
	if(! menuActive)
	{
		pageMenuOut(menuButton);
		menuButton.onmouseout = menuButton.savemouseout;
	}
	menuButtonTimerHandle = null;
}

function menuSubkill(menu)
{
	debugMsg("menuSubkill()");
	if(menuSubitem != null)
		menuSubitem.className = 'submenuitem' + menuSubitemflag;
	$(menu).style.visibility='hidden';
	menuSubactive = false;
	menuSubactiveMenu = null;
	if(menuSubhideTimerHandle)
	{
		window.clearTimeout(menuSubhideTimerHandle);
		menuSubhideTimerHandle = null;
	}
}

function menuKill(menu)
{
	debugMsg("menuKill(" + menu + ")");

	if(menuSubactiveMenu != null)
		menuSubkill(menuSubactiveMenu);
	if(menuItem != null)
		menuItem.className = 'menuitem' + menuItemflag;
	menuActive = false;
	menuVisible = false;
	menuTriggered = false;
	pageMenuOutCleanup(menuButton);
	$(menu).style.visibility='hidden';
	menuButton.onmouseout = menuButton.savemouseout;
	if(menuHideTimerHandle)
	{
		window.clearTimeout(menuHideTimerHandle);
		menuHideTimerHandle = null;
	}
	if(menuButtonTimerHandle)
	{
		window.clearTimeout(menuButtonTimerHandle);
		menuButtonTimerHandle = null;
	}
}

function menuButtonDeferMouseout()
{
	debugMsg("menuButtonDeferMouseout()");
	menuButtonTimerHandle = window.setTimeout("menuCheckButton();", 10);
}

function menuSubshow(menu, item)
{
	debugMsg("menuSubshow(" + menu + ")");

	if(menuSubactiveMenu != null && menu != menuSubactiveMenu)
		menuSubkill(menuSubactiveMenu);
	
	menuSubactiveMenu = menu;
	var t = getTopCoord(item);
	var l = getLeftCoord(item) + item.offsetWidth;
	var m = $(menu);
	m.style.top = t + "px";
	m.style.left = l + "px";
	m.style.visibility = 'visible';
	menuSubactive = true;
}

function menuShow(menu, button)
{
	debugMsg("menuShow(" + menu + ")");

	if(! menuTriggered)
	{
		debugMsg("menuActiveMenu=" + menuActiveMenu);
		if(menuActiveMenu != null && menu != menuActiveMenu)
			menuKill(menuActiveMenu);
			
		var t = getTopCoord(button) + button.offsetHeight;
		var l = getLeftCoord(button);
		var m = $(menu);
		m.style.top = t + "px";
		m.style.left = l + "px";
		debugMsg("menuShow - not triggered");
		menuTriggered = true;
		menuButton = button;
		menuButton.savemouseout = menuButton.onmouseout;
		menuButton.onmouseout = menuButtonDeferMouseout;
		menuShowTimerHandle = window.setTimeout("menuShowTimer('" + menu + "');", menuPopupdelay);
	}
}

