
// Create an array of frame status holders on the top if not previously done.
if (typeof(top.arrTarget) != 'object') top.arrTarget = new Array();	

function objTarget(strTargetName)
// Creates a new objTarget
{
	this.strTargetName = strTargetName;
}

function getObjTarget(strTargetName)
// Gets objTarget
{
	// Lets hardcode target to make all targets cooperate
	//strTargetName = "hardcoded"

	if (typeof(top.arrTarget[strTargetName]) == 'undefined') top.arrTarget[strTargetName] = new objTarget(strTargetName);
	return top.arrTarget[strTargetName];
}

function getArrMenu(objTarget)
// Gets arrMenu
{
	if (typeof(objTarget.arrMenu) == 'undefined') objTarget.arrMenu = new Array(); // arrMenu = array of links
	return objTarget.arrMenu;
}

function getArrMenuStoredLinks(objTarget)
// Gets arrMenuStoredLinks
{
	if (typeof(objTarget.arrMenuStoredLinks) == 'undefined') objTarget.arrMenuStoredLinks = new Array(); // arrMenuStoredLinks = array of stored links
	return objTarget.arrMenuStoredLinks;
}

function fnGetMenuID(strPathName, arrMenu)
// Gets MenuID from arrMenu given a pathname
{
	var strFile = strPathName.split('/')[strPathName.split('/').length-1].toLowerCase();
	// Loop arrMenu to search for matching MenuID		
	for (x in arrMenu) // arrMenu = array of links
	{
		// Check if filename exists in href of link
		if( arrMenu[x].href.toLowerCase().lastIndexOf(strFile) != -1 )
		{
			return x;
			break;
		}
	}
	return '';
}

function fnRegisterMenu(objLink)
{
	if(typeof(objLink) == 'undefined') return; 

	// Only register menues targeting this frameset.
	if(typeof(frames[objLink.target]) == 'undefined') return; 

	// Register menu as a menu targeting specified target
	var objTarget = getObjTarget(objLink.target);
	var arrMenu = getArrMenu(objTarget);
	var intMenuID = Request('MenuItemID', objLink.href);
	arrMenu[intMenuID] = objLink;
}

function fnStoreOldLink(strTargetName)
{
	// Only handle status for menues targeting this frameset.
	if(typeof(frames[strTargetName]) == 'undefined') return;

	var fraTarget = frames[strTargetName];
	var objTarget = getObjTarget(strTargetName);
	var arrMenu = getArrMenu(objTarget);
	var arrMenuarrMenuStoredLinks = getArrMenuStoredLinks(objTarget);
	var urlTemp = '';

	try
	{
		if(fraTarget.document.location.pathname == '/blank' || fraTarget.document.location.pathname == 'blank') return;
	}
	catch(err)
	{
		return;
	}

	// Get MenuItemID from Old/Current location.search. if '', Get MenuItemID from location.pathname by identifying file in arrMenu
	var intMenuID = Request('MenuItemID', fraTarget.document.location.search);
	if(intMenuID == '') intMenuID = fnGetMenuID(fraTarget.document.location.pathname, arrMenu)
	
	// Store Old URL
	if(intMenuID != '') 
	{
		if( typeof(fraTarget.GetDocumentURL) != 'undefined')
		{
			urlTemp = fraTarget.GetDocumentURL();
			//alert('GetDocumentURL = ' + urlTemp);
		}
		else
		{
			urlTemp = fraTarget.document.location.href;
			//alert('location.href = ' + urlTemp);
		}
		// Check that we rertieved a valid URL before storing it
		if (typeof(urlTemp) != 'undefined' && urlTemp != '') arrMenuarrMenuStoredLinks[intMenuID] = urlTemp;
	}	
}

function fnMenuExecute(objLink)
{
	// Only handle status for menues targeting this frameset.
	if(typeof(frames[objLink.target]) == 'undefined') return true; // true makes original link execute

	// Check if any old URL is stored for this menu. If so use it instead of link.
	var fraTarget = frames[objLink.target];
	var objTarget = getObjTarget(objLink.target);
	var arrMenu = getArrMenu(objTarget);
	var arrMenuarrMenuStoredLinks = getArrMenuStoredLinks(objTarget);
	
	// Get MenuItemID from location.search. if '', Get MenuItemID from location.pathname by identifying file in arrMenu
	var intMenuID = Request('MenuItemID', objLink.href);
	if(intMenuID == '') intMenuID = fnGetMenuID(objLink.href, arrMenu)

	if(intMenuID != '') 
	{
		// Get stored URL if any and if valid != ''
		if(typeof(arrMenuarrMenuStoredLinks[intMenuID]) != 'undefined' && arrMenuarrMenuStoredLinks[intMenuID] != '') 
		{
			// Restore old URL
			fraTarget.document.location = arrMenuarrMenuStoredLinks[intMenuID];
			return false; // false stops original link from execute
		}	
	}	
	return true; // true makes original link execute
}

function fnMenuClick(objLink)
{
/*
	// Dunno why this helps FF to open the bookmarks-frame, with an alert here it worked... so pause before continuing
	setTimeout('fnMenuClick_internal(objLink)', 1);
}

function fnMenuClick_internal(objLink)
{
*/
	// Only handle status for menues targeting this frameset.
	if(typeof(frames[objLink.target]) == 'undefined') return true; // true makes link execute

	// fnRegisterMenu(objLink);
	fnStoreOldLink(objLink.target);
	return fnMenuExecute(objLink);
}

function onFrameLoad(fraTarget)
{

	try
	{
		if(fraTarget.document.location.pathname == '/blank' || fraTarget.document.location.pathname == 'blank') return;
		var objTarget = getObjTarget(fraTarget.name);
		var arrMenu = getArrMenu(objTarget);

		// Reset old selection
		if(typeof(objTarget.objCurrMenu) != 'undefined')
		{
			// Update menu if exists
			if(typeof(objTarget.objCurrMenu.document.parentWindow) == 'object')
			{
				// Update menu if exists
				if (typeof(objTarget.objCurrMenu.document.parentWindow.fnSetNavSelection) != 'undefined')
					objTarget.objCurrMenu.document.parentWindow.fnSetNavSelection(objTarget.objCurrMenu, false);
			}
			objTarget.objCurrMenu = undefined;
		}
	
		// Get MenuItemID from location.search. if '', Get MenuItemID from location.pathname by identifying file in arrMenu
		var intMenuID = Request('MenuItemID', fraTarget.document.location.search);
		if(intMenuID == '') intMenuID = fnGetMenuID(fraTarget.document.location.pathname, arrMenu)
	
		// Set selected menu
		if(intMenuID != '') 
		{
			if( typeof(arrMenu[intMenuID]) != 'undefined' )
			{
				objTarget.objCurrMenu = arrMenu[intMenuID];
				// Update menu if exists
				if (typeof(objTarget.objCurrMenu.document.parentWindow.fnSetNavSelection) != 'undefined')
					objTarget.objCurrMenu.document.parentWindow.fnSetNavSelection(objTarget.objCurrMenu, true);
			}
		}	
	}
	catch(err)
	{
	}
}

/*
function fnDoResizeRows(fraSet)
{
	var arrTemp = fraSet.rows.split(',');
	if (fraSet.document.frames(0).location.pathname == '/blank' || fraTarget.document.location.pathname == 'blank') arrTemp[0] = 0;
	else arrTemp[0] = fraSet.document.frames(0).document.body.scrollHeight;
	return fraSet.rows = '' + arrTemp.join(',');
}

function fnDoResizeCols(fraSet)
{
	var arrTemp = fraSet.cols.split(',');
	arrTemp[0] = fraSet.document.frames(0).document.body.scrollHeight;
	return fraSet.cols = '' + arrTemp.join(',');
}
*/

// Internet Explorer and Firefox supported functions for frame resizing
function GetFrame(strElementName) {
	var objFrames = parent.document.getElementsByTagName('FRAME');

	for (i = 0; i < objFrames.length; i++)
		if (objFrames[i].name == strElementName)
			return objFrames[i];
}

function ResizeFrame(objFrame, intSize) {
	if (objFrame == null)
		return;

	// Check whether the fit-frame is a row or column
	var objFrameset = objFrame.parentNode;
	var blnRowsNotCols = objFrameset.rows.length > 0;

	// Get the frameset-index of the frame to resize
	/*
	var intThisFrameIndex = -1;
	for (i = 0; i < objFrameset.childNodes.length; i++) {
		var objElement = objFrameset.childNodes[i];

		if (objElement.parentNode == objFrameset)
			intThisFrameIndex++;

		if (objElement == objFrame)
			break;
	}
	*/
	var intThisFrameIndex = 0;
	var objTempSibling = objFrame.previousSibling;
	
	while (objTempSibling) {
		if (objTempSibling.tagName == 'FRAME' || objTempSibling.tagName == 'FRAMESET')
			intThisFrameIndex++;

		objTempSibling = objTempSibling.previousSibling;
	}

	// Get current size-array
	var strOldSizeArray = '';
	if (blnRowsNotCols)
		strOldSizeArray = objFrameset.rows.split(',');
	else
		strOldSizeArray = objFrameset.cols.split(',');

	// Calculate new size-array
	var strNew = '';
	for (i = 0; i < strOldSizeArray.length; i++) {
		if (i > 0)
			strNew += ',';

		strNew += intThisFrameIndex == i ? intSize : strOldSizeArray[i];
	}

	// Set new size-array
	if (blnRowsNotCols)
		objFrameset.rows = strNew;
	else
		objFrameset.cols = strNew;
}

