// file: rollovers.js
// author: Heath Stewart <hstewart@iastate.edu>
// last modified: 6-5-01
// desc: handles rollovers for most major browsers, uses different DOM
//       because browsers handle them differently

// define and initialize variables
var laste = "";
var lastm = "";
var lastg = "";
var timerID = null;

// schedule hideMenu for a later time
function scheduleHide(e)
{
	clearTimeout(timerID);
	timerID = setTimeout("hideMenu(laste, lastm, lastg)", 1000);
	return true;
}

// display the submenu for the current rollover menu
function showMenu(e, m, g)
{
	// first check out inputs
	if (e == null || e.length < 1) return false;
	if (m == null || m.length < 1) return false;

	// now hide our previous menus
	if (laste.length > 0 && lastm.length > 0)
		hideMenu(laste, lastm, lastg);

	// now show our current menus
	rollOver(e, g);

	// clear the timer
	clearTimeout(timerID);

	// throughout this next segment, typing and object instantiation are
	// saved by assigning a collection or object to a variable ('obj').
	// for some reason, however, netscape 4 doesn't seem to like assigning
	// collections to variables so it isn't done here.
	if (isNav4)
	{
		document.layers[m].visibility = 'show';
		document.layers[m].captureEvents(Event.MOUSEOUT);
		document.layers[m].onMouseOut = scheduleHide;
	}
	else if (isIE || isKonq2)
	{
		var obj = document.all[m];
		obj.style.display = 'inline';
		obj.style.visibility = 'visible';
		if (isIE5)
			obj.parentNode.onmouseout = scheduleHide;
		else
			obj.onmouseout = scheduleHide;
		document.all[e].onmouseout = scheduleHide;
	}
	else if (isNav5 || isOpera)
	{
		var obj = document.getElementById(m);
		obj.style.display = 'inline';
		obj.style.visibility = 'visible';
		obj.onmouseout = scheduleHide;
		document.getElementById(e).onmouseout = scheduleHide;
	}

	// assign our previous menu variables to current menus
	laste = e;
	lastm = m;
	lastg = g;

	return true;
}

// hide submenus based on previous menus (if any)
function hideMenu(e, m, g)
{
	// first check our inputs
	if (e == null || e.length < 1) return false;
	if (m == null || m.length < 1) return false;

	// now hide our previous menus
	rollOut(e, g);

	if (isNav4)
	{
		document.layers[m].visibility = 'hide';
	}
	else if (isIE || isKonq2)
	{
		var obj = document.all[m].style;
		obj.display = 'none';
		obj.visibility = 'hidden';
	}
	else if (isNav5 || isOpera)
	{
		var obj = document.getElementById(m).style;
		obj.display = 'none';
		obj.visibility = 'hidden';
	}

	return true;
}

// do rollovers (mostly for Netscape 4)
function rollOver(e, g)
{
	// help showMenu clear timeouts for timed functionality
	// even if showMenu isn't called and rollOver is, clearTimeout
	// with a null value won't error
	clearTimeout(timerID);

	// check out inputs
	if (e == null || e.length < 1) return false;
	var b_g = (g.length < 1) ? false : true;

	var imgsrc;
	if (b_g)
		imgsrc = eval(e + "_on.src");
	
	if (isNav4)
	{
		document.ids[e].color = '#990000';
		if (document.images && b_g)
			document.images[g].src = imgsrc;
	}
	else if (isIE || isKonq2)
	{
		document.all[e].className = 'rollover';
		if (document.images && b_g)
			document.images[g].src = imgsrc;
	}
	else
	{
		document.getElementById(e).className = 'rollover';
		if (document.images && b_g)
			document.getElementById(g).src = imgsrc;
	}

	return true;
}

// do rollout (mostly for Netscape 4)
function rollOut(e, g)
{
	// first check out inputs
	if (e == null || e.length < 1) return false;
	var b_g = (g == null || g.length < 1) ? false : true;
	
	var imgsrc;
	if (b_g)
		imgsrc = eval(e + "_off.src");

	if (isNav4)
	{
		document.ids[e].color = '#000000';
		if (document.images && b_g)
			document.images[g].src = imgsrc;
	}
	else if (isIE || isKonq2)
	{
		document.all[e].className = 'rollout';
		if (document.images && b_g)
			document.all[g].src = imgsrc;
	}
	else
	{
		document.getElementById(e).className = 'rollout';
		if (document.images && b_g)
			document.getElementById(g).src = imgsrc;
	}

	return true;
}
