if (!window.Lumines)
	window.Lumines = {};

Lumines.Scene = function() 
{
}

Lumines.Scene.prototype =
{
	handleLoad: function(control, userContext, rootElement) 
	{
        this.backgroundImage = rootElement.findName("backgroundImage");
        this.blurImage = rootElement.findName("blurImage");
        this.media = rootElement.findName("media");
        this.downloadProgressRect = rootElement.findName("downloadProgressRect");
        this.playbackProgressRect = rootElement.findName("playbackProgressRect");
        this.playPauseButton = rootElement.findName("playPauseButton");
        this.pauseIcon = rootElement.findName("pauseIcon");
        this.playIcon = rootElement.findName("playIcon");
        this.timer = rootElement.findName("timer");
        this.progressThumb = rootElement.findName("progressThumb");
        this.seekRect = rootElement.findName("seekRect");
        this.bufferingIcon = rootElement.findName("bufferingIcon");
        this.bufferingAnimation = rootElement.findName("bufferingAnimation");
        this.downloader = rootElement.getHost().createObject("Downloader");
        this.endReached = false;
        
        // Hook play / pause button events
        this.playPauseButton.addEventListener("mouseLeftButtonUp", Sys.Silverlight.createDelegate(this, this.playClick));
        this.playPauseButton.addEventListener("mouseLeftButtonDown", Sys.Silverlight.createDelegate(this, this.playMouseDown));
        this.playPauseButton.addEventListener("mouseEnter", Sys.Silverlight.createDelegate(this, this.playMouseEnter));
        this.playPauseButton.addEventListener("mouseLeave", Sys.Silverlight.createDelegate(this, this.playMouseLeave));
        
        // Hook media events
        this.media.addEventListener("downloadProgressChanged", Sys.Silverlight.createDelegate(this, this.mediaDownloadProgressChanged));
        this.media.addEventListener("currentStateChanged", Sys.Silverlight.createDelegate(this, this.mediaCurrentStateChanged));
        this.media.addEventListener("mediaEnded", Sys.Silverlight.createDelegate(this, this.mediaEnded));
        this.seekRect.addEventListener("mouseLeftButtonDown", Sys.Silverlight.createDelegate(this, this.seekRectClicked));
        this.media.autoPlay = "false";
        
        // Hook timer completed event
        this.timer.addEventListener("completed", Sys.Silverlight.createDelegate(this, this.timerCompleted));
        
        // Hook animation events
        var progressCollapse = rootElement.findName("progressCollapse");
        var progressExpand = rootElement.findName("progressExpand");
        
        progressExpand.addEventListener("completed", Sys.Silverlight.createDelegate(this, this.expandCompleted));
	    progressCollapse.addEventListener("completed", Sys.Silverlight.createDelegate(this, this.collapseCompleted));
	    
	    progressExpand.begin();
	},
	
    expandCompleted: function(sender, args) {
   	    // Register eventhandlers
	    this.downloader.addEventListener("downloadProgressChanged", Sys.Silverlight.createDelegate(this, this.downloadProgressChanged));
	    this.downloader.addEventListener("completed", Sys.Silverlight.createDelegate(this, this.downloadCompleted));
      	
  	    this.downloader.open("Get", "WoodSmall.jpg", true);
  	    this.downloader.send();
    },

    mediaDownloadProgressChanged: function(sender, args) {
        this.downloadProgressRect.width = this.media.downloadProgress * 800;
    },

    mediaCurrentStateChanged: function(sender, args) {
        if (this.media.currentState == "Playing") {
            this.pauseIcon.opacity = 1;
            this.playIcon.opacity = 0;
            this.bufferingIcon.opacity = 0;
            this.bufferingAnimation.stop();
        }
        else if (this.media.currentState == "Paused" || this.media.currentState == "Stopped") {
            this.pauseIcon.opacity = 0;
            this.playIcon.opacity = 1;
            this.bufferingIcon.opacity = 0;
            this.bufferingAnimation.stop();
        } 
        else if (this.media.currentState == "Buffering") {
            this.bufferingIcon.opacity = 1;
            this.pauseIcon.opacity = 0;
            this.playIcon.opacity = 0;
            this.bufferingAnimation.begin();
        }
    },

    mediaEnded: function(sender, args) {
        this.media.pause();
        this.endReached = true;
    },

    seekRectClicked: function(sender, args) {
        var timeSpan = this.media.position;
        timeSpan.seconds = ((args.getPosition(null).x - 25) / 640) * this.media.naturalDuration.seconds; 
        this.media.position = timeSpan;
        
        if (this.media.currentState == "Paused" || this.media.currentState == "Buffering") {
            this.timer.begin();
        }
    },

    downloadProgressChanged: function(sender, args) {
        if (sender.uri == "WoodSmall.jpg") {
            sender.findName("progressRect").width = sender.downloadProgress * 65;
        }
        else {
            sender.findName("progressRect").width = 65 + sender.downloadProgress * 65;
        }
    },

    downloadCompleted: function(sender, args) {
        if (sender.uri == "WoodSmall.jpg") {
            this.backgroundImage.setSource(this.downloader, "");
            this.downloader.open("Get", "WoodBlurSmall.jpg", true);
  	        this.downloader.send();
        }
        else {
            this.blurImage.setSource(this.downloader, "");
            var progressCollapse = sender.findName("progressCollapse");
            
            this.media.source = "Lumines111.wmv";
            progressCollapse.begin();   
        }
    },

    collapseCompleted: function(sender, args) {
        var imageFadeIn = sender.findName("imageFadeIn");
        imageFadeIn.addEventListener("completed", Sys.Silverlight.createDelegate(this, this.imageFadeInCompleted));
        imageFadeIn.begin();
    },

    imageFadeInCompleted: function(sender, args) {
        var windowExpand = sender.findName("windowExpand");
        windowExpand.addEventListener("completed", Sys.Silverlight.createDelegate(this, this.windowExpandCompleted));
        windowExpand.begin();
    },

    windowExpandCompleted: function(sender, args) {
        var imageBlur = sender.findName("imageBlur");
        imageBlur.begin();
    },

    timerCompleted: function(sender, args) {
        this.playbackProgressRect.width = (this.media.position.seconds / this.media.naturalDuration.seconds) * 800;
        this.progressThumb["canvas.left"] = ((this.media.position.seconds / this.media.naturalDuration.seconds) * 790) + 1;
        
        var datetime = new Date(0, 0, 0, 0, 0, this.media.position.seconds)
        var minutes = datetime.getMinutes();
        var seconds = datetime.getSeconds();
        
        if (seconds < 10) {
            seconds = "0" + seconds;
        }
          
        for (var i = 0; i < 2; i++) {
            sender.findName("progressText" + i).text = minutes + ":" + seconds + " / 1:04";
        }
            
        if (this.media.currentState == "Playing" || this.media.currentState == "Buffering") {
            this.timer.begin();
        }
    },

    playClick: function(sender, eventArgs) {
        if (this.media.currentState != "Buffering") {
            sender.findName("playPauseRelease").begin();
            if (this.media.currentState == "Playing") {
                this.media.pause();
            }
            else if (this.media.currentState == "Paused" || this.media.currentState == "Stopped") {
                if (this.endReached) {
                    this.media.stop();
                    this.endReached = false;
                }
                this.media.play();
                this.timer.begin();
            }
        }
    },

    playMouseDown: function(sender, eventArgs) {
        if (this.media.currentState != "Buffering") {
            sender.findName("playPausePress").begin();
        }
    },

    playMouseLeave: function(sender, eventArgs) {
        if (this.media.currentState != "Buffering") {
            sender.findName("playPauseLeave").begin();
        }
    },

    playMouseEnter: function(sender, eventArgs) {
        if (this.media.currentState != "Buffering") {
            sender.findName("playPauseEnter").begin();
        }
    }
}