// ***** PUBLIC METHODS EXPOSED FOR DYNAMIC JAVASCRIPT ***** //
  // *** Constants used by Menu layout *** //
var MENUOVER_COLOR = '#FFFFCC';
var MENUOFF_COLOR = '#FFFFFF';
var MENU_HEIGHT = 25;
var MENU_OFFSET = 8;
var NO_ID = -1;
var NO_REPORT = "";

var MENU_WIDTH_1 = 100;
var MENU_WIDTH_2 = 100;
var MENU_WIDTH_3 = 100;
var MENU_WIDTH_4 = 100;
var MENU_WIDTH_5 = 100;
var MENU_WIDTH_6 = 100;
var MENU_WIDTH_7 = 100;

  // Default 'length' of menu items - item height if menu is vertical, width if horizontal.
var MENUITEM_LENGTH = 32;
var MENUITEM_SPACING = 0;

  // *** Objects used by dynamic javascript *** //
function Menu (isVert, popInd, x, y, width, borderClass, textClass, overCol, backCol)
{
    // True or false - a vertical menu?
	this.isVert = isVert;
    // The popout indicator used (if any) for this menu.
	this.popInd = popInd
    // Position and size settings.
	this.x = x;
	this.y = y;
	this.width = width;
    // The stylesheet class used for item borders and the text within items.
	this.borderClass = borderClass;
	this.textClass = textClass;
	  // colors to use for display/mouse-over events
	this.overCol = overCol;
	this.backCol = backCol;
    // Parent menu and item numbers, indexed later.
	this.parentMenu = null;
	this.parentItem = null;
    // Reference to the object's style properties (set later).
	this.ref = null;
}

function Item (ID, report, text, href, frame, length, spacing, target)
{
  this.ID = ID;
  this.report = report;
	this.text = text;
	this.href = href;
	this.frame = frame;
	this.length = length;
	this.spacing = spacing;
	this.target = target;
    // Reference to the object's style properties (set later).
	this.ref = null;
}

var NUM_IMAGES = 15;
var imagenum = 0;
var done = false;
var bufOffArray = new Array (NUM_IMAGES);
var butOnarray = new Array (NUM_IMAGES);
var pix = 300;
var winNum = 0;


  //define rollover function; controls highlights of buttons and message display in status bar
function rollOver(loc, img, msg){
	document[loc].src = img;
	window.top.status = msg;
}


  //javascript navigation to avoid HREF and HOVER tags
function DirectURL (id, page)
{
  REPORT_ID = id;
	this.location = page;
}

  //setup button arrays
  // 0-5 are top nav buttons
  // 6-10 are table control icons
  // 11-12 are reference buttons

  // Menu Construction Functions
function WriteMenus ()
{
	if (!isDOM && !isIE4 && !isNS4)
	{
	  return;
	}
	for (var currMenu = 0; currMenu < menu.length; currMenu++) with (menu[currMenu][0])
	{
      // Variable for holding HTML for items and positions of next item.
		var str = "", itemX = 0, itemY = 0;
      // Remember, items start from 1 in the array (0 is menu object itself, above).
      // also use properties of each item nested in the other with () for construction.
		for (var currItem = 1; currItem < menu[currMenu].length; currItem++) with (menu[currMenu][currItem])
		{
			var itemid = "menu" + currMenu + "item" + currItem;
        // The width and height of the menu item - dependent on orientation!
			var theWidth = (isVert ? width : length);
			var theHeight = (isVert ? length : width);
        // Create a div or layer text string with appropriate styles/properties.
        // For IE 4, the width must be a miniumum of 3 for it to work in that browser.
			if (isDOM || isIE4)
			{
				str += "<div id='" + itemid + "' style='position: absolute; left: " + itemX + "; top: " + itemY + "; width: " + theWidth + "; height: " + theHeight + "; visibility: inherit; z-index: 100000; ";
				if (backCol)
				{
				  str += "background: " + backCol + ";";
				}
				str += "'";
			}
			if (isNS4)
			{
				str += "<layer id='" + itemid + "' left='" + itemX + "' top='" + itemY + "' width='" +  theWidth + "' height='" + theHeight + "' visibility='inherit'";
				if (backCol)
				{
				  str += "bgcolor='" + backCol + "'";
				}
			}
			if (borderClass)
			{
			  str += "class='" + borderClass + "'";
			}
        // add mouseover handlers and finish div/layer.
			str += 'onMouseOver="popOver (' + currMenu + ',' + currItem + ');" onMouseOut="popOut (' + currMenu + ',' + currItem + ');">';
        // add contents of item (default: table with link inside).
        // In IE/NS6+, add padding if there's a border to emulate NS4's layer padding.
        // If a target frame is specified, also add that to the <a> tag.
			str += "<table width='" + (theWidth - 8) + "' border=0 cellspacing=0 cellpadding=" + (!isNS4 && borderClass ? 3 : 0) + "><tr><td align='left' height='" + (theHeight - 7) + "'><a class='" + textClass + "'" + href + target +">" + text + "</a></td>";
			if (target > 0)
			{
          // Set target's parents to this menu item.
				menu[target][0].parentMenu = currMenu;
				menu[target][0].parentItem = currItem;
          // add a popout indicator.
				if (popInd)
				{
				  str += "<td class='" + textClass + "' align='right'>" + popInd + "</td>";
				}
			}
			str += "</tr></table>" + (isNS4 ? "</layer>" : "</div>");
			if (isVert)
			{
			  itemY += length + spacing;
			}
			else
			{
			  itemX += length + spacing;
			}
		}
		if (isDOM)
		{
			var newDiv = document.createElement ("div");
			document.getElementsByTagName ("body").item (0).appendChild (newDiv);
			newDiv.innerHTML = str;
			ref = newDiv.style;
			ref.position = 'absolute';
			ref.visibility = 'hidden';
		}
      // Insert a div tag to the end of the body with menu HTML in place for IE4.
		if (isIE4)
		{
			document.body.insertAdjacentHTML ("beforeEnd", "<div id='menu" + currMenu + "div' " + "style='position: absolute; visibility: hidden'>" + str + "</div>");
			ref = getSty ("menu" + currMenu + "div");
		}
      // In NS4, create a reference to a new layer and write the items to it.
		if (isNS4)
		{
			ref = new Layer (0);
			ref.document.write (str);
			ref.document.close ();
		}
		for (var currItem = 1; currItem < menu[currMenu].length; currItem++)
		{
			itemName = "menu" + currMenu + "item" + currItem;
			if (isDOM || isIE4)
			{
			  menu[currMenu][currItem].ref = getSty (itemName);
			}
			if (isNS4)
			{
			  menu[currMenu][currItem].ref = ref.document[itemName];
			}
		}
	}
	with (menu[0][0])
	{
		ref.left = x;
		ref.top = y;
		ref.visibility = 'visible';
	}
}

// ***** PRIVATE METHODS USED SOLELY WITHIN THIS JS FILE ***** //

  // These two lines handle the window resize bug in NS4. See <body onResize="...">.
  // I recommend you leave this here as otherwise when you resize NS4's width menus are hidden.
var popOldWidth = window.innerWidth;
nsResizeHandler = new Function ('if (popOldWidth != window.innerWidth) location.reload ()');

  // This is a quick snippet that captures all clicks on the document and hides the menus
  // every time you click. Use if you want.
if (isNS4)
{
  document.captureEvents (Event.CLICK);
}
document.onclick = clickHandle;

function clickHandle (evt)
{
	if (isNS4)
	{
	  document.routeEvent (evt);
	}
 	hideAllBut (0);
}

  //define menu functions, controls menu elements
var isDOM = (document.getElementById ? true : false);
var isIE4 = ((document.all && !isDOM) ? true : false);
var isNS4 = (document.layers ? true : false);
buttonarray = new Array (6);
  // Hide timeout.
var popTimer = 0;
  // array showing highlighted menu items.
var litNow = new Array ();

function getRef (id)
{
	if (isDOM) return document.getElementById (id);
	if (isIE4) return document.all[id];
	if (isNS4) return document.layers[id];
}

function getSty (id)
{
	return (isNS4 ? getRef (id) : getRef (id).style);
}

function popOver (menuNum, itemNum)
{
	clearTimeout (popTimer);
	hideAllBut (menuNum);
	litNow = getTree (menuNum, itemNum);
	changeCol (litNow, true);
	targetNum = menu[menuNum][itemNum].target;
	if (targetNum > 0)
	{
		thisX = parseInt (menu[menuNum][0].ref.left) + parseInt (menu[menuNum][itemNum].ref.left);
		thisY = parseInt (menu[menuNum][0].ref.top) + parseInt (menu[menuNum][itemNum].ref.top);
		with (menu[targetNum][0].ref)
		{
			left = parseInt (thisX + menu[targetNum][0].x);
			top = parseInt (thisY + menu[targetNum][0].y);
			visibility = 'visible';
		}
	}
}

function popOut (menuNum, itemNum)
{
	if ((menuNum == 0) && !menu[menuNum][itemNum].target)
	{
	  hideAllBut (0)
	}
	else
	{
	  popTimer = setTimeout ('hideAllBut (0)', 500);
	}
}

function getTree (menuNum, itemNum)
{
    // array index is the menu number. The contents are null (if that menu is not a parent)
    // or the item number in that menu that is an ancestor (to light it up).
	itemarray = new Array (menu.length);

	while (1) {
		itemarray[menuNum] = itemNum;

      // If we've reached the top of the hierarchy, return.
		if (menuNum == 0)
		{
		  return itemarray;
		}
		itemNum = menu[menuNum][0].parentItem;
		menuNum = menu[menuNum][0].parentMenu;
	}
}

  // Pass an array and a boolean to specify colour change, true = over colour.
function changeCol (changeArray, isOver)
{
	for (menuCount = 0; menuCount < changeArray.length; menuCount++)
	{
		if (changeArray[menuCount])
		{
			newCol = isOver ? menu[menuCount][0].overCol : menu[menuCount][0].backCol;
        // Change the colours of the div/layer background.
			with (menu[menuCount][changeArray[menuCount]].ref)
			{
				if (isNS4)
				{
				  bgColor = newCol;
				}
				else
				{
				  backgroundColor = newCol;
				}
			}
		}
	}
}

function hideAllBut (menuNum)
{
	var keepMenus = getTree (menuNum, 1);
	for (count = 0; count < menu.length; count++)
	if (!keepMenus[count])
	{
	  menu[count][0].ref.visibility = 'hidden';
	}
	changeCol (litNow, false);
}



