    // CONSTANTS

    var MENU_ID = 'hauptmenue';
    var IMG_PATH_MAIN = 'fileadmin/images/hauptmenue/';
    var IMG_PATH_SUB  = 'fileadmin/images/submenue/';
    var IMG_PREFIX_OVER = 'over_';
    var IMG_PREFIX_OFF  = 'off_';
    var IMG_SUFFIX = '.gif';
    var DELAY = 500;


    // VARIABLES

    var menuItemArray = [];
    var currentSrcObj = null;
    var timer = null;


    function init() {
        var divNode = document.getElementById(MENU_ID);
        if (divNode.id == '') divNode = divNode.nextSibling;
        parse(divNode,0,null);
    }


    function parse(menu, depth, id) {
        var parentMenu, subMenu, menuItems, linkList, depth2 = depth;
        parentMenu = menu.getElementsByTagName('UL')[0];
        menuItems = getChildrenByTagName(parentMenu,'LI');
        for(var i=0; i<menuItems.length; i++) {
            if (depth2 == 0) id = menuItems[i].id;
            if (menuItems[i].className == 'on') parse(menuItems[i], ++depth, id);
            else {
                linkList = menuItems[i].getElementsByTagName('A');
                subMenu = menuItems[i].getElementsByTagName('UL')[0];
                addEvents(linkList,subMenu,id,depth2);
            }
        }
    }


    function getChildrenByTagName(parent, tagname) {
        var children, childList = [];
        
        if (parent == null) return childList;
        allChildren = parent.childNodes; 
        for(var i=0; i<allChildren.length; i++) {
            if (allChildren[i].nodeType == 1 && allChildren[i].tagName == tagname)
                childList[childList.length] = allChildren[i];
        }
        return childList;
    }


    function addEvents(linkList, subMenu, id, depth) {
        var menuItemObj;
        for(var j=0; j < linkList.length; j++) {
            linkList[j].onmouseover = toggleOver;
            linkList[j].onmouseout = toggleOut;
            linkList[j].onfocus = toggleOver;
            linkList[j].onblur = toggleOut;
            menuItemObj = { source: linkList[j], subMenu: subMenu,
                            parentLink: linkList[0], parentBgImg: id, 
                            depth: depth };
            menuItemArray[menuItemArray.length] = menuItemObj;
        }
    }


    function getSource(e) {
        var source;
        if (typeof e == 'undefined') e = window.event;
        if (typeof e.target != 'undefined') 
            source = e.target;
        else if (typeof e.srcElement != 'undefined')
            source = e.srcElement;
        else return true;
        if (source.nodeType == 3) source = source.parentNode;
        return source;
    }


    function showSubMenu(sourceObj) {
//     sourceObj.subMenu.style.display = 'block';
       sourceObj.subMenu.className = 'einblenden';
       sourceObj.parentLink.style.backgroundImage = getImage(sourceObj.depth,sourceObj.parentBgImg,true);
    }


    function hideSubMenu(sourceObj) {
//     sourceObj.subMenu.style.display = 'none';
       sourceObj.subMenu.className = (sourceObj.depth == 0) ? 'ebene2' : 'ebene3';
       sourceObj.parentLink.style.backgroundImage = getImage(sourceObj.depth,sourceObj.parentBgImg,false);
    }


    function getImage(depth, parentBgImg, showBool) {
        var path = (depth == 0) ? IMG_PATH_MAIN : IMG_PATH_SUB;
        var prefix = (showBool) ? IMG_PREFIX_OVER : IMG_PREFIX_OFF;
        return 'url("' + path + prefix + parentBgImg + IMG_SUFFIX + '")';
    }


    function getSourceObj(source) {
        var sourceObj = null;
        for (var i = 0; i < menuItemArray.length; i++) {
            if (menuItemArray[i].source == source && menuItemArray[i].subMenu != null)
                sourceObj = menuItemArray[i];
        }
        return sourceObj;
    }


    function show(source) {
        var sourceObj = getSourceObj(source);
        clearTimeout(timer);
        if (currentSrcObj != null && (sourceObj == null || currentSrcObj.subMenu != sourceObj.subMenu)) hideSubMenu(currentSrcObj);
        if (sourceObj != null) showSubMenu(sourceObj);
        currentSrcObj = sourceObj;
    }


    function hide(source) {
        var sourceObj = getSourceObj(source);
        if (sourceObj != null) hideSubMenu(sourceObj);
    }


    function toggleOver(e) {
        show(getSource(e));
        return false;
    }


    function toggleOut(e) {
        timer = setTimeout("hide('"+getSource(e)+"')", DELAY);
        return false;
    }
