// ============================================
// Url stuff
// ============================================
var _parameters = null;

function GetParameter(name)
{
    var parameters = GetParameters();
    return parameters[name];
}

function GetParameters()
{
    if (_parameters == null) {
        _parameters = {};
        var hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for (var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            _parameters[hash[0]] = decodeURI(hash[1]);
        }
    }
    return _parameters;
}

function CreateRoute(url)
{
    if (window.RootUrl == null) window.RootUrl = "/";

    if (StartsWith(url, "~/") || StartsWith(url, "./")) url = url.substr(2);
    if (StartsWith(url, "/")) url = url.substr(1);

    return RootUrl + url;
}

function Redirect(url)
{
    window.location = url;
}

function RedirectClassicLink(defaultUrl)
{
    var menuitemId = GetParameter("page");
    if (window.MenuitemUrls != null && menuitemId != null){
        var url = MenuitemUrls[menuitemId];
        Redirect(RootUrl + url);
    } else if (defaultUrl != null){
        Redirect(defaultUrl);
    }
}
// =======================================
// navigation
// =======================================
function ToggleTreeItem(treeObject)
{
    var toggleObject = treeObject.find("> .tree_toggle");
    // change class
    toggleObject.toggleClass("tree_toggle_closed");
    toggleObject.toggleClass("tree_toggle_opened");
    
    // toggle content
    var id = treeObject.find("> .tree_submenu").toggle();
}

var DropdownMenu = {
    OpenMenus: [],
    AutoClose: null,

    Bind: function(button, menu, level)
    {
        button.mouseover(function(e){
            DropdownMenu.Open(button, menu, level);
        });

        button.mouseout(function(e){
            DropdownMenu.PrepareClose();
        });
    },

    BindClose: function(button, level)
    {
        button.mouseover(function(e){
            DropdownMenu.Close(level);
        });
    },

    /*
        params:
            - button: jquery object that represents the button
            - menu: jquery object that represents the menu
            - level: level of 
    */
    Open: function(button, menu, level)
    {
        if (button.length == 0) alert("Can't find button '" + button.selector + "'" );
        if (menu.length == 0) alert("Can't find menu '" + menu.selector + "'" );
        DropdownMenu.DontClose();
        DropdownMenu.Close(level);

        var coords = DropdownMenu.GetCoordinates(button, level);
        menu.css(coords);
        menu.show();
        menu.bind("mouseover", function(){ DropdownMenu.DontClose(); } );
        menu.bind("mouseout", function(){ DropdownMenu.PrepareClose(); } );
        DropdownMenu.OpenMenus.push(menu);
    },

    DontClose: function()
    {
        if (DropdownMenu.AutoClose != null) window.clearTimeout(DropdownMenu.AutoClose);
        DropdownMenu.AutoClose = null;
    },

    PrepareClose: function()
    {
        if (DropdownMenu.AutoClose != null) window.clearTimeout(DropdownMenu.AutoClose);
    
        DropdownMenu.AutoClose = window.setTimeout("DropdownMenu.Close();", 200);
    },

    Close: function(level)
    {
        if (level == null) level = 0;

        for(var i = level; i < DropdownMenu.OpenMenus.length; i++){
            DropdownMenu.OpenMenus[i].hide();
        }
        DropdownMenu.OpenMenus = DropdownMenu.OpenMenus.slice(0, level);
    },

    GetCoordinates: function(menuButton, level)
    {
        var coords = menuButton.offset();
    
        if (level == 0) {
            coords.top += menuButton.outerHeight(true);
        } else {
            coords.left += menuButton.outerWidth(true);
        }
    
        return coords;
    }
};

var TabMenu = {
    EvenTabs: function(tabNavigation)
    {
        TabMenu.ResizeTabs(tabNavigation);
        tabNavigation.load(function(){
            TabMenu.ResizeTabs($(this));
        })
        tabNavigation.resize(function(){
            TabMenu.ResizeTabs($(this));
        })
    },
    ResizeTabs: function (tabNavigation)
    {
        var totalWidth = tabNavigation.innerWidth();
        var children = tabNavigation.children();

        var distributedWidth = 0;

        for (var i = 0; i < children.length; i++){
            var child = children.eq(i);
            distributedWidth += child.outerWidth(true);
        }

        var undistributedWidth = totalWidth - distributedWidth;

        if (undistributedWidth != 0){
            var averageWidth = Math.floor(undistributedWidth / children.length);
            var remains = undistributedWidth % children.length;
        
            for (var i = 0; i < children.length; i++){
                var child = children.eq(i);
                var newWidth = child.width() + averageWidth;
                if (remains > 0){
                    newWidth += 1;
                    remains--;
                }
                child.width(newWidth);
            }
        }
    }
};
