﻿RegisterNamespace('ToolStrip');

ToolStrip.CurrentMenu = null;
ToolStrip.DefaultMenu = 'Home';
ToolStrip.Element = null;
ToolStrip.Events = new FreshLogicStudios.Scripts.EventCollection();
ToolStrip.FlashingMenu = false;
ToolStrip.LeftScrollButton = null;
ToolStrip.MenuMask = null;
ToolStrip.Menus = new Array();
ToolStrip.MenusLoaded = 0;
ToolStrip.Navigation = null;
ToolStrip.RightScrollButton = null;

ToolStrip.FlashMenu = function()
{
    if(!ToolStrip.FlashingMenu)
    {
        ToolStrip.FlashingMenu = true;
        
        function OnFlashMenuComplete()
        {
            ToolStrip.FlashingMenu = false;
        }
        
        new Effect.Highlight(ToolStrip.Element, { startcolor:'#4b4b4b', endcolor:'#323232', duration: 1.0, afterFinish: OnFlashMenuComplete});
    }
}

ToolStrip.Initialize = function()
{
    ToolStrip.Events.Add(new FreshLogicStudios.Scripts.Event('LoadComplete', ToolStrip.OnLoadComplete));
    ToolStrip.Element = document.getElementById('ToolStrip');
    
    var toolStripMenus = document.getElementById('ToolStripMenus');
    
    // Clone all the initial dashboard components
    var menuClones = new Array();
    
    for(var i = 0; i < toolStripMenus.childNodes.length; i++)
    {
        var child = toolStripMenus.childNodes[i];
        
        if(child.tagName)
        {
            menuClones[menuClones.length] = child.cloneNode(true);
        }
    }
    
    // Remove the elements that will be altered
    ToolStrip.Element.removeChild(toolStripMenus);
    
    // Create the mask for the dashboard pages
    ToolStrip.MenuMask = document.createElement('div');
    ToolStrip.MenuMask.className = 'ToolStripMenuMask';
    ToolStrip.Element.appendChild(ToolStrip.MenuMask);
    
    // Add menu navigation
    ToolStrip.Navigation = document.createElement('div');
    ToolStrip.Navigation.className = 'ToolStripNavigation';
    ToolStrip.Element.appendChild(ToolStrip.Navigation);
    
    // Add scrolling navigation
    ToolStrip.LeftScrollButton = document.createElement('img');
    ToolStrip.RightScrollButton = document.createElement('img');
    
    ToolStrip.LeftScrollButton.className = 'ToolStripMenuLeftScroll';
    ToolStrip.RightScrollButton.className = 'ToolStripMenuRightScroll';
    ToolStrip.LeftScrollButton.alt = 'Scroll Left';
    ToolStrip.RightScrollButton.alt = 'Scroll Right';
    ToolStrip.LeftScrollButton.src = '/images/LeftArrow.gif';
    ToolStrip.RightScrollButton.src = '/images/RightArrow.gif';
    
    ToolStrip.Navigation.appendChild(ToolStrip.LeftScrollButton);
    ToolStrip.Navigation.appendChild(ToolStrip.RightScrollButton);
    
    AddEvent(ToolStrip.LeftScrollButton, 'click', ToolStrip.OnScrollLeftClicked);
    AddEvent(ToolStrip.RightScrollButton, 'click', ToolStrip.OnScrollRightClicked);
    
    // Build the menus
    for(var i = 0; i < menuClones.length; i++)
    {
        var clone = menuClones[i];
        
        if(clone.tagName.toLowerCase() == 'ul')
        {
            var menu = new ToolStrip.Menu(clone);
    
            menu.Events.Add(new FreshLogicStudios.Scripts.Event('ShowComplete', ToolStrip.OnMenuShowComplete));
            menu.Events.Add(new FreshLogicStudios.Scripts.Event('HideComplete', ToolStrip.OnMenuHideComplete));
            menu.Events.Add(new FreshLogicStudios.Scripts.Event('ScrollComplete', ToolStrip.OnMenuScrollComplete));
            menu.Events.Add(new FreshLogicStudios.Scripts.Event('LoadComplete', ToolStrip.OnMenuLoadComplete));
            
            menu.Hide();
            
            ToolStrip.Menus.push(menu);
        }
    }
}

ToolStrip.OnLoadComplete = function(args)
{
    ToolStrip.Element.style.visibility = 'visible';
    ToolStrip.ShowMenu(ToolStrip.DefaultMenu);
    initLightbox();
}

ToolStrip.OnMenuHideComplete = function(args)
{
    ToolStrip.ResetScrollButtons();
}

ToolStrip.OnMenuLoadComplete = function(args)
{
    ++ToolStrip.MenusLoaded;
    
    if(ToolStrip.MenusLoaded == ToolStrip.Menus.length)
    {
        ToolStrip.Events.Fire('LoadComplete');
    }
}

ToolStrip.OnMenuShowComplete = function(args)
{
    ToolStrip.ResetScrollButtons();
}

ToolStrip.OnMenuScrollComplete = function(args)
{
    ToolStrip.ResetScrollButtons();
}

ToolStrip.OnScrollLeftClicked = function(e)
{
    ToolStrip.CurrentMenu.ScrollLeft();
}

ToolStrip.OnScrollRightClicked = function(e)
{
    ToolStrip.CurrentMenu.ScrollRight();
}

ToolStrip.ResetScrollButtons = function()
{
    if(ToolStrip.CurrentMenu)
    {
        var scrollRight = ToolStrip.CurrentMenu.CanScrollRight();
        var scrollLeft = ToolStrip.CurrentMenu.CanScrollLeft();
        
        if(scrollRight)
        {
            if(ToolStrip.RightScrollButton.style.display != 'block')
            {
                ToolStrip.RightScrollButton.style.display = 'block';
                new Effect.Opacity(ToolStrip.RightScrollButton, {duration:0.3, from:0.0, to:1.0});
            }
        }
        else
        {
            if(ToolStrip.RightScrollButton.style.display == 'block')
            {
                new Effect.Opacity(ToolStrip.RightScrollButton, {duration:0.3, from:1.0, to:0.0, afterFinish:function(){ToolStrip.RightScrollButton.style.display = 'none';}});
            }
        }
        
        if(scrollLeft)
        {
            if(ToolStrip.LeftScrollButton.style.display != 'block')
            {
                ToolStrip.LeftScrollButton.style.display = 'block';
                new Effect.Opacity(ToolStrip.LeftScrollButton, {duration:0.3, from:0.0, to:1.0});
            }
        }
        else
        {
            if(ToolStrip.LeftScrollButton.style.display == 'block')
            {
                new Effect.Opacity(ToolStrip.LeftScrollButton, {duration:0.3, from:1.0, to:0.0, afterFinish:function(){ToolStrip.LeftScrollButton.style.display = 'none';}});
            }
        }
        
        ToolStrip.MenuMask.className = (!scrollLeft && !scrollRight) ? 'ToolStripMenuMask NoScroll' : 'ToolStripMenuMask';
    }
    else
    {
        ToolStrip.RightScrollButton.style.display = 'none';
        ToolStrip.LeftScrollButton.style.display = 'none';
        ToolStrip.MenuMask.className = 'ToolStripMenuMask NoScroll';
    }
}

ToolStrip.ShowMenu = function(title)
{
    var nextMenu = null;
    
    for(var i = 0; i < ToolStrip.Menus.length; i++)
    {
        if(ToolStrip.Menus[i].Name == title)
        {
            nextMenu = ToolStrip.Menus[i];
        }
    }
    
    if(nextMenu)
    {
        if(ToolStrip.CurrentMenu)
        {
            if(ToolStrip.CurrentMenu == nextMenu)
            {
                ToolStrip.FlashMenu();
                return;
            }
            else
            {
                ToolStrip.CurrentMenu.Hide();
            }
        }
        
        ToolStrip.CurrentMenu = nextMenu;
        ToolStrip.CurrentMenu.Show();
    }
}

AddEvent(window, 'load', ToolStrip.Initialize);