﻿/// <reference Name="MicrosoftAjax.js" />
/// <reference path="Utilities.js" />

Type.registerNamespace("ServerTransformed");
ServerTransformed.MainNavigationView = function(controller)
{
    this._controller = controller;
    this._contentViewport = this._controller.content.FindName("ContentViewport");
    this._videoPlayer1 = this._controller.content.FindName("VideoPlayer1");
    this._videoPlayer2 = this._controller.content.FindName("VideoPlayer2");
    this._animationFadeIn = this._controller.content.FindName("fadeIn");
    this._animationFadeOut = this._controller.content.FindName("fadeOut");
    this._mediaEndedDelegate = Function.createDelegate(this, this._playerRepeat);
    this._impatientMediaEndedDelegate = Function.createDelegate(this, this._restartMainVideo);
    this._loopVideo = false;
}
ServerTransformed.MainNavigationView.prototype = 
{
    add_exitHandler: function(handler) { this.get_events().addHandler("exit", handler); },
    remove_exitHandler: function(handler) { this.get_events().removeHandler("exit", handler); },
    
    add_xamlLoadedHandler: function(handler) { this.get_events().addHandler("xamlLoaded", handler); },
    remove_xamlLoadedHandler: function(handler) { this.get_events().removeHandler("xamlLoaded", handler); },
    
    add_filterSelectedHandler: function(handler) { this.get_events().addHandler("filterChanged", handler); },
    remove_filterSelectedHandler: function(handler) { this.get_events().removeHandler("filterChanged", handler); },
    
    set_currentAnimation: function(value) { this._controller.content.FindName(value).Begin(); },
    
    set_animationPlayList: function(value) { this._playAnimationSet(value); },
    
    get_filter: function() { return this._filter; },
    set_filter: function(value)
    {
        this._filter = value;
        this._raiseEvent("filterChanged", {filter:value});
    },
    
    set_pageXAML: function(value)
    {
        this._contentViewport.children.Clear();
        this._contentViewport.children.Add(value);
        
        
        this._videoPlayer1.addEventListener("mediaended", this._mediaEndedDelegate);
        this._videoPlayer2.addEventListener("mediaended", this._impatientMediaEndedDelegate);
                
        //setHovers
        //setClicks
        this._raiseEvent("xamlLoaded", {filter:"Home"});
    },
    
    set_loopAnimation: function(value)
    {
        try
        {
        this._floatingLoopAnimation = this._controller.content.FindName("");
        this._floatingLoopAnimation.Begin();
        }
        catch(ex)
        {
            Sys.Debug.trace(ex.description);
            this._floatingLoopAnimation = null;
        }
    },
    
    _restartMainVideo: function(sender, eventArgs)
    {
        this._videoPlayer2.removeEventListener("mediaended", "this._mediaEndedDelegate");
        this._videoPlayer2.Opacity = 0;
        this._videoPlayer1.Play();
        //this.playVideo(ServerTransformed.Res.URL['mainNavigation'], {loop:true});
    },
    
    playVideo: function(url, args)
    {
        var player;
                
        if(args.loop)
        {
            player = this._videoPlayer1;
            this._loopVideo = args.loop;
            this._videoPlayer2.Opacity = 0;
        }
        else
        {
            player = this._videoPlayer2;
        }
 
        if(player.Source == "")
        {
            player.AutoPlay = "true";
            player.Source = url;
        
            if(args.loop)
            {
                this._animationFadeIn.Stop();
                this._animationFadeIn.children.GetItem(0)["Storyboard.TargetName"] = player.name;
                this._animationFadeIn.Begin();
            }
            else
            {
                player.Opacity = 1;
                player.Play();
            }
        }

        
        if (args.impatient)
        {
            this._videoPlayer1.Pause();
            player.AutoPlay = "true";
            player.Source = url;
            player.Opacity = 1;
            player.Play();
        }
        else
        {
            player.Opacity = 1;
            player.Play();
        }
    
    },
    
    _exit: function(sender, eventArgs)
    {
        if(this._floatingLoopAnimation) this._floatingLoopAnimation.Stop();
        this._videoPlayer1.removeEventListener("mediaended", "this._mediaEndedDelegate");
        this._videoPlayer2.removeEventListener("mediaended", "this._impatientMediaEndedDelegate");
        this._videoPlayer2.Stop();
        this._videoPlayer2.Source = "";
        this._videoPlayer2.Opacity = "0";
        
        this._animationFadeIn.children.GetItem(0)["Storyboard.TargetName"] = "";
        this._animationFadeOut.children.GetItem(0)["Storyboard.TargetName"] = "";
        this._raiseEvent("exit");
    },
    
    _playerRepeat : function(sender, eventArgs)
    {
        if((sender.CurrentState.toString() == "Paused") && this._loopVideo)
        {
            sender.Stop();
            sender.Play();
        }
        else if(sender.CurrentState.toString() == "Paused")
        {
            this._raiseEvent("exit");
        }
    },
    
    _filterClick: function(sender, eventArgs)
    {
        this.set_filter(sender.target.innerHTML);
    },
    
    get_events: function()
    {
        if(!this._events)
        {
            this._events = new Sys.EventHandlerList();
        }
        return this._events;
    },
    
    clearEvents: function()
    {
        this._events = new Sys.EventHandlerList();
    },
    
    _raiseEvent: function(eventName, eventArgs)
    {
        var handler = this.get_events().getHandler(eventName);
        
        if(handler)
        {
            if(!eventArgs) eventArgs = Sys.EventArgs.Empty;
            handler(this, eventArgs);
        }
    }
}

ServerTransformed.MainNavigationView.registerClass("ServerTransformed.MainNavigationView");