﻿/// <reference name="MicrosoftAjax.js" />
/// <reference path="NavigationItemModel.js" />
Type.registerNamespace("ServerTransformed");

ServerTransformed.MainNavigationModel = function() 
{
    this._currentPageState = "mainNavigation";
    this._filter = "All";
    
    this._navigationItems = new Array();
    
    this._temperatureSets = new Array();
    this._temperatureRow = new Array();
    
    this._temperatureSets[this._temperatureSets.length] = this._temperatureSets[ServerTransformed.Res['filterAll']]     = ["Natural", "Natural", "Natural", "Natural", "Natural", "Natural", "Natural"];
    this._temperatureSets[this._temperatureSets.length] = this._temperatureSets[ServerTransformed.Res['filterFeatures']] = ["Hot", "Hot", "Hot", "Hot", "Cold", "Cold", "Cold"];
    this._temperatureSets[this._temperatureSets.length] = this._temperatureSets[ServerTransformed.Res['filterMedia']]    = ["Cold", "Cold", "Cold", "Cold", "Cold", "Hot", "Hot"];
    this._temperatureSets[this._temperatureSets.length] = this._temperatureSets[ServerTransformed.Res['filterToolBox']] = ["Cold", "Cold", "Cold", "Cold", "Hot", "Cold", "Cold"];
    
    
    
    this._temperatureSets[ServerTransformed.Res['filterAll']]["Security"]       = this._temperatureSets[ServerTransformed.Res['filterAll']][0];   
    this._temperatureSets[ServerTransformed.Res['filterFeatures']]["Security"]   = this._temperatureSets[ServerTransformed.Res['filterFeatures']][0];
    this._temperatureSets[ServerTransformed.Res['filterMedia']]["Security"]      = this._temperatureSets[ServerTransformed.Res['filterMedia']][0];
    this._temperatureSets[ServerTransformed.Res['filterToolBox']]["Security"]   = this._temperatureSets[ServerTransformed.Res['filterToolBox']][0];

    this._temperatureSets[ServerTransformed.Res['filterAll']]["Stability"]      = this._temperatureSets[ServerTransformed.Res['filterAll']][1];
    this._temperatureSets[ServerTransformed.Res['filterFeatures']]["Stability"]  = this._temperatureSets[ServerTransformed.Res['filterFeatures']][1];
    this._temperatureSets[ServerTransformed.Res['filterMedia']]["Stability"]     = this._temperatureSets[ServerTransformed.Res['filterMedia']][1];
    this._temperatureSets[ServerTransformed.Res['filterToolBox']]["Stability"]  = this._temperatureSets[ServerTransformed.Res['filterToolBox']][1];

    this._temperatureSets[ServerTransformed.Res['filterAll']]["Manageability"]      = this._temperatureSets[ServerTransformed.Res['filterAll']][2];
    this._temperatureSets[ServerTransformed.Res['filterFeatures']]["Manageability"]  = this._temperatureSets[ServerTransformed.Res['filterFeatures']][2];
    this._temperatureSets[ServerTransformed.Res['filterMedia']]["Manageability"]     = this._temperatureSets[ServerTransformed.Res['filterMedia']][2];
    this._temperatureSets[ServerTransformed.Res['filterToolBox']]["Manageability"]  = this._temperatureSets[ServerTransformed.Res['filterToolBox']][2];

    this._temperatureSets[ServerTransformed.Res['filterAll']]["Web_Innovations"]        = this._temperatureSets[ServerTransformed.Res['filterAll']][3];
    this._temperatureSets[ServerTransformed.Res['filterFeatures']]["Web_Innovations"]    = this._temperatureSets[ServerTransformed.Res['filterFeatures']][3];
    this._temperatureSets[ServerTransformed.Res['filterMedia']]["Web_Innovations"]       = this._temperatureSets[ServerTransformed.Res['filterMedia']][3];
    this._temperatureSets[ServerTransformed.Res['filterToolBox']]["Web_Innovations"]    = this._temperatureSets[ServerTransformed.Res['filterToolBox']][3];

    this._temperatureSets[ServerTransformed.Res['filterAll']]["Customer"]       = this._temperatureSets[ServerTransformed.Res['filterAll']][4];
    this._temperatureSets[ServerTransformed.Res['filterFeatures']]["Customer"]   = this._temperatureSets[ServerTransformed.Res['filterFeatures']][4];
    this._temperatureSets[ServerTransformed.Res['filterMedia']]["Customer"]      = this._temperatureSets[ServerTransformed.Res['filterMedia']][4];
    this._temperatureSets[ServerTransformed.Res['filterToolBox']]["Customer"]   = this._temperatureSets[ServerTransformed.Res['filterToolBox']][4];

    this._temperatureSets[ServerTransformed.Res['filterAll']]["Toy Box"]        = this._temperatureSets[ServerTransformed.Res['filterAll']][5];
    this._temperatureSets[ServerTransformed.Res['filterFeatures']]["Toy Box"]    = this._temperatureSets[ServerTransformed.Res['filterFeatures']][5];
    this._temperatureSets[ServerTransformed.Res['filterMedia']]["Toy Box"]       = this._temperatureSets[ServerTransformed.Res['filterMedia']][5];
    this._temperatureSets[ServerTransformed.Res['filterToolBox']]["Toy Box"]    = this._temperatureSets[ServerTransformed.Res['filterToolBox']][5];

    this._temperatureSets[ServerTransformed.Res['filterAll']]["Meet IT 24-7"]       = this._temperatureSets[ServerTransformed.Res['filterAll']][6];
    this._temperatureSets[ServerTransformed.Res['filterFeatures']]["Meet IT 24-7"]   = this._temperatureSets[ServerTransformed.Res['filterFeatures']][6];
    this._temperatureSets[ServerTransformed.Res['filterMedia']]["Meet IT 24-7"]      = this._temperatureSets[ServerTransformed.Res['filterMedia']][6];
    this._temperatureSets[ServerTransformed.Res['filterToolBox']]["Meet IT 24-7"]   = this._temperatureSets[ServerTransformed.Res['filterToolBox']][6];
    
    this._interval = 20000;
    this._onTickHandler = Function.createDelegate(this, this._showImpatientVideo);
    
}

ServerTransformed.MainNavigationModel.prototype =
{
    set_page: function(value)
    {
        this._currentPageState = value;
        this._videoURL = "";
        
        this._animationName = "Exit";
        
        var loopVideo = false;
        var videoLocation = "2";
        switch(this._currentPageState)
        {
            case "Security":
            case "Stability":
            case "Manageability":
            case "Web_Innovations":
            case "Customer":
            case "Meet IT 24-7":
            case "Toy Box":            
                if(this._updateTimer)
                {
                    this._updateTimer.set_enabled(false);
                    this._updateTimer = null;
                }
                this._animationName = "Exit";
                this._raiseEvent("exit", Sys.EventArgs.Empty);
                break;
            case "mainNavigation":
            default:
                this._resetImpatientTimerHandler = new Function.createDelegate(this, this._resetImpatientTimer);
                this._videoURL = ServerTransformed.Res.URL['mainNavigation']; 
                this._impatientVideoURL = ServerTransformed.Res.URL['impatient'];
                this._animationName = "Intro";
                this.set_pageURL("xaml/primary_nav.xaml");
                loopVideo = true;
                videoLocation = "1";
                this._raiseEvent("videoChanged", {loop:loopVideo,location:videoLocation});
                break;
         }
         
         
    },
    
    _resetImpatientTimer: function(sender, eventArgs)
    {
        if(this._updateTimer)
        {
            this._updateTimer.set_enabled(false);
            this._updateTimer = null;
        }
        this._updateTimer = $create(ServerTransformed.Timer, {interval:this._interval, enabled:true}, {tick:this._onTickHandler}, null, null);
    },
    
    set_pageURL: function(value)
    {
        this._raiseEvent("loadPage", {url:value});
    },
    
    set_pageXAML: function(value)
    {
        this._pageXAML = value;
        this._raiseEvent("pageLoaded");
    },
    
    get_pageXAML: function()
    {
        return this._pageXAML;
    },
    
    get_events: function()
    {
        if(!this._events)
        {
            this._events = new Sys.EventHandlerList();
        }
        return this._events;
    },
    
    get_closeCommand: function() { return this._currentPageState; },
    set_closeCommand: function(value) { this._currentPageState = value; },
    
    set_filter: function(value)
    {
        this._filter = value;
        this._raiseEvent("filterChanged", {filter:value});
        Array.forEach(this._navigationItems, 
            function(element, i, array)
            {
                element.set_filterState(this._temperatureSets[this._filter][element.get_properties().name]);
            }
            , this);
    },
    
    get_animation: function()
    {
        return this._animationName;
    },
    
    get_video: function()
    {
         return this._videoURL;
    },
    
    get_impatientVideo: function()
    {
        return this._impatientVideoURL;
    },
    
    add_filterChangedHandler: function(handler) { this.get_events().addHandler("filterChanged", handler); },
    remove_filterChangedHandler: function(handler) { this.get_events().removeHandler("filterChanged", handler); },
    
    add_exitHandler: function(handler) { this.get_events().addHandler("exit", handler); },
    remove_exitHandler: function(handler) { this.get_events().removeHandler("exit", handler); },
    
    add_pageLoadedHandler: function(handler) { this.get_events().addHandler("pageLoaded", handler); },
    remove_pageLoadedHandler: function(handler) { this.get_events().removeHandler("pageLoaded", handler); },
    
    add_loadPageHandler: function(handler) { this.get_events().addHandler("loadPage", handler); },
    remove_loadPageHandler: function(handler) { this.get_events().removeHandler("loadPage", handler); },
    
    add_loadFontsHandler: function(handler) { this.get_events().addHandler("loadFonts", handler); },
    remove_loadFontsHandler: function(handler) { this.get_events().removeHandler("loadFonts", handler); },
    
    add_videoChangedHandler: function(handler) { this.get_events().addHandler("videoChanged", handler); },
    remove_videoChangedHandler: function(handler) { this.get_events().removeHandler("videoChanged", handler); },
    
    add_fontsLoadedHandler: function(handler) { this.get_events().addHandler("fontsLoaded", handler); },
    remove_fontsLoadedHandler: function(handler) { this.get_events().removeHandler("fontsLoaded", handler); },
    
    add_playImpatientVideoHandler: function(handler) { this.get_events().addHandler("playImpatientVideo", handler); },
    remove_playImpatientVideoHandler: function(handler) { this.get_events().removeHandler("playImpatientVideo", handler); },
    
    set_fontsLoaded: function(value)
    {
        this._raiseEvent("fontsLoaded");
    },
    
    _raiseEvent: function(eventName, eventArgs)
    {
        var handler = this.get_events().getHandler(eventName);
        
        if(handler)
        {
            if(!eventArgs) eventArgs = Sys.EventArgs.Empty;
            handler(this, eventArgs);
        }
    },
    
    _pageChanged: function(sender, eventArgs)
    {
        var uri = '/ws2008/';
        var title = 'Home: ';
        switch (eventArgs.name)
        {
            case "Security":
                uri = uri + "security";
                title = title + "Security";
                break;
            case "Stability":
                uri = uri + "stability";
                title = title + "Stability";
                break;
            case "Manageability":
                uri = uri + "manageability";
                title = title + "Manageability";
                break;
            case "Web_Innovations":
                uri = uri + "webinnovations";
                title = title + "Web Innovations";
                break;
            case "Customer":
                uri = uri + "videos/customer";
                title = title + "Customer Videos";
                break;
            case "Meet IT 24-7":
                uri = uri + "videos/product";
                title = title + "Product Videos";
                break;
            case "Toy Box":
                uri = uri + "toybox";
                title = title + "Toy Box";
                break;
        }
        dcsMultiTrack('DCS.dcsuri',uri,'WT.ti',title,'WT.cg_n','Home','DCSext.ws2008','','WT.dl','6');
        this.set_page(eventArgs.name);
    },
    
    _itemMouseOver: function(sender, eventArgs)
    {
        Array.forEach(this._navigationItems,
            function(element, i, array)
            {
                if(element.get_properties().name != this.get_properties().name)
                {
                    element.playMouseNonHoverOverAnimation();
                }
                else
                {
                    element.showMoreAnimation();
                }
            }, sender);
    },
    
    _itemMouseOut: function(sender, eventArgs)
    {
        Array.forEach(this._navigationItems,
            function(element, i, array)
            {
                if(element.get_properties().name != this.get_properties().name)
                {
                    element.playMouseNonHoverOutAnimation();
                }
                else
                {
                    element.hideMoreAnimation();
                }
            }, sender);
    },
    
    _buildNavItem: function(realName, fileName)
    {
        var name = realName;
        var filter = this._temperatureSets[this._filter][realName];
        naturalAnimationSet = this._buildAnimationSet(fileName, "_Natural_Hover", "_Natural_Default", "_Natural_Non_Hover");
        hotAnimationSet = this._buildAnimationSet(fileName, "_Natural_Hover", "_Natural_Hover", "_Hot_Non_Hover"); 
        coldAnimationSet = this._buildAnimationSet(fileName, "_Cold_Hover", "_Cold_Default", "_Cold_Default");
        animationSets = [naturalAnimationSet, hotAnimationSet, coldAnimationSet];
        animationSets["Natural"] = animationSets[0];
        animationSets["Hot"] = animationSets[1];
        animationSets["Cold"] = animationSets[2];
        var args = {};
        args.name = name;
        args.filter = filter;
        args.animationSets = animationSets;
        args.floatingAnimation = fileName + "_Floating_Loop";
        args.showMoreAnimation = fileName + "_Show_More";
        args.hideMoreAnimation = fileName + "_Hide_More";
        
        var model = new ServerTransformed.NavigationItemModel(args); 
        var view = new ServerTransformed.NavigationItemView(this._xamlGetElementByID(fileName.toLowerCase() + "_btn"));
        var presenter = new ServerTransformed.NavigationItemPresenter(model, view);
        
        model.add_MouseClickHandler(Function.createDelegate(this, this._pageChanged));
        model.add_MouseOverHandler(Function.createDelegate(this, this._itemMouseOver));
        model.add_MouseOutHandler(Function.createDelegate(this, this._itemMouseOut));
        model.add_AnyEventHandler(Function.createDelegate(this, this._resetImpatientTimerHandler));
        model.floatThem();
        return model;
            
    },
    
    _buildAnimationSet: function(name, over, out, non)
    {
        var retVal = {};
        retVal.mouseOverAnimation = this._xamlGetElementByID(name + over);
        retVal.mouseOutAnimation = this._xamlGetElementByID(name + out);
        retVal.mouseNonHoverAnimation = this._xamlGetElementByID(name + non);
        return retVal;
    },
    
    _xamlGetElementByID: function(id)
    {
        return SLController.get_controller().content.FindName(id);
    },
    
    configureNavigationItems: function()
    {
        this._navigationItems[this._navigationItems.length] = this._buildNavItem("Security", "Security");
        this._navigationItems[this._navigationItems.length] = this._buildNavItem("Stability", "Stability");
        this._navigationItems[this._navigationItems.length] = this._buildNavItem("Manageability", "Manageability");
        this._navigationItems[this._navigationItems.length] = this._buildNavItem("Web_Innovations", "Web_Innovations");
        this._navigationItems[this._navigationItems.length] = this._buildNavItem("Customer", "Customer");
        this._navigationItems[this._navigationItems.length] = this._buildNavItem("Meet IT 24-7", "Meet_IT_24_7");
        this._navigationItems[this._navigationItems.length] = this._buildNavItem("Toy Box", "Toy_Box");
    },
    
    loadFonts: function()
    {
        this._raiseEvent("loadFonts");
    },
    
    _showImpatientVideo: function(sender, eventArgs)
    {
        this._raiseEvent("playImpatientVideo");
    },
    
    exit: function()
    {
        this._raiseEvent("exit");
    }
}

ServerTransformed.MainNavigationModel.registerClass("ServerTransformed.MainNavigationModel");