
// ===================== ExplorerMenuBar Class ======================================

function ExplorerMenuBar (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 
	ExplorerMenuBar.prototype.Display = ExplorerMenuBar_Display;
	ExplorerMenuBar.prototype.DisplayNode = ExplorerMenuBar_DisplayNode;
	
	// content page generation
	ExplorerMenuBar.prototype.OpeningHtml = ExplorerMenuBar_OpeningHtml;
	ExplorerMenuBar.prototype.CoreHtml = ExplorerMenuBar_CoreHtml;
	ExplorerMenuBar.prototype.ClosingHtml = ExplorerMenuBar_ClosingHtml;	
	
	// runtime support
	ExplorerMenuBar.prototype.topCollectionItem_mouseover	= ExplorerMenuBar_topCollectionItem_mouseover;
	ExplorerMenuBar.prototype.topCollectionItem_mouseout	= ExplorerMenuBar_topCollectionItem_mouseout;
		
	ExplorerMenuBar.prototype.childCollectionItem_mouseover = ExplorerMenuBar_childCollectionItem_mouseover;
	ExplorerMenuBar.prototype.childCollectionItem_mouseout	= ExplorerMenuBar_childCollectionItem_mouseout;

	ExplorerMenuBar.prototype.highlightItem					= ExplorerMenuBar_highlightItem;
	ExplorerMenuBar.prototype.unhighlightItem				= ExplorerMenuBar_unhighlightItem;

	ExplorerMenuBar.prototype.linkItem_mouseover			= ExplorerMenuBar_linkItem_mouseover;
	ExplorerMenuBar.prototype.linkItem_mouseout				= ExplorerMenuBar_linkItem_mouseout;

	ExplorerMenuBar.prototype.topCollectionItem_onclick		= ExplorerMenuBar_topCollectionItem_onclick;
	ExplorerMenuBar.prototype.childCollectionItem_onclick	= ExplorerMenuBar_childCollectionItem_onclick;
	ExplorerMenuBar.prototype.linkItem_onclick				= ExplorerMenuBar_linkItem_onclick;

	ExplorerMenuBar.prototype.closeChildMenusOf				= ExplorerMenuBar_closeChildMenusOf;
	ExplorerMenuBar.prototype.closeOpenSiblingsOf			= ExplorerMenuBar_closeOpenSiblingsOf;

	ExplorerMenuBar.prototype.setMenuDisplayStatus			= ExplorerMenuBar_setMenuDisplayStatus;
	ExplorerMenuBar.prototype.resetMenus					= ExplorerMenuBar_resetMenus;
}

function ExplorerMenuBar_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_HeaderLogoCell">' +
//		'			<table style="width:100%" border="0" cellspacing="0" cellpadding="0">' +
//		'				<tr>' +
//		'					<td style="width:10px;text-align:left; vertical-align:middle; padding-left:6pt; padding-right:10px">' +
//		'						<img src="images/StellentLogo.gif" width="120" height="20"></td>' +
//		'					<td id="quickSearchCell" style="white-space:nowrap; text-align:right; vertical-align:middle; padding-left:0pt; padding-right:6pt; padding-top:5px; padding-bottom:7px">' +
//		'						<!-- *** Quick Search container *** --></td>' +
//		'				</tr>' +
//		' 			</table>' +
//		'		</td>' +
//		'	</tr>' +
		'	<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>' +
//		'		<td class="ddm_TopMenuBarDividerCell" width="10">' +
//		'			<img src="images/tab_corner.gif" width="37" height="19"></td>' +
//		'		<td class="ddm_TopMenuBarRightCell">' +
//		'			<table border="0" cellpadding="0" cellspacing="0">' +
//		'				<tr>' +
//		'					<td class="ddm_TopMenuBarExtraLink" onclick="addBookmark()" onmouseover="this.className='ddm_TopMenuBarExtraLink_over'" onmouseout="this.className='ddm_TopMenuBarExtraLink'">' +
//		'						Add To Favorites</td>' +
//		'				</tr>' +
//		'			</table>' +
//		'		</td>' +
		'	</tr>' +
		'</table>' +	
		'';

	document.write(this.m_ds.join(''));
}

function ExplorerMenuBar_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 ExplorerMenuBar_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 ExplorerMenuBar_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 ExplorerMenuBar_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 ExplorerMenuBar_topCollectionItem_mouseover(e, element)
{
	if (navigator.appName == "Netscape")
	{
		this.highlightItem(element);
	}
	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 ExplorerMenuBar_topCollectionItem_mouseout(e, element)
{
	if (!e) { e = window.event; }		

	if (navigator.appName == "Netscape") //NN/Mozilla
	{
		if (element.getElementsByTagName("div").length > 0)
		{		
			var childMenu = element.getElementsByTagName("div")[0];
			if (childMenu.style.display == "none")
			{
				this.unhighlightItem(element);
			}
		}
	}
	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 ExplorerMenuBar_childCollectionItem_mouseover(e, element)
{
	if (navigator.appName == "Netscape")
	{
		this.highlightItem(element);
	}
	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 ExplorerMenuBar_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 ExplorerMenuBar_childCollectionItem_mouseout(e, element)
{
	if (!e) { e = window.event; }

	if (navigator.appName == "Netscape") // NN/Mozilla
	{
		if (element.getElementsByTagName("div").length > 0)
		{				
			var childMenu = element.getElementsByTagName("div")[0];
			if (childMenu.style.display == "none")
			{
				this.unhighlightItem(element);
			}
		}				
	}

	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 ExplorerMenuBar_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 ExplorerMenuBar_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 ExplorerMenuBar_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 ExplorerMenuBar_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 ExplorerMenuBar_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;
				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 ExplorerMenuBar_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 ExplorerMenuBar_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 ExplorerMenuBar_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 ExplorerMenuBar_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 ExplorerMenuBar_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.
}

// ==================== the end ===========================

