var Menu = {
    // CSS-id för menyns rotnod (UL)
    rootId: "menu-huvudmeny",
    
    // CSS-klasser för menyns delar
    itemWithChildren: "has_children",
    itemHover: "hover",
    subOpened: "sub-menu-open",
    subClosed: "sub-menu",
    
    
    init: function() {
        var menuItems = [];
        var menuRoot = document.getElementById(Menu.rootId);
        
        // Hämtar huvudmenyval
        menuItems = Menu.getChildrenByType(menuRoot, "LI");
        
        // Sätter events för huvudmenyval som har undermenyval.
        for (var i = 0; i < menuItems.length; i++)
        {
            if (Menu.hasClass(menuItems[i], Menu.itemWithChildren))
            {
                menuItems[i].onmouseover = function(e) {
                    Menu.addClass(this, Menu.itemHover);
                    Menu.setSubsClass(this, Menu.subOpened);
                }
                
                menuItems[i].onmouseout = function(e) {
                    Menu.removeClass(this, Menu.itemHover);
                    Menu.setSubsClass(this, Menu.subClosed);
                }
            }
        }
    },
    
    // Sätter CSS-class för angiven undermeny.
    setSubsClass: function(menuItem, className) {
        var subMenus = Menu.getChildrenByType(menuItem, "UL");
        
        for (var i = 0; i < subMenus.length; i++)
        {
            subMenus[i].className = className;
        }
    },
    
    // Hämtar alla child-noder av ett angiven element-typ.
    getChildrenByType: function(parent, type) {
        var child = parent.firstChild;
        var children = [];
        
        while (child != null)
        {
            if (child.nodeType == 1 && child.tagName == type)
            {
                children.push(child);
            }
            
            child = child.nextSibling;
        }
        
        return children;
    },

    addClass: function(element, name) {
        // Testar ifall klassen redan finns hos elementet
        if (Menu.hasClass(element, name))
        {
            return false;
        }
        
        // Lägger till klassen
        element.className += " " + name;
        
        return true;
    },
    
    removeClass: function(element, name) {
        var classes = element.className.split(/\s+/);
        var newClassName = "";
        
        for (var i = 0; i < classes.length; i++)
        {
            if (classes[i] != name)
            {
                newClassName += " " + classes[i];
            }
        }
        
        element.className = newClassName;
        
        return false;
    }, 
   
    // Kollar huruvida en klass finns hos ett angivet element.
    hasClass: function(element, name) {
        var classes = element.className.split(/\s+/);
        
        for (var i = 0; i < classes.length; i++)
        {
            if (classes[i] == name)
            {
                return true;
            }
        }
        
        return false;
    }
};


window.onload = Menu.init;


