/* *****************************************************************************
 * MenuScriptsYGH.js
 * DHTML and client-side scripts for dynamic menus on Yost Grube Hall site
 * Version: 1.0
 * Date: 12.13.2001
 * Author: Stephen Kratowicz, OakTree.com
 *
 * ****************************************************************************/

/* *****************************************************************************
 * Global Variables
 * ****************************************************************************/

// Menu Configuration Variables
intMenuWidth = 150;
strImagePrefix = 'includes/images/nav_';

// Document load boolean
var blnLoaded = false;

// Browser detect
var blnDOM = (document.getElementById) ? true : false;
var blnIE = (document.all) ? true : false;
var blnNS6 = (navigator.vendor == 'Netscape6' || navigator.product == 'Gecko')
	? true : false;
if (window.parent)
	var blnNS4 = (parent.document.layers) ? true : false;

// Container and Layer Objects
var objTopContainer = null;

// High-level Object Arrays
var aryMenuObjects = new Array();
var aryImageObjects = new Array();

// Currently Selected Menu
var objMenuOn = null;

// Timer ID
var intTimerID = 0;

// Call to preload images
var aryTemp, intIndex;
for (i in aryContent) {
	aryTemp = aryContent[i];
	aryImageObjects[i] = new Array();
	for (var j=2; j<aryTemp.length; j+=3) {
		intIndex = ((j-2)/3);
		aryImageObjects[i][intIndex] = new Array();
		aryImageObjects[i][intIndex][0] = new Image();
		aryImageObjects[i][intIndex][0].src = strImagePrefix + aryTemp[j];
		aryImageObjects[i][intIndex][1] = new Image();
		aryImageObjects[i][intIndex][1].src = strImagePrefix + aryTemp[j+1];
	}
}

/* *****************************************************************************
 * Event Handlers
 * ****************************************************************************/

// Call to onload and onresize initialization
window.onload = init;

// Call to NS4 resize bug fix
if (blnNS4) window.onresize = reDraw;

/* *****************************************************************************
 * Initialization Function
 * ****************************************************************************/
function init()
{
	// Local vars
	var aryTemp, strTemp, intIndex;
	
	// Set loaded boolean true
	blnLoaded = true;

	// Set the top level container object
	objTopContainer = (blnNS4) ? window : document.body;

	// Instantiate the Menu Class objects based on Content Array
	for (i in aryContent) {
		aryTemp = aryContent[i];
		strTemp = '';
		
		for (var j=5; j<aryTemp.length; j+=3) {
			intIndex = ((j-2)/3);
			strTemp += ('<a href="' + aryTemp[j+2] + '" '
				+ 'onmouseover="swapImage(\'menuImage' + i + '_' + intIndex + '\', eval(aryImageObjects[' + i + '][' + intIndex + '][1]));" '
				+ 'onmouseout="swapImage(\'menuImage' + i + '_' + intIndex + '\', eval(aryImageObjects[' + i + '][' + intIndex + '][0]));">'
				+ '<img width="150" height="16" border="0" name="menuImage' + i + '_' + intIndex + '" src="' + aryImageObjects[i][intIndex][0].src + '"></a><br><img src="includes/images/menuspace.gif" height="2" width="150">');
		}
		
		aryMenuObjects[i] = new Menu(
			i,
			strTemp,
			aryTemp[0], aryTemp[1],
			intMenuWidth );
		
	}
}

/* *****************************************************************************
 * Main Functions
 * ****************************************************************************/

function Menu (intID, strContent, intLeft, intTop, intWidth)
{
	this.ID = intID;
	this.Selected = false;
	this.ImageOnID = -1
	this.Layer = createLayer(
		objTopContainer,
		'layer_' + intID,
		intLeft, intTop,
		intWidth);
	insertContent(this.Layer, strContent);
	this.Layer.onmouseover = stopTimer;
	this.Layer.onmouseout = startTimer;
}

function showMenu (intMenuID)
{
	if (!blnLoaded) return;
	if (objMenuOn != null) hideMenu();
	objMenuOn = aryMenuObjects[intMenuID];
	swapImage('image' + intMenuID, aryImageObjects[intMenuID][0][1]);
	showOrHide (objMenuOn.Layer, 'visible');
}

function hideMenu ()
{
	if (objMenuOn != null) {
		showOrHide(objMenuOn.Layer, 'hidden');
		swapImage('image' + objMenuOn.ID, aryImageObjects[objMenuOn.ID][0][0]);
	}
	objMenuOn = null;
	stopTimer();
}

function startTimer () {
	intTimerID = setTimeout('hideMenu();', 500);
}

function stopTimer () {
	if (intTimerID) { clearTimeout(intTimerID); clearTimeout(intTimerID - 1); }
}



/* *****************************************************************************
 * DHTML Utility Functions
 * ****************************************************************************/

function swapImage(imgName, imgObj) {
  var objTemp;
	if (document.images) {
    if (blnNS4 && imgName.indexOf('menuImage') != -1)
			objTemp = objMenuOn.Layer.document.images[imgName];
		else objTemp = document.images[imgName];
		objTemp.src = imgObj.src;
  }
}

function showOrHide (obj,vis)
{
	if (blnIE || blnDOM) obj.style.visibility = vis;
	else if (blnNS4) obj.visibility = ((vis == "visible") ? "show" : "hide");
}

// insertContent() - puts content into an existing HTML DIV/Layer
function insertContent(objLayer, strContent)
{
	if (blnIE || blnDOM) objLayer.innerHTML = strContent;
	else if (blnNS4)
	{
		objLayer.document.write(strContent);
		objLayer.document.close();
	}
}

// createLayer() - creates an HTML DIV/Layer on the fly
function createLayer (objContainer, strId, intLeft, intTop, intWidth)
{
	var objLayer = null;

	if (blnDOM)
	{
		objLayer = document.createElement("div");
		with(objLayer)
		{
			id = strId;
			with(style)
			{
				position = 'absolute';
				visibility = 'hidden';
				left = intLeft + 'px';
				top = intTop + 'px';
				width = intWidth + 'px';
			}
		}
		objContainer.appendChild(objLayer);
	}
	
	else if (blnIE)
	{
		var strHTML = '<div id="' + strID
			+ '" style="position:absolute; visibility:hidden;"></div>';
		objContainer.insertAdjacentHTML('BeforeEnd', strHTML);
		objLayer = document.all[strId];
		with(objLayer.style)
		{
			left = intLeft + 'px';
			top = intTop + 'px';
			width = intWidth + 'px';
		}
	}
	
	else if (blnNS4)
	{
		objLayer = new Layer (intWidth, objContainer);
		with(objLayer)
		{
			id = strId;
			visibility = 'hide';
			top = intTop;
			left = intLeft;
			width = intWidth;
		}
	}
	return objLayer;
}

/* *****************************************************************************
 * Browser-specific bug fixes
 * ****************************************************************************/

// Netscape 4 Resize Fix
if (blnNS4)
{      
	origWidth = innerWidth;
	origHeight = innerHeight;   	
}

function reDraw()
{
	if (innerWidth != origWidth || innerHeight != origHeight) location.reload();
}
