//==============================================================================
// Main Routine
//==============================================================================
var our;

if (our == null) {
    var newLineChar = String.fromCharCode(10);
    var ie4 = document.all&&navigator.userAgent.indexOf("Opera")==-1;
    var ns6 = (document.getElementById && !document.all) || (navigator.userAgent.indexOf("Opera") != -1);
    var ToolBar_Supported = (ie4 || ns6)? true : false;
    var ourMenu;
    var goNav;
    var oNav2Menu = null;
    var oNav1Menu = null;

    var arrBreadCrumbMapItem = null;

    InitGlobals();
    InitHorizontalNav();
 }


//==============================================================================
// Function: InitGlobals()
// Description: Initialize the Global object
// Inputs: None
// Return: None
// Notes: sets up information wrt to banner and footer
//==============================================================================
function InitGlobals() {
    our = new Array();
    our.enableNav1Menu = false;
    our.enableLeftNavMenu = false;
    our.menuDropDown = true;
    our.images = "/images/";
    our.cssLocation = "/include/";

    if (ie4)
        {document.write("<link rel='stylesheet' type='text/css' href='" + our.cssLocation + "header.css'>");}
    else
        {document.write("<link rel='stylesheet' type='text/css' href='" + our.cssLocation  + "header_mozilla.css'>");}

    goNav = new Array();
    goNav.breadCrumbLinkMenuID = ""
    goNav.breadCrumbMenuID = ""
    goNav.breadCrumbNav1 = "";
    goNav.breadCrumbNav2 = "";
    goNav.breadCrumbNav3 = "";
    goNav.breadCrumbLabel = "";
    goMenu = new Array();

}

//==============================================================================
// Function: InitHorizontalNav()
// Description: Initialize the horizontal navigation
// Inputs: None
// Return: None
// Notes: sets up object to display and organize top
//              navigation
//==============================================================================
function InitHorizontalNav() {
    goNav.menuString1 = "<table border=0 cellpadding=0 cellspacing=0 width='100%'> " +
                                    "<tr>" +
                                        "<td width=5></td>" +
                                        "<!--LD_MENU_TITLES-->" +
                                        "<td class='nav1Filler' width='100%'></td>" +
                                        "<td width=5></td>" +
                                    "</tr>" +
                                "</table>";

    goNav.menuString = "";
}


//==============================================================================
// Function: ourCreateMenu(sMenuID, sMenuDefObject, sMenuDisplay, sMenuURL, sTarget)
// Description: Internal Call - Create Top Level Menu (Level 1)
// Inputs: sMenuID - ID of menu to link 2nd level items
//            sMenuDefObject - Menu Definition Object (goNav)
//            sMenuDisplay - Title of menu item
//            sMenuURL - link for the menu item
//            sTarget - target location for document to be displayed
// Return: None
//==============================================================================
function ourCreateMenu(sMenuID, sMenuDefObject, sMenuDisplay, sMenuURL, sTarget) {
    var obj = eval(sMenuDefObject);
    var sTag  = "<!--LD_MENU_TITLES-->";
    var sMenu = newLineChar;
    var sLinkMenuID = "AM_" + sMenuID;
    var sClassName;

    our.enableNav1Menu = true;

    // Find out if the menu matches the bread crumb.
    if (sMenuDisplay == goNav.breadCrumbNav1) {
        goNav.breadCrumbMenuID = sMenuID;
        goNav.breadCrumbLinkMenuID = sLinkMenuID;
        sClassName = "nav1Down";
    } else {
        if (sMenuDisplay == "Help") {
            sClassName = "nav1UpHelp";
        } else {
            sClassName = "nav1Up";
        }
    }


    sMenu += "<td><div style='position:relative' ><table border=0 cellspacing=0 cellpadding=0 height=20><tr><td  class='" +
                sClassName + "' ID='" + sLinkMenuID + "' nowrap valign='middle'><a id='idLocalNav' onmouseout=\"DelayHideMenu();\" " +
                "onmouseover=\"DoMenu(event, '" + sLinkMenuID + "', '" + sMenuID + "','" + sMenuURL +
                "');\"";

    if (sMenuURL != "") {
        sMenu += " target='" + sTarget + "'" + " href='" + sMenuURL + "'>";
    } else {
        sMenu += " style='cursor:default' href=\"javascript:void();\" onclick=\"window.event.returnValue=false;\">";
    }

    sMenu += "&nbsp;&nbsp;" + sMenuDisplay + "&nbsp;&nbsp;</a></td></tr></table></div></td>" +
            "<td><img src='" + our.images + "spacer.gif' height=20 width=2 border=0></td>" +
            sTag;

    obj.menuString1 = obj.menuString1.replace(sTag, sMenu);
}

//==============================================================================
// Function: HideMenu
// Description: hide the dropdown menu
// Inputs: None
// Return: None
//==============================================================================
function HideMenu() {
    var oBreadCrumbNav2Menu;

    // Check if we have a nav2 menu.
    if (oNav2Menu) {
		oBreadCrumbNav2Menu = document.getElementById(goNav.breadCrumbMenuID);

        // Check if this a vertical dropdown nav
        if (our.menuDropDown) {
            // It is, set the bread crum nav2 object to null.
            oBreadCrumbNav2Menu = null;
            if (ie4) {
                ShowElement("SELECT");
                ShowElement("OBJECT");
                ShowElement("IFRAME");
            }
        }

        if (oBreadCrumbNav2Menu == null) {
            oNav2Menu.thestyle.visibility = (ie4||ns6)? "hidden" : "hide";
            oNav2Menu.innerHTML = "";
        } else {
            oNav2Menu.innerHTML = oBreadCrumbNav2Menu.innerHTML;
        }


        // Reset the nav1 to up.
        if (oNav1Menu) {
            // Do not change the class setting if this matches the nav1 bread crumb.
            var oBreadCrumbNav1Menu; 
			if ((goNav.breadCrumbLinkMenuID != null) && (goNav.breadCrumbLinkMenuID != ""))
				oBreadCrumbNav1Menu = document.getElementById(goNav.breadCrumbLinkMenuID);

            if (oBreadCrumbNav1Menu != null){
                // restore the class type for level 1 bread crumb.
                oBreadCrumbNav1Menu.className="nav1Down";
            }

            if (oNav1Menu != oBreadCrumbNav1Menu) {
                if (oNav1Menu.innerText == "  Help  ")
                    oNav1Menu.className = "nav1UpHelp";
                else
                    oNav1Menu.className = "nav1Up";
            } else {
                oNav1Menu.className = "nav1Down";
            }
        }
    }
}

//==============================================================================
// Function: ContainsNS6
// Description: Determines if 1 element in contained in another
// Inputs: a - element
//         b - element
// Return: None
//==============================================================================
function ContainsNS6(a, b) {
    while (b.parentNode)
    {
        if ((b = b.parentNode) == a) {
            return true;
        }
    }
    return false;
}

//==============================================================================
// Function: DynamicHide
// Description: Sets the delay for the hiding of the menu.
// Inputs: e - event
// Return: None
//==============================================================================
function DynamicHide(e){
    if (ie4&&!oNav2Menu.contains(e.toElement))
        DelayHideMenu();
    else if (ns6&&e.currentTarget!= e.relatedTarget&& !ContainsNS6(e.currentTarget, e.relatedTarget))
        DelayHideMenu();

}

//==============================================================================
// Function: DelayHideMenu
// Description: Sets the timeout to hide the menu.
// Inputs: None
// Return: None
//==============================================================================
function DelayHideMenu(){
    var iDelay = 1500;

    if (our.menuDropDown)
        iDelay = 250;

   if (ie4||ns6)
        delayhide=setTimeout("HideMenu()", iDelay);
}

//==============================================================================
// Function: ClearHideMenuTimeout
// Description: Clears the timeout to hide the menu.
// Inputs: None
// Return: None
//==============================================================================
function ClearHideMenuTimeout(){
    if (window.delayhide)
        clearTimeout(delayhide);
}

//==============================================================================
// Function: HighlightNav2Menu
// Description: Highlights a link within the nav2 menu.
// Inputs: e - event element
//         state - state of the element
// Return: None
//==============================================================================
function HighlightNav2Menu(e, state){


    var source_el;

    if (document.all)
        source_el=event.srcElement;
    else if (document.getElementById)
        source_el=e.target;

    if (source_el.className=="nav2menuitem"){
        if (state=="on") {
            source_el.id = "nav2DownHover";
        } else {
            if (source_el.innerText == "  " + goNav.breadCrumbNav2 + "  ") {
                source_el.id = "nav2Down";
            } else {
                source_el.id = "";
            }
        }
    }
    else{
        while(source_el.id!="popmenu"){
            source_el=document.getElementById? source_el.parentNode : source_el.parentElement;

            if (source_el.className=="nav2menuitem"){
                if (state=="on") {
                    source_el.id = "nav2DownHover";
                    var level2text = _getInnerText(source_el);

                    if (level2text == goNav.breadCrumbNav2) {

                        source_el.id = "nav2DownSelectedHover";

                    }

                } else {
                    if (source_el.innerText == "  " + goNav.breadCrumbNav2 + "  ") {
                        source_el.id = "nav2Down";
                    } else {
                        source_el.id = "";
                    }
                }
            }
        }
    }
}


//============================================================================
// Function: _getInnerText(level2Item)
// Description: This function is written because innerText function is not
//              supported in mozilla. This function will take an element and
//              get the text from it. The text produced will have lot of
//              spaces ??!!
// Inputs: level2Item - second level menu item
// Return: The inner text.
//==============================================================================



function _getInnerText(level2Item) {
    var finalStr = level2Item.innerHTML.replace(/<[^>]+>/g,"");

    // replace the &nbsp - spaces
    while (finalStr.indexOf("&nbsp;") != -1) {
        finalStr = finalStr.replace("&nbsp;", "");
    }

    escapedFinalStr = escape(finalStr);
    // hex version of the return character (%0D) and/or new line character (%0A),
    while(escapedFinalStr.indexOf("%0D") != -1) {
        escapedFinalStr = escapedFinalStr.replace("%0D", "");
    }
    while(escapedFinalStr.indexOf("%0A") != -1) {
        escapedFinalStr = escapedFinalStr.replace("%0A", "");
    }

    finalStr = unescape(escapedFinalStr);
    return finalStr;
}

//============================================================================
// Function: DoMenu(e, sMenuID)
// Description: Build 2nd level of Navigation (DropDown)
// Inputs: sMenuID - ID of menu
// Return: True if built correctly otherwise false
//==============================================================================
function DoMenu(e, sLinkMenuID, sMenuID, sMenuURL) {
    var eventX;
    var eventY;
    var nav1Height = 20;

    var oMenu = document.getElementById(sMenuID);
    var oSelectedNav1Menu = document.getElementById(sLinkMenuID);
    var oBreadCrumbNav1Menu; // = document.getElementById(goNav.breadCrumbLinkMenuID);

	if ((goNav.breadCrumbLinkMenuID != null) && (goNav.breadCrumbLinkMenuID != "")) {
		oBreadCrumbNav1Menu = document.getElementById(goNav.breadCrumbLinkMenuID);
	}

    // Set the selected menu as down.
    oSelectedNav1Menu.className = "nav1DownHover";
 
    // Check if we have an old nav 1 menu.
    if (oNav1Menu) {
        // Make sure that it doesn't match the selected one.
        if (oNav1Menu != oSelectedNav1Menu) {
            // Do not change the class setting if this matches the nav1 bread crumb.
            if (oNav1Menu != oBreadCrumbNav1Menu) {
                // Change it to nav1up.
                if (oNav1Menu.innerText == "  Help  ")
                    oNav1Menu.className = "nav1UpHelp";
                else
                    oNav1Menu.className = "nav1Up";
            }

        }
    }

    // change the class of the nav 1 bread crumb to restore black background
    if ((oBreadCrumbNav1Menu != null) && (oSelectedNav1Menu != oBreadCrumbNav1Menu)) {
        oBreadCrumbNav1Menu.className="nav1Up";
    }


    // change the class to show blue text in case the menu is a link
    if (sMenuURL != "") oSelectedNav1Menu.className="nav1LinkHover";


    // Now remember the menu we just set down.
    oNav1Menu = oSelectedNav1Menu;

    if (oMenu == null) {
       if ((ns6) && (Event.stopPropagation)) {
		    // this code is for mozilla and Opera
		    Event.stopPropagation();
		} else if (window.event) {
		   // this code is for IE
		   window.event.cancelbubble = true;
		}
		//HG force the 2nd row to be blank without the delay associated with 2nd level
        oMenu = new Array();
        oMenu.innerHTML = "<table></table>";
    }

    if (!document.all&&!document.getElementById&&!document.layers)
        return;


    ClearHideMenuTimeout();


    oNav2Menu=ie4? document.all.popmenu : document.getElementById("popmenu");
    oNav2Menu.thestyle=oNav2Menu.style;
    oNav2Menu.innerHTML=oMenu.innerHTML;

    if (our.menuDropDown) {
        if (ie4) {
            ShowElement("SELECT");
            ShowElement("OBJECT");
            ShowElement("IFRAME");
        }

        oNav2Menu.contentwidth=oNav2Menu.offsetWidth;
        oNav2Menu.contentheight=oNav2Menu.offsetHeight;

        if (ie4) {
            eventX = event.clientX - event.offsetX - 2;
            eventY = (event.clientY + nav1Height) - event.offsetY - 1;
        } else if (ns6) {
            eventX = e.pageX - e.layerX;
            eventY = e.pageY - e.layerY + 21;
        }

        //Find out how close the mouse is to the corner of the window
        var rightedge=ie4? document.body.clientWidth-eventX : window.innerWidth-eventX;
        var bottomedge=ie4? document.body.clientHeight-eventY : window.innerHeight-eventY;

        //if the horizontal distance isn't enough to accomodate the width of the context menu
        if (rightedge < oNav2Menu.contentwidth) {
            //move the horizontal position of the menu to the left by it's width
            oNav2Menu.thestyle.left=ie4? document.body.scrollLeft+eventX+event.srcElement.offsetWidth-oNav2Menu.contentwidth : window.pageXOffset+eventX+e.currentTarget.offsetWidth-oNav2Menu.contentwidth;
        } else {
            //position the horizontal position of the menu where the mouse was clicked
            oNav2Menu.thestyle.left=ie4? document.body.scrollLeft+eventX : window.pageXOffset+eventX;
        }

        //same concept with the vertical position
        if (bottomedge < oNav2Menu.contentheight) {
            oNav2Menu.thestyle.top=ie4? document.body.scrollTop+eventY-oNav2Menu.contentheight : window.pageYOffset+eventY-oNav2Menu.contentheight;
        } else {
            oNav2Menu.thestyle.top=ie4? document.body.scrollTop+eventY : window.pageYOffset+eventY;
        }

        if (ie4) {
            HideElement(oNav2Menu, "SELECT");
            HideElement(oNav2Menu, "OBJECT");
            HideElement(oNav2Menu, "IFRAME");
        }
    }

    if ((oNav2Menu.innerText == "") && (our.menuDropDown))
        oNav2Menu.thestyle.visibility = (ie4||ns6)? "hidden" : "hide";
    else
        oNav2Menu.thestyle.visibility="visible";

    return false;
}

//============================================================================
// Function: HideElement(elmID)
// Description: Hide Elements on screen when displaying vertical dropdown
// Inputs: elmID - Element Type to hide
// Return:
//==============================================================================
function HideElement(oNav2Menu, elmID) {
	var i=0, obj, objLeft, objTop, objParent;
	var iNavTop, iNavLeft;

	iNavTop = oNav2Menu.thestyle.pixelTop;
	iNavLeft = oNav2Menu.thestyle.pixelLeft;

	for (i = 0; i < document.all.tags(elmID).length; i++) {
		obj = document.all.tags(elmID)[i];
		if (!obj || !obj.offsetParent) {
			continue;
		}

		objLeft   = obj.offsetLeft;
		objTop    = obj.offsetTop;
		objParent = obj.offsetParent;
		while (objParent != null){
		   if (objParent.tagName.toUpperCase() != "BODY") {
			objLeft  += objParent.offsetLeft;
			objTop   += objParent.offsetTop;
			objParent = objParent.offsetParent;
		   }else{
			 break;
		   }
		}
		
		if ((objTop < (iNavTop + oNav2Menu.contentheight)) &&
			((objTop + obj.clientHeight) > iNavTop) &&
		    (objLeft > iNavLeft) &&
		    (objLeft < (iNavLeft + oNav2Menu.contentwidth))) {
			obj.style.visibility = (ie4||ns6)? "hidden" : "hide";
			obj.style.EPHide = true;
		} else if ((objTop < (iNavTop + oNav2Menu.contentheight)) &&
		    ((objLeft + obj.clientWidth) > iNavLeft) &&
		    ((objLeft + obj.clientWidth) < (iNavLeft + oNav2Menu.contentwidth))) {
			obj.style.visibility = (ie4||ns6)? "hidden" : "hide";
			obj.style.EPHide = true;
		} else if (objTop > (iNavTop + oNav2Menu.contentheight)) {
			return ;
		}
	}
}


//============================================================================
// Function: ShowElement(elmID)
// Description: Show Elements on screen when removing the vertical dropdown
// Inputs: elmID - Element Type to show
// Return:
//==============================================================================
function ShowElement(elmID) {
    var i=0, obj;

    for (i = 0; i < document.all.tags(elmID).length; i++) {
        obj = document.all.tags(elmID)[i];
        if (!obj)
            continue;

        if (obj.style.EPHide) {
            obj.style.visibility = "visible";
            obj.style.EPHide = false;
        }
    }
}


//==============================================================================
// Function: ourAddMenuItem(sMenuID, sMenuDefObject, sSubMenu, sSubMenuURL, sTarget)
// Description: Associates this "sub-menu" item to the specified menu item for
//                   the top horizontal navigation
// Inputs:  sMenuID - ID of menu item
//              sMenuDefObject - Object to add item to (global top nav obj - goNav)
//              sSubMenu - Label
//              sSubMenuURL - URL
//              sTarget - target location for document to be displayed
// Return:  None
//==============================================================================
function ourAddMenuItem(sMenuID, sMenuDefObject, sSubMenu, sSubMenuURL, sTarget) {
    var obj = eval(sMenuDefObject);
    var sMenuString = obj.menuString;
    var sURL = sSubMenuURL;
    var sMenuType = "idLocalNav";
    var sLookUpTag  = "<!--" + sMenuID + "-->";
    var iPos = sMenuString.indexOf(sLookUpTag);
    var sTemp = newLineChar;

    if (iPos <= 0) {
        sMenuString += newLineChar +
                newLineChar +
                "<div id='" + sMenuID + "' " +  " style='display:none;'>";
    }

    if (sURL) {
        sTemp += "<div class='nav2menuitem'><a id=\"" + sMenuType + "\" target=\"" + sTarget + "\" ";

        if (sMenuType == "idSearchMenu")
            sTemp += " onclick=\"" + sURL + "\" ";
        else
            sTemp += " href='" + sURL + "' ";

        sTemp += ">" + sSubMenu + "</a></div>";
    } else {
        sTemp += "<label>" + sSubMenu + "</label>";
    }

    sTemp += sLookUpTag;

    if (iPos <= 0) {
        sMenuString += sTemp + "</div>";
    }
    else {
        sMenuString = sMenuString.replace(sLookUpTag, sTemp);
    }

    if (sMenuType == "idLocalNav")
        goNav.menuString = sMenuString;
    else
        ourMenu.menuString = sMenuString;
}

//==============================================================================
// Function: AddHorMenuItem(sMenuID, sMenuDefObject, sSubMenu, sSubMenuURL, sTarget)
// Description: Associates this "sub-menu" item to the specified menu item for
//                   the top horizontal navigation
// Inputs:  sMenuID - ID of menu item
//              sMenuDefObject - Object to add item to (global top nav obj - goNav)
//              sSubMenu - Label
//              sSubMenuURL - URL
//              sTarget - target location for document to be displayed
// Return:  None
// Notes: Builds 2nd horizontal menu items
//==============================================================================
function AddHorMenuItem(sMenuID, sMenuDefObject, sSubMenu, sSubMenuURL, sTarget) {
    var obj = eval(sMenuDefObject);
    var sMenuString = obj.menuString;
    var sURL = sSubMenuURL;
    var sMenuType = "idLocalNav";
    var sLookUpTag  = "<!--" + sMenuID + "-->";
    var iPos = sMenuString.indexOf(sLookUpTag);
    var sTemp = newLineChar;

    if (sURL) {
        if (iPos <= 0) {
            sMenuString += newLineChar +
                    newLineChar +
                    "<div id='" + sMenuID + "' " +  " style='display:none;'>" +
                    "<table border=0 width='100%' cellspacing=0 cellpadding=0><tr>";
        }

        // Check if this is bread crumb nav2.
        if ((sMenuID == goNav.breadCrumbMenuID) & (sSubMenu == goNav.breadCrumbNav2)){
            sTemp += "<td><div class='nav2menuitem' id='nav2Down'><table border=0 cellpadding=0 cellspacing=0><tr><td nowrap height=20><a id='" + sMenuType + "' target=\"" + sTarget + "\" ";
        } else {
                sTemp += "<td><div class='nav2menuitem'><table border=0 cellpadding=0 cellspacing=0><tr><td nowrap height=20><a id='" + sMenuType + "' target=\"" + sTarget + "\" ";

        }

        if (sMenuType == "idSearchMenu")
            sTemp += " onclick=\"" + sURL + "\" ";
        else
            sTemp += " href='" + sURL + "' ";

        sTemp += ">&nbsp;&nbsp;" + sSubMenu + "&nbsp;&nbsp;</a></td></tr></table></div></td>" +
        "<td bgcolor='#FFFFFF'><img src='" + our.images + "spacer.gif' height=0 width=2 border=0></td>" +
        sLookUpTag;

        if (iPos <= 0) {
            sMenuString += sTemp + "<td width='100%'>&nbsp;</td></tr></table></div>";
        }
        else {
            sMenuString = sMenuString.replace(sLookUpTag, sTemp);
        }

        if (sMenuType == "idLocalNav") {
            goNav.menuString = sMenuString;
        } else {
            ourMenu.menuString = sMenuString;
        }
    }
}

//==============================================================================
// Function: AddMenuSeparator(sMenuID, sMenuDefObject)
// Description: Associates the separator of this "sub-menu" item to the specified
//                   menu item for the top horizontal navigation
// Inputs: sMenuID - ID of Menu to place separator in
//            sMenuDefObject - Object to add item to (goNav)
// Return: None
//==============================================================================
function AddMenuSeparator(sMenuID, sMenuDefObject) {
    var obj = eval(sMenuDefObject);
    var sLookUpTag = "<!--" + sMenuID + "-->";
    var sMenuString, sTemp;

    sMenuString = obj.menuString

    var iPos = sMenuString.indexOf(sLookUpTag);
    if (iPos > 0) {
        sTemp = newLineChar +
                    "<div style='margin-top:4px;margin-bottom:4px;width:100%;height:1px;background-color:white'><img src='" + our.images + "spacer.gif' width=1 height=1></div>" + sLookUpTag;

        sMenuString = sMenuString.replace(sLookUpTag, sTemp);
    }

    obj.menuString = sMenuString;
}

//==============================================================================
// Function: AddNavLink(sSubMenu, sSubMenuURL, sTarget)
// Description: Add NavLinks to the Left Nav Menu (Level 3)
// Inputs: sSubMenu - Left hand menu name
//            sSubMenuURL - URL of menu item
//            Optional sTarget - target location for document to be displayed
// Return: None
//==============================================================================
function AddNavLink(sSubMenu, sSubMenuURL, sTarget) {
    var bSelected;

    if (unescape(location.href) == sSubMenuURL || unescape(location.pathname) == sSubMenuURL || sSubMenu == goNav.breadCrumbNav3)
        bSelected = true;

    goNav.leftNavString +=
            "<tr>" +
                "<td align=center valign=top width=16 nowrap>" +
                    "<img align=center src='bullet.gif'  vspace=3 height=4 width=4 hspace=3 border=0></td>" +
                "<td valign=top width=100%>";

    if (bSelected) {
        goNav.leftNavString += "<div ID=listItemSelected class='leftNavDownSelected'>" + sSubMenu + "</div>";
    } else {
        goNav.leftNavString += "<a class='leftNavDown' target='" + sTarget +"' href='" + sSubMenuURL + "'>" + sSubMenu + "</a>";
    }
    goNav.leftNavString += "</td></tr>";
}

//==============================================================================
// Function: createNavExpandingList(sMenuID, sSubMenu, sSubMenuURL, bDefOpen, sTarget)
// Description: Creates a menu item with the ability to expand.
// Inputs: sMenuID - Unique ID for Menu item
//            sSubMenu - String to display for menu Item
//            sSubMenuURL - URL for the link
//              bDefOpen - Flags whether to open or close the list. True - Open List
// Return: None
//==============================================================================
function createNavExpandingList(sMenuID, sSubMenu, sSubMenuURL, bDefOpen, sTarget) {
    var sLookUpTag  = "<!--" + sMenuID + "-->";
    var sPos = goNav.leftNavString.indexOf(sLookUpTag);

    if (sPos <= 0) {
        goNav.leftNavString +=
                "<tr><td align=center valign=top width=16 nowrap><img src='" + (bDefOpen? 'minus.gif':'plus.gif') + "' align='center' height='9' width='9' border=0 id='BTN_" + sMenuID + "' vspace=3 style='cursor:hand;' onclick=\"return ToggleNavExpandingList('BTN_" + sMenuID + "', 'ITEMS_" + sMenuID + "');\"></td><td valign=top width=100%>";

        if (sSubMenuURL) {
            var bSelected = false;

            if (unescape(location.href) == sSubMenuURL || unescape(location.pathname) == sSubMenuURL || sSubMenu == goNav.breadCrumbNav3)   {
                bSelected = true;
            }

            if(bSelected) {
                goNav.leftNavString +=
                    "<div id=listItemSelected><div class='leftNavDownSelected'>" + sSubMenu + "</div></div>"
            } else {
                goNav.leftNavString +=
                    "<a class='leftNavDown' target='" + sTarget + "' href='" + sSubMenuURL + "' id='" + sMenuID +"' class=clsTocHead >" + sSubMenu + "</a>";
            }
        } else {
            goNav.leftNavString +=  "<div class='leftNavDown' id='idNotALink' >" + sSubMenu + "</div>";
        }

        goNav.leftNavString += "<div id=ITEMS_" + sMenuID + " style='display:" + (bDefOpen? 'block':'none') + "';'><!--" + sMenuID + "--></div></td></tr>";

        if (createNavExpandingList.arguments.length > 3) {
            if (bDefOpen) {
                goNav.leftNav.openItems[goNav.leftNav.openItems.length] = sMenuID;
            }
        }
    }
}

//==============================================================================
// Function: addNavExpandingListItem(sMenuID, sSubMenu, sSubMenuURL, sTarget, bSubItem)
// Description: Actual association of sub-menu item to an existing left nav menu item (level 4)
// Inputs: sMenuID - Unique ID for Menu item
//            sSubMenu - String to display for menu Item
//            sSubMenuURL - URL for the link
//            sTarget - location to display the
// Return: None
//==============================================================================
function addNavExpandingListItem(sMenuID, sSubMenu, sSubMenuURL, sTarget) {
    var bSelected;

    if (unescape(location.href) == sSubMenuURL || unescape(location.pathname + location.search) == sSubMenuURL || sSubMenu == goNav.breadCrumbNav3) {
        bSelected = true;

        var i=0, bFound=false;
        for (i = 0; i < goNav.leftNav.openItems.length; i++) {
            if (goNav.leftNav.openItems[i] == sMenuID) {
                bFound = true;
                break;
            }
        }

        if (!bFound)
            goNav.leftNav.openItems[goNav.leftNav.openItems.length] = sMenuID;
    }

    var sLookUpTag  = "<!--" + sMenuID + "-->";
    var sTemp = newLineChar + "<div " + (bSelected? ' id=listItemSelected':'') + " >";

    if (bSelected) {
        sTemp += "<div class='leftNavSelected'>" + sSubMenu + "</div></div>" + sLookUpTag;
    } else {
        sTemp += "<a class='leftNav' target='" + sTarget +"' href='" + sSubMenuURL +"'>" + sSubMenu + "</a></div>" + sLookUpTag;
    }

    goNav.leftNavString = goNav.leftNavString.replace(sLookUpTag, sTemp);
}

//==============================================================================
// Function: AddNavImageLink(sSubImage, sSubMenuURL, sSubMenu, sTarget)
// Description: Actual creation of a link that is preceeded by an image
// Inputs: sSubImage - URL of image
//            sSubMenuURL - URL for link
//            sSubMenu - Label for alt tag
//            sTarget - Location to display document
// Return: None
//==============================================================================
function AddNavImageLink(sSubImage, sSubMenuURL, sSubMenu, sTarget) {
    var bSelected;

    if (unescape(location.href) == sSubMenuURL || unescape(location.pathname) == sSubMenuURL || sSubMenu == goNav.breadCrumbNav3) {
        bSelected = true;
    }

    goNav.leftNavString += "<tr><td colspan=2><table border=0 cellpadding=0 cellspacing=0><tr>";

    if (bSelected) {
        goNav.leftNavString += "<td><img align=left src='" + sSubImage +"' height=16 width=16 border=0></td><td id=\"listItemSelected\" width=100% class=\"clsTocHead\" id=\"listItemSelected\" style='font-family:Verdana;font-size:14px;font-weight:bold;'>" + sSubMenu + "</td>";
    } else {
        goNav.leftNavString += "<td><a target='" + sTarget +"' href='" + sSubMenuURL + "' ><img align=left src='" + sSubImage +"' height=16 width=16 border=0></a></td><td class=\"leftNavMenuItem\" width=100%><a style='font-family:Verdana;font-size:14px;font-weight:bold;text-decoration:none;' target='" + sTarget +"' href='" + sSubMenuURL + "' class=clsTocHead>" + sSubMenu + "</a></td>";
    }

    goNav.leftNavString += "</tr></table></td></tr>";
}

//==============================================================================
// Function: AddNavImage(sSubImage, sSubMenuURL, sSubMenu, sTarget)
// Description: Creates a centered image in the local left vertical
// Inputs: sSubImage - Image URL
//            sSubMenuURL - URL for link
//            sSubMenu - Label for alt tag.
//            sTarget - location to display document
// Return: None
//==============================================================================
function AddNavImage(sSubImage, sSubMenuURL, sSubMenu, sTarget) {
    goNav.leftNavString +=
            "<tr><td style=margin-left-width=10px; colspan=2 align=center><a target='" + sTarget +"' href='" + sSubMenuURL + "'><img src='" + sSubImage +"' border=0 ALT='" + sSubMenu + "'></td></a></td></tr>";
}



//==============================================================================
// Function: ToggleNavExpandingList(oButton, oItems)
// Description: Open/Closes the specified expanding list from the left nav.
// Inputs: oButton - handle to the image
//            oItems - handle to area that is to be hidden/displayed.
// Return: None
// Notes: returns false (not sure why)
//==============================================================================
function ToggleNavExpandingList(sButton, sItem) {
    var oButton = document.getElementById(sButton);
    var oItem = document.getElementById(sItem);

    if ((oItem.style.display == "") || (oItem.style.display == "none")) {
        oItem.style.display = "block";
        oButton.src = eval("minus.src");
    } else {
        oItem.style.display = "none";
        oButton.src = eval("plus.src");
    }

    return false;
}


//==============================================================================
// Function: BuildMenus()
// Description: Builds HTML for all menus
// Inputs: None
// Return: None
//==============================================================================
function BuildMenus() {
    var aMenu;

    for(var i=0; i < goMenu.length; i++) {
        aMenu = goMenu[i];
        switch (aMenu[0]) {
            case "Level1":
                ourCreateMenu(aMenu[1], aMenu[2], aMenu[3], aMenu[4], aMenu[5]);
                break;

            case "Level2":
                if (our.menuDropDown)
                    ourAddMenuItem(aMenu[1], aMenu[2], aMenu[3], aMenu[4], aMenu[5]);
                else
                    AddHorMenuItem(aMenu[1], aMenu[2], aMenu[3], aMenu[4], aMenu[5]);
                break;

            case "Separator":
                if (our.menuDropDown)
                    AddMenuSeparator(aMenu[1], aMenu[2]);
                break;

            case "Level3 - AddNavLink":
                AddNavLink(aMenu[1], aMenu[2], aMenu[3]);
                break;

            case "Level3 - AddNavSpacer":
                goNav.leftNavString += "<tr><td colspan=2 height=" + aMenu[1] + ">&nbsp;</td></tr>";
                break;

            case "Level3 - AddNavImage":
                AddNavImage(aMenu[1], aMenu[2], aMenu[3], aMenu[4]);
                break;

            case "Level3 - addNavExpandingListSubItem":
                addNavExpandingListItem(aMenu[1], aMenu[2], aMenu[3], aMenu[4], aMenu[5]);
                break;

            case "Level3 - addNavExpandingListItem":
                addNavExpandingListItem(aMenu[1], aMenu[2], aMenu[3], aMenu[4]);
                break;

            case "Level3 - addNavLabel":
                goNav.leftNavString +=
                    "<tr><td valign=top width=100% colspan=2>" +
                    "<div class=clsTocHead style='cursor:default;color:" + goNav.foreground + ";margin-left:2px;margin-right:2px;font-family:Verdana;font-size:14px;font-weight:bold;'>" + aMenu[1] + "</div>" +
                    "</td></tr>";
                break;

            case "Level3 - addNavImageLink":
                AddNavImageLink(aMenu[1], aMenu[2], aMenu[3], aMenu[4]);
                break;

            case "Level3 - addNavSeparator":
                goNav.leftNavString += newLineChar + "<tr><td colspan=2><hr style='margin-left:1px;margin-right:1px;width:100%;height:2px;border-style:outset;border-right-width:0px;border-left-width:0px;background-color:" + goNav.hiliteBackground + ";color:" + goNav.foreground + "'></td></tr>";
                break;

            case "Level3 - createNavExpandingList":
                createNavExpandingList(aMenu[1], aMenu[2], aMenu[3], aMenu[4], aMenu[5]);
                break;
        }
    }
    //clear out the array
    goMenu = new Array();
}

//==============================================================================
// Function: drawHorizontalNavigation()
// Description: Draw Top Level Menu (Level 1)
// Inputs: None
// Return: None
//==============================================================================
function drawHorizontalNavigation() {
    var sHTML;


    sHTML = goNav.menuString1;

    if (our.menuDropDown) {
        sHTML += "<div id='popmenu' class='nav2Skin' onMouseover=\"ClearHideMenuTimeout();HighlightNav2Menu(event,'on');\" onMouseout=\"HighlightNav2Menu(event,'off');DynamicHide(event);\"></div>" +
                "<table width='100%' border=0 cellspacing=0 cellpadding=0><tr><td width=5><img src='" + our.images + "spacer.gif' height=10 width=5 border=0></td><td align='right'>" + goNav.breadCrumbLabel + "</td><td width=5><img src='" + our.images + "spacer.gif' height=10 width=5 border=0></td></tr></table>" + goNav.menuString;
    } else {
        sHTML += "<table width='100%' cellspacing=0 cellpadding=0 border=0>" +
                "<tr>" +
                    "<td><img src='" + our.images + "spacer.gif' height=21 width=5 border=0></td>" +
                    "<td width='100%'><div id='popmenu' class='hNav2Skin' onMouseover=\"ClearHideMenuTimeout();HighlightNav2Menu(event,'on');\" onMouseout=\"HighlightNav2Menu(event,'off');DynamicHide(event);\"></div></td>" +
                    "<td><img src='" + our.images + "spacer.gif' height=21 width=5 border=0></td>" +
                "</tr>" +
                "</table>" +
                "<table width='100%' border=0 cellspacing=0 cellpadding=0><tr><td width=5><img src='" + our.images + "spacer.gif' height=10 width=5 border=0></td><td width=5><img src='" + our.images + "spacer.gif' height=10 width=5 border=0></td></tr></table>" + goNav.menuString;
    }

    document.write(sHTML);

    // Check if we have to draw the bread crumb.
    if (!our.menuDropDown) {
        var oBreadCrumbNav2Menu = document.getElementById(goNav.breadCrumbMenuID);

        if (oBreadCrumbNav2Menu) {
            oNav2Menu=ie4? document.all.popmenu : document.getElementById("popmenu");
            oNav2Menu.thestyle=oNav2Menu.style;
            oNav2Menu.innerHTML=oBreadCrumbNav2Menu.innerHTML;
            oNav2Menu.thestyle.visibility="visible";
        }
    }

    our.bannerDrawn = true;
}



//==============================================================================
// Function: addNavLabel(sSubMenu)
// Description: Add a label to the Left Nav menu
// Inputs: sSubMenu - text to display
// Return: None
//==============================================================================
function addNavLabel(sSubMenu) {
    var aMenu = new Array(2);

    our.enableLeftNavMenu = true;

    aMenu[0] = "Level3 - addNavLabel";
    aMenu[1] = sSubMenu;

    goMenu.push(aMenu);
    /*
    goNav.leftNavString +=
            "<tr><td valign=top width=100% colspan=2>" +
            "<div class=clsTocHead style='cursor:default;color:" + goNav.foreground + ";margin-left:2px;margin-right:2px;font-family:Verdana;font-size:14px;font-weight:bold;'>" + sSubMenu + "</div>" +
            "</td></tr>";
    */
}

//==============================================================================
// Function: addNavImageLink(sSubImage, sSubMenuURL, sSubMenu)
// Description: Create a link that is preceeded by an image
// Inputs: sSubImage - URL of image
//            sSubMenuURL - URL for link
//            sSubMenu - Label for alt tag
// Return: None
//==============================================================================
function addNavImageLink(sSubImage, sSubMenuURL, sSubMenu) {
    var sTarget = "_top";
    var aMenu = new Array(5);

    our.enableLeftNavMenu = true;

    if (addNavImageLink.arguments.length > 3)
        sTarget = addNavImageLink.arguments[3];


    aMenu[0] = "Level3 - addNavImageLink";
    aMenu[1] = sSubImage;
    aMenu[2] = sSubMenuURL;
    aMenu[3] = sSubMenu;
    aMenu[4] = sTarget;

    goMenu.push(aMenu);
}





//==============================================================================
// Function: addMenuItem
// Description: Adds a sub-menu item under the specified menu item found in the
//                   top horizontal navigation.
// Inputs: sMenuID - ID of menu item
//            sSubMenu - Label for Sub-Menu item
//            sSubMenuURL - URL associated with the sub-menu item
//            Optional sTarget - target location for document to be displayed
// Return:      None
//==============================================================================
function addMenuItem(sMenuID, sSubMenu, sSubMenuURL) {
    var sTarget = "_top"; // Target of link.
    var aMenu = new Array(6);

    if (addMenuItem.arguments.length > 3) {
        sTarget = addMenuItem.arguments[3];
    }

    aMenu[0] = "Level2";
    aMenu[1] = "LD_" + sMenuID + "_MENU";
    aMenu[2] = 'goNav';
    aMenu[3] = sSubMenu;
    aMenu[4] = sSubMenuURL;
    aMenu[5] = sTarget;

    goMenu.push(aMenu);

}


//==============================================================================
// Function: addBreadCrumbMapItem()
// Description: Creates a mapping of all the bread crumb items.
// Inputs: (navigation arguments, i.e. sURL, sNav1, sNav2, sNav3, etc...)
// Return: None
//==============================================================================
function addBreadCrumbMapItem() {
    var nIndex;
    var nLength = addBreadCrumbMapItem.arguments.length;
    var arrItem = new Array();

    // Check if we have any thing already, if not create one.
    if (arrBreadCrumbMapItem == null) {
        arrBreadCrumbMapItem = new Array();
    }

    // Collect all the argument values.
    for (nIndex = 0; nIndex < nLength; nIndex++) {
        arrItem[nIndex] = addBreadCrumbMapItem.arguments[nIndex];
    }

    // Get the end of the array.
    nIndex = arrBreadCrumbMapItem.length;

    // Add the crumb item to the list.
    arrBreadCrumbMapItem[nIndex] = arrItem;
}


//==============================================================================
// Function: drawHeader()
// Description: Draw the Banner, alert messages and navigation
// Inputs: None
// Return: None
//==============================================================================
function drawHeader() {

   // Build the menus
   BuildMenus();

    // Draw the top horizontal navigation
   if ((ToolBar_Supported) && (our.enableNav1Menu))
    drawHorizontalNavigation();

}


//==============================================================================
// Function: createMenu(sMenuID, sMenuDisplay)
// Description: Create Top Level Menu (Level 1)
// Inputs: sMenuID - ID of menu to link 2nd level items
//            sMenuDisplay - Title to display on the menubar
//            Optional sMenuURL - If menu item does not
//                  contain submenu then URL to go to
// Return: None
//==============================================================================
function createMenu(sMenuID, sMenuDisplay) {
    var sTarget = "_top";   // Target for link
    var sMenuURL = "";  // URL to point to
    var aMenu = new Array(6);

    our.enableNav1Menu = true;

    if (createMenu.arguments.length > 2)
        sMenuURL = createMenu.arguments[2];

    if (createMenu.arguments.length > 3)
        sTarget = createMenu.arguments[3];

    aMenu[0] = "Level1";
    aMenu[1] = "LD_" + sMenuID + "_MENU";
    aMenu[2] = 'goNav';
    aMenu[3] = sMenuDisplay;
    aMenu[4] = sMenuURL;
    aMenu[5] = sTarget;
    goMenu.push(aMenu);
}

//==============================================================================
// Function: setHorizontalNav()
// Description: Tells system that we will be using 2
//                   horizontal navigations
// Inputs: None
// Return: None
// Notes: defaults set to drop down navigation, cannot be
//           changed if user has already made a call to add
//           menu items
//==============================================================================
function setHorizontalNav() {
    our.menuDropDown = false;
}

//==============================================================================
// Function: displayPageRevision()
// Description: Displays the last modified date in the footer after version number
// Inputs: None
// Return: None
//==============================================================================
function displayPageRevision() {
var months = new Array(13);

    months[1] = "Jan";
    months[2] = "Feb";
    months[3] = "Mar";
    months[4] = "Apr";
    months[5] = "May";
    months[6] = "Jun";
    months[7] = "Jul";
    months[8] = "Aug";
    months[9] = "Sep";
    months[10] = "Oct";
    months[11] = "Nov";
    months[12] = "Dec";

    var oDate = new Date(document.lastModified)
    var iMonth = months[oDate.getMonth() + 1]
    var iYear = oDate.getYear()
    var iDate = oDate.getDate()

    if (iYear < 1000)
        iYear = iYear + 1900;

    our.pageRevision = "Page Revision: " + iDate + " " + iMonth + " " + iYear
}







