var fps = 30;
var duration = 400;
var timeout = 2;

var fadeArray = new Array();
var resetArray = new Array();
var frames = Math.round(fps * (duration / 1000));
var interval = duration / frames;
var delay = interval;

function fade_element(obj, ascend) {
	
	var frame = 0;
	var o = parseInt(100/frames);
	var c = parseInt(document.getElementById(obj).style.opacity*100);
	
	var id = obj.split("innerNav")[1];
	for (var x=0; x<fadeArray[id].length; x++){
		clearTimeout(fadeArray[id][x]);
	}
	
	while (frame < frames){
		c = (ascend) ? c+o : c-o;
		fadeArray[id][frame] = setTimeout("set_opacity('"+obj+"','"+parseInt(c)+"')", delay);
		frame++;
		delay = interval * frame; 
	}
	
	if (ascend){
		fadeArray[id][frame] = setTimeout("set_opacity('"+obj+"','100')", delay);
	} else {
		fadeArray[id][frame] = setTimeout("set_opacity('"+obj+"','0')", delay);
		fadeArray[id][frame+1] = setTimeout("clearUL('"+obj+"')", delay);
	}
}

function set_opacity(el, c) {
	var o = document.getElementById(el);
	o.style.opacity = (c/100);
	o.style.filter = 'alpha(opacity='+c+')';
}

function clearUL(obj){
	var o = document.getElementById(obj);
	o.style.display = 'none';
}

function init_fade(){
	var el = document.getElementById("nav");
	var links = getElementsByClassName(el, "a", "parent");
	for (var i=0; i<links.length; i++) {
		var sfUL = links[i].parentNode.getElementsByTagName("UL");
		if (sfUL.length > 0){
			
			sfUL[0].style.opacity = 0;
			sfUL[0].style.filter = 'alpha(opacity=0)';
			sfUL[0].style.left = '-4px';
			sfUL[0].style.display = 'none';
			var id = sfUL[0].id.split("innerNav")[1];
			fadeArray[id] = new Array();
			
			links[i].parentNode.onmouseover=function(){
				var sfUL = this.getElementsByTagName("UL");
				var id = sfUL[0].id.split("innerNav")[1];
				clearTimeout(resetArray[id]);
			}
			links[i].parentNode.onmouseout=function(){
				var sfUL = this.getElementsByTagName("UL");
				var id = sfUL[0].id.split("innerNav")[1];
				resetArray[id] = resetTimer = setTimeout("fade_element('"+sfUL[0].id+"')", timeout);
			}
		}
		links[i].onmouseover=function() {
			var sfUL = this.parentNode.getElementsByTagName("UL");
			if (sfUL.length > 0){
				sfUL[0].style.display = 'block';
				fade_element(sfUL[0].id, true);
			}
		}
	}
}

function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

addLoadEvent(init_fade);