﻿/// <reference Name="MicrosoftAjax.js" />
/// <reference Name="MicrosoftAjaxTimer.js" />
/// <reference path="Timer.js" />

Type.registerNamespace("ServerTransformed");

ServerTransformed.ToyBoxView = function(xamlCanvas)
{
    this._controller = xamlCanvas;
    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._videoPlayer1.Stop();
//    this._videoPlayer2.Stop();
//    this._videoPlayer1.Opacity = 0;
//    this._videoPlayer2.Opacity = 0;
    
    this._exitHandler = Function.createDelegate(this, this._exit);
}

ServerTransformed.ToyBoxView.prototype = 
{
    add_exitHandler: function(handler) { this.get_events().addHandler("exit", handler); },
    remove_exitHandler: function(handler) { this.get_events().removeHandler("exit", handler); },

    add_videoEndedHandler: function(handler) { this.get_events().addHandler("videoEnded", handler); },
    remove_videoEndedHandler: function(handler) { this.get_events().removeHandler("videoEnded", handler); },
    
    add_xamlLoadedHandler: function(handler) { this.get_events().addHandler("xamlLoaded", handler); },
    remove_xamlLoadedHandler: function(handler) { this.get_events().removeHandler("xamlLoaded", handler); },
    
    add_animationEndedHandler: function(handler) { this.get_events().addHandler("animationEnded", handler); },
    remove_animationEndedHandler: function(handler) { this.get_events().removeHandler("animationEnded", handler); },
    
    add_backBtnClickHandler: function(handler) { this.get_events().addHandler("backClick", handler); },
    remove_backBtnClickHandler: function(handler) { this.get_events().removeHandler("backClick", handler); },
        
    set_currentAnimation: function(value)
    {
        var currentAnim = this._controller.content.FindName(value)
        this._animationEndedDelegate = Function.createDelegate(this, this._animationEnded);
        currentAnim.addEventListener("Completed", this._animationEndedDelegate);
        try
        {
            currentAnim.Stop();
            currentAnim.Begin();
        }
        catch(ex)
        {
            Sys.Debug.trace(ex.message);
        }
    },
    
    set_pageXAML: function(value)
    {
        this._contentViewport.children.Clear();
        this._contentViewport.children.Add(value);
        
        this._videoEndedDelegate = Function.createDelegate(this, this._videoEnded);
        
        this.add_exitHandler(this._exitHandler);
        
        this._fadeOutAnimation = this._controller.content.FindName("FadeOut");
        this._fadeInAnimation = this._controller.content.FindName("FadeIn");
        
        this._currentTab = this._controller.content.FindName("Wallpapers");
        
        this._raiseEvent("xamlLoaded");
    },
    
    set_tabContent: function(value)
    {
        if(this._currentTab.Name != value)
        {
            this._currentTab.Visibility = "Collapsed";
            this._currentTab = this._controller.content.FindName(value);
            this._currentTab.Visibility = "Visible";
        }
    },
        
    playVideo: function(url, args)
    {
        this._videoPlayer2.Opacity = 1;
        
        var player = this._videoPlayer2;
        
        if(args == Sys.EventArgs.Empty)
        {
            this._contentViewport.Opacity = 0;
            player.addEventListener("mediaended", Function.createDelegate(this, this._videoEndedDelegate));
            player.AutoPlay = "true";
        }
        else
        {
            player.addEventListener("mediaended", Function.createDelegate(this, this._exit));
            player.addEventListener("mediaended", args);
            player.AutoPlay = "false";
        }
                
        player.Source = url;
        this._videoPlayer1.Pause();
        
    },
    
    _animationEnded: function(sender, eventArgs) 
    {
        sender.removeEventListener("Completed", "this._animationEndedDelegate");
        this._raiseEvent("animationEnded"); 
    },
    
    _videoEnded: function(sender, eventArgs)
    {
        sender.removeEventListener("mediaended", "this._videoEndedDelegate");
        sender.AutoPlay = "false";
        sender.Pause();
        sender.Opacity = 0;
        this._contentViewport.Opacity = 1;
        this._raiseEvent("videoEnded");
    },
    
    playExitVideo: function()
    {
        this._contentViewport.Children.GetItem(0).Visibility = "Collapsed";
        var player = this._videoPlayer2;
        player.Play();
    },
    
    _exit: function(sender, eventArgs)
    {
        this._videoPlayer2.Opacity = 0;
        this._videoPlayer2.Stop();
        this.remove_exitHandler(this._exitHandler);
        this._raiseEvent("exit");
    },
    
    dispose: function()
    {
        this._exit(this, Sys.EventArgs.Empty);
    },
    
    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);
        }
    }
}

ServerTransformed.ToyBoxView.registerClass("ServerTransformed.ToyBoxView");