var Menu = new Object();
var Menus = new Object();

Menu.Inherit = function(object, type, htmlObject)
{
    object.Type = type;
    object.Id = type;
    object.Style = type.toLowerCase();
    object.MenuType = MenuType[type];
    object.HtmlObject = htmlObject;
    
    if (type == "Button"){ // the button menu shouldn't inherit all methods
        object.HasContent = this.HasContent;
    } else {
        for(var key in this){
            if (object[key] == null) object[key] = this[key];
        }    
    }
    
    if (object.UpdateItem != null){
        Navigator.OnLoad.Bind(object.UpdateItem, object);
    }

    if (window.Filter != null && Filter.Active && object.UpdateAllItems != null){
        Filter.OnChange.Bind(object.UpdateAllItems, object);
    }
}

Menu.IsRelevant = function(menuitem)
{
    if (menuitem == null) return false;
    return (menuitem.Type == this.Type || (menuitem.Type == "None" && Navigator.MainMenuType == this.MenuType)) && 
            ((menuitem.Owner == null && Navigator.RootId == "main") || (menuitem.Owner != null && menuitem.Owner.Id == Navigator.RootId));
}

Menu.HasRelevantMenuitems = function(menuitems)
{
    if (menuitems == null) return false; 
    
    for (var i = 0; i < menuitems.length; i++)
    {
        var child = menuitems[i];
        if (this.IsRelevant(child)){
            return true;
        }
    }

    return false;
}

Menu.CountRelevant = function()
{
    var count = this.CountRelevantMenuitems(Navigator.Hierarchy);
    return count;
}

Menu.HasContent = function(menuitem)
{
    if (menuitem.IsOwner == true || menuitem.DocumentUrl != null) return true;
    return false;
}

Menu.HasChildren = function(menuitem)
{
    if (menuitem.Children == null) return false;
    
    for(var i = 0; i < menuitem.Children.length; i++){
        var child = menuitem.Children[i];
        if (child.Type != "Button") return true;
    }
    
    return false;
}

Menu.CountRelevantMenuitems = function(menuitems)
{
    if (menuitems == null) return 0; 
    
    var count = 0;

    for (var i = 0; i < menuitems.length; i++)
    {
        var child = menuitems[i];
        if (this.IsRelevant(child)){
            count++;
            if (child.IsOwner !== true) count += this.CountRelevantMenuitems(child.Children);
        }
    }

    return count;
}