var g_paneDelayOn = 100;
var g_paneDelayOff = 400;

var g_TO_show = null;
var g_TO_hide = null;

var g_overCount = new Array();

var isIE = false;
if (navigator.appName.indexOf("Micro") == 0)
	isIE = true;

function prepareDOM()
{
	var strPath = document.URL;
	var idx = strPath.indexOf("?");
	if (idx != -1)
	{
		strPath = strPath.substr(idx+4, strPath.length);
		document.getElementById("frmContent").src = strPath;
	}
	
	if (isIE)
		buildMenu();
	else
	{
		var xmlDoc = document.implementation.createDocument("", "xmldoc", null);
		var xmlIsland = document.getElementById("xmlMenuContent");
		var strURL = xmlIsland.getAttribute("src");
		xmlDoc.addEventListener("load", readyDOM, false);
		xmlDoc.load(strURL);
	}
}
function readyDOM(e)
{
	buildMenu(this);
}
function buildMenu(xmlNS)
{
	var objXML;
	if (xmlNS)
		objXML = xmlNS;
	else
		objXML = document.getElementById("xmlMenuContent");

	if (!objXML)
	{
		alert("unable to load XML for menu content, you need to upgrade your browser.")
		return;
	}
	var objTabRow = document.getElementById("trMenu");
	var arrTabNodes = objXML.getElementsByTagName("tab");
	var iTabLen = arrTabNodes.length;
	var eDiv, eTable, eTBody, eTR, eTD, eSpan, eSubTD, eSubSpan, objTabNode, strDropWidth;
	for (var x = 0; x < iTabLen; x++)
	{
		objTabNode = arrTabNodes[x];
		eTD = document.createElement("td");
		eTD.id = "tab_"+x;
		eTD.className = "menu";
		addEvent(eTD, "mouseover", mnuOver);
		addEvent(eTD, "mouseout", mnuOut);
		
		eSpan = document.createElement("span");
		eSpan.className = "menuSpan";
		eSpan.innerHTML = objTabNode.getAttribute("display");
		
		switch(objTabNode.getAttribute("action"))
		{
			case "nav":
				eTD.setAttribute("m_action", "display");
				eTD.setAttribute("m_content", objTabNode.getAttribute("content"));
				eTD.setAttribute("m_dest", objTabNode.getAttribute("dest"));
				addEvent(eTD, "click", nav);
			break;
			case "drop":
				eTD.setAttribute("m_action", "drop");
				eDiv = document.createElement("div");
				eDiv.id = "pane_tab_"+x;
				eDiv.style.zIndex = 100;
				eDiv.setAttribute("m_parentTab", eTD.id);
				eDiv.className = "menuPane";
				strDropWidth = 	objTabNode.getAttribute("dropwidth");
				if (strDropWidth)
					eDiv.style.width = strDropWidth+"px";
				addEvent(eDiv, "mouseover", overPane);
				addEvent(eDiv, "mouseout", outPane);
				
				eTable = document.createElement("table");
				eTable.setAttribute("width", "100%");
				eTable.setAttribute("border", "0");
				eTable.setAttribute("cellPadding", "0");
				eTable.setAttribute("cellSpacing", "4");
				eTable.className = "menucontent";
				
				eTBody = document.createElement("tbody");
				
				var arrItemNodes = objTabNode.getElementsByTagName("item");
				var iItemLen = arrItemNodes.length;
				var objItemNode;
				for (var i = 0; i < iItemLen; i++)
				{
					objItemNode = arrItemNodes[i];
					
					eTR = document.createElement("tr");
					
					eSubTD = document.createElement("td");
					addEvent(eSubTD, "mouseover", hl);
					addEvent(eSubTD, "mouseout", uhl);
					addEvent(eSubTD, "click", nav);
					eSubTD.setAttribute("m_content", objItemNode.getAttribute("content"));
					eSubTD.setAttribute("m_dest", objItemNode.getAttribute("dest"));
					
					eSubSpan = document.createElement("span");
					eSubSpan.setAttribute("m_parentTab", eTD.id);
					addEvent(eSubSpan, "mouseover", overPane);
					addEvent(eSubSpan, "mouseout", outPane);
					eSubSpan.innerHTML = objItemNode.getAttribute("display");
					
					eSubTD.appendChild(eSubSpan);
					eTR.appendChild(eSubTD);
					eTBody.appendChild(eTR);
				}
				eTable.appendChild(eTBody);
				eDiv.appendChild(eTable);
				document.body.appendChild(eDiv);
			break;
		}
		eTD.appendChild(eSpan);
		objTabRow.appendChild(eTD);
	}
}

function mnuOver(e)
{
	var cell = getEventSource(e);
	while(cell.tagName.toLowerCase() != "td")
		cell = cell.parentNode;
	if (g_TO_show)
		clearTimeout(g_TO_show);
	cell.className = "menuover";
	if (!g_overCount[cell.id])
		g_overCount[cell.id] = 0;
	g_overCount[cell.id]++;
	g_TO_show = setTimeout("evalPanes()", g_paneDelayOn);
}

function mnuOut(e)
{
	var cell = getEventSource(e);
	while(cell.tagName.toLowerCase() != "td")
		cell = cell.parentNode;
	if (g_TO_show)
		clearTimeout(g_TO_show);
	cell.className = "menu";
	g_overCount[cell.id]--;
	g_TO_hide = setTimeout("evalPanes()", g_paneDelayOff);
}

function evalPanes()
{
	for (var id in g_overCount)
	{
		var pane = document.getElementById("pane_" + id);
		if (pane)
		{
			if (g_overCount[id]>0)
			{
				positionMenuPane(document.getElementById(id), pane);
				pane.style.visibility = "visible";
			}
			else if (g_overCount[id]==0)
				pane.style.visibility = "hidden";
			else
				g_overCount[id]++;
		}			
	}
}

function positionMenuPane(cell, pane)
{
	var sp = cell.firstChild;
	if (isIE)
	{
		pane.style.top = sp.offsetTop + sp.offsetHeight + 5;
		pane.style.left = sp.offsetLeft;
	}
	else
	{
		pane.style.top = sp.offsetTop + sp.offsetHeight + 15;
		pane.style.left = sp.offsetLeft + 3 - sp.offsetWidth/2;
	}
}
function overPane(e)
{
	var element = getEventSource(e);
	while(!element.getAttribute("m_parentTab"))
		element = element.parentNode;
			
	g_overCount[element.getAttribute("m_parentTab")]++;
}
function outPane(e)
{
	var element = getEventSource(e);
	while(!element.getAttribute("m_parentTab"))
		element = element.parentNode;

	g_overCount[element.getAttribute("m_parentTab")]--;
	g_TO_hide = setTimeout("evalPanes()", g_paneDelayOff);
}
function hl(e)
{
	var cell = getEventSource(e);
	while(cell.tagName.toLowerCase() != "td")
		cell = cell.parentNode;
	cell.style.backgroundColor="#ffffff";
	cell.firstChild.style.color="#4B714B";
}
function uhl(e)
{
	var cell = getEventSource(e);
	while(cell.tagName.toLowerCase() != "td")
		cell = cell.parentNode;
	cell.style.backgroundColor="";
	cell.firstChild.style.color="#ffffff";
}

function nav(e)
{
	//close panes immediately
	clearTimeout(g_TO_hide);
	clearTimeout(g_TO_show);
	for (var id in g_overCount)
		g_overCount[id] = 0;
	evalPanes();
	
	var element = getEventSource(e);
	while(!element.getAttribute("m_content"))
		element = element.parentNode;
	
	var strContent = element.getAttribute("m_content");
	var strDestination = element.getAttribute("m_dest");

	switch (strDestination)
	{
		case "int":
			document.getElementById("frmContent").src = strContent;
		break;
		case "ext":
			window.open(strContent, "gallery", "height=440, width=660");
		break;
	}
}

function addEvent(objElement, strEvent, objHandler)
{
	strEvent = strEvent.toLowerCase();		
	var bHasOn = (strEvent.substring(0,2) == "on")? true:false;
	if (isIE)
	{
		if (!bHasOn)
			strEvent  = "on" + strEvent;
		
		objElement.attachEvent(strEvent, objHandler);
	}
	else //W3C
	{
		if (bHasOn)
			strEvent = strEvent.substring(2, strEvent.length);
		objElement.addEventListener(strEvent, objHandler, false);
	}
}

function getEventSource(objEvent)
{		
	return (isIE)? objEvent.srcElement:objEvent.currentTarget;
}
