var dropDownDiv = new Object();
var mainLevelUL = new Object();
initDropDown = function() {	
	dropDownDiv =  document.getElementById(dropDownName);					//trace(window.dropDownName);
	mainLevelUL = dropDownDiv.getElementsByTagName('UL')[0];
	var ULs = dropDownDiv.getElementsByTagName("UL");						//trace(ULs);
	for (var i=0;i<ULs.length;i++) {
		ULs[i].onmouseover =ulMouseOver;
		ULs[i].onmouseout = ulMouseOut;
		var LIs = ULs[i].getElementsByTagName('LI');
		for (var j=0;j<LIs.length;j++) {
			LIs[j].getElementsByTagName('A')[0].onmouseover = aMouseOver;
			LIs[j].getElementsByTagName('A')[0].onmouseout = aMouseOut;
			LIs[j].getElementsByTagName('A')[0].onfocus = aMouseOver;
			LIs[j].getElementsByTagName('A')[0].onblur = aMouseOut;
		}
	}
}
var menuTimer;
var timerSet = false;
setTimer = function(){
	if(timerSet){ clearTimeout(menuTimer); }
	menuTimer = setTimeout("clearMenu()",800);								//trace("set");
	timerSet = true;
}
clearTimer = function(){
	if(timerSet){
		clearTimeout(menuTimer); 											//trace("clear");
		timerSet = false;
	}
}
aMouseOver = function(e){										
	var evt = e || window.event;	
	var thisElem = evt.target || evt.srcElement;			
	var thisElemLI = getLI(thisElem);										//trace(thisElemLI);
	clearTimer();
	updateMenu(thisElemLI);	
}
ulMouseOver = function(e){
	var evt = e || window.event;	
	var thisElem = evt.target || evt.srcElement;			
	var thisElemLI = getLI(thisElem);										//trace(thisElemLI);
	clearTimer();
	updateMenu(thisElemLI);	
}
aMouseOut = function(e){										
	//get Event Objects
	var evt = e || window.event;
	var toElem = evt.relatedTarget || evt.toElement;
	var toElemLI = getLI(toElem); 											//trace(toElemLI);
	setTimer();
}
ulMouseOut = function(e){										
	//get Event Objects
	var evt = e || window.event;
	var toElem = evt.relatedTarget || evt.toElement;
	var toElemLI = getLI(toElem); 											//trace(toElemLI);
	setTimer();
}
getLI = function(obj){
	if(obj){
                try {
		while ( (obj.nodeName != 'LI') && (obj != mainLevelUL) && (obj.nodeName != 'HTML') ) { 
			obj = obj.parentNode; 
		}
                } catch (e) {return null;}
		if(obj.nodeName != 'HTML'){
			return obj;
		}else{
			return null;
		}
	}else{
		return null;
	}
}
Array.prototype.exists = function (x) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == x) return true;
    }
    return false;
}
Array.prototype.map = function(fnc) {
    var a = new Array(this.length);
    for (var i = 0; i < this.length; i++) {
        a[i] = fnc(this[i]);
    }
    return a;
}
var lastItem = new Object();
var newActiveItems = new Array();
var currActiveItems = new Array();
clearMenu = function(){															
	for( var i=0; i<currActiveItems.length; i++ ) {
		var str=currActiveItems[i].className;	
		currActiveItems[i].className=str.replace(new RegExp("highlight\\b"), "");
		var childUL = currActiveItems[i].getElementsByTagName('UL')[0];
		var str=childUL.className;
		childUL.className=str.replace(new RegExp("foldOut\\b"), "");
	}
	currActiveItems = new Array();											
	clearTimer();
	lastItem = new Object();
}
updateMenu = function(currElemLI){			
	newActiveItems = new Array();
	if(currElemLI != lastItem){
		lastItem = currElemLI;	
		if(currElemLI && currElemLI != mainLevelUL){
			//create newActiveItems Array
			var childUL = currElemLI.getElementsByTagName('UL')[0];
			if(childUL){ newActiveItems.push(currElemLI); }
			while(currElemLI.parentNode!=mainLevelUL){
				do {		//get next LI up
					currElemLI = currElemLI.parentNode;
				}while(currElemLI.nodeName != 'LI');
				newActiveItems.push(currElemLI);
			}
		}
		//deactivate irrelevant LIs
		for( var i=0; i<currActiveItems.length; i++ ) {
			if ( !newActiveItems.exists(currActiveItems[i]) ){
				var str=currActiveItems[i].className;	
				currActiveItems[i].className=str.replace(new RegExp("highlight\\b"), "");
				var childUL = currActiveItems[i].getElementsByTagName('UL')[0];
				var str=childUL.className;
				childUL.className=str.replace(new RegExp("foldOut\\b"), "");
			}
		}
		//activate new LIs
		for( var i=0; i<newActiveItems.length; i++ ) {
			if ( !currActiveItems.exists(newActiveItems[i]) ){
				newActiveItems[i].className += ' highlight';
				var childUL = newActiveItems[i].getElementsByTagName('UL')[0];
				childUL.className += ' foldOut';
			}
		}
		currActiveItems = newActiveItems;
	}
}
Array.prototype.exists = function (x) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == x) return true;
    }
    return false;
}
/** ADD EVENTS **/
function addEventSimple(obj,evt,fn) {
	if (obj.addEventListener)
		obj.addEventListener(evt,fn,false);
	else if (obj.attachEvent)
		obj.attachEvent('on'+evt,fn);
}
function removeEventSimple(obj,evt,fn) {
	if (obj.removeEventListener)
		obj.removeEventListener(evt,fn,false);
	else if (obj.detachEvent)
		obj.detachEvent('on'+evt,fn);
}
/** PUSH AND SHIFT FOR IE5 **/
function Array_push() {
	var A_p = 0
	for (A_p = 0; A_p < arguments.length; A_p++) {
		this[this.length] = arguments[A_p]
	}
	return this.length
}
if (typeof Array.prototype.push == "undefined") {
	Array.prototype.push = Array_push
}
function Array_shift() {
	var A_s = 0
	var response = this[0]
	for (A_s = 0; A_s < this.length-1; A_s++) {
		this[A_s] = this[A_s + 1]
	}
	this.length--
	return response
}
if (typeof Array.prototype.shift == "undefined") {
	Array.prototype.shift = Array_shift
}
