var compatible = (document.getElementsByTagName && document.createElement);

function addClass(elm, clazz){
    var cn=elm.className.split(clazz).join("");
    cn+=" "+clazz;
    elm.className=cn;
    return cn;
}
function removeClass(elm, clazz){
    var cn=elm.className.split(clazz).join("");    
    elm.className=cn;
    return cn;
}

function initNavigation() {
    var list;
	var lists = document.getElementsByTagName('ul');
	for (var i=0;i<lists.length;i++) {
	    list=lists[i];
		if (list.className != 'menutree')
		    continue;
		list.onmouseover = navMouseOver;
		list.onmouseout = navMouseOut;
		
		var listItems = list.getElementsByTagName('li');
		for (var j=0;j<listItems.length;j++) {
		    list=listItems[j];
		    list.onmouseover = navMouseOver;
		    list.onmouseout = navMouseOut;
			var test = list.getElementsByTagName('ul')[0];
			if (test) {
				list.firstChild.onfocus = navMouseOver;
				list.relatedItem = test;
			}
		}
	}
}

var currentlyOpenedMenus = new Array();
var currentlyFocusedItem;

function navMouseOver(e) {
	var evt = e || window.event;
	var evtTarget = evt.target || evt.srcElement;
	if (evtTarget.nodeName == 'UL') return;
	while (evtTarget.nodeName != 'LI')
		evtTarget = evtTarget.parentNode;
	foldMenuIn(evtTarget);
	
	addClass(evtTarget, evtTarget.id+"_over");
	
	if (evtTarget.relatedItem && !evtTarget.relatedItem.opened) {
	    addClass(evtTarget.relatedItem, 'foldOut');
		evtTarget.relatedItem.opened = true;
		currentlyOpenedMenus.push(evtTarget.relatedItem);
	}
}

function navMouseOut(e) {
	var evt = e || window.event;
	var evtTarget = evt.target || evt.srcElement;
	if (evtTarget.nodeName == 'UL') return;
	while (evtTarget.nodeName != 'LI')
		evtTarget = evtTarget.parentNode;
	var relatedNode = evt.relatedTarget || evt.toElement;
    
	foldMenuIn(relatedNode, evtTarget);

	if (currentlyOpenedMenus.length<=0){
	    removeClass(evtTarget, evtTarget.id+"_over");
	} else {
	    if (!containsElement(evtTarget, relatedNode)){
	        removeClass(evtTarget, evtTarget.id+"_over");
	    }
	}
}

function foldMenuIn(targetNode, evtTarget) {
	if (!targetNode) return;
	var newCurrentlyOpenedMenus = new Array();
	var elm;
	var parent;
	var nn;
	var cn;
	for (var i=0;i<currentlyOpenedMenus.length;i++) {
	    elm=currentlyOpenedMenus[i];
		if (!containsElement(elm, targetNode)) {
		    removeClass(elm, "foldOut");
			//elm.className = '';
			parent = elm.parentNode;
			removeClass(parent, parent.id+"_over");
			elm.opened = false;
		}
		else
			newCurrentlyOpenedMenus.push(elm);
	}
	currentlyOpenedMenus = newCurrentlyOpenedMenus;
}

function containsElement(obj1,obj2) {
    if (!obj2 || !obj1)
        return false;
	while (obj2.nodeName != 'HTML') {
		if (obj2 == obj1) return true;
		obj2 = obj2.parentNode;
	}
	return false;
}

addEventSimple(window,"load",initNavigation);

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
}

