var menuUri = null;
var mainMenu = new Array();
var curSectionIndex = -1;
var curTab = 0;
var loadPageOnStart = true;
var numTabs = 0;
var tabsContainer = null;
var onSelectFunc = null;
var sectionChanged = true;
var userLoggedIn = false;


function setMainMenuUri(uri)
{
    menuUri = uri;
}


function getInitialSectionIndex(menu)
{
    if (curSectionIndex != -1)
    {
        return curSectionIndex;
    }
    var queryString = location.search.substring(1, location.search.length);
    if (queryString == null || queryString == "")
    {
        return 0;
    }

    var menuCode;
    for (var i = 0; i < menu.length; ++i)
    {
        menuCode = menu[i].code;
        if (menuCode == queryString)
        {
            return i;
        }
    }

    return 0;
}


function updateLoginStatus(xmlHttp)
{
    var status = xmlHttp.getResponseHeader("HTTP_UserLoggedIn");
    var loggedIn = (status != null) && status == "true";
    if (loggedIn != userLoggedIn)
    {
        userLoggedIn = loggedIn;
        loadPageOnStart = false;
        loadMainMenu();
    }
}


function loadMainMenu()
{
    if (menuUri == null)
    {
        return;
    }

    var xmlRequest = new xmlrequest.AjaxRequest();
    var xmlHttp = xmlRequest.getXmlHttp();
    if (xmlHttp == null)
    {
        return;
    }

    xmlHttp.onreadystatechange = function()
    {
        if (xmlHttp.readyState == 4)
        {
            if (xmlHttp.status == 200)
            {
                var script = xmlHttp.responseText;
//                alert(script);
                eval(script);
            }
            else
            {
                alert("Error loading menu (" + xmlHttp.status + "). Refresh your browser and try again.");
            }
        }
    }

    xmlHttp.open("GET", menuUri, true);
    xmlHttp.send(null);
}


function insertMainMenu(menu, onSelectFunc, newTab)
{
    mainMenu = menu;
    this.onSelectFunc = onSelectFunc;
    initMenuState(newTab);

    var section;
    var html = "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr>";
    for (var i = 0; i < mainMenu.length; ++i)
    {
        section = mainMenu[i];
        html += "<td><span id=\"section" + i + "\"";
        if (i == curSectionIndex)
        {
            html += " class=\"topNav topNavSelected\"";
        }
        else
        {
            html += " class=\"topNav topNavOut\"";
        }
        html += " onmouseover=\"topNavOver(" + i + ")\" onmouseout=\"topNavOut(" + i + ")\" onclick=\"topNavClick(" + i + ")\">";
        html += section.label;
        html += "</span></td>";
    }
    html += "</tr></table>";

    var container = document.getElementById("mainMenu");
    container.innerHTML = html;
}


function initMenuState(newTab)
{
    if (curSectionIndex >= mainMenu.length)
    {
        curSectionIndex = mainMenu.length - 1;
        curTab = 0;
    }
}


function insertTabs(divTabsId)
{
    tabsContainer = document.getElementById(divTabsId);
    _insertTabs();
    setTabContents(curTab);
}


function _insertTabs()
{
    var html = "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr>";

    if (mainMenu.length == 0)
    {
        return;
    }
    
    var section = mainMenu[curSectionIndex];

    numTabs = section.menuItems.length;
    for (var i = 0; i < numTabs; ++i)
    {
        html += "<td><div id=\"tab" + i + "\"";
        html += " onmouseover=\"tabOver(" + i + ");\"";
        html += " onclick=\"switchTab(" + i + ")\"";
        html += " onmouseout=\"tabOut(" + i + ");\"";

        html += (i == curTab ? "class=\"activeTab\"" : "class=\"inactiveTab\"") + ">";
        html += section.menuItems[i].label + "</div></td>";
    }

    html += "</tr></table>";
    tabsContainer.innerHTML = html;
}


function topNavOver(index)
{
    if (index != curSectionIndex)
    {
        var section = getSection(index);
        section.className = "topNav topNavOver";
    }
}


function topNavOut(index)
{
    if (index != curSectionIndex)
    {
        var section = getSection(index);
        section.className = "topNav topNavOut";
    }
}


function topNavClick(index)
{
    var menu = mainMenu[index];

    if (menu.url != null)
    {
        openWindow(menu.url);
    }
    else if (index != curSectionIndex)
    {
        var section = getSection(index);
        var oldSectionIndex = curSectionIndex;
        section.className = "topNav topNavSelected";
        curSectionIndex = index;
        sectionChanged = true;
        topNavOut(oldSectionIndex);
        curTab = 0;
        _insertTabs();
        setTabContents(curTab);
    }
}


function getSection(index)
{
    var idName = "section" + index;
    return document.getElementById(idName);
}


function tabOver(index)
{
    var div = document.getElementById("tab" + index);
    div.className = (curTab == index) ? "activeTab activeTabOver" : "inactiveTabOver";
}


function tabOut(index)
{
    var div = document.getElementById("tab" + index);
    div.className = (curTab == index) ? "activeTab" : "inactiveTab";
}

function switchTab(index)
{
    if (curTab != index)
    {
        for (var i = 0; i < numTabs; ++i)
        {
            var tabDiv = document.getElementById("tab" + i);
            if (i == index)
            {
                tabDiv.className = "activeTab";
            }
            else
            {
                tabDiv.className = "inactiveTab";
            }
        }
    }
    setTabContents(index)
    curTab = index;
}


function setTabContents(index)
{
    if (index >= 0 && loadPageOnStart)
    {
        var menuItem = mainMenu[curSectionIndex].menuItems[index];

        if (menuItem.embedded)
        {
            onSelectFunc(menuItem.url);
        }
        else
        {
            window.location = menuItem.url;
        }
    }
    loadPageOnStart = true;
}


function Section(label, code, url)
{
    this.code = code;
    this.label = label;
    this.menuItems = new Array();
    this.url = url;
}


function MenuItem(label, code, url, embedded)
{
    this.label = label;
    this.code = code;
    this.url = url;
    this.embedded = (embedded == null) ? true : embedded;
}
