if (!window.SilverlightHomePage)
	window.SilverlightHomePage = {};

    var CURRENT_CANVAS_RELATIVE_POSITION_LEFT = "left";
    var CURRENT_CANVAS_RELATIVE_POSITION_RIGHT = "right";
    var CURRENT_CANVAS_RELATIVE_POSITION_EQUAL = "equal";
    
    var BLADE_HOVER_STATE_INDICATOR = "-hover";
    
    var DEFAULT_SITE_URL = "http://www.microsoft.com/rus/student/";
    
    var PRELOADER_MAX_LENGTH = 540;
    
    var BladeCount = 4;
    var StartUpAnimationCurrentBladeRight = 4;
    
    var DEFAULT_SCENARIO_LINK_OVER_COLOR = "#333333";
    var DEFAULT_SCENARIO_LINK_OUT_COLOR = "#FFFFFF";

SilverlightHomePage.Scene = function() 
{
    var StartUpAnimCurrentMoveRightBlade;
    
    var BladeTimer;
    
    

    var CnvPreloader;
    var ProgressIndicator;
    var ProgressIndicatorMaxLength;
    var ProgressIndicatorText;

    var BladeCount;
    var blnHeroOpen;
    var BladeImages;
    var HeroCanvasesInit;
    var HeroCanvasesCurrent;
    
    var ActiveHeroId;
    var ClickedHeroId;
    
    var CurrentHeroCanvas;
    var ClickedHeroCanvas;
    
    var RootCanvasElement;
    
    var StartUpAnim;
    
    var LastBladeRemoveListenerToken;
}

SilverlightHomePage.Scene.prototype =
{

	handleLoad: function(plugIn, userContext, rootElement) 
	{
        
   
		this.plugIn = plugIn;
        RootCanvasElement = rootElement;

        // SET: Global vars for preloader
        CnvPreloader = RootCanvasElement.findName("CnvPreloader");
        ProgressIndicator = RootCanvasElement.findName("PreloaderBackground");
	    ProgressIndicatorMaxLength = PRELOADER_MAX_LENGTH;
	    ProgressIndicatorText = RootCanvasElement.findName("PreloaderPercentComplete");	
	        
	    // SHOW: Preloader
	    CnvPreloader.Opacity = 1;


 
        BladeTimer = RootCanvasElement.findName("BladeTimer"); 
        BladeTimer.addEventListener("Completed", Silverlight.createDelegate(this, this.ExecuteBladeRightAnimation)); 

        StartUpAnim = RootCanvasElement.findName("StartUpAnimation");
        StartUpAnim.addEventListener("Completed", Silverlight.createDelegate(this, this.ExecuteSecondaryStartUpAnimationsMoveLeft));
        
        
        // LOAD: Video file using Downloader
        // Retrieve a reference to the plugin.
        var Downloader = this.plugIn.createObject("downloader");

        // Add Download Progress event.
        Downloader.addEventListener("downloadProgressChanged",this.onDownloadProgressChanged);

        // Add Completed event.
        Downloader.addEventListener("completed", this.onDownloadCompleted);

        // Initialize the Downloader request.    
        Downloader.open("GET", "silverlight/home/assets/assets.xml");

        //  Execute the Downloader request.
        // NOTE: downloader APIs disallow file:\\ scheme
        // you must run this sample over localhost: or off a server or the following call will fail    
        Downloader.send();
 
	},


    // SET: Sources in xaml from pre-Downloaded assets
    onDownloadProgressChanged: function(sender, args)
    {
        var PercentProgress = Math.floor(sender.downloadProgress * 100);
        ProgressIndicator.width = (PercentProgress * 0.01) * PRELOADER_MAX_LENGTH;
        ProgressIndicatorText.text = PercentProgress + "%";
    },

    // SET: Sources in xaml from pre-Downloaded assets
    onDownloadCompleted: function(sender, args)
    {
        // HIDE: the Preloader    
        CnvPreloader.Opacity = 0;  
           
        if(StartUpAnim != null)
        {
            StartUpAnim.begin();
        }
     },


    ExecuteSecondaryStartUpAnimationsMoveLeft: function(sender, eventArgs)
    {
        var StoryBoardsMoveLeft = new Array(BladeCount);
 	    for(i = 1; i <= BladeCount; i++)
	    {
	        StoryBoardsMoveLeft[i] = RootCanvasElement.findName("MoveLeftCanvasHero" + i);
	        if(StoryBoardsMoveLeft[i] != null)
	        {
	            if(i == BladeCount)
	            {
	                LastBladeRemoveListenerToken = StoryBoardsMoveLeft[i].addEventListener("Completed", Silverlight.createDelegate(this, this.StartSecondaryStartUpAnimationsMoveRight));
	                StartUpAnimCurrentMoveRightBlade = RootCanvasElement.findName("MoveRightCanvasHero" + i);
	            }
	            StoryBoardsMoveLeft[i].begin();
	        }
	    }

    },

    StartSecondaryStartUpAnimationsMoveRight: function(sender, eventArgs)
    {   
        var LastBlade = RootCanvasElement.findName("MoveLeftCanvasHero" + BladeCount);
        LastBlade.removeEventListener("Completed", LastBladeRemoveListenerToken);

        StartUpAnimCurrentMoveRightBlade.begin();
        StartUpAnimationCurrentBladeRight = StartUpAnimationCurrentBladeRight - 1;
        
        BladeTimer.begin();
    },

    ExecuteBladeRightAnimation: function(sender, eventArgs)
    {  	     	    
        if(StartUpAnimationCurrentBladeRight > 1)
        {
            StartUpAnimCurrentMoveRightBlade = RootCanvasElement.findName("MoveRightCanvasHero" + StartUpAnimationCurrentBladeRight);
            if(StartUpAnimCurrentMoveRightBlade != null)
            {
                StartUpAnimCurrentMoveRightBlade.begin();
	            StartUpAnimationCurrentBladeRight = StartUpAnimationCurrentBladeRight - 1;
                BladeTimer.begin();
            }
        }  
        else
            this.initializePostStartUpAnimation();
    },

    initializePostStartUpAnimation: function(sender, eventArgs)
    {

	    blnHeroOpen = true;
	    BladeImages = new Array(BladeCount);
	    TxtReadScenarios = new Array(BladeCount);
	    TxtMoreScenarios = new Array(BladeCount);
	    TxtPrimaryMessage = new Array(BladeCount);

	    for(i = 1; i <= BladeCount; i++)
	    {
	        BladeImages[i] = RootCanvasElement.findName("ImgBlade" + i);
	        TxtReadScenarios[i] = RootCanvasElement.findName("TxtBlkViewThisItem" + i);
	        TxtMoreScenarios[i] = RootCanvasElement.findName("TxtBlkViewMoreItems" + i);
	        TxtPrimaryMessage[i] = RootCanvasElement.findName("TxtBlkPrimaryMessage" + i);

            // ADD: Blade-specific Event Listeners	        
	        if(BladeImages[i] != null)
	        {
	            BladeImages[i].addEventListener("MouseLeftButtonDown", this.handleMouseDown);
                BladeImages[i].addEventListener("MouseEnter", this.handleMouseEnter);
                BladeImages[i].addEventListener("MouseLeave", this.handleMouseLeave);
	        }
	        if(TxtReadScenarios[i] != null)
	        {
	            
	            TxtReadScenarios[i].addEventListener("MouseLeftButtonDown", this.handleReadScenarioLink);
	            TxtReadScenarios[i].addEventListener("MouseEnter", this.handleScenarioLinkEnter);
	            TxtReadScenarios[i].addEventListener("MouseLeave", this.handleScenarioLinkLeave);
	        }
	        if(TxtMoreScenarios[i] != null)
	        {
	            TxtMoreScenarios[i].addEventListener("MouseLeftButtonDown", this.handleMoreScenarioLink);
	            TxtMoreScenarios[i].addEventListener("MouseEnter", this.handleScenarioLinkEnter);
	            TxtMoreScenarios[i].addEventListener("MouseLeave", this.handleScenarioLinkLeave);
	        }
	        if(TxtPrimaryMessage[i] != null)
	        {
	            TxtPrimaryMessage[i].addEventListener("MouseLeftButtonDown", this.handleReadScenarioLink);
	            TxtPrimaryMessage[i].addEventListener("MouseEnter", this.handleScenarioLinkEnter);
	            TxtPrimaryMessage[i].addEventListener("MouseLeave", this.handleScenarioLinkLeave);	            
	        }
	    }
	    
	    // CREATE: Arrays of Container Canvases
	    HeroCanvasesInit = new Array(BladeCount);
	    HeroCanvasesCurrent = new Array(BladeCount);
	    for(i = 1; i <= BladeCount; i++)
	    {
	        // SET: start values
	        HeroCanvasesInit[i] = RootCanvasElement.findName("CnvHero" + i); // this array should never change. use to find initial values for a given canvas
	        HeroCanvasesCurrent[i] = RootCanvasElement.findName("CnvHero" + i); // this array should change as values for a given canvas changes
	    }
	    
	    ActiveHeroId = 1; //By design, the first blade/canvas to display is the blade in position 1  


    },


    handleScenarioLinkEnter: function(sender, eventArgs)
    {
        sender.Foreground = DEFAULT_SCENARIO_LINK_OVER_COLOR;
    },

    handleScenarioLinkLeave: function(sender, eventArgs)
    {
        sender.Foreground = DEFAULT_SCENARIO_LINK_OUT_COLOR;
    },
    
    handleReadScenarioLink: function(sender, eventArgs)
    {
	    var BladeImageId;
	    var BladeImageName = sender.name;
	    if(BladeImageName != null)
	        BladeImageId = GetBladeIdFromNamedElement(BladeImageName);

        var url = "";
        var dcsWTti = "";
        var dcsUri = "";

        switch(BladeImageId)
        {
            case "1":
                url = "/rus/student/software/tooling.aspx";
                dcsWTti = "Home:Academics-Scenario:Clickthrough";
                dcsUri = "/rus/student/Academics-Scenario:Clickthrough";
                break;
            case "2":
                url = "/rus/student/imaginecup/participate.aspx";
                dcsWTti = "Home:Socialize-Scenario:Clickthrough";
                dcsUri = "/rus/student/Socialize-Scenario:Clickthrough";
                break;
            case "3":
                url = "/rus/student/career/getready.aspx";
                dcsWTti = "Home:Get Involved-Scenario:Clickthrough";
                dcsUri = "/rus/student/Get Involved-Scenario:Clickthrough";
                break;
            case "4":
                url = "/rus/student/community/communicate.aspx";
                dcsWTti = "Home:Careers-Scenario:Clickthrough";
                dcsUri = "/rus/student/Careers-Scenario:Clickthrough";
                break;
            default:
                url = DEFAULT_SITE_URL;
        }
        dcsMultiTrack('WT.ti',dcsWTti,'DCS.dcsuri',dcsUri);
        window.location.href = url;
    },

    handleMoreScenarioLink: function(sender, eventArgs)
    {
	    var BladeImageId;
	    var BladeImageName = sender.name;
	    if(BladeImageName != null)
	        BladeImageId = GetBladeIdFromNamedElement(BladeImageName);

        var url = "";
        var dcsWTti = "";
        var dcsUri = "";

        switch(BladeImageId)
        {
            case "1":
                url = "/rus/student/software/";
                dcsWTti = "Home:Academics-Scenarios:Clickthrough";
                dcsUri = "/rus/student/Academics-Scenarios:Clickthrough";
                break;
            case "2":
                url = "/rus/student/imaginecup/";
                dcsWTti = "Home:Socialize-Scenarios:Clickthrough";
                dcsUri = "/rus/student/Socialize-Scenarios:Clickthrough";
                break;
            case "3":
                url = "/rus/student/career/";
                dcsWTti = "Home:Get-Involved-Scenarios:Clickthrough";
                dcsUri = "/rus/student/Get-Involved-Scenarios:Clickthrough";
                break;
            case "4":
                url = "/rus/student/community/";
                dcsWTti = "Home:Careers-Scenarios:Clickthrough";
                dcsUri = "/rus/student/Careers-Scenarios:Clickthrough";
                break;
            default:
                url = DEFAULT_SITE_URL;
        }
        dcsMultiTrack('WT.ti',dcsWTti,'DCS.dcsuri',dcsUri);
        window.location.href = url;
    },
    	
	handleMouseEnter: function(sender, eventArgs) 
	{
		var arrSource;
	    if(sender.Source != null)
	        arrSource = sender.Source.split('.');
		if(arrSource != null && arrSource.length > 1)
	        sender.Source = arrSource[0] + BLADE_HOVER_STATE_INDICATOR + "." + arrSource[1];
	},
	
	handleMouseLeave: function(sender, eventArgs) 
	{
		var arrSource;

	    if(sender.Source != null)
	        arrSource = sender.Source.split(BLADE_HOVER_STATE_INDICATOR);
        if(arrSource != null && arrSource.length > 1 && arrSource[0] != null && arrSource[1] != null)
            sender.Source = arrSource[0] + arrSource[1];
	},

	handleMouseDown: function(sender, eventArgs) 
	{

	    var BladeImageId;
	    var BladeImageName = sender.name;
	    if(BladeImageName != null)
	        BladeImageId = GetBladeIdFromNamedElement(BladeImageName);
	    
	    ClickedHeroId = BladeImageId;
	    
	    
	    var AnimationDirection;
	    if(ActiveHeroId == ClickedHeroId)
	    {
	        AnimationDirection = CURRENT_CANVAS_RELATIVE_POSITION_EQUAL;
	    }
	    else if(ActiveHeroId <= ClickedHeroId)
	    {
	        AnimationDirection = CURRENT_CANVAS_RELATIVE_POSITION_LEFT;
	    }
	    else if(ActiveHeroId >= ClickedHeroId)
	    {
	        AnimationDirection = CURRENT_CANVAS_RELATIVE_POSITION_RIGHT;
	    }

	    
	    // ANIMATE: Canvases
	    if(AnimationDirection == CURRENT_CANVAS_RELATIVE_POSITION_EQUAL)
	    {
            // do nothing
	    }
	    else if(AnimationDirection == CURRENT_CANVAS_RELATIVE_POSITION_LEFT) 
	    {
	        for(i = 1; i <= ClickedHeroId; i++)
	        {
	            if(i >= ActiveHeroId)
	            {
	                if(i == ActiveHeroId)
	                {
	                    // do nothing
	                }
	                else
	                {
                        var CanvasAnimation = RootCanvasElement.findName("MoveLeftCanvasHero" + i);
                        CanvasAnimation.begin();
	                }
	            }
	        }   
	    }
	    else if(AnimationDirection == CURRENT_CANVAS_RELATIVE_POSITION_RIGHT)
	    {
	        for(i = BladeCount; i >= 1; i--)
	        {
	            if(i > ClickedHeroId)
	            {
	                if(i <= ActiveHeroId)
	                {
                        var CanvasAnimation = RootCanvasElement.findName("MoveRightCanvasHero" + i);
                        CanvasAnimation.begin();
                    }
	            }
	        }   	    
	    }
	    
	    // SET: new active hero id based on blade that has just been clicked and animated.
	    ActiveHeroId = ClickedHeroId;

	}
}


function GetBladePosition(Canvas, HeroCanvasesInit)
{
    var CanvasLeftPosition;
    if(Canvas != null)
    {
        CanvasLeftPosition = Canvas.getValue("Canvas.Left");
    }
    else
    {
        CanvasLeftPosition = 0;
    }
    return CanvasLeftPosition;   
}

function GetBladeIdFromNamedElement(Name)
{
    var id = 1;
    if(Name != null)
    {
        id = Name.substring(Name.length - 1, Name.length);
    }
    return id;
}

function isBladeCanvasVisible(ClickedBladeCanvas, ActiveBladeCanvas)
{
    if(ClickedBladeCanvas.name == ActiveBladeCanvas.name)
    {
        return true;
    }
    else
    {
        return false;
    }
}
