var PageMenu = new Object();

// =========================================================
// Initialization
// =========================================================
PageMenu.Init = function(htmlObject)
{
    // inherit some basic functionality
    Menu.Inherit(this, "Page", htmlObject);
    
    // show menu
    this.Pages = this.ListPages(Navigator.Hierarchy);
    this.Show(this.Pages);
}

PageMenu.ListPages = function(menuitems, level)
{
    var result = new Array();
    
    if (level == null) level = 0;
    
    if (menuitems == null) return result;
    
    for (var i in menuitems){
        var menuitem = menuitems[i];
        
        if (this.IsRelevant(menuitem) && this.HasContent(menuitem)){
            menuitem.Level = level;
            result.push(menuitem);
        }
        
        result = result.concat(this.ListPages(menuitem.Children, level + 1));
    }
    
    return result;
}

PageMenu.Show = function(menuitems)
{
    var html = this.CreateInterface(menuitems);
    this.HtmlObject.innerHTML = html;
}

PageMenu.CreateInterface = function(menuitems)
{
    var result = '';

    result += '<div class="' + this.Style + '_previous_container">';

    // previous button
    result += '<a target="_blank" href="" id="' + this.Id + '_previous" class="' + this.Style + '_link ' + this.Style + '_button_disabled" onClick="PageMenu.OpenPrevious(); return false;">';
    result += Translation.lbl_pageset_previous + '</a>';

    result += '</div>';
    
    result += '<div class="' + this.Style + '_select_container">';
    result += '<select id="' + this.Id + '_select" onChange="Navigator.OpenId(this.value)">';
    
    for (var i = 0; i < menuitems.length; i++)
    {
        menuitem = menuitems[i];
        
        // create indent
        var indent = "";
        
        for (var ii = 0; ii < menuitem.Level; ii++){
            indent += " - ";
        }
        
        // only add if filter is either not invis or item is not filtered
        result += '<option id="' + this.OptionId(menuitem) + '" class="' + this.GetOptionClasses(menuitem) + '" value="' + menuitem.Id + '">' + indent + menuitem.Title + '</option>';
    }
    
    result += '</select>';
    result += '</div>';

    result += '<div class="' + this.Style + '_next_container">';

    // next button
    result += '<a target="_blank" id="' + this.Id + '_next" class="' + this.Style + '_link ' + this.Style + '_button_disabled" onClick="PageMenu.OpenNext(); return false;">';
    result += Translation.lbl_pageset_next;
    result += '</a>';

    result += '</div>';

    return result;
}

PageMenu.UpdateAllItems = function()
{
    this.UpdateButtons();
    
    // update option classes
    for(var i in this.Pages){
        var option = document.getElementById(this.OptionId(menuitem));
        option.className = this.GetOptionClasses(menuitem);
    }
}

PageMenu.UpdateItem = function(menuitem, opened)
{
    var select = document.getElementById(this.Id + '_select');    
    
    // update class
    var option = document.getElementById(this.OptionId(menuitem));
    if (option != null) option.className = this.GetOptionClasses(menuitem);
        
    if (opened == true)
    {
        select.value = menuitem.Id;
    } else
    {
        select.value = 0;
    }

    this.UpdateButtons();
}

PageMenu.UpdateButtons = function()
{
    // previous button
    var button = document.getElementById(this.Id + '_previous');
    if (button != null)
    {
        var previousMenuitem = this.GetPrevious();
        
        if (previousMenuitem == null)
        {
            button.className = this.Style + '_link ' + this.Style + '_button_disabled';
            button.href = "";
        } else
        {
            button.className = this.Style + '_link';
            button.href = Navigator.GetDeepLink(previousMenuitem);
        }
    }
    
    // next button
    var button = document.getElementById(this.Id + '_next');
    if (button != null)
    {
        var nextMenuitem = this.GetNext();

        if (nextMenuitem == null)
        {
            button.className = this.Style + '_link ' + this.Style + '_button_disabled';
            button.href = "";
        } else
        {
            button.className = this.Style + '_link';
            button.href = Navigator.GetDeepLink(nextMenuitem);
        }
        
    }
}

// bepaal welke menuitem de volgende in de reeks is, rekening houdend met de huidige filter
PageMenu.GetNext = function()
{
    if (Navigator.ActiveMenuitem == null) return null;
    
    var index = this.GetIndex(Navigator.ActiveMenuitem.Id);
    
    //we zoeken de eerstevolgende niet gefilterde menuitem
    //als index == 3 dan check: [4][5][6][7]...    
    for (var i = (index + 1); i < this.Pages.length; i++)
    {
        var menuitem = this.Pages[i];
        
        if (menuitem.Filtered !== true)
        {
            return menuitem;
        }
    }

    return null;
}

//bepaal welke menuitem de vorige in de reeks is, rekening houdend met de huidige filter
PageMenu.GetPrevious = function()
{
    if (Navigator.ActiveMenuitem == null) return null;
    
    var index = this.GetIndex(Navigator.ActiveMenuitem.Id);

    //we zoeken de eerstevorige niet gefilterde:
    //als index == 3 dan check: [2][1][0]
    for (var i = (index - 1); i >= 0; i--)
    {
        var menuitem = this.Pages[i];

        if (menuitem.Filtered !== true)
        {
            return menuitem;
        }
    }

    return null;
}

//get the index of the current active menu item
PageMenu.GetIndex = function(menuitemId)
{
    for (var i = 0; i < this.Pages.length; i++)
    {
        var menuitem = this.Pages[i];
        
        if (menuitem.Id == menuitemId) return i;
    }
    
    return -1;
}

PageMenu.GetOptionClasses = function(menuitem)
{
    var classes = this.Style + '_option';
    if (Navigator.ActiveMenuitem != null && menuitem.Id == Navigator.ActiveMenuitem.Id) classes += ' ' + this.Style + '_option_active';
    if (menuitem.Filtered == true) classes += ' ' + this.Style + '_option_' + Navigator.GetFilterType();
    return classes;    
}


PageMenu.OptionId = function(menuitem)
{
    return this.Id + "_option_" + menuitem.Id;
}

PageMenu.OpenNext = function()
{
    var nextMenuitem = this.GetNext();
    
    if (nextMenuitem != null) Navigator.Open(nextMenuitem);
}

PageMenu.OpenPrevious = function()
{
    var previousMenuitem = this.GetPrevious();
    
    if (previousMenuitem != null) Navigator.Open(previousMenuitem);
}