// menu library

// globals
var idTimer = null;
var fTimer = false;
var cTimerReset = 1000;		// delay before we reset menus
var cTimerChng = 150;		// delay before we change menus on mouse movement
var rgmiCur = new Array();	// indexed by length(mi.id) - 3
var rgmuCur = new Array();	// same index as rgmiCur
var idMiCur = "";			// mi.id for current page
var miOver = null;			// mi for MouseOver

// show/hide submenus
function ShowSubmenu(sz)
	{
	var i = sz.length - 3;
	var miCur = rgmiCur[i];
	var muCur = rgmuCur[i];
	var muNew = document.getElementById(sz);
	RmvClass(miCur, "here");
	if (muCur != null && muCur != muNew)
		HideSubmenu(i);
	if (muNew != null)
		{
		muCur = rgmuCur[i-1];
		muNew.style.top = GetPos(muCur, "Top") + muCur.offsetHeight + "px";
		muNew.style.left = GetPos(muCur, "Left") + "px";
		AddClass(muNew, "here");
		SetWidths(muNew);
		}
	rgmiCur[i] = null;
	rgmuCur[i] = muNew;
	}
	
function HideSubmenu(i)
	{
	var mi, mu;
	for (;i < rgmuCur.length; i = i + 1)
		{
		mi = rgmiCur[i];
		mu = rgmuCur[i];
		RmvClass(mi, "here");
		RmvClass(mu, "here");
		rgmiCur[i] = null;
		rgmuCur[i] = null;
		}
	}

function HideAllSubmenus()
	{
	// hide all submenus
	HideSubmenu(1);
	ShowPage();
	}

function ShowPage()
	{
	// show the menu path to the current page
	if (idMiCur == "" && typeof(parent.idMiForce) != "undefined")
		// current page is really a subpage of another page on the menu
		idMiCur = parent.idMiForce;
	if (idMiCur != "")
		{
		for (var c = 4; c <= idMiCur.length; c++)
			{
			var mi = document.getElementById(idMiCur.substr(0,c));
			DoMenuOver(mi);
			}
		}
	}


function StartTimer(szFn, cTimer)
	{
	StopTimer();
	if (fTimer == false)
		{
		idTimer = setTimeout(szFn, cTimer);
		fTimer = true;
		}
	}

function StopTimer()
	{
	if (fTimer)
		{
		clearTimeout(idTimer);
		idTimer = null;
		fTimer = false;
		}
	}

function MenuOver()
	{
	if (this.id.substr(0,2) == "mi")
		{
		miOver = this;
		StartTimer("MenuOverDelay()", cTimerChng);
		}
	}

function MenuOverDelay()
	{
	if (miOver != null)
		{
		DoMenuOver(miOver);
		if (miOver.id == idMiCur.substr(0, miOver.id.length))
			DoMenuOver(document.getElementById(idMiCur.substr(0, miOver.id.length+1)));
		}
	}

function DoMenuOver(mi)
	{
	if (mi != null)
		{
		var i = mi.id.length - 3;
		var miCur = rgmiCur[i];
		StopTimer();
		if (mi != miCur)
			{
			HideSubmenu(i+1);
			RmvClass(miCur, "here");
			AddClass(mi, "here");
			SetWidth(mi, mi.dxMax);
			ShowSubmenu("mu" + mi.id.slice(2));
			rgmiCur[i] = mi;
			}
		else
			{
			RmvClass(rgmiCur[i+1], "here");
			rgmiCur[i+1] = null;
			}
		}
	}

function MenuOut()
	{
	StartTimer("HideAllSubmenus()", cTimerReset);
	}

function GetMenuForItem(oItem)
	{
	var sz = "mu" + oItem.id.slice(2,-1);
	return document.getElementById(sz);
	}

function InitMenus()
	{
	var mi;
	var href = window.top.location.href; // use "top" in case we're in a frame
	
	switch (href.substr(href.length-1))
		{
	case "/":
	case "\\":
		href = href + "index.html";
		break;
		}
	for (var i = 0; i < document.links.length; i++)
		{
		mi = document.links[i];
		if (mi.id.substr(0,2) == "mi")
			{
			mi.onmouseover = MenuOver;
			mi.onmouseout = MenuOut;
			mi.onfocus = function() {this.blur();};
			mi.target = "_top";
			if (mi.href == href)
				idMiCur = mi.id;
			}
		}
	rgmuCur[0] = document.getElementById("mu1");
	SetWidths(rgmuCur[0]);
	ShowPage();
	}

function SetWidths(mu)
// Used for the case where the selected font for a menu item
// is different than the unselected font.  Forces the width of the
// item to be the wider of the two to prevent menus from moving left
// to right as the mouse moves over them.  If browser doesn't support
// width in this case then user sees movement, but still works.
	{
	var mi;

	for (var i = 0; i < mu.childNodes.length; i++)
		{
		mi = mu.childNodes[i];
		if (mi.dxMax)
			break; // already calculated for this menu
		if (mi.nodeType == 1 && mi.id && mi.id.substr(0,2) == "mi")
			{
			AddClass(mi, "widths");
			mi.dxMax = mi.offsetWidth;
			RmvClass(mi, "widths");
			SetWidth(mi, mi.dxMax);
			}
		}
	}

function SetWidth(e, w)
	{
	e.style.width = w + "px";
	if (e.offsetWidth > w)
		w -= e.offsetWidth - w;
	e.style.width = w + "px"
	}

function GetPos(elt, which)
	{
	var iPos = 0;
	while (elt != null)
		{
		iPos += elt["offset" + which];
		elt = elt.offsetParent;
		}
	return iPos;
	}
  
