﻿/// <reference path="~/Default_aspx.js" />
/// <reference path="Utilities.js" />
Type.registerNamespace("ServerTransformed");

ServerTransformed.TextContentModel = function(pageName)
{
    this._name = pageName;    
    switch(this._name)
    {
        case "Web_Innovations":
            this._fileName = "web_innovations";
            break;
        case "Meet IT 24-7":
            this._fileName = "meet_it_24_7";
            break;
        case "Toy Box":
            this._fileName = "toy_box";
            break;
        case "Security":
        case "Stability":
        case "Manageability":
        case "Customer":
        default:
            this._fileName = pageName.toLowerCase();
            break;
    }
    
    this._introVideoURL = ServerTransformed.Res.URL[this._fileName];
    this._exitVideoURL = ServerTransformed.Res.URL[this._fileName + "Reverse"];
    this._navigationItems = new Array();
    this._nextPage = "Home";
    this._currentAnimation = "Intro";
}

ServerTransformed.TextContentModel.prototype = 
{
    init: function() { this.set_pageURL("xaml/" + this._fileName + ".xaml"); },
    
    loadFonts: function() { this._raiseEvent("loadFonts"); },
    
    exit: function() { this._raiseEvent("exit"); },
    
    set_pageURL: function(value)
    {
        this._raiseEvent("loadPage", {url:value});
    },
    
    set_pageXAML: function(value)
    {
        this._pageXAML = value;
        this._raiseEvent("pageLoaded");
    },
    
    get_pageName: function() { return this._name; },
    
    get_pageXAML: function() { return this._pageXAML; },
    
    get_animation: function() { return this._currentAnimation; },
    
    get_introVideo: function() { return this._introVideoURL; },
    
    get_exitVideo: function() { return this._exitVideoURL; },
    
    get_closeCommand: function() { return this._nextPage; },
    set_closeCommand: function(value) { this._nextPage = value; },
    
    add_loadFontsHandler: function(handler) { this.get_events().addHandler("loadFonts", handler); },
    remove_loadFontsHandler: function(handler) { this.get_events().removeHandler("loadFonts", handler); },
    
    add_loadPageHandler: function(handler) { this.get_events().addHandler("loadPage", handler); },
    remove_loadPageHandler: function(handler) { this.get_events().removeHandler("loadPage", handler); },
    
    add_exitHandler: function(handler) { this.get_events().addHandler("exit", handler); },
    remove_exitHandler: function(handler) { this.get_events().removeHandler("exit", handler); },
    
    add_pageUnloadHandler: function(handler) { this.get_events().addHandler("unloadPage", handler); },
    remove_pageUnloadHandler: function(handler) { this.get_events().removeHandler("unloadPage", handler); },
    
    add_pageLoadedHandler: function(handler) { this.get_events().addHandler("pageLoaded", handler); },
    remove_pageLoadedHandler: function(handler) { this.get_events().removeHandler("pageLoaded", handler); },
    
    add_fontsLoadedHandler: function(handler) { this.get_events().addHandler("fontsLoaded", handler); },
    remove_fontsLoadedHandler: function(handler) { this.get_events().removeHandler("fontsLoaded", handler); },
    
    add_subHeadChangeHandler: function(handler) { this.get_events().addHandler("subHeadChange", handler); },
    remove_subHeadChangeHandler: function(handler) { this.get_events().removeHandler("subHeadChange", handler); },
    
    add_copyChangeHandler: function(handler) { this.get_events().addHandler("copyChange", handler); },
    remove_copyChangeHandler: function(handler) { this.get_events().removeHandler("copyChange", handler); },
    
    set_fontsLoaded: function(value)
    {
        this._raiseEvent("fontsLoaded");
    },
    
    get_subHead: function() { return this._subHead; },
    set_subHead: function(value)
    {
        this._subHead = value;
        this._raiseEvent("subHeadChange");
    },
    
    get_copy: function() { return this._copy; },
    set_copy: function(value)
    {
        this._copy = value;
        this._raiseEvent("copyChange");
    },
    
    get_events: function()
    {
        if(!this._events)
        {
            this._events = new Sys.EventHandlerList();
        }
        return this._events;
    },
    
    _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)
    {
        this._nextPage = eventArgs.name;
        this._currentAnimation = "Reverse";
        this._raiseEvent("unloadPage");
    },
    
    _buildNavItem: function(realName, fileName)
    {   
        var name = realName;
        var filter = "Natural";
        naturalAnimationSet = this._buildAnimationSet(fileName, "_btn_Hover", "_btn_Default", "_btn_Default");
        animationSets = [naturalAnimationSet];
        animationSets["Natural"] = animationSets[0];
        var args = {};
        args.name = name;
        args.filter = filter;
        args.animationSets = animationSets;
        
        var model = new ServerTransformed.NavigationItemModel(args); 
        var view = new ServerTransformed.NavigationItemView(this._xamlGetElementByID(fileName + "_btn"));
        var presenter = new ServerTransformed.NavigationItemPresenter(model, view);
        
        if(realName == "Read_More")
        {
            model.add_MouseClickHandler(Function.createDelegate(this, this._readMoreClick));
        }
        else if(realName == "Download")
        {
            model.add_MouseClickHandler(Function.createDelegate(this, this._downloadClick));
        }
        else
            model.add_MouseClickHandler(Function.createDelegate(this, this._pageChanged));
        return model;
            
    },
    
    _readMoreClick: function(sender, eventArgs)
    {
        var name = this._name.replace('_', ' ');
        var uri = "/ws2008/" + name.replace(' ', '') + "/more";
        var title = name + ": Read More";
        dcsMultiTrack('DCS.dcsuri',uri,'WT.ti',title,'WT.cg_n',name,'DCSext.ws2008','Read More','WT.dl','6');
        window.open(ServerTransformed.Res.URL['readMore']);
    },
    
    _downloadClick: function(sender, eventArgs)
    {
        var name = this._name.replace('_', ' ');
        var uri = "/ws2008/" + name.replace(' ', '') + "/download";
        var title = name + ": Download a Trial";
        dcsMultiTrack('DCS.dcsuri',uri,'WT.ti',title,'WT.cg_n',name,'DCSext.ws2008','Download Trial','WT.dl','6');
        window.open(ServerTransformed.Res.URL['tryIt']);
    },
    
    _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()
    {
        if(this._name != "Security")
            this._navigationItems[this._navigationItems.length] = this._buildNavItem("Security", "Security");
        if(this._name != "Stability")
            this._navigationItems[this._navigationItems.length] = this._buildNavItem("Stability", "Stability");
        if(this._name != "Manageability")
            this._navigationItems[this._navigationItems.length] = this._buildNavItem("Manageability", "Manageability");
        if(this._name != "Web_Innovations")
            this._navigationItems[this._navigationItems.length] = this._buildNavItem("Web_Innovations", "Web_Innovations");

        this._navigationItems[this._navigationItems.length] = this._buildNavItem("Back", "Back");
        this._navigationItems[this._navigationItems.length] = this._buildNavItem("Read_More", "Read_More");
        this._navigationItems[this._navigationItems.length] = this._buildNavItem("Download", "Download");
    },
    
    removeHandlersForExit: function()
    {
        Array.forEach(this._navigationItems, function(element){element.exit();}, this);
    },
    
    trackPageLoad: function()
    {
        var uri = '/ws2008/pillars/';
        var title = 'Pillars: ';
        switch (this._name)
        {
            case "Security":
                uri = uri + 'security';
                title = title + 'Security Tab';
                break;
            case "Stability":
                uri = uri + 'stability';
                title = title + 'Stability Tab';
                break;
            case "Manageability":
                uri = uri + 'manageability';
                title = title + 'Manageability Tab';
                break;
            case "Web_Innovations":
                uri = uri + 'webinnovations';
                title = title + 'Web Innovations Tab';
                break;
        }
        dcsMultiTrack('DCS.dcsuri',uri,'WT.ti',title,'WT.cg_n',this._name.replace('_', ' '),'DCSext.ws2008','','WT.dl','6');
    }
}

ServerTransformed.TextContentModel.registerClass("ServerTransformed.TextContentModel");