// menu.js
//dynamic drop down menu

//by David Brooks
//Copyright Peace in Mind Design

//Version 1.0
//Created for Boys & Girls Clubs of South Valley


//configuration vavriables
var timeout    = 25; //milliseconds
var fadeSpeed = 25; //millisecond
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 times 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 opcacity property
var msie = false;
if (navigator.appName == "Microsoft Internet Explorer" ) msie = true;

//entry poing: set element to visible 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 used as an entry point to bypass times 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;
	else if(lastOpacity[id] &&(lastOpacity[id] < value)) value = lastOpacity[id];
	
	if(msie) e.style.filter = 'alpha(opacity=' + value * 100 + ')';
	else e.style.opacity = (value);
	
	if (value == 0) hideMenu( id );
	lastOpacity[id] = value;
}

//fade a menu
//typically called a time
function fadeMenu ( id )
{
	var start = 0;
	var end = 0
	var s = Math.round( fadeSpeed /25); //fade in 25ms
	var timer = 0;
	var i;
	
	state[id] = false;
	
	for( i = s; i >=0 ; i-- ){
		setTimeout( "setOpacity('" + id + "', " + ( i / s ) + ")", timer++ * fadeSpeed /s)
	}
}
