//
// Displays sites menu.
//
// NOTES:
//
// . LI IDs start with 'site_', as to 
//   differentiate them from other LIs.
//
function display_sites_menu(sites, is_homepage)
{
    //     
    // Define local variables.     
    //     
    var html = '';
    var url;
    var is_selected;
    var class_sel;
    var li_class, li_alt;
    var site;  
    var i,j;  
    
    //
    // Build sites menu HTML
    //
    html += '<ul id="ul_sites_menu">';
    
    for (i=0; i<sites.length; i++)
    {       
        // 
        // Parse site data. 
        // 
        site = sites[i];
        
        site_id = site.id;
        lib_name = site.lib_name;
        title = site.title;
        
        //
        // Display current tree element.
        //          
        class_sel = (lib_name == SITE_LIB_NAME) ? 'selected' : '';
        
        if (IS_HTML_MODE)
        {
            li_class = '';
            li_alt = '';
        }
        
        else
        {
            li_class = 'move';
            li_alt = translate('drag to move');
        }

        if (IS_MANAGER && IS_SW_MODE)
        {
            url = get_url_action('switch_site')+'&'+FLD_SITE_ID+'='+site_id;
        }
        
        else
        {
            url = '../' + lib_name + '/index.htm';
            
            if ( ! is_homepage)
            {
                url = '../' + url;
            }
        }
        
        html += '<li class="handle '+class_sel+' '+li_class+'" id="site_'+site_id+'" alt="'+li_alt+'" title="'+li_alt+'"><a class="'+class_sel+' '+li_class+'" href="'+url+'">'+title+'</a></li>';
    }
    
    html += '</ul>';
    html += '&nbsp;'; // Append space to make some CSS properties work.
    
    //
    // Update menu div.
    //
    $('#sites_menu').html(html);

    //    
    // jQuery for making transitions smooth.
    //
    $("#ul_sites_menu ul").css({display: "none"}); // Opera Fix
    $("#ul_sites_menu li").hover
    (
        function()
        {
            $(this).find('ul:is_first').css({visibility: "visible",display: "none"}).show(400);
        },
        
        function()
        {
            $(this).find('ul:is_first').css({visibility: "hidden",display: "none"}).hide();
        }
    );
    
    //
    // jQuery for making menu sortable.
    // See: http://docs.jquery.com/UI/Sortable
    //
    if (IS_MANAGER && IS_SW_MODE)
    {
        $("#ul_sites_menu").sortable(
        { 
            items: 'li.handle',
            opacity: 0.6,
            revert: true,
            
            update : function () 
            { 
                var site_ids = $('#ul_sites_menu').sortable('toArray'); 
                
                var data = 'action=ajax_update_sites_order&site_ids=' + site_ids;
                var code = "";
                var msg_box_id = 'screen-message';
                
                ajax(data, code, msg_box_id);
                //location.href = get_url_action('ajax_update_sites_order')+'&site_ids=' + site_ids;
            } 
        }); 
    }
}

//
// Displays sites menu.
//
// NOTES:
//
// . LI IDs start with 'site_', as to 
//   differentiate them from other LIs.
//
function display_pages_menu(pages, sel_anc_lib_name)
{          
    //     
    // Define local variables.     
    //     
    var str = '';
    var url;
    var is_selected;
    var li_class, a_class;
    var page;  
    var i,j;  
    
    var is_first = true;
    var level_diff;
    var former_level;
    var is_same_level_as_former;
    var is_close_subtree;
    var is_open_subtree;
    var is_top_level;
    
    var url_prefix;
    
    //
    // Set a flag for multi menu display.
    // It will be false for IE < 7.
    //
    var is_multi_level_menu = false;
    
    if ($.browser.msie)
    {
        var version = parseInt($.browser.version.substr(0,1));
        
        if (version < 7)
        {
            is_multi_level_menu = false;
        }
    }  
    
    //
    // Start UL.
    //
    str += '<ul id="ul_pages_menu">';
    
    //
    // Go over pages.
    //
    for (i=0; i<pages.length; i++)
    {       
        // 
        // Parse page data. 
        // 
        page = pages[i];
        
        page_id = page.id;
        current_level = page.level;
        status = page.status;
        lib_name = page.lib_name;
        title = page.title;

        //
        // Set flags.
        //
        is_first = (i == 0);
        is_top_level = (current_level == 0);
        is_selected = (lib_name == sel_anc_lib_name);
        
        //
        // Initialize former levele and html-mode 
        // URL prefix. The latter is based on current 
        // page being home page or not.
        //
        if (is_first)
        {
            if (lib_name == sel_anc_lib_name)
            {
                url_prefix = '';
            }
            
            else
            {
                url_prefix = '../';
            }        

            former_level = current_level;
        }
        
        //
        // Set page URL.
        //
        if (IS_HTML_MODE)
        {
            if (is_first)
            {
                url = url_prefix;
            }
            
            else
            {
                url = url_prefix + lib_name + '/';;
            }
        }
        
        else
        {
            url = get_page_url(page_id);
        }
        
        //
        // Set item class.
        //
        if (is_first)
        {
            li_class = 'home';
        }
        
        else
        {
            li_class = 'handle';
        }
        
        if (is_selected)
        {
            a_class = 'selected';
            li_class += ' selected';
        }
        
        else
        {
            a_class = '';
        }
        
        if (status == 2)
        {
            li_class += ' freezed';
        }
        
        //
        // Case non top level item, and multi level
        // menu not desired - continue.
        //
        if ( ! is_multi_level_menu && (current_level != 0))
        {
            continue;
        }
        
        //
        // Set level difference.
        //
        level_diff = current_level - former_level;
        former_level = current_level;
        
        is_same_level_as_former = (level_diff == 0);
        is_open_subtree = (level_diff == 1);
        is_close_subtree = (level_diff <= -1);

        //
        // Case close former element.
        //
        // NOTE that former element remains open 
        // if it contains a sub-tree.
        //
        if ((is_same_level_as_former) || (is_close_subtree))
        {
            str += '</li>'; 
        }
        
        //
        // Case close sub-tree.
        //
        if (is_close_subtree)
        {
            for (j=0; j<(-1*level_diff); j++)
            {
                str += '</ul></li>';
            } 
        }
        
        //
        // Case open a new sub-tree.
        //
        if (is_open_subtree)
        {
            str += '<ul>';
        }
        
        //
        // Start display current tree element.
        //          
        str += '<li class="'+li_class+'" id="page_'+page_id+'"><a class="'+a_class+' '+li_class+'" href="'+url+'"><span id="side-menu'+lib_name+'">'+title+'</span></a>';
    }
    
    //    
    // End last element
    //
    str += '</li>';
    
    //
    // End sub-trees.
    //
    if (is_multi_level_menu)
    {
        for (j=0; j<current_level; j++)
        {
            str += '</ul></li>';
        } 
    }

    //
    // End main UL.
    //
    str += '</ul>';
    str += '&nbsp;';

    //
    // Append hover image hidden item, in order 
    // to load hover image on page load.
    //
    str += '<ul style="display: none"><li><a class="hover">&nbsp;</a></li></ul>';
    
    //
    // Append space to make some CSS properties work.
    //
    str += '&nbsp;';
    
    //
    // Update sidebar menu.
    //
    $('#pages_menu').html(str);
    
    //    
    // jQuery for making transitions smooth.
    //
    $("#ul_pages_menu ul").css({display: "none"}); // Opera Fix
    $("#ul_pages_menu li").hover
    (
        function()
        {
            $(this).find('ul:is_first').css({visibility: "visible",display: "none"}).show(400);
        },
        
        function()
        {
            $(this).find('ul:is_first').css({visibility: "hidden",display: "none"}).hide();
        }
    );
    
    //
    // jQuery for making menu sortable.
    // See: http://docs.jquery.com/UI/Sortable
    //
    if (IS_MANAGER && IS_SW_MODE)
    {
        $("#ul_pages_menu").sortable(
        { 
            items: 'li.handle',
            opacity: 0.6,
            revert: true,
            tolerance: 'pointer',
            
            update : function () 
            { 
                var page_ids = $('#ul_pages_menu').sortable('toArray'); 
                
                var data = 'action=ajax_update_pages_order&page_ids=' + page_ids;
                var code = "";
                var msg_box_id = 'screen-message';
                
                ajax(data, code, msg_box_id);
            } 
        }); 
    }
}

3//
// Displays forums menu.
//
// NOTES:
//
// . LI IDs start with 'forum_', as to 
//   differentiate them from other LIs.
//
function display_forums_menu(forums)
{          
    //     
    // Define local variables.     
    //     
    var str = '';
    var url;
    var forum, forum_id, page_id, lib_name, forum_title, page_title, title;  
    var i;  
    
    //
    // Start UL.
    //
    str += '<ul id="ul_forums_menu">';
    
    //
    // Go over forums.
    //
    for (i=0; i<forums.length; i++)
    {       
        // 
        // Parse forum data. 
        // 
        forum = forums[i];
        
        forum_id = forum.forum_id;
        page_id = forum.page_id;
        lib_name = forum.lib_name;
        forum_title = forum.forum_title;
        page_title = forum.page_title;
        
        if (forum_title != '')
        {
            title = forum_title;
        }
        
        else
        {
            title = page_title;
        }

        //
        // Set page URL.
        //
        if (IS_HTML_MODE)
        {
            url = '../' + lib_name + '/';
        }
        
        else
        {
            url = get_page_url(page_id);
        }
        
        url += '#forum';
        
        //
        // Display current tree element.
        //          
        str += '<li class="handle" id="forum_'+forum_id+'"><a href="'+url+'">'+title+'</a></li>';
    }
    
    //
    // End UL.
    //
    str += '</ul>';

    //
    // Append space to make some CSS properties work.
    //
    str += '&nbsp;';
    
    //
    // Update sidebar menu.
    //
    $('#forums_menu').html(str);
    
    //    
    // jQuery for making transitions smooth.
    //
    $("#ul_forums_menu ul").css({display: "none"}); // Opera Fix
    $("#ul_forums_menu li").hover
    (
        function()
        {
            $(this).find('ul:is_first').css({visibility: "visible",display: "none"}).show(400);
        },
        
        function()
        {
            $(this).find('ul:is_first').css({visibility: "hidden",display: "none"}).hide();
        }
    );
    
    //
    // jQuery for making menu sortable.
    // See: http://docs.jquery.com/UI/Sortable
    //
    if (IS_MANAGER && IS_SW_MODE && false)
    {
        $("#ul_forums_menu").sortable(
        { 
            items: 'li.handle',
            opacity: 0.6,
            revert: true,
            
            update : function () 
            { 
                var forum_ids = $('#ul_forums_menu').sortable('toArray'); 
                
                var data = 'action=ajax_update_forums_order&forum_ids=' + forum_ids;
                var code = "";
                var msg_box_id = 'screen-message';
                
                ajax(data, code, msg_box_id);
            } 
        }); 
    }
}

