/**
* The sections of this javascript include are as follows:
*
* - Preferences
* - SubMenus Definition
* - Global Variables
* - Menu Creation Functions
* - Menu Discovery Functions
* - Menu Display & Aesthetics Functions
* - Menu Utility Functions
*
* Keeping this up to date would be fairly handy, if possible.
*
* Author:  Martin Doyle
* Created: 15th Nov 2005
*/
var MENU_HIDE_DELAY_IN_MILLISECONDS = 200;
var oOnLoad                     = null;
var sPermanentlyHighlightedMenu = '';
var oMainMenuTable              = null;
var aSubMenuTables              = new Array();
var iHideMenusTimeout           = 0;
var sActiveMenu                 = '';
var sLastSubMenu                = '';
var sMainMenuName               = '';
var sSubMenuLink                = '';
var sSubMenuText                = '';
var bOpenedSubMenuTable         = false;
var bSameSubMenu                = false;
var oWhitePixel                 = null;
function menuInit()
{
oMainMenuTable  = document.getElementById( 'table_mainmenu' );
populateMenuTablesArray();
setupMenuLinks();
setCurrentMenu();
oWhitePixel = document.images[ 'white_pixel' ];
}
function clearMenuTimeout()
{
window.clearTimeout( iHideMenusTimeout );
}
function startMenuTimeout()
{
iHideMenusTimeout   = ( is_mac && is_ie ) ? window.setTimeout( 'hideMenus()', MENU_HIDE_DELAY_IN_MILLISECONDS ) : window.setTimeout( hideMenus, MENU_HIDE_DELAY_IN_MILLISECONDS );
}
function setCurrentMenu()
{
highlightMenuLink( sPermanentlyHighlightedMenu );
}
function populateMenuTablesArray()
{
var aAllTables  = document.getElementsByTagName( 'TABLE' );
for ( var iTable = 0; iTable < aAllTables.length; iTable++ )
{
var oNextTable  = aAllTables[iTable];
if ( typeof oNextTable.id != 'undefined' && oNextTable.id.substr( 0, 5 ) == 'menu_' )
{
aSubMenuTables[aSubMenuTables.length]   = oNextTable;
}
}
}
function setupMenuLinks()
{
var aMenuLinks  = document.getElementsByName( 'menuhref' );
var aMenuCells  = new Array();
for ( var i = 0; i < aMenuLinks.length; i++ )
{
aMenuCells[i]   = aMenuLinks[i].parentNode;
}
for ( var i = 0; i < aMenuCells.length; i++ )
{
var oMenuCell   = aMenuCells[i];
var sLinkURL    = oMenuCell.getElementsByTagName( 'A' )[0].href;
oMenuCell.onmouseover   = new Function( 'this.getElementsByTagName(\'A\')[0].style.color=\'#ff9900\'; showMenu(this);' );
oMenuCell.onclick       = new Function( 'window.location.href=\'' + sLinkURL + '\';' );
if ( getMenuCellText(oMenuCell) != sPermanentlyHighlightedMenu )
{
oMenuCell.onmouseout    = new Function( 'this.getElementsByTagName(\'A\')[0].style.color=\'#506270\';' );
}
}
}
function writeSubMenuTables()
{
for ( var iSubMenu = 0; iSubMenu <= aSubMenus.length; iSubMenu++ )
{
if ( iSubMenu < aSubMenus.length )
{
sMainMenuName   = aSubMenus[iSubMenu][0];
sSubMenuLink    = aSubMenus[iSubMenu][1];
sSubMenuText    = aSubMenus[iSubMenu][2];
bSameSubMenu    = ( sLastSubMenu == sMainMenuName );
if ( !bSameSubMenu )
{
if ( bOpenedSubMenuTable )
{
document.write( '</table>' );
}
document.write( '<table border="0" cellspacing="0" cellpadding="0" id="menu_' + sMainMenuName + '" style="display: none; border: 1px dotted #8c99a2; /*border-top: 1px solid #8c99a2;*/ z-index: 99;" onmouseover="clearMenuTimeout(); highlightParent(this);" onmouseout="startMenuTimeout();">' );
bOpenedSubMenuTable = true;
}
document.write( '<tr><td class="submenu_cell" onclick="window.location.href=\'' + sSubMenuLink + '\';">' + sSubMenuText + '</td></tr>' );
sLastSubMenu    = sMainMenuName;
}
else
{
document.write( '</table>' );
bOpenedSubMenuTable = false;
}
}
document.write( '<img src="/corp/graphics/corp2/px_white.gif" width="1" height="1" border="0" alt="" style="position: absolute; left: 0px; top: 0px; height: 1px; width: 1px; z-index: 98; display: none;" name="white_pixel">' );
}
function isMenuOpen()
{
return ( sActiveMenu != '' );
}
function getMenuCellText( oMenuCell )
{
return oMenuCell.getElementsByTagName( 'A' )[0].childNodes[0].nodeValue;
}
function getParentMenuName( oSubMenu )
{
var sSubMenuId      = oSubMenu.id;
var reUnderscores   = /_/g;
var sParentMenuName = sSubMenuId.substr( 5 ).replace( reUnderscores, ' ' );
return capitalise( sParentMenuName );
}
function showMenu( oMenuCell )
{
var sMenuName       = getMenuCellText( oMenuCell );
var reSpaces        = / /g;
var sMenuTableId    = 'menu_' + sMenuName.replace( reSpaces, '_' ).toLowerCase();
var oMenuTable      = document.getElementById( sMenuTableId );
if ( sActiveMenu == sMenuTableId )
{
clearMenuTimeout();
}
else
{
hideMenus();
}
highlightMenuLink( sMenuName );
if ( oMenuTable != null )
{
sActiveMenu = sMenuTableId;
var iLeft   = getLeft( oMenuCell );
var iTop    = getTop( oMenuCell );
var iWidth  = oMenuCell.offsetWidth;
var iHeight = oMenuCell.offsetHeight;
var iRight  = iLeft + iWidth;
var iBottom = iTop + iHeight;
with ( oMenuTable.style )
{
position    = 'absolute';
left        = ( iLeft - 1 ) + 'px';
top         = ( iBottom + 0 ) + 'px';
width       = ( iWidth + 1 ) + 'px';
}
var aSubMenuCells   = oMenuTable.getElementsByTagName( 'TD' );
for ( var i = 0; i < aSubMenuCells.length; i++ )
{
var oNextSubMenuCell    = aSubMenuCells[i];
oNextSubMenuCell.onmouseover    = new Function( 'this.style.background = \'#e4edec\';' );
oNextSubMenuCell.onmouseout     = new Function( 'this.style.background = \'white\';' );
}
oMenuTable.style.display    = ( is_ie ) ? 'block' : 'table';
if ( oWhitePixel != null )
{
with ( oWhitePixel.style )
{
display = 'block';
left    = ( iLeft - 1 ) + 'px';
top     = ( iBottom + 0 ) + 'px';
width   = ( iWidth + 1 ) + 'px';
}
}
}
}
function highlightMenuLink( sMenuName )
{
if ( oMainMenuTable != null )
{
var aMainMenuCells  = oMainMenuTable.getElementsByTagName( 'TD' );
for ( var iCell = 0; iCell < aMainMenuCells.length; iCell++ )
{
var oNextCell       = aMainMenuCells[iCell];
var oNextLink       = oNextCell.getElementsByTagName( 'A' )[0];
var sNextCellValue  = getMenuCellText( oNextCell );
if ( sNextCellValue == sMenuName || sNextCellValue == sPermanentlyHighlightedMenu )
{
oNextLink.style.color   = '#ff9900';
}
else
{
oNextLink.style.color   = '#506270';
}
}
}
}
function highlightParent( oSubMenu )
{
if ( oSubMenu == null )
{
highlightMenuLink( '' );
}
else
{
highlightMenuLink( getParentMenuName(oSubMenu) );
}
}
function hideMenus()
{
sActiveMenu = '';
for ( var iSubMenu = 0; iSubMenu < aSubMenuTables.length; iSubMenu++ )
{
var oNextSubMenu            = aSubMenuTables[iSubMenu];
oNextSubMenu.style.display  = 'none';
}
if ( oWhitePixel != null )
{
oWhitePixel.style.display   = 'none';
}
highlightParent( null );
}