// Special thanks to Bill Weinman for the following code
// http://bw.org/

//configuration variables
var timeout = 125;  //milliseconds
var fadeSpeed = 300;  //milliseconds
var useFade = true;

//timers array
var timers = new Array();

//state array -- by id, value = active, false = inactive
var state = new Array();

//lastOpacity: used to prevent multiple timers from making the fade flicker
var lastOpacity = new Array();

// MSIE has its own way of setting opacity, so we have to detect it
// all the other major browsers support the standard DOM opacity property
var msie = false
if (navigator.appName == "Microsoft Internet Explorer") msie = true;

// entry point: set element to visiible and clear its timers
function setMenu (id) {
	var e = document.getElementById(id);
	e.style.visibility = "visible";
	state[id] = true;
	setOpacity(id, 1);
	if(timers[id]) {
		clearTimeout(timers[id]);
		timers[id] = undefined;
	}
}

// set element to hidden and reset its opacity
// typically called by a timer
// may be usd as an entry point to bypass timers and fades
function hideMenu ( id ) {
	var e = document.getElementById(id);
	state[id] = false;
	e.style.visibility = "hidden";
	if(useFade) setOpacity(id, 1);
}

// entry point: hide the menu using fade (if enabled)
function clearMenu(id) {
	if (useFade) timers [id] = setTimeout( 'fadeMenu("' + id + '")', timeout);
	else timers[id] = setTimeout('hideMenu("' + id + '")', timeout);
}

// set the opacity
// special support for MSIE
function setOpacity(id, value) {
	var e = document.getElementById(id);
	
	if(state[id]) value = 1; // menu fade was interrupted
	else if(lastOpacity[id] && (lastOpacity[id] < value)) value = lastOpacity[id];
	
	if(msie) e.style.filter = 'alpha(opacity=' + value * 100 + ')'; // MSIE
	else e.style.opacity = (value); // everyone else (Standard DOM)
	
	if(value == 0) hideMenu (id);
	lastOpacity[id] = value;
}
// fade a menu
// typically called by a timer
function fadeMenu(id) {
	var start = 0;
	var end = 0;
	var s = Math.round(fadeSpeed / 25); 
	var timer = 0;
	var i;
	
	state[id] = false;
	
	for(i = s; i >=0; i--) {
		setTimeout("setOpacity('" + id + "'," + (i/s) + ")", timer ++ * fadeSpeed/s)	
	}
}