
window.addInitHandler(function() {
    var mainmenu = document.getElementById('menu');
	if (mainmenu == null) return;
	mainmenu = mainmenu.getElementsByTagName('ul')[0];
	if (mainmenu == null) return;
    initMenu(mainmenu, null);
    mainmenu.collapseInactiveEntries();
});

function initMenu(menu, parent) {
    if (!menu) return;

    menu.parentMenu = parent;
    menu.isCollapsed = false;
    menu.entries = new Array();

    var childs = menu.childNodes;
    for (var i=0, entries=0; i<childs.length; ++i) {
        if (childs[i].nodeName.toLowerCase() != 'li') continue;
        menu.entries[entries] = initEntry(childs[i], menu);
        ++entries;
    }

    menu.collapse = function() {
        if (this.isCollapsed) return;
        this.style.display = 'none';
        this.isCollapsed = true;
    }

    menu.collapseRecursive = function() {
        this.collapse();
        for (var i=0; i<this.entries.length; ++i) {
            this.entries[i].collapse();
        }
    }

    menu.expand = function() {
        if (!this.isCollapsed) return;
        var expanded;
        while ((expanded = this.parentMenu.getExpandedSubmenu())) {
            expanded.collapse();
        }
        this.style.display = '';
        this.isCollapsed = false;
    }

    menu.collapseInactiveEntries = function() {
        for (var i=0; i<this.entries.length; ++i) {
            if (this.entries[i].className.indexOf('active') != -1) {
                if (this.entries[i].submenu) {
                    this.entries[i].submenu.collapseInactiveEntries();
                }
            } else {
                this.entries[i].collapseRecursive();
            }
        }
    }
    
    menu.getExpandedSubmenu = function() {
        for (var i=0; i<this.entries.length; ++i) {
            if (this.entries[i].submenu && !this.entries[i].submenu.isCollapsed) {
                return this.entries[i];
            }
        }
        return null;
    }
    
    for (var i=0; i<menu.entries.length; ++i) {
        initMenu(menu.entries[i].submenu, menu);
    }
}

function initEntry(entry, menu) {
    entry.link = entry.getElementsByTagName('a')[0];
    entry.menu = menu;
    entry.submenu = entry.getElementsByTagName('ul')[0];
    if (entry.submenu) {
        entry.submenu.entry = entry;
        entry.submenu.parentMenu = menu;
    }

    entry.collapse = function() {
        if (!this.submenu) return;
        this.submenu.collapse();
    }
    
    entry.collapseRecursive = function() {
        if (!this.submenu) return;
        this.submenu.collapseRecursive();
    }

    entry.expand = function() {
        if (!this.submenu) return;
        this.submenu.expand();
    }

    if (entry.submenu) {
        entry.link.onclick = function() {
            entry = this.parentNode;
            if (entry.submenu.isCollapsed) {
                entry.submenu.expand();
            } else {
                entry.submenu.collapse();
            }
            this.blur();
            return false;
        }
    }
    return entry;
}

