//Make this dynamic
// navigation links under root channel
topNav		=	new Array("/FBPUI/CMA/"); //base dir

topNav[1]	=	new Array("AdminFAPages/");
topNav[1][1]=	new Array("Step 1 - Create/Modify FA Page","actionlistfa.aspx");
//topNav[1][2]=	new Array("Step 2 - Set Options","pagecontroler.aspx");
//topNav[1][3]=	new Array("Step 3 - Create/Modify Page Content","pagecontroler.aspx");
//topNav[1][4]=	new Array("Step 4 - Preview FA Page","pagecontroler.aspx");

topNav[2]	=	new Array("AdminBRPages/");
topNav[2][1]	=	new Array("Step 1 - Create/Modify Branch Page", "actionlistbr.aspx");
topNav[2][2]	=	new Array("Approve/Reject FA Pages", "GetPagesToApproveByBRMgr.aspx");
//topNav[2][3]	=	new Array("Step 3 - Create/Modify Page Content", "pagecontroler.aspx");
//topNav[2][4]	=	new Array("Step 4 - Preview Branch Page", "pagecontroler.aspx");
/*
topNav[3]	=	new Array();
topNav[4]	=	new Array();
topNav[5]	=	new Array("Customize/");
topNav[5][1] =	new Array("Customize Homepage","CustomizeHomepage/");
topNav[5][2] =	new Array("Customize Balances","CustomizeBalances/");
topNav[5][3] =	new Array("Customize Holdings","CustomizeHoldings/");
topNav[5][4] =	new Array("Customize Realized Gain/Loss","CustomizeRealizedGainLoss/");
topNav[5][5] =	new Array("Customize Unrealized Gain/Loss","CustomizeUnrealizedGainLoss/");
topNav[5][6] =	new Array("Customize Activity","CustomizeActivity/");
topNav[5][7] =	new Array("Customize Market Pulse","CustomizeMarketPulse/");
topNav[5][8] =	new Array("Customize My Links","CustomizeQuickLinks/");
topNav[5][9] =	new Array("Customize Watchlists","CustomizeWatchlists/");
topNav[5][10] = new Array("Customize Account Selector","CustomizeAccountSelector/");
topNav[5][11] = new Array("Select Landing Pages","SelectLandingPages/");
topNav[5][12] = new Array("Select Start Page","SelectStartPage/");
topNav[5][13] = new Array("Customize Session Time-Out","CustomizeSessionTimeout/");
*/

// navigation selected state
selected=null;
selected=1;
//end of TODO dynamic

timeoutID = '';
navtimeoutID = '';
revertTime = 350;

// show menu
function sM(level)
{
    selectMenu(level);
    if (topNav[level].length == 0)
    {
        return false;
    }
    tltp = gE('overDiv');
    menu = "<div id=\"navmenu\" class=\"navmenu\" onmouseover=\"stopmenurevert()\" onmouseout=\"hM('" + level + "')\">";
    for (var i in topNav[level])
    {
		if (i != 0) 
		{
			menu += "<a class=\"dropmenuitem2\" onfocus=\"this.blur();\" href=\"" + topNav[0] + topNav[level][0] +topNav[level][i][1] + "\">" + topNav[level][i][0] + "</a>";
		}
    }
    menu += '</div>';
    wH(tltp,menu);

    var objectOffsets = getOffsets(gE('sub'+level));
    xxx = objectOffsets.get('left');
    yyy = objectOffsets.get('top') + (objectOffsets.get('bottom') - objectOffsets.get('top'));

//alert(xxx + '--' + yyy);
    sX(tltp, xxx);
    sY(tltp, yyy);

    var levelThree = getOffsets(gE('navmenu'));
	menuWidth = objectOffsets.get('right') - objectOffsets.get('left');;
	levelWidth = levelThree.get('right') - levelThree.get('left');;
	if (levelWidth < menuWidth)
	{
		sW(gE('navmenu'),menuWidth+1)
	}
    var objectOffsets = getOffsets(gE('navmenu'));
    xxxRight = objectOffsets.get('right');
    if  (xxxRight > 760)
    {
        sX(tltp, (xxx - (xxxRight - 760)));
    }
    sE(tltp);
    tipObj = gE('navmenu');
    var browser = navigator.appVersion.toLowerCase();
    if ((browser.indexOf('msie 5.0') || browser.indexOf('msie 5.1') || browser.indexOf('msie 5.5')) != -1)
    {
        detectCollisions('iframe');
    }
    detectCollisions('select');
}

// hide menu
function hM(id)
{
    timeoutID = setTimeout('menurevert(\'' + id + '\')', revertTime);
    navtimeoutID = setTimeout('menurevertSelected(\'' + id + '\')', revertTime);
}

// highlight level 2 navigation & hide intersecting form objects
function selectMenu(id)
{
    if (topNav[id].length == 0)
    {
        tipObj = gE('overDiv');
        tltp = gE('overDiv');
        detectCollisions('select', 1);
        detectCollisions('iframe', 1);
        hE(tltp);
    }
    stopmenurevert();
    for (var i = 1; i < topNav.length; i++)
    {
        colorChange(i, 'subItem');
    }
    colorChange(id, 'subItemSelected');
    if (selected != id && selected != null)
    {
        colorChange(selected, 'subItemState');
    }
}

function colorChange(id, color)
{
    docObj = gE("sub"+id);
//    alert(docObj + 'id:' + id + ' color:' + color);
    docObj.className=color;
}

function stopmenurevert() 
{
    clearTimeout(timeoutID);
    clearTimeout(navtimeoutID);
}

// hide level 3 dropdown
function menurevert(id) 
{
    detectCollisions('select', 1);
    detectCollisions('iframe', 1);
    hE(tltp);
}

// restore the previously selected navigation item
function menurevertSelected(id) 
{
    colorChange(id, 'subItem');
    if (selected != null)
    {
        colorChange(selected, 'subItemSelected');
    }
	tltp = gE('overDiv');
	hE(tltp);
}

// auto hide overlapping form elements (used by security navigation)
function detectCollisions(elmID,in_recover)
{
	var objectOffsets = getOffsets(tipObj);
	selectElements = document.getElementsByTagName(elmID);

	// if we don't have a tip, then unhide selects
	if (in_recover)
	{
		for (i = 0; i < selectElements.length; i++) 
		{
			var thisSelect = selectElements[i];
			thisSelect.style.visibility = 'visible';
		}
		return;
	}
	
	// loop through each form select element and find collision with layer
	for (i = 0; i < selectElements.length; i++) 
	{
		var thisSelect = selectElements[i];
		var selectOffsets = getOffsets(selectElements[i]); 
		if ((objectOffsets.get('right') < selectOffsets.get('left')) ||
			(objectOffsets.get('left') > selectOffsets.get('right')) ||
			(objectOffsets.get('bottom') < selectOffsets.get('top')) ||
			(objectOffsets.get('top') > selectOffsets.get('bottom')))
		{
			thisSelect.style.visibility = 'visible';
		}
		else
		{
			thisSelect.style.visibility = 'hidden';
		}
	}
}

// get position and dimension of elements
function getOffsets(in_object)
{
	var originalObject = in_object;
	var originalWidth = in_object.offsetWidth;
	var originalHeight = in_object.offsetHeight;
	var offsetLeft = 0;
	var offsetTop = 0;

	while (in_object)
	{
		offsetLeft += in_object.offsetLeft;
		offsetTop += in_object.offsetTop;
		in_object = in_object.offsetParent;
	}
	return new Hash(
		'left', offsetLeft,
		'top', offsetTop,
		'right', offsetLeft + originalWidth,
		'bottom', offsetTop + originalHeight);
}
// put assigned variables into a neat array
function Hash()
{
	this.length = 0;
	this.elementData = [];
	for (var i = 0; i < arguments.length; i += 2)
	{
		if (typeof(arguments[i + 1]) != 'undefined')
		{
			this.elementData[arguments[i]] = arguments[i + 1];
			this.length++;
		}
	}
	this.get = function(in_key)
	{
		return this.elementData[in_key];
	}
}

