function ref(name)
{
	var retobj;
	if (isIE)
		retobj = document.all[name];
	else if (isNS4)
		retobj = document.layers[name];
	else if (isNS5)
		retobj = document.getElementById(name);
	return retobj;
}

var shown = false;

function keepOpen()
{
	shown = true;
}

function hide(name)
{
	if (isIE || isNS5)
		ref(name).style.visibility = "hidden";
	else if (isNS4)
		ref(name).visibility = "hidden";
}

function checkActive(menuSystem, itemName, menuName)
{
	var found = false;
	for (var i=0; i<menuSystem.activeItems.length; i++)
	{
		if (menuName == menuSystem.activeItems[i].parentName && itemName == 
			menuSystem.activeItems[i].name && menuSystem.activeItems[i].isActive)
		{
			found = true;
			break;
		}
	}
	return found;
}

function hideChildren(menuSystem)
{
	var i;
	for (i=0; i<menuSystem.activeItems.length; i++)
	{
		eval(menuSystem.activeItems[i].functions);
		menuSystem.activeItems[i].isActive = false;
	}
	for (i=1; i<menuSystem.menus.length; i++)
		hide(menuSystem.menus[i]);
}

function recheck(menuSystem)
{
	if (!shown)
		eval("hideChildren(" + menuSystem.name + ")");
}

function check(menuSystem)
{
	shown = false;
	setTimeout("recheck(" + menuSystem.name + ")", menuSystem.hideTimer);
}

function hideAfter(menuSystem, name)
{
	shown = true;
	var i, j, start = menuSystem.menus.length;

	for (i=0; i<menuSystem.menus.length; i++)
		if (menuSystem.menus[i] == name && i < menuSystem.menus.length - 1)
			start = i + 1;

	for (i=0; i<menuSystem.activeItems.length; i++)
	{
		if (name == menuSystem.activeItems[i].parentName && menuSystem.activeItems[i].isActive)
		{
			for (j=i; j<menuSystem.activeItems.length; j++)
			{
				eval(menuSystem.activeItems[j].functions);
				menuSystem.activeItems[j].isActive = false;
			}
		}
	}

	if (start != menuSystem.menus.length)
		for (j=start; j<menuSystem.menus.length; j++)
			hide(menuSystem.menus[j]);		
}

function hideBeforeShow(menuSystem, itemName, menuName)
{
	shown = true;
	var i, j, start = menuSystem.menus.length;

	for (i=0; i<menuSystem.menus.length; i++)
		if (menuSystem.menus[i] == menuName && i < menuSystem.menus.length - 1)
			start = i + 1;

	for (i=0; i<menuSystem.activeItems.length; i++)
	{
		if (menuName == menuSystem.activeItems[i].parentName && itemName == 
			menuSystem.activeItems[i].name)
		{
			if (i >= 1 && menuSystem.activeItems[i-1].parentName == menuName)
			{
				eval(menuSystem.activeItems[i-1].functions);
				menuSystem.activeItems[i-1].isActive = false;
			}

			if (i < menuSystem.activeItems.length)
			{
				for (j=i+1; j<menuSystem.activeItems.length; j++)
				{
					eval(menuSystem.activeItems[j].functions);
					menuSystem.activeItems[j].isActive = false;
				}
			}
		}
	}

	if (start != menuSystem.menus.length)
		for (j=start; j<menuSystem.menus.length; j++)
			hide(menuSystem.menus[j]);		
}

function inverse(num)
{
	return(num * -1);
}

function show(menuSystem, showName, parentName, itemName, showDir, xOffset, yOffset, menuTrans, 
	transNum)
{
	eval("hideBeforeShow(" + menuSystem.name + ", \'" + itemName + "\', \'" + parentName + "\')");
	var found = checkActive(menuSystem, itemName, parentName);

	if (!found)
	{
		for (var i=0; i<menuSystem.activeItems.length; i++)
		{
			if (menuSystem.activeItems[i].name == itemName)
			{
				menuSystem.activeItems[i].isActive = true;
				break;
			}
		} 

		var childHeight = 0, childWidth = 0;
		var parentLeft = 0, parentTop = 0;
		var itemHeight = 0, itemWidth = 0;
		var itemLeft = 0, itemTop = 0;

		if (isIE || isNS5)
		{
			childHeight = ref(showName).offsetHeight;
			childWidth = ref(showName).offsetWidth;
			
			var parentElement = ref(parentName);
			var parentTag = ref(parentName).tagName;
			while (parentTag != "BODY")
			{
				parentLeft += parentElement.offsetLeft;
				parentTop += parentElement.offsetTop;
				parentElement = parentElement.offsetParent;
				parentTag = parentElement.tagName;
			}
				
			itemHeight = ref(itemName).offsetHeight;
			itemWidth = ref(itemName).offsetWidth;
			itemLeft = ref(itemName).offsetLeft;
			itemTop = ref(itemName).offsetTop;
		}
		else if (isNS4)
		{
			childHeight = ref(showName).clip.height;
			childWidth = ref(showName).clip.width;
			parentLeft = ref(parentName).pageX;
			parentTop = ref(parentName).pageY;
			itemHeight = ref(parentName).layers[itemName + "Norm"].clip.height;
			itemWidth = ref(parentName).layers[itemName + "Norm"].clip.width;
			itemLeft = ref(parentName).layers[itemName + "Norm"].x;
			itemTop = ref(parentName).layers[itemName + "Norm"].y;
		}
	
		var checkItem = itemName.split(parentName);
		checkItem = checkItem[1];
	
		var menuLeft = 0, menuTop = 0;
		if (showDir == "left")
		{
			menuLeft = parentLeft - childWidth - xOffset;
			menuTop = parentTop + itemTop + yOffset;
			if (checkItem == "Item0")
				menuTop = parentTop + yOffset;
		}
		else if (showDir == "right")
		{
			var menuLeft = parentLeft + itemWidth + xOffset;
			var menuTop = parentTop + itemTop + yOffset;
			if (checkItem == "Item0")
				menuTop = parentTop + yOffset;
		}
		else if (showDir == "above")
		{
			menuLeft = parentLeft + itemLeft + xOffset;
			menuTop = parentTop - childHeight - yOffset;
			if (checkItem == "Item0")
				menuLeft = parentLeft + xOffset;
		}
		else if (showDir == "below")
		{
			menuLeft = parentLeft + itemLeft + xOffset;
			menuTop = parentTop + itemHeight + yOffset;
			if (checkItem == "Item0")
				menuLeft = parentLeft + xOffset;
		}
	
		var tempLeft = menuLeft;
		var tempTop = menuTop;
	
		if (isIE || isNS5)
		{
			if ((menuLeft + childWidth) > (document.body.clientWidth + document.body.scrollLeft))
				menuLeft -= (menuLeft + childWidth) - (document.body.clientWidth + document.body.scrollLeft);
			else if (menuLeft < document.body.clientLeft)
				menuLeft += inverse(menuLeft);
			else if ((menuTop + ref(showName).offsetHeight) > (document.body.clientHeight + 
				document.body.scrollTop))
				menuTop -= (menuTop + ref(showName).offsetHeight) - (document.body.clientHeight + 
					document.body.scrollTop);
			else if (menuTop < document.body.clientTop)
				menuTop += inverse(menuTop);
	
			if (ref(showName).offsetHeight > document.body.offsetHeight)
				menuTop = tempTop;
			else if (childWidth > document.body.offsetWidth)
				menuLeft = tempLeft;
		}
		else if (isNS4)
		{
			if ((menuLeft + childWidth) > (window.innerWidth + window.pageXOffset))
				menuLeft -= (menuLeft + childWidth) - (window.innerWidth + window.pageXOffset);
			else if (menuLeft < window.pageXOffset)
				menuLeft += inverse(menuLeft);
			else if ((menuTop + ref(showName).clip.height) > (window.innerHeight + window.pageYOffset))
				menuTop -= (menuTop + ref(showName).clip.height) - (window.innerHeight + window.pageYOffset);
			else if (menuTop < window.pageYOffset)
				menuTop += inverse(menuTop);
	
			if (ref(showName).clip.height > window.innerHeight)
				menuTop = tempTop;
			else if (childWidth > window.innerWidth)
				menuLeft = tempLeft;
		}
		
		if (isIE || isNS5)
		{
			ref(showName).style.left = menuLeft;
			ref(showName).style.top = menuTop;
		}
		else if (isNS4)
		{
			ref(showName).left = menuLeft;
			ref(showName).top = menuTop;
		}

		if (isIE55 && menuTrans)
		{
			ref(showName).style.filter = "revealTrans(duration=.5, transition=" + transNum + ")";
			//ref(showName).style.filter = "progid:DXImageTransform.Microsoft.Fade(duration=1)"
			ref(showName).filters[0].apply();
		}
	}
	
	if (isIE || isNS5)
		ref(showName).style.visibility = "visible";
	else if (isNS4)
		ref(showName).visibility = "visible";

	if (!found)
		if (isIE55 && menuTrans)
			ref(showName).filters[0].play();
}

function rollover(image, src, trans, transNum)
{
	imgRef = document.images[image];
	if (isIE && trans)
	{
		imgRef.style.filter = "revealTrans(duration=.5, transition=" + transNum + ")";
		imgRef.filters.revealTrans.apply();
		imgRef.src = src;
		imgRef.filters.revealTrans.play();
	}
	else
		imgRef.src = src;
}

function colorBg(name, color)
{
	ref(name).style.backgroundColor = color;
}

function colorText(name, color)
{
	ref(name).color = color;
}

function switchLayer(menuName, itemName)
{
	ref(menuName).layers[itemName + "Norm"].visibility = "hidden";
	ref(menuName).layers[itemName + "Over"].visibility = "inherit";
}

function switchLayerBack(menuName, itemName)
{
	ref(menuName).layers[itemName + "Over"].visibility = "hidden";
	ref(menuName).layers[itemName + "Norm"].visibility = "inherit";
}

function nav(link, target)
{
	if (link != "" && link != "#")
	{
		if (target.indexOf("self") == -1 && target.length > 0)
		{
			var win;
			if (target == "new")
				win = window.open(link);
			else
				win = window.open(link, target);
			win.focus();
		}
		else if (link.indexOf("javascript:") != -1)
			eval(link);
		else
			location.href = link;
	}
}
