
// ===================== mirwww_navexp Class ======================================

function mirwww_navexp (strInstanceName, strCgiPath, strAssetsPath, strShowHome)
{
	this.m_InstanceName = strInstanceName;
	this.m_CgiPath		= strCgiPath;
	this.m_AssetsPath	= strAssetsPath;
	this.m_ShowHome	    = false;
	
	if (strShowHome != null && strShowHome == 'true')
		this.m_ShowHome = true;

	this.m_src_Space = strAssetsPath + 'space.gif';				
	this.m_arrowDownImage = strAssetsPath + 'ArrowDown.gif';
	this.m_arrowDownOverImage = strAssetsPath + 'ArrowDown_over.gif';
	this.m_arrowRightImage = strAssetsPath + 'ArrowRight.gif';
	this.m_arrowRightOverImage = strAssetsPath + 'ArrowRight_over.gif';	
		
	this.m_arrowRightImageWidth = "11";
	this.m_arrowRightImageHeight = "11";
	this.m_arrowDownImageWidth = "11";
	this.m_arrowDownImageHeight = "11";	

	this.m_HeaderTableId = strInstanceName + '_HeaderTable';
	this.m_HeaderMenuId  = strInstanceName + '_HeaderMenu';
	
	this.m_selectedElements = new Array(0);

	this.m_ds = new Array();
	this.m_di = 0;

	
	// primary display 
	mirwww_navexp.prototype.Display = mirwww_navexp_Display;
	mirwww_navexp.prototype.DisplayNode = mirwww_navexp_DisplayNode;
	
	// content page generation
	mirwww_navexp.prototype.OpeningHtml = mirwww_navexp_OpeningHtml;
	mirwww_navexp.prototype.CoreHtml = mirwww_navexp_CoreHtml;
	mirwww_navexp.prototype.ClosingHtml = mirwww_navexp_ClosingHtml;	
	
	// runtime support
	mirwww_navexp.prototype.topCollectionItem_mouseover	= mirwww_navexp_topCollectionItem_mouseover;
	mirwww_navexp.prototype.topCollectionItem_mouseout	= mirwww_navexp_topCollectionItem_mouseout;
		
	mirwww_navexp.prototype.childCollectionItem_mouseover = mirwww_navexp_childCollectionItem_mouseover;
	mirwww_navexp.prototype.childCollectionItem_mouseout	= mirwww_navexp_childCollectionItem_mouseout;

	mirwww_navexp.prototype.highlightItem					= mirwww_navexp_highlightItem;
	mirwww_navexp.prototype.unhighlightItem				= mirwww_navexp_unhighlightItem;

	mirwww_navexp.prototype.linkItem_mouseover			= mirwww_navexp_linkItem_mouseover;
	mirwww_navexp.prototype.linkItem_mouseout				= mirwww_navexp_linkItem_mouseout;

	mirwww_navexp.prototype.topCollectionItem_onclick		= mirwww_navexp_topCollectionItem_onclick;
	mirwww_navexp.prototype.childCollectionItem_onclick	= mirwww_navexp_childCollectionItem_onclick;
	mirwww_navexp.prototype.linkItem_onclick				= mirwww_navexp_linkItem_onclick;

	mirwww_navexp.prototype.closeChildMenusOf				= mirwww_navexp_closeChildMenusOf;
	mirwww_navexp.prototype.closeOpenSiblingsOf			= mirwww_navexp_closeOpenSiblingsOf;

	mirwww_navexp.prototype.setMenuDisplayStatus			= mirwww_navexp_setMenuDisplayStatus;
	mirwww_navexp.prototype.resetMenus					= mirwww_navexp_resetMenus;
}

function mirwww_navexp_Display(node)
{
	this.m_ds[this.m_di++] = 
		'<!-- Header Table -->' + 
		'<table id="' + this.m_HeaderTableId + '" style="width:100%" border="0" cellspacing="0" cellpadding="0">' +

		'	<tr>' +
		'		<td colspan="3" class="ddm_HeaderSpacerCell"><img src="' + this.m_src_Space + '" width="16" height="1"></td>' +
		'	</tr>' +
		'	<tr>' +
		'		<td id="' + this.m_HeaderMenuId + '" class="ddm_HeaderMenuCell" width="10">' +
		'';

// opening HTML for the Home node... but really binding the whole top level
		this.m_ds[this.m_di++] =
			'<table border="0" cellpadding="0" cellspacing="0">\n' +
			'<tr>\n';
// opening HTML

// core HTML
	this.DisplayNode(node);		// recursive walk...
// core HTML

// closing HTML for the Home node...
		this.m_ds[this.m_di++] =
			'	</tr>\n' +
			'</table>\n';
// closing HTML for the Home node...

	this.m_ds[this.m_di++] = 
		'       </td>' +
		'	</tr>' +
		'</table>' +	
		'';

	document.write(this.m_ds.join(''));
}

function mirwww_navexp_DisplayNode (parentElement, parentPath)
{
	// Create a variable containing all children of the passed-in element. 
	var childList = parentElement.m_subNodes;

	// Call the function that generates the opening html code for a collection (the generated
	// code will typically be an opening <div> tag that will act as a container for the collection).
	this.OpeningHtml(parentElement);

	if (parentElement.m_level == 0 && this.m_ShowHome)
		this.CoreHtml(parentElement, parentPath);

	// Loop through the children of the passed-in element. For each child, run the core html function,
	// and if that child has children of its own, recursively call the DisplayNode function.
	
	for (var i=0; i<childList.length; i++)
	{	
		var childNode = childList[i];
		var nodepath  = "";
			
		if (parentPath)
		{
			nodePath = parentPath + "." + i;
		}
		else
		{
			nodePath = i.toString();
		}

		this.CoreHtml(childNode, nodePath);

		if (childNode.m_subNodes.length > 0)
		{
			this.DisplayNode(childNode, nodePath);
		}
	}

	/* Call the function that generates the closing html code for a collection (the generated
		code will typically be a closing </div> tag for the collection container).*/
		
	this.ClosingHtml(parentElement);
}

// ============== Page Data Generation functions ========================


function mirwww_navexp_OpeningHtml(parentElement)
{
	var level = parentElement.m_level;

//	if (level == 0 && this.m_ShowHome)
//		level = 1;	// fake it...

	if (level == 0) // Home node
	{

	}
	else 
	if (level == 1) // Top-level menu items
	{
		this.m_ds[this.m_di++] =
			'<div class="ddm_TopChildCollectionContainer" style="display:none;">\n' +
			'	<table class="ddm_TopChildListTable" border="0" cellpadding="0" cellspacing="0">\n' +
			'		<tr>\n' +
			'			<td>\n' +
			'				<img src="' + this.m_src_Space + '" width="1" height="2"></td>\n' +
			'		</tr>\n';
	}
	else							// Child menu items
	{
		this.m_ds[this.m_di++] =
			'<div class="ddm_SubChildCollectionContainer" style="display:none">\n' +
			'	<table class="ddm_SubChildListTable" border="0" cellpadding="0" cellspacing="0">\n' +
			'		<tr>\n' +
			'			<td>\n' +
			'				<img src="' + this.m_src_Space + '" width="1" height="2"></td>\n' +
			'		</tr>\n';
	}
}

function mirwww_navexp_CoreHtml(childElement, nodeLocation)
{
	var label = childElement.m_label;
	var id = nodeLocation;

	var level = childElement.m_level;

	if (level == 0 && this.m_ShowHome)
		level = 1;	// fake it...
	
	if (level == 0) // Home node
	{

	}
	else
	if (level == 1) // Top-level menu items
	{
		var linkTarget = "_self";
		var url = childElement.m_href.replace(/'/g, "\\'");
	
		if (childElement.m_subNodes.length == 0 || childElement.m_level == 0)
		{	// "item"
			this.m_ds[this.m_di++] =
				'<td id="' + id + '" class="ddm_TopLinkItem"' +
				' onclick="' + this.m_InstanceName + '.linkItem_onclick(event, this, \'' + url + '\', \'' + linkTarget + '\')"' +
				' onmouseover="' + this.m_InstanceName + '.linkItem_mouseover(this)"' + 
				' onmouseout="' + this.m_InstanceName + '.linkItem_mouseout(this)">\n' +
				'	' + label + '\n' +
				'</td>\n';
		}
		else 
		{	// "collection"
			this.m_ds[this.m_di++] =
				'<td id="' + id + '"' +
// bjn			' onclick="' + this.m_InstanceName + '.topCollectionItem_onclick(event, this)"' +
/* bjn */		' onclick="' + this.m_InstanceName + '.linkItem_onclick(event, this, \'' + url + '\', \'' + linkTarget + '\')"' +
				' onmouseover="' + this.m_InstanceName + '.topCollectionItem_mouseover(event, this)"' +
				' onmouseout="' + this.m_InstanceName + '.topCollectionItem_mouseout(event, this)">\n' +
				'	<table class="ddm_TopCollectionItemTable" border="0" cellpadding="0" cellspacing="0">\n' +
				'		<tr>\n' +
				'			<td class="ddm_TopCollectionItemArrowCell">\n' +
				'				<img src="' + this.m_arrowDownImage + '" width="' + this.m_arrowDownImageWidth + '" height="' + this.m_arrowDownImageHeight + '"></td>\n' +
				'			<td class="ddm_TopCollectionItem">\n' +
				'				' + label + '</td>\n' +
				'		</tr>\n' +
				'	</table>\n';
		}
	}
	else // Child menu items
	{
		var linkTarget = "_self";
		var url = childElement.m_href.replace(/'/g, "\\'");

		if (childElement.m_subNodes.length == 0)
		{	// "item"
			this.m_ds[this.m_di++] =
				'<tr>\n' +
				'	<td id="' + id + '" class="ddm_ChildLinkItem"' +
				' onclick="' + this.m_InstanceName + '.linkItem_onclick(event, this, \'' + url + '\', \'' + linkTarget + '\')"' +
				' onmouseover="' + this.m_InstanceName + '.linkItem_mouseover(this)"' +
				' onmouseout="' + this.m_InstanceName + '.linkItem_mouseout(this)">\n' +
				'	' + label + '\n' +
				'	</td>\n' +
				'</tr>\n';
		}
		else 
		{ // "collection"
			this.m_ds[this.m_di++] =			
				'<tr>\n' +
				'	<td id="' + id + '"' +
// bjn			' onclick="' + this.m_InstanceName + '.childCollectionItem_onclick(event, this)"' +
/* bjn */		' onclick="' + this.m_InstanceName + '.linkItem_onclick(event, this, \'' + url + '\', \'' + linkTarget + '\')"' +
				' onmouseover="' + this.m_InstanceName + '.childCollectionItem_mouseover(event, this)"' +
				' onmouseout="' + this.m_InstanceName + '.childCollectionItem_mouseout(event, this)">\n' +
				'		<table class="ddm_ChildCollectionItemTable" style="width:100%" border="0" cellpadding="0" cellspacing="0">\n' +
				'			<tr>\n' +
				'				<td class="ddm_ChildCollectionItem">\n' +
				'					' + label + '</td>\n' +
				'				<td class="ddm_ChildCollectionItemArrowCell">\n' +
				'					<img src="' + this.m_arrowRightImage + '" width="' + this.m_arrowRightImageWidth + '" height="' + this.m_arrowRightImageHeight + '"></td>\n' +
				'			</tr>\n' +
				'		</table>\n';
		}
	}
}

function mirwww_navexp_ClosingHtml(parentElement)
{
	var level = parentElement.m_level;

//	if (level == 0 && this.m_ShowHome)
//		level = 1;	// fake it...

	if (level == 0) // Home node
	{

	}
	else 
	if (level == 1) // Top-level menu items
	{
		this.m_ds[this.m_di++] =
			'			<tr>\n' +
			'				<td>\n' +
			'					<img src="' + this.m_src_Space + '" width="1" height="2"></td>\n' +
			'			</tr>\n' +
			'		</table>\n' +
			'	</div>\n' +
			'</td>\n'; // Closing tag for parent cell
	}
	else							// Child menu items
	{
		this.m_ds[this.m_di++] =
			'			<tr>\n' +
			'				<td>\n' +
			'					<img src="' + this.m_src_Space + '" width="1" height="2"></td>\n' +
			'			</tr>\n' +
			'		</table>\n' +
			'	</div>\n' +
			'	</td>\n' + // Closing tag for parent cell.
			'</tr>\n'; // Closing tag for parent row.
	}
}

// ============= Runtime Support Functions =============================

function mirwww_navexp_topCollectionItem_mouseover(e, element)
{
	if (navigator.appName == "Netscape")
	{
		this.highlightItem(element);
		
		if (element.getElementsByTagName("div").length > 0)
		{
		
			var headerTable = document.getElementById(this.m_HeaderTableId);
			var headerHeight = parseInt(headerTable.offsetHeight);
			var headerTop = parseInt(headerTable.offsetTop);		
			var headerLeft = parseInt(headerTable.offsetLeft);		
			var trikLeft = 0;
			var trikTop = 0;
			
			var container = headerTable.offsetParent;				
		
			while (container)
			{
				trikLeft += container.offsetLeft;
				trikTop += container.offsetTop;			
				container = container.offsetParent;
			}
			
			
			var refElement = document.getElementById(this.m_HeaderMenuId);
			var menuBottomBorder = parseInt(getComputedStyle(refElement, '').borderBottomWidth);
			var menuBottomPadding = parseInt(getComputedStyle(refElement, '').paddingBottom);

			if (isNaN(menuBottomBorder)) { menuBottomBorder = 0 }
			if (isNaN(menuBottomPadding)) { menuBottomPadding = 0 }
			
			headerHeight = parseInt(headerHeight) - parseInt(menuBottomBorder) - parseInt(menuBottomPadding);

			if (element.getElementsByTagName("div").length > 0)
			{
				var childMenu = element.getElementsByTagName("div")[0];
				childMenu.style.top = trikTop + headerTop + headerHeight;
				childMenu.style.left = trikLeft + headerLeft + element.offsetLeft;
				childMenu.style.display = "block";
				this.setMenuDisplayStatus(childMenu, "on");
		
			}

		}
		
	}
	else //IE Branch
	{						
		this.highlightItem(element);

		var headerTable = document.getElementById(this.m_HeaderTableId);
		var headerHeight = parseInt(headerTable.offsetHeight);
		var headerTop = parseInt(headerTable.offsetTop);		
		var headerLeft = parseInt(headerTable.offsetLeft);		

		var trikLeft = 0;
		var trikTop = 0;
		
		
		var container = headerTable.offsetParent;				
	
		while (container)
		{
			trikLeft += container.offsetLeft;
			trikTop += container.offsetTop;			
			container = container.offsetParent;
		}


		var menuBottomBorder = parseInt(document.getElementById(this.m_HeaderMenuId).currentStyle.borderBottomWidth);
		var menuBottomPadding = parseInt(document.getElementById(this.m_HeaderMenuId).currentStyle.paddingBottom);
		
		if (isNaN(menuBottomBorder)) { menuBottomBorder = 0 }
		if (isNaN(menuBottomPadding)) { menuBottomPadding = 0 }

		headerHeight = parseInt(headerHeight) - parseInt(menuBottomBorder) - parseInt(menuBottomPadding);

		if (element.getElementsByTagName("div").length > 0)
		{
			var childMenu = element.getElementsByTagName("div")[0];
			childMenu.style.top = trikTop + headerTop + headerHeight;
			childMenu.style.left = trikLeft + headerLeft + element.offsetLeft;
			childMenu.style.display = "block";
			this.setMenuDisplayStatus(childMenu, "on");
	
		}	

	}
}

function mirwww_navexp_topCollectionItem_mouseout(e, element)
{
	if (!e) { e = window.event; }		

	if (navigator.appName == "Netscape") //NN/Mozilla
	{
		this.unhighlightItem(element);
		
		if (element.getElementsByTagName("div").length > 0)
		{		
			var childMenu = element.getElementsByTagName("div")[0];
			//if (childMenu.style.display == "none")
			//{
				childMenu.style.display = "none";
				this.unhighlightItem(element);
				this.setMenuDisplayStatus(childMenu, "off");
			//}
		}
	}
	else // IE
	{
		this.unhighlightItem(element);

		if (element.getElementsByTagName("div").length > 0)
		{			
			var childMenu = element.getElementsByTagName("div")[0];
			childMenu.style.display = "none";
			this.setMenuDisplayStatus(childMenu, "off");
		}
	}
}

function mirwww_navexp_childCollectionItem_mouseover(e, element)
{
	if (navigator.appName == "Netscape")
	{
		this.highlightItem(element);
		
		if (element.getElementsByTagName("div").length > 0)
		{	
			var childMenu = element.getElementsByTagName("div")[0];
			//getY(childMenu);
			childMenu.style.top = element.style.top;
			//childMenu.style.top = childMenu.parentNode.top;
			childMenu.style.display = "block";
			this.setMenuDisplayStatus(childMenu, "on");
		}
	}
	else
	{
		
		this.highlightItem(element);
		
		if (element.getElementsByTagName("div").length > 0)
		{					
			var childMenu = element.getElementsByTagName("div")[0];
			childMenu.style.top = element.offsetTop;
			childMenu.style.display = "block";
			this.setMenuDisplayStatus(childMenu, "on");
		}
	}
}

function mirwww_navexp_highlightItem(element)
{
	var itemDisplayTable = element.getElementsByTagName("table")[0];
	// Set style for item's display table element.
	if (itemDisplayTable.className == "ddm_TopCollectionItemTable")
	{
		itemDisplayTable.className = "ddm_TopCollectionItemTable_over";
	}
	else if (itemDisplayTable.className == "ddm_ChildCollectionItemTable")
	{
		itemDisplayTable.className = "ddm_ChildCollectionItemTable_over";
	}

	
	var tableCells = itemDisplayTable.getElementsByTagName("td");
	for (var i=0; i<tableCells.length; i++)
	{
		// Set style for item's label cell element.
		if (tableCells[i].className == "ddm_TopCollectionItem")
		{
			tableCells[i].className = "ddm_TopCollectionItem_over";
		}
		else if (tableCells[i].className == "ddm_ChildCollectionItem")
		{
			tableCells[i].className = "ddm_ChildCollectionItem_over";
		}

		// Change arrow image to mouseover version.
		if (tableCells[i].className == "ddm_TopCollectionItemArrowCell")
		{
			tableCells[i].getElementsByTagName("img")[0].src = this.m_arrowDownOverImage;
		}
		else if (tableCells[i].className == "ddm_ChildCollectionItemArrowCell")
		{
			tableCells[i].getElementsByTagName("img")[0].src = this.m_arrowRightOverImage;
		}
	}
}

function mirwww_navexp_childCollectionItem_mouseout(e, element)
{
	if (!e) { e = window.event; }

	//if (navigator.appName == "Netscape") // NN/Mozilla
	//{
	
	//this.unhighlightItem(element);
	//if (element.getElementsByTagName("div").length > 0)
	//{				
			
	//		if (childMenu.style.display == "none")
	//		{
	//			var childMenu = element.getElementsByTagName("div")[0];
	//			this.unhighlightItem(element);
	//			childMenu.style.display = "none";
	//			this.setMenuDisplayStatus(childMenu, "off");
	//		}
	//}				
	//}

	//else // IE
	//{
		this.unhighlightItem(element);

		if (element.getElementsByTagName("div").length > 0)
		{					
			var childMenu = element.getElementsByTagName("div")[0];
			childMenu.style.display = "none";

			this.setMenuDisplayStatus(childMenu, "off");
		}
	//}
}

function mirwww_navexp_unhighlightItem(element)
{
	var itemDisplayTable = element.getElementsByTagName("table")[0];

	// Set style for item's display table element.
	if (itemDisplayTable.className == "ddm_TopCollectionItemTable_over")
	{
		itemDisplayTable.className = "ddm_TopCollectionItemTable";
	}
	else if (itemDisplayTable.className == "ddm_ChildCollectionItemTable_over")
	{
		itemDisplayTable.className = "ddm_ChildCollectionItemTable";
	}

	var tableCells = itemDisplayTable.getElementsByTagName("td")
	for (var i=0; i<tableCells.length; i++)
	{

		// Set style for item's label cell element.
		if (tableCells[i].className == "ddm_TopCollectionItem_over")
		{
			tableCells[i].className = "ddm_TopCollectionItem";
		}
		else if (tableCells[i].className == "ddm_ChildCollectionItem_over")
		{
			tableCells[i].className = "ddm_ChildCollectionItem";
		}

		// Change arrow image to mouseover version.
		if (tableCells[i].className == "ddm_TopCollectionItemArrowCell")
		{
			tableCells[i].getElementsByTagName("img")[0].src = this.m_arrowDownImage;
		}
		else if (tableCells[i].className == "ddm_ChildCollectionItemArrowCell")
		{
			tableCells[i].getElementsByTagName("img")[0].src = this.m_arrowRightImage;
		}

	}
}

function mirwww_navexp_linkItem_mouseover(element)
{		
	
	if (element.className == "ddm_TopLinkItem")
	{
		element.className = "ddm_TopLinkItem_over";
	}

	else if (element.className == "ddm_ChildLinkItem")
	{
		element.className = "ddm_ChildLinkItem_over";
	}				
}

function mirwww_navexp_linkItem_mouseout(element)
{
	if (element.className == "ddm_TopLinkItem_over")
	{
		element.className = "ddm_TopLinkItem";
	}

	else if (element.className == "ddm_ChildLinkItem_over")
	{
		element.className = "ddm_ChildLinkItem";
	}
}

function mirwww_navexp_topCollectionItem_onclick(e, element)
{
	var headerTable  = document.getElementById(this.m_HeaderTableId);
	var headerHeight = headerTable.offsetHeight;

	var trikLeft = 0;
	var trikTop = 0;
	
	var container = headerTable.offsetParent;				
	while (container)
	{
		trikLeft += container.offsetLeft;
		trikTop += container.offsetTop;			
		container = container.offsetParent;
	}

	if (navigator.appName == "Netscape")
	{
		if (element.getElementsByTagName("div").length > 0)
		{				
			var childMenu = element.getElementsByTagName("div")[0];

			if (childMenu.style.display == "none")
			{
				this.resetMenus();
				childMenu.style.top = headerHeight + trikTop;
				childMenu.style.left = element.offsetLeft + trikLeft;
				childMenu.style.display = "block";
				this.setMenuDisplayStatus(childMenu, "on");
			}
			else if (childMenu.style.display == "block")
			{
				this.resetMenus();
				this.highlightItem(element);
				/* Note: have to rehighlight the element since the mouse is logically
					still over this element, and the closeChildMenusOf function loop sets parent
					elements of ALL child menus (including the target) back to regular style */
			}
		}

		e.stopPropagation();
	}

	else // IE Branch
	{
		e.cancelBubble = true;
	}
}

function mirwww_navexp_childCollectionItem_onclick(e, element)
{
	if (navigator.appName == "Netscape")
	{
		if (element.getElementsByTagName("div").length > 0)
		{				
			var childMenu = element.getElementsByTagName("div")[0];

			if (childMenu.style.display == "none")
			{
				this.closeOpenSiblingsOf(element);
				childMenu.style.top = element.offsetTop;
				childMenu.style.left = element.offsetParent.offsetWidth;
				//alert(childMenu.style.left);
				childMenu.style.display = "block";
				this.setMenuDisplayStatus(childMenu, "on");
			}
			else if (childMenu.style.display == "block")
			{
				this.closeChildMenusOf(element);
				this.highlightItem(element);
				/* Note: have to rehighlight the element since the mouse is logically
					still over this element, and the closeChildMenusOf function loop sets parent
					elements of ALL child menus (including the target) back to regular style */
			}
		}

		e.stopPropagation();
	}
	else // IE Branch
	{
		e.cancelBubble = true;
	}
}

function mirwww_navexp_linkItem_onclick(e, element, url, target)
{
// alert (url);

	if (target == "")
	{
		target = "_self";
	}
	window.open(url, target);
	this.resetMenus();

	if (navigator.appName == "Netscape")
	{
		if (element.className == "ddm_ChildLinkItem_over")
		{
			element.className = "ddm_ChildLinkItem";
		}
		else if (element.className == "ddm_TopLinkItem_over")
		{
			element.className = "ddm_TopLinkItem";
		}			
		e.stopPropagation();
	}
// bjn 	
	else // IE Branch
	{
		e.cancelBubble = true;
	}
}

function mirwww_navexp_closeChildMenusOf(element)
// Closes an element's associated child menu as well as all decendents of that menu.
{ 
	var decendentMenus = element.getElementsByTagName("div");

	for (var i=decendentMenus.length-1; i>=0; i--)
	{
		var childMenu = decendentMenus[i];		

		this.unhighlightItem(childMenu.parentNode);
		
		childMenu.style.display = "none";

		this.setMenuDisplayStatus(childMenu, "off");
	}
}

function mirwww_navexp_closeOpenSiblingsOf(element)
{
	var hierarchyLevel = element.id.split(".").length;
	
	if (hierarchyLevel == 1) // Top-level items
	{
		var siblingCellElements = element.parentNode.cells;
		
		for (var i=0; i<siblingCellElements.length; i++)
		{
			var siblingCellElement = siblingCellElements[i];
			
			if (siblingCellElement.getElementsByTagName("div").length > 0)
			{
				if (siblingCellElement.getElementsByTagName("div")[0].style.display == "block" && siblingCellElement != element)
				{
					this.closeChildMenusOf(siblingCellElement);
				}
			}				
		}			
	}
	else // Sub-level items
	{
		var siblingRowElements = element.parentNode.parentNode.rows; // Note: had to use parentNode twice to get past the TBODY element to the TABLE element.

		for (var i=0; i<siblingRowElements.length; i++)
		{
			var siblingCellElement = siblingRowElements[i].cells[0];

			if (siblingCellElement.getElementsByTagName("div").length > 0)
			{
				if (siblingCellElement.getElementsByTagName("div")[0].style.display == "block" && siblingCellElement != element)
				{
					this.closeChildMenusOf(siblingCellElement);
				}
			}
		}
	}
}

function mirwww_navexp_setMenuDisplayStatus(menuElement, status)
/* This function uses a global array (defined above) to record element references
	to all menu containers that are currently visible. */
{
	if (status == "on")
	{
		/* If setting status to "on", add the element to the selectedElements array. */
		var alreadyOn = false;
		for (var i=0; i<this.m_selectedElements.length; i++)
		{
			if (this.m_selectedElements[i] == menuElement)
			{
				alreadyOn = true;
				break;
			}
		}

		if (!alreadyOn)
		{
			this.m_selectedElements.concat(new Array(menuElement));
		}
	}
	else if (status == "off")
	{
		/* If setting status to "off", loop through the selectedElements array and
			find the array item that matches the current menu element and remove it
			from the array. */
		for (var i=0; i<this.m_selectedElements.length; i++)
		{
			if (this.m_selectedElements[i] == menuElement)
			{
				this.m_selectedElements.splice(i, 1); //Removes the selected element from the array.
				break;
			}
		}
	}
}

function mirwww_navexp_resetMenus(e)
{
	var i = 0;
	var topLevelMenuCell = document.getElementById(i.toString());
	while (topLevelMenuCell != null)
	{			
		if (topLevelMenuCell.getElementsByTagName("div").length > 0 && topLevelMenuCell.getElementsByTagName("div")[0].style.display == "block")
		{
			this.closeChildMenusOf(topLevelMenuCell);
		}
		i++;
		topLevelMenuCell = document.getElementById(i.toString());
	}

	this.m_selectedElements.length = 0; // Clear out the array.
}

function getY(e) {
var y = 0;
while (e.offsetParent != null) {
	y += e.offsetTop;
	//alert(e);
	e = e.offsetParent;
	
}
//alert(e + ' ' + y);

}


// ==================== the end ===========================
