
var TM_openit = false;
var TM_closeit = false;
var TM_theLiMenu;
var TM_openedLi;
var TM_openLiIsClosed = false;
var TM_closeLiIsOpened = false;
var TM_heightboundary = '';
var TM_LiHeight = '26';
var TM_sperre = false;

function treeMenu_init(menu, data) {
	var array = new Array(0);
	if(data != null && data != "") {
		array = data.match(/\d+/g);
	}
	var items = menu.getElementsByTagName("li");
	for(var i = 0; i < items.length; i++) {
		items[i].onclick = treeMenu_handleClick;
		if(!treeMenu_contains(treeMenu_getClasses(items[i]), "treeMenu_opened") && items[i].getElementsByTagName("ul").length > 0) {
			var classes = treeMenu_getClasses(items[i]);
			if(array.length > 0 && array[0] == i) {
				classes.push("treeMenu_opened");
                treeMenu_getUlHeight(items[i], 'isopened');
			}
			else {
				classes.push("treeMenu_closed");
                treeMenu_getUlHeight(items[i], 'isclosed');
			}
			items[i].className = classes.join(" ");
		}
		if(array.length > 0 && array[0] == i) {
			array.shift();
		}
	}
}

function treeMenu_handleClick(event) {
	if(event == null) { //Workaround für die fehlenden DOM Eigenschaften im IE
		event = window.event;
		event.currentTarget = event.srcElement;
		while(event.currentTarget.nodeName.toLowerCase() != "li") {
			event.currentTarget = event.currentTarget.parentNode;
		}
		event.cancelBubble = true;
	}
	else {
		event.stopPropagation();
	}
	if(TM_sperre == false) {
    	var array = treeMenu_getClasses(event.currentTarget);
    	for(var i = 0; i < array.length; i++) {
    		if(array[i] == "treeMenu_closed") {
                treeMenu_getUlHeight(event.currentTarget, 'isclosed');
    	        array[i] = "treeMenu_opened";
    		    treeMenu_open();
    		}
    		else if(array[i] == "treeMenu_opened") {
                treeMenu_getUlHeight(event.currentTarget, 'isopened');
    	        array[i] = "treeMenu_closed";
    		    treeMenu_close();
    		}
    	}
    	event.currentTarget.className = array.join(" ");
	}
}

function treeMenu_getUlHeight(liElm, ulheight) {
    if(liElm.getElementsByTagName('ul')[0]) {
        TM_theLiMenu = liElm;
        TM_heightboundary = liElm.getElementsByTagName('ul')[0].offsetHeight;
        if(ulheight == 'isclosed') {
    		TM_theLiMenu.style.height = TM_LiHeight + 'px';
    	}
        else {
    		TM_theLiMenu.style.height = parseInt(parseInt(TM_heightboundary)+parseInt(TM_LiHeight)) + 'px';
    	    TM_openedLi = TM_theLiMenu;
    	}
    }
}

function treeMenu_getClasses(element) {
	if(element.className) {
		return element.className.match(/[^ \t\n\r]+/g);
	}
	else {
		return new Array(0);
	}
}

function treeMenu_contains(array, element) {
	for(var i = 0; i < array.length; i++) {
		if(array[i] == element) {
			return true;
		}
	}
	return false;
}

function treeMenu_store(menu) {
	var result = new Array();
	var items = menu.getElementsByTagName("li");
	for(var i = 0; i < items.length; i++) {
		if(treeMenu_contains(treeMenu_getClasses(items[i]), "treeMenu_opened")) {
			result.push(i);
		}
	}
	return result.join(" ");
}

function treeMenu_open() {
	TM_sperre = true;
    TM_openit = window.setInterval("treeMenu_openengine()", 1);
}

function treeMenu_close() {
	TM_sperre = true;
    TM_closeit = window.setInterval("treeMenu_closeengine()", 1);
}

function treeMenu_closeengine() {
    if (parseInt(TM_theLiMenu.style.height) <= TM_LiHeight) {
        window.clearInterval(TM_closeit);
	    TM_sperre = false;
	    TM_theLiMenu.style.height = TM_LiHeight + 'px';
	    TM_openedLi = false;
    }
    else {
        TM_theLiMenu.style.height = parseInt(parseInt(TM_theLiMenu.style.height)-5) + "px";
    }
}

function treeMenu_openengine() {
    if((TM_openedLi && TM_openLiIsClosed && TM_closeLiIsOpened) || (!TM_openedLi && TM_closeLiIsOpened)) {
        window.clearInterval(TM_openit);
        TM_sperre = false;
        TM_openLiIsClosed = false;
    	TM_closeLiIsOpened = false;
    	TM_openedLi = TM_theLiMenu;
    	return false;
	}
    if(TM_openedLi) {
        if (parseInt(TM_openedLi.style.height) <= TM_LiHeight) {
    	    TM_openedLi.style.height = TM_LiHeight + 'px';
    	    TM_openedLi.className = "treeMenu_closed";
    	    TM_openLiIsClosed = true;
        }
        else {
            TM_openedLi.style.height = parseInt(parseInt(TM_openedLi.style.height)-5) + "px";
        }
    }
    if(parseInt(TM_theLiMenu.style.height) < parseInt(parseInt(TM_heightboundary)+parseInt(TM_LiHeight))) {
        TM_theLiMenu.style.height = parseInt(parseInt(TM_theLiMenu.style.height)+5) + "px";
    }
    else {
	    TM_theLiMenu.style.height = parseInt(parseInt(TM_heightboundary)+parseInt(TM_LiHeight)) + 'px';
    	TM_closeLiIsOpened = true;
    }
}

function treeMenu_initload() {
    treeMenu_init(document.getElementById('navi'), unescape(window.name).split(',')[0]);
}

function treeMenu_initunload() {
    window.name = escape(treeMenu_store(document.getElementById('navi')));
}

function addMenuLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}

function addMenuUnLoadEvent(func) {
	var oldonunload = window.onunload;
	if (typeof window.onunload != 'function') {
		window.onunload = func;
	} else {
		window.onunload = function() {
			if (oldonunload) {
				oldonunload();
			}
			func();
		}
	}
}

addMenuLoadEvent(treeMenu_initload);
addMenuUnLoadEvent(treeMenu_initunload);





