// Start Common Nav functions
var g_nSelRow1 = 0;
var g_nSelRow2 = 0;
var g_nOffset = 0;

function GetNavIDs()
{
	g_nID1 = '';
	g_nID2 = '';
	g_nID3 = '';
	var arrCats = g_strCategoryNames.split('~');
	var strSelected = '';
	try
	{
		strSelected = g_nSelectName;
		if(g_nSelectName.length > 0)
		{
			arrCats = new Array(g_nSelectName, '', '');
		}
	}
	catch(e)
	{
		// do nothing
	}
	if(arrCats.length != 3)
	{
		return;
	}
	var arrTable = g_arrTables[g_nTableRoot].split('~');
	var nNextTable = '';
	for(var i = 0; i < arrTable.length; i++)
	{
		if(arrCats[0] == TokenFromId(arrTable[i]))
		{
			nNextTable = TableFromId(arrTable[i]);
			g_nID1 = arrTable[i];
		}
	}
	if(nNextTable == '')
	{
		return;
	}
	arrTable = g_arrTables[nNextTable].split('~');
	nNextTable = '';
	for(var i = 0; i < arrTable.length; i++)
	{
		if(arrCats[1] == TokenFromId(arrTable[i]))
		{
			nNextTable = TableFromId(arrTable[i]);
			g_nID2 = arrTable[i];
		}
	}
	if(nNextTable == '')
	{
		return;
	}
	arrTable = g_arrTables[nNextTable].split('~');
	nNextTable = '';
	for(var i = 0; i < arrTable.length; i++)
	{
		if(arrCats[2] == TokenFromId(arrTable[i]))
		{
			g_nID3 = arrTable[i];
		}
	}	
}

function TokenFromId(nID)
{
//	alert('Token ' + nID + ' - ' + g_arrToken[g_arrRef[nID].split('~')[1]]);
	if(nID.length == 0)
	{
		return 'All';
	}
	else
	{
		return g_arrToken[g_arrRef[nID].split('~')[1]];
	}
}

function TableFromId(nID)
{
	return g_arrRef[nID].split('~')[0];
}

// Navigate to CS page
function Navigate(nID1, nID2, nID3)
{
	window.location.href = 'NKI/SaveSectionTabs.aspx?Category=' + escape(TokenFromId(nID1) + '~' + TokenFromId(nID2) + '~' + TokenFromId(nID3));
}

// Builds navigation table for Popup and In Page Menu
function BuildTable(nTable, nID1, nID2, nSelID, blnPopup)
{
	var strTable = '';
	var strArguments = '';
	var strFunction = '';
	
	// Build argument string
	if(nID1.length == 0)
	{
		strArguments = "'@','',''";
	}
	else if(nID2.length == 0)
	{
		strArguments = "'" + nID1 + "','@',''";
	}
	else
	{
		strArguments = "'" + nID1 + "','" + nID2 + "','@'";

		// UNCOMMENT THE FOLLOWING LINE TO REMOVE ALL ENTRIES BUT THE "ALL" OPTION FOR THE THIRD ROW
		nTable = '';
	}
	
	// Select function name
	if(blnPopup)
	{
		strFunction = 'PopupClick';		
	}
	else
	{
		strFunction = 'MenuClick';
	}
	
	// Output "All" condition
	if(nTable.length == 0)
	{
		strTable += '<a href="#" class="BreadcrumbMenu" onclick="return ' + strFunction;
		strTable += '(' + strArguments.replace(/@/, g_nAllID) + ',0);">All</a><br>';
		return strTable;
	}
	var arrTable = g_arrTables[nTable].split('~');
	for(var i = 0; i < arrTable.length; i++)
	{
		var strDisplay = TokenFromId(arrTable[i]);
		var strStyle = "BreadcrumbMenu";
		if(nSelID == arrTable[i])
		{
			strStyle = "BreadcrumbMenuSel";
		}
		strTable += '<a href="#" class="' + strStyle + '" onclick="return ' + strFunction;		
		strTable += '(' + strArguments.replace(/@/,arrTable[i]) + ',' + i + ');">';
		strTable += strDisplay + '</a><br>';
	}
	return strTable;
}
// End Common

// Start In Page Code

// Handles clicks from in page Menu clicks
function MenuClick(nID1, nID2, nID3, nLevel)
{
	if(nID3.length > 0)
	{
		window.document.getElementById("Menu3").innerHTML = PadTable(BuildTable(TableFromId(nID2), nID1, nID2, nID3, false), g_nSelRow2 + g_nOffset, false);
		Navigate(nID1,nID2,nID3);
		return false;
	}
	else if(nID2.length > 0)
	{
		// TG: Added 2 lines to force redirect when clicking on 2nd level.
		Navigate(nID1,nID2,nID3);
		return false;
		
		g_nSelRow2 = nLevel;
		window.document.getElementById("Menu1").innerHTML = PadTable(BuildTable(g_nTableRoot, '', '', nID1, false), 0, false);
		window.document.getElementById("Menu2").innerHTML = PadTable(BuildTable(TableFromId(nID1), nID1, '', nID2, false), g_nSelRow1, true);
		window.document.getElementById("Menu3").innerHTML = PadTable(BuildTable(TableFromId(nID2), nID1, nID2, '', false), g_nSelRow2 + g_nOffset, false);
	}
	else
	{
		g_nSelRow1 = nLevel;
		window.document.getElementById("Menu1").innerHTML = PadTable(BuildTable(g_nTableRoot, '', '', nID1, false), 0, false);
		window.document.getElementById("Menu2").innerHTML = PadTable(BuildTable(TableFromId(nID1), nID1, '', '', false), g_nSelRow1, true);
		window.document.getElementById("Menu3").innerHTML = PadTable('', 0, false);
	}
	return false;
}

// Pads in page menu to preset number of choices
function PadTable(strTable, nLocation, bSaveOffset)
{
	var strOld = strTable;
	var nCount = 1;
	if(strTable.indexOf('<br>') > -1)
	{
		nCount = strTable.split('<br>').length;
	}
	else
	{
		strTable += '<span class="MenuItemSel">&nbsp;</span>';
	}
//	var nAdd = (nLocation - Math.round(nCount/2)) + 1;

	var sDebug = '';
	var nAdd = nLocation;
	if((nAdd + nCount) > g_nInPageMenuHeight)
	{
		// Would go off the bottom
		if((nLocation - nCount) < 1)
		{
			// Would go off the top
			if(nLocation > (g_nInPageMenuHeight/2))
			{
				// Align with top of container
				nAdd = 0;
			}
			else
			{
				// Align with bottom of container
				nAdd = g_nInPageMenuHeight - nCount;
			}
		}
		else
		{
			// Align with bottom of new
			nAdd = nLocation - nCount + 2;
		}
	}	

	if((nCount + nAdd) > g_nInPageMenuHeight)
	{
		nAdd = g_nInPageMenuHeight - nCount;
	} 
	if(nAdd < 0)
	{
		nAdd = 0;
	}

	if(bSaveOffset)
	{
		g_nOffset = nAdd;
	}

	// Pad leading 
	for(var i = 0; i < nAdd; i++)
	{
		strTable = '<span class="MenuItemSel">&nbsp;</span><br>' + strTable;
	}
	// Pad trailing
	for(var i = (nCount + nAdd); i < g_nInPageMenuHeight; i++)
	{
		strTable += '<br><span class="MenuItemSel">&nbsp;</span>';
	}
	return strTable;
}

function DisplayData()
{
	var myWin = window.open();
	var strOut = '';
	strOut += '<table border="1">';
	for(var i = 0; i < g_arrTables.length; i++)
	{
		var arrTable = g_arrTables[i].split('~');
		strOut += '<tr><td>' + i + '</td><td>';
		for(var j = 0; j < arrTable.length; j++)
		{
			strOut += TokenFromId(arrTable[j]) + '<br>';
		}
		strOut += '</td></tr>';
	}
	strOut += '</table>';
	myWin.document.write(strOut);
	return;
	strOut = '<table>';
	for(var i = 0; i < g_arrToken.length; i++)
	{
		strOut += '<tr><td>' + i + '</td><td>' + g_arrToken[i] + '</td></tr>';
	}
	strOut += '</table>';
	strOut += '<table>';
	for(var i = 0; i < g_arrRef.length; i++)
	{
		strOut += '<tr><td>' + i + '</td><td>' + g_arrRef[i] + '</td><td>' + TokenFromId[i] + '</td></tr>';
	}
	strOut += '</table>';
	myWin.document.write(strOut);
}

// Builds in page menu based in global IDs
function BuildPageMenu()
{
	InitNavInfo();
	window.document.getElementById("Menu1").innerHTML = PadTable(BuildTable(g_nTableRoot, '', '', g_nID1, false), 0, false);
	var nLevel;
	if(g_nID1.length > 0)
	{
		nLevel = GetLevelByID(g_nTableRoot, g_nID1);
		g_nSelRow1 = nLevel;
		window.document.getElementById("Menu2").innerHTML = PadTable(BuildTable(TableFromId(g_nID1), g_nID1, '', g_nID2, false), nLevel, true);
	}
	else
	{
		window.document.getElementById("Menu2").innerHTML = PadTable('', 0, true);
	}
	if(g_nID2.length > 0)
	{
		g_nSelRow2 = GetLevelByID(TableFromId(g_nID1), g_nID2);
		nLevel = g_nSelRow2 + g_nOffset;
		window.document.getElementById("Menu3").innerHTML = PadTable(BuildTable(TableFromId(g_nID2), g_nID1, g_nID2, g_nID3, false), nLevel, false);
	}
	else
	{
		window.document.getElementById("Menu3").innerHTML = PadTable('', 0, false);
	}
}

// Returns level in menu for given ID
function GetLevelByID(nTable, nID)
{
	var arrTable = g_arrTables[nTable].split('~');
	for(var i = 0; i < arrTable.length; i++)
	{
		if(arrTable[i] == nID)
		{
			return i;
		}
	}
	return 0;
}

// Start Popup Nav Code
var g_nID1 = '';
var g_nID2 = '';
var g_nID3 = '';
var g_nPopupX;
var g_nPopupY;
var g_nPopupXOffset = -10
var g_nPopupYOffset = 5;
var g_arrPopupDIV = new Array('','','');
var g_arrPopupID = new Array('','','');
var g_nPopLvl = 1;
var g_blnPopupClick = false;
var g_nPopWidth = 178;

// Returns True is any Popup window is open
function PopupOpen()
{
	return (g_arrPopupDIV[0].length > 0) || (g_arrPopupDIV[1].length > 0) || (g_arrPopupDIV[2].length > 0)
}

// Opens Popup window from Breadcrumb click
function OpenPopup(evt, nID1, nID2, nID3, nLevel)
{
	g_blnPopupClick = true;
	evt = (evt) ? evt : ((event) ? event : null);
	g_nPopupX = evt.clientX + g_nPopupXOffset;
	g_nPopupY = evt.clientY + g_nPopupYOffset;
	if(PopupOpen() || (g_nPopLvl != nLevel))
	{
		clearPopup();
	}
	g_nPopLvl = nLevel;
	var strContent;
	switch(nLevel)
	{
		case '1':
			strContent = BuildTable(g_nTableRoot, '', '', '', true); 
			break;
		case '2':
			strContent = BuildTable(TableFromId(nID1), nID1, '',  '', true); 
			break;
		case '3':
			strContent = BuildTable(TableFromId(nID2), nID1, nID2,  '', true); 
			break;
	}
	g_arrPopupDIV[nLevel - 1] = "Popup" + nLevel;
	OpenPopupTable("Popup" + nLevel, g_nPopupX, g_nPopupY, strContent)
	return false;
}

// Handles clicks from Popup links
function PopupClick(nID1, nID2, nID3)
{
	var nCurLevel;
	var strContent;
	if(nID3.length > 0)
	{
		clearPopup();
		Navigate(nID1,nID2,nID3);
		return false;
	}
	else if(nID2.length > 0)
	{
		nCurLevel = 3;
		strContent = BuildTable(TableFromId(nID1), nID1, '',  nID2, true); 
		OpenPopupTable(g_arrPopupDIV[1], g_nPopupX + (2 - g_nPopLvl)*g_nPopWidth, g_nPopupY, strContent);
		strContent = BuildTable(TableFromId(nID2), nID1, nID2,  '', true); 
		g_arrPopupDIV[2] = "Popup3";
		OpenPopupTable(g_arrPopupDIV[2], g_nPopupX + (3 - g_nPopLvl)*g_nPopWidth, g_nPopupY, strContent);
		
	}
	else
	{
		nCurLevel = 2;
		clearPopup(2);
		strContent = BuildTable(g_nTableRoot, '', '',  nID1, true); 
		OpenPopupTable(g_arrPopupDIV[0], g_nPopupX, g_nPopupY, strContent);
		strContent = BuildTable(TableFromId(nID1), nID1, '',  '', true); 
		g_arrPopupDIV[1] = "Popup2";
		OpenPopupTable(g_arrPopupDIV[1], g_nPopupX + (2 - g_nPopLvl)*g_nPopWidth, g_nPopupY, strContent);
	}
	return false;
}

// Opens a DIV container for Popup menus generation
function OpenPopupTable(strName, posX, posY, strContent)
{
	var MenuHolder = window.document.getElementById("MenuHolder");
	var MenuDiv = window.document.getElementById(strName);
	if(MenuDiv == null)
	{
		MenuDiv = window.document.createElement("DIV");
		MenuDiv.setAttribute("id", strName);
		MenuHolder.appendChild(MenuDiv);
		MenuDiv.className = "PopupMenu";
	}
	MenuDiv.innerHTML = strContent;
	MenuDiv.style.left = posX;
	MenuDiv.style.top = posY;
	return false;
}

// Closes popup DIVs from screen
function clearPopup(nID)
{
	var undefined;
	if(nID != undefined)
	{
		var MenuHolder = window.document.getElementById("MenuHolder");
		if(g_arrPopupDIV[nID].length > 0)
		{
			var MenuDiv = window.document.getElementById(g_arrPopupDIV[nID]);
			MenuHolder.removeChild(MenuDiv);
		}
		g_arrPopupDIV[nID] = '';
	}
	else
	{
		for(var i = 2; i > -1; i--)
		{
			clearPopup(i);
		}
		g_nPopLvl = '';
	}
}

// Builds HTML for breadcrumb
function BuildBreadcrumb()
{
	var strBread = '&nbsp; ' + BuildBreadLink(g_nID1, 1);
	strBread += BCDivider() + BuildBreadLink(g_nID2, 2);	
	strBread += BCDivider() + BuildBreadLink(g_nID3, 3);
	window.document.getElementById("Breadcrumb").innerHTML = strBread;
}

function BCDivider()
{
	return ' <span class="BreadcrumbDivider">&gt;&gt;</span> ';
}

// Builds link for Breadcrumb
function BuildBreadLink(nID, nLevel)
{
	var strArgs = "event,'" + g_nID1 + "','" + g_nID2 + "','" + g_nID3 + "','" + nLevel + "'";
	return '<a href="#" onclick="return OpenPopup(' + strArgs + ');" class="BreadcrumbText">' + TokenFromId(nID) + '</a>';
}

// Handles DocumentClicks to close popups
function DocumentClick()
{
	if(PopupOpen() && !g_blnPopupClick)
	{
		clearPopup();
	}
	g_blnPopupClick = false;
}

function InitNavInfo()
{
	switch(g_strSectionMode)
	{
		case 'KC':
			g_nAllID = g_nAllKCID;
			g_arrTables = g_arrKCTables;
			g_arrRef = g_strRefKC.split("|");
			g_nTableRoot = g_nKCRoot;
			g_nInPageMenuHeight = g_nKCMax;
			break;
		case 'PC':
			g_nAllID = g_nAllPCID;
			g_arrTables = g_arrPCTables;
			g_arrRef = g_strRefPC.split("|");
			g_nTableRoot = g_nPCRoot;
			g_nInPageMenuHeight = g_nPCMax;
			break;
	}
	GetNavIDs();
}

function InitBreadcrumbs()
{
	if(g_TurnOff)
	{
		Breadcrumb.style.display = 'none';
	}
	else
	{
		InitNavInfo();
		BuildBreadcrumb();
		window.document.onclick = DocumentClick;
	}
}

