﻿var flagControlli = false;

 

if (!window.Video_Messaggi)
	Video_Messaggi = {};

Video_Messaggi.Page = function() 
{
}

Video_Messaggi.Page.prototype =
{
	handleLoad: function(control, userContext, rootElement) 
	{
		this.control = control;
		this.main=rootElement;



		
		// Sample event hookup:	
		rootElement.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handleMouseDown));
		
		
		
		 var playerControls={
			VolumeUp: this.main.findName("VolumePiu"),
			VolumeDown: this.main.findName("VolumeMen"),
			Play: this.main.findName("play"),
			Stop:this.main.findName("stop"),
			Pause:this.main.findName("pause"),
			Fwd:this.main.findName("fwd"),
			Rwd:this.main.findName("rwd"),
			BufferMessage:this.main.findName("bufferMsg"),
			BufferMessageScale: this.main.findName("bufferMsgScale"),
			BufferMessageText:this.main.findName("bufferMsgText"),
			Base:this.main.findName("Base"),
            BaseScaleSize : this.main.findName("BaseScaleSize"),
            FullScreen: this.main.findName("fullScreen"),
            BufferMsgTextEx:this.main.findName("bufferMsgTextEx"),
            BufferMsgTextExContainer:this.main.findName("bufferMsgTextExContainer"),
            BufferMessageTextExScale:this.main.findName("bufferMessageTextExScale"),
            LoadingVideo:this.main.findName("LoadingVideo"),
            ResizeMethod:null,
            Controlli:this.main.findName("Controlli")
			};
			
	

		var volume=new Array(this.main.findName("Vol1"),this.main.findName("Vol2"),this.main.findName("Vol3"),this.main.findName("Vol4"),this.main.findName("Vol5"),this.main.findName("Vol6"));
       
       
        //video player
        this.playerController= new Video_Messaggi.PlayerController(rootElement.findName("Media"),rootElement.findName("TxtTiming"),rootElement.findName("ProgressThumb"),rootElement.findName("ProgressBar"),rootElement.findName("DownloadProgressRect"),rootElement.findName("TitoloVideo"),playerControls,volume);

	    rootElement.getHost().content.onResize = Silverlight.createDelegate(this.playerController, this.playerController.onFullScreenChange);
	    rootElement.getHost().content.OnFullScreenChange = Silverlight.createDelegate(this.playerController, this.playerController.onFullScreenChange);

	  
	   try
	    {
	        if (liveMode=="1")
	            {
	                this.main.findName("TxtTiming").Visibility="Collapsed";
	                this.main.findName("ProgressBar").Visibility="Collapsed";
	                
	            }
	    }
	    catch(e)
	    {} 
	    
	    
	   
	   
	    try
	    {
	        if((videoURL!=null)&&(videoTitolo!=null))
	            {
	                this.playerController.Play(videoURL,videoTitolo);
	            }
	    }
	    catch(e)
	    {} 
	
	
	    
	
	 try
	    {
	        playerLoaded(this.playerController);
	    }
	    catch(e)
	    {} 
	    
	    
	    try
	    {
	        if (logoIMG!=null)
	            {
	                this.main.findName("LogoFull").Source=logoIMG;
	            }
	    }
	    catch(e)
	    {} 
	    
	    
	    	    setTimeout (Silverlight.createDelegate(this, this.showFullScreen),6000);   
	    
	
	},
	
	
	showFullScreen: function() 
	{
	     this.main.findName("AltFullScreenEnter").Begin();
	      
	
	},
		
	// Sample event handler
	handleMouseDown: function(sender, eventArgs) 
	{
		// The following line of code shows how to find an element by name and call a method on it.
		// this.control.content.findName("Storyboard1").Begin();
	}
}



Video_Messaggi.PlayerController = function(player, txtTiming,ctrlThumb,ctrlContainer,ctrlProgressRect,TitVideoElement,playerControls,volume) 
{

    

    //Buffer Message
     this.BufferMessage=playerControls["BufferMessage"];
     this.BufferMessageScale=playerControls["BufferMessageScale"];
     this.BufferMessageText=playerControls["BufferMessageText"];
     this.LoadingVideo=playerControls["LoadingVideo"]; 
     this.BufferMsgTextEx=playerControls["BufferMsgTextEx"];   
     this.BufferMsgTextExContainer=playerControls["BufferMsgTextExContainer"]; 
     this.BufferMessageTextExScale=playerControls["BufferMessageTextExScale"];
     
     //Base Controls
     this.base=playerControls["Base"],
     this.baseScaleSize=playerControls["BaseScaleSize"];

     this.ResizeMethod=playerControls["ResizeMethod"];    
     
     this.Controlli= playerControls["Controlli"];   
     this.Controlli.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleControlliMouseLeave));
	 this.Controlli.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handleControlliMouseEnter));



     this.player=player;
     this.player.autoplay=true; 
	 this.player.addEventListener("downloadProgressChanged", Silverlight.createDelegate(this, this.handleDownloadProgressChanged));
	 this.player.addEventListener("MediaFailed", Silverlight.createDelegate(this, this.handleMediaFailed));
	 this.player.addEventListener("bufferingProgressChanged", Silverlight.createDelegate(this, this.handleBufferProgressChanged));
	 this.player.addEventListener("CurrentStateChanged", Silverlight.createDelegate(this, this.handleCurrentStateChanged));
     this.player.addEventListener("MediaEnded", Silverlight.createDelegate(this, this.handleMediaEnded));
	 this.player.addEventListener("MediaOpened", Silverlight.createDelegate(this, this.handleMediaOpened));

     
     this.TitVideoElement=TitVideoElement;
     this.txtTiming=txtTiming;
     

     this.refreshTimer=setInterval(Silverlight.createDelegate(this, this.timerTick),1);
     this.thumb = ctrlThumb;
     this.thumb.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handleThumbStartDrag));
     this.thumb.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.handleThumbEndDrag));

     
     this.container=ctrlContainer;
     this.container.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handleContainerClick));
     this.container.addEventListener("MouseMove", Silverlight.createDelegate(this, this.handleContainerMouseMove));
     this.container.getHost().content.Root.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleControlMouseLeave));
    
     
     this.progressRect=ctrlProgressRect;
    
     //volume controls   
     this.VolumeUp=playerControls["VolumeUp"];
     this.VolumeUp.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handleVolumeUpButtonClicked));
   	 this.VolumeUp.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handleControlEnter));
	 this.VolumeUp.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleControlLeave));

     
     this.VolumeDown=playerControls["VolumeDown"];
     this.VolumeDown.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handleVolumeDownButtonClicked));
	 this.VolumeDown.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handleControlEnter));
	 this.VolumeDown.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleControlLeave));
    
    //controls volume cmd
     this.volume=volume;
    
    //play/pause controls
     this.play = playerControls["Play"];
	 this.play.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handlePlayClick));
	 this.play.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handleControlEnter));
	 this.play.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleControlLeave));
	 this.play.visibility = "collapsed";
     
     this.pause = playerControls["Pause"];
	 this.pause.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handlePauseClick));
	 this.pause.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handleControlEnter));
	 this.pause.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleControlLeave));
	 this.pause.visibility = "visible";
	 

	 this.stop = playerControls["Stop"];   	 
	 this.stop.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handleStopClick));
	 this.stop.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handleControlEnter));
	 this.stop.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleControlLeave));
        
        

     this.fwd = playerControls["Fwd"]; 
     this.fwd.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handleFwdClick));
	 this.fwd.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handleControlEnter));
	 this.fwd.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleControlLeave));
                  

     this.rwd = playerControls["Rwd"];
	 this.rwd.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handleRwdClick));
	 this.rwd.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handleControlEnter));
	 this.rwd.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleControlLeave));

     this.fullScreen=playerControls["FullScreen"];
	 this.fullScreen.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handlebtFullScreenClick));
	 this.fullScreen.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handleControlEnter));
	 this.fullScreen.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleControlLeave));
	
	
    

}

Video_Messaggi.PlayerController.prototype =
{
    resize: function(main) {
        //Buffering Message position
        var scalebuffMessagef = 1;

        var baseScalef;


        if (main.getHost().content.FullScreen)
            baseScalef = 0.8;
        else
            baseScalef = 1;

        scalebuffMessagef = ((main.width * baseScalef) / this.BufferMessage.width);
        scalebuffMessageExf = ((main.width * baseScalef) / this.BufferMsgTextExContainer.width);


        this.BufferMessage["Canvas.Top"] = ((this.player.Height / 2) - ((this.BufferMessage.height * scalebuffMessagef) / 2));
        this.BufferMessage["Canvas.Left"] = ((main.width / 2) - ((this.BufferMessage.width * scalebuffMessagef) / 2));
        this.BufferMessageScale.ScaleX = scalebuffMessagef;
        this.BufferMessageScale.ScaleY = scalebuffMessagef;

        this.BufferMsgTextExContainer["Canvas.Top"] = ((this.player.Height / 2) - ((this.BufferMsgTextExContainer.height * scalebuffMessageExf) / 2));
        this.BufferMsgTextExContainer["Canvas.Left"] = ((main.width / 2) - ((this.BufferMsgTextExContainer.width * scalebuffMessageExf) / 2));
        this.BufferMessageTextExScale.ScaleX = scalebuffMessageExf;
        this.BufferMessageTextExScale.ScaleY = scalebuffMessageExf;

        //calculate base message position

        //solo se in fullscreen rendiamo invisibile il pannello del titolo/invia amici
        //if(plugin.content.fullscreen==true)
        //base.opacity = 0;
        //else
        //base.opacity = 1;
        //calculate base scale
        var scaleBasefx = (main.Width / this.base.Width);
        var scaleBasefy = ((main.height * 0.2) / this.base.height);
        this.baseScaleSize.ScaleX = scaleBasefx;
        this.baseScaleSize.ScaleY = scaleBasefy;
        this.base["Canvas.Top"] = this.player.height;
    },

    Play: function(url, titolo) {


        if (titolo.length > 60) {
            titolo = titolo.substring(0, 60) + "..";
        }
		
        this.TitVideoElement.Text = titolo;

        this.player.Source = url.split(",")[0];
        //this.player.Play();

    },

    Stop: function(url) {
        this.player.Stop();
    },

    formatTime: function(ExSeconds) {
        var datetime = new Date(0, 0, 0, 0, 0, ExSeconds);
        var hours = datetime.getHours();

        var minutes = datetime.getMinutes();
        var seconds = datetime.getSeconds();

        if (minutes < 10)
            minutes = "0" + minutes;

        if (seconds < 10)
            seconds = "0" + seconds;

        if (hours < 10)
            hours = "0" + hours;

        if (hours == "00")

            return minutes + ":" + seconds;

        else

            return hours + ":" + minutes + ":" + seconds;


    },


    timerTick: function(sender, eventArgs) {
        if (this.player.currentState != "Closed" || this.player.currentState != "Opening") {

            if (!this.isDrag) {
                if ((this.player.position.seconds == 0) || (this.player.naturalDuration.seconds == 0)) return;

                this.thumb["Canvas.Left"] = (this.player.position.seconds / this.player.naturalDuration.seconds) * (this.container.width - this.thumb.width);

                var positionString = this.formatTime(this.player.position.Seconds);
                var durationString = this.formatTime(this.player.naturalDuration.Seconds);
                this.txtTiming.Text = positionString + "/" + durationString;
            }
        }
    },

    //events

    handleDownloadProgressChanged: function(sender, eventArgs) {
        this.progressRect.width = this.container.width - this.player.downloadProgress * this.container.width;
        this.progressRect["Canvas.Left"] = this.container.width - this.progressRect.width;
    },

    handleMediaFailed: function(sender, eventArgs) {
        this.BufferMsgTextEx.Text = "Video non disponibile: " + eventArgs.errorMessage;
    },

    handleCurrentStateChanged: function(sender, eventArgs) {
        if (sender.CurrentState != "Playing")
            this.BufferMsgTextEx.Text = sender.CurrentState;
        else
            this.BufferMsgTextEx.Text = "";
    },

    handleMediaEnded: function(sender, eventArgs) {
        this.handleStopClick(sender, null);
    },

    handleMediaOpened: function(sender, eventArgs) {
       // this.onFullScreenChange(sender, null);

        this.BufferMsgTextEx.Text = "";
        //this.player.Play();

    },

    handleBufferProgressChanged: function(sender, eventArgs) {
        this.BufferMsgTextEx.Text = "";
        this.BufferMessageText.Text = Math.floor(sender.bufferingProgress * 100) + "%"
        if (sender.bufferingProgress > 0 && sender.bufferingProgress < 1) {
            this.BufferMessage.visibility = "visible";
            this.BufferMessage.opacity = 1;
            this.LoadingVideo.begin();
        }
        else {
            this.LoadingVideo.stop();
            this.BufferMessage.opacity = 0;
            this.BufferMessage.visibility = "collapsed";
            //sender.findName("light_rotation").stop();
        }
    },

    handleContainerClick: function(sender, mouseEventArgs) {
        var pt = mouseEventArgs.GetPosition(this.container);


        if (this.player.canSeek) {
            var xPosition = (pt.x / (this.container.width)) * this.player.naturalDuration.seconds;

            var actualPos = this.player.Position;
            actualPos.seconds = xPosition;

            if (actualPos.seconds >= this.player.NaturalDuration.Seconds) {

                actualPos.seconds = 0;
            }

            this.player.Position = actualPos;

        }

    },

    handleMuteButtonClicked: function(sender, args) {
        this.player.isMuted = !this.player.isMuted;

        if (this.player.isMuted) {
            this.muteIcon.visibility = "visible"; //"MuteIcon"
        }
        else {
            this.muteIcon.visibility = "collapsed";
        }
    },

    handleVolumeUpButtonClicked: function(sender, args) {
        if (this.player.volume < 1) {
            this.player.volume += .2;

            this.volume[0].visibility = "visible";

            var ele = this.volume[Math.round(this.player.volume * 5)];

            if (ele != null)
                ele.visibility = "visible"; //"Volume1 2 3...
        }
    },

    handleVolumeDownButtonClicked: function(sender, args) {
        if (Math.round(this.player.volume * 5) >= 0) {

            var ele = this.volume[Math.round(this.player.volume * 5)];
            if (ele != null)
                ele.visibility = "collapsed";

            this.player.volume -= .2;
        }
    },

    handleThumbStartDrag: function(sender, args) {

        if (this.player.canSeek) {
            this.isDrag = true;
            // Ensure this object is the only one receiving mouse events.
            sender.captureMouse();
        }
    },

    handleThumbEndDrag: function(sender, args) {
        if (this.isDrag) {
            // Allow all objects to receive mouse events.
            this.handleContainerClick(sender, args);
            sender.releaseMouseCapture();
            this.isDrag = false;
        }
    },

    handleContainerMouseMove: function(sender, args) {
        if (this.isDrag) {
            currX = args.getPosition(this.container).x;

            if ((currX >= 0) && (currX <= (this.container.width - this.thumb.width)))
                this.thumb["Canvas.Left"] = currX;


        }

    },

    handleControlMouseLeave: function(sender, args) {
        this.isDrag = false;
        sender.releaseMouseCapture();
    },

    //events controls
    handlePlayClick: function(sender, eventArgs) {
        this.pause.visibility = "visible";
        sender.visibility = "collapsed";
        this.player.play();
    },

    handlePauseClick: function(sender, eventArgs) {

        this.play.visibility = "visible";
        sender.visibility = "collapsed";
        this.player.pause();
    },

    handleStopClick: function(sender, eventArgs) {
        this.play.visibility = "visible";
        this.pause.visibility = "collapsed";
        this.player.stop();
        //this.blnComparsa=true;
    },


    handleFwdClick: function(sender, eventArgs) {

        if (this.player.canSeek) {

            var actualPos = this.player.Position;
            actualPos.seconds = actualPos.seconds + 5;

            if (actualPos.seconds >= this.player.NaturalDuration.Seconds) {

                actualPos.seconds = 0;
            }

            this.player.Position = actualPos;

        }
    },


    handleRwdClick: function(sender, eventArgs) {

        if (this.player.canSeek) {

            var actualPos = this.player.Position;
            actualPos.seconds = actualPos.seconds - 5;

            if (actualPos.seconds <= 0) {
                actualPos.seconds = 0;
            }

            this.player.Position = actualPos;

        }
    },


    handleControlLeave: function(sender, eventArgs) {
        sender.findName(sender.name + "Leave").begin();
    },
    handleControlEnter: function(sender, eventArgs) {
        sender.findName(sender.name + "Enter").begin();
    },

    handleControlliMouseEnter: function(sender, eventArgs) {
        if (sender.getHost().content.fullScreen) {
            sender.Opacity = 0.7;

        }
    },

    handleControlliMouseLeave: function(sender, eventArgs) {
        if (sender.getHost().content.fullScreen) {
            sender.Opacity = 0;

        }
    },

    handlebtFullScreenClick: function(sender, eventArgs) {

        if (sender.getHost().content.fullScreen)
            sender.getHost().content.fullScreen = false;
        else {
            // if (this.player.canSeek) 
            if (this.player.currentState == "Playing") {
                sender.getHost().content.fullScreen = true;
            }
        }
    },



    onFullScreenChange: function(sender, eventArgs) {

        var plugin = sender.getHost();
        var main = sender.findName("Page");
        var player = sender.findName("Media");

        var targetWidth = plugin.content.actualWidth;
        var targetHeight = plugin.content.actualHeight;

        var ScaleFEle = sender.findName("ScaleF");
        var ContenitoreTitoloVideo = sender.findName("ContenitoreTitoloVideo");
        var Controlli = sender.findName("Controlli");
        var Video = sender.findName("Video");
        var ScaleFEleContainer = sender.findName("ScaleFContainerScale");
        var ContainerScale = sender.findName("ContainerScale");


        if (sender.getHost().content.fullScreen == false) {
            Controlli.Opacity = 1;

            player.Height = targetHeight - Controlli.Height;
            player.Width = targetWidth;
            player.Stretch = "Uniform";
            player["Canvas.Left"] = 0;
            player["Canvas.Top"] = 0;
            Video.Height = targetHeight - Controlli.Height;
            Video.Width = targetWidth;
           
        }
        else {

            Controlli.Opacity = 0;

           
            Video.Height = targetHeight;
            Video.Width = targetWidth;

            var video_ratio;
            var display_ratio;

            var sourceWidthNatural = player.NaturalVideoWidth;
            var sourceHeightNatural = player.NaturalVideoHeight;


            player.Stretch = "Uniform";



            if ((targetWidth == 0) || (targetHeight == 0) || (sourceWidthNatural == 0) || (sourceHeightNatural == 0)) {




            }
            else {

                video_ratio = sourceWidthNatural / sourceHeightNatural;
                display_ratio = targetWidth / targetHeight;


                if (display_ratio > video_ratio) {

                    player.width = targetWidth * (sourceWidthNatural / sourceHeightNatural);
                    player.height = targetHeight;
                    player["Canvas.Left"] = targetWidth / 2 - player.width / 2;
                    player["Canvas.Top"] = 0;

                    //alert((sourceWidthNatural/sourceHeightNatural));

                }
                else {
                    player.width = targetWidth;
                    player.height = targetWidth / (sourceWidthNatural / sourceHeightNatural);

                    player["Canvas.Left"] = 0;
                    player["Canvas.Top"] = targetHeight / 2 - player.height / 2; //+ (plugin.content.actualHeight);
                }
            }


        }

        //RESIZE BUFFERING MESSAGE

        var ScaleFy = targetHeight / ContainerScale.Height;
        var ScaleFx = targetWidth / ContainerScale.Width;

        ScaleFEleContainer.ScaleX = ScaleFx;
        ScaleFEleContainer.ScaleY = ScaleFy;

        //RESIZE CONTROLLI   

        var ProgressBar = sender.findName("ProgressBar");

        var ProgressBackground = sender.findName("ProgressBackground");
        var DownloadProgressRect = sender.findName("DownloadProgressRect");
        var GreenProgressRect = sender.findName("greenProgressRect");
        var DownloadProgressContainer = sender.findName("DownloadProgressContainer");


        var newBarWidth = (targetWidth) - (main.width - ProgressBar.Width);


        ProgressBar.width = newBarWidth;
        DownloadProgressContainer.width = newBarWidth;
        GreenProgressRect.width = newBarWidth;
        ProgressBackground.width = newBarWidth;
        this.handleDownloadProgressChanged(null, null);


        calculateNewPosition(sender.findName("fullScreen"), main.Width, plugin.content.actualWidth);
        calculateNewPosition(sender.findName("AltFullscreen"), main.Width, plugin.content.actualWidth);

        Controlli.Width = targetWidth;
        Controlli["Canvas.Top"] = targetHeight - Controlli.Height;
        Controlli["Canvas.Left"] = 0;

        main.height = targetHeight;
        main.width = targetWidth;

    }
}
        
function calculateNewPosition(object,initWidth,finalWidth)
{
    var actual= object["Canvas.Left"] ;
   var distanza= (initWidth - (actual + object.Width));
   
   object["Canvas.Left"] = (finalWidth - (distanza + object.Width));

}              
        
        
         





		function createSilverlight()
		{
			var scene = new Video_Messaggi.Page();
			Silverlight.createObjectEx({
				source: "/dl/silverlight/Page.xaml",
				parentElement: document.getElementById("Video"),
				id: "SilverlightControl",
				properties: {
					width: "100%",
					height: "100%",
					version: "1.0"
				},
				events: {
					onLoad: Silverlight.createDelegate(scene, scene.handleLoad),
					onError: function(sender, args) {
						var errorDiv = document.getElementById("errorLocation");
						if (errorDiv != null) {
							var errorText = args.errorType + "- " + args.errorMessage;
									
							if (args.ErrorType == "ParserError") {
								errorText += "<br>File: " + args.xamlFile;
								errorText += ", line " + args.lineNumber;
								errorText += " character " + args.charPosition;
							}
							else if (args.ErrorType == "RuntimeError") {
								errorText += "<br>line " + args.lineNumber;
								errorText += " character " +  args.charPosition;
							}
							errorDiv.innerHTML = errorText;
						}	
					}
				}
			});
		}


		if (!window.Silverlight) 
			Silverlight = {};

		Silverlight.createDelegate = function(instance, method) {
			return function() {
				return method.apply(instance, arguments);
			}
		}