
if (!window.Silverlight)
    Silverlight = {};

Silverlight.createDelegate = function(instance, method) {
    return function() {
        return method.apply(instance, arguments);
    }
}

if (!window.RaiOlimpiadi)
    RaiOlimpiadi = {};

RaiOlimpiadi.Page = function() {
    this.contenitoriVideo = new Array();
    this.configElement = new RaiOlimpiadi.StartData(new Array(), false, false, 0, 0);
    this.isFirstLoadDataServer = true;
   
   //for video adv
    this.isFirstExecution = true;


    this.videoTag = "video";
    this.containerVideoTag = "containerVideo";
    this.imageTag = "image";
    this.volumeTag = "vol";
    this.labelNowPlayingTag = "labelNowPlaying";
    this.containerVideoLeaveTag = "containerVideoLeave";
    this.containerVideoEnterTag = "containerVideoEnter";
    this.labelVideoTextTag = "labelVideoText";
    this.waitTag = "wait";
    this.bufferMessageTextExTag = "bufferMsgTextEx";
    this.buttonPlayTag = "buttonPlay";
    this.buttonPlayTextTag = "buttonPlayText";
    this.buttonPreviewTag = "buttonPreview";
    this.buttonPreviewTextTag = "buttonPreviewText";
    this.buttonPlaySfondoTag = "buttonPlaySfondo";
    this.buttonPreviewSfondoTag = "buttonPreviewSfondo";

    this.currMainVideoIndex = 0;
    this.videoNum = 7;
    this.currPreviewVideo = 0;


    this.typeOfFullScreen = 0;
}

RaiOlimpiadi.Page.prototype =
{
    handleLoad: function(control, userContext, rootElement) {
        this.control = control;
        this.main = rootElement;

        this.containerVideoFullScreen = this.main.FindName("containerVideoFullScreen");
        this.videoFullScreen = this.main.FindName("videoFullScreen");
        this.backgroundPage = this.main.FindName("backgroundPage");
        this.containerSllogo = this.main.FindName("containerSllogo");

        this.logoWmv = this.main.FindName("logoWmv");
        this.logoWmv.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.handlelogoWmvClick));

        this.buttonSpeciale = this.main.FindName("buttonSpeciale");
        this.buttonSpeciale.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.handlebuttonSpecialeClick));


        this.bufferMessage = this.main.findName("bufferMsg");
        this.bufferMessageText = this.main.findName("bufferMsgText");
        this.bufferMsgTextEx = this.main.findName("bufferMsgTextEx");
        // this.bufferMsgTextExContainer = this.main.findName("bufferMsgTextExContainer");
        //this.bufferMessageTextExScale = this.main.findName("bufferMessageTextExScale");
        this.wait = this.main.findName("wait");
        this.loadingVideo = this.main.findName("loadingVideo");
        this.videoMessageControl = new RaiOlimpiadi.VideoMessageControl(this.bufferMessage, this.bufferMessageText, this.loadingVideo, this.bufferMsgTextEx, this.wait);

        this.videoBase = this.main.FindName("videoBase");
        this.videoBase.addEventListener("MediaEnded", Silverlight.createDelegate(this, this.handleMediaEnded));
        this.videoBase.addEventListener("MediaFailed", Silverlight.createDelegate(this, this.handleMediaFailed));
        this.videoBase.addEventListener("bufferingProgressChanged", Silverlight.createDelegate(this, this.handleBufferProgressChanged));
        this.videoBase.addEventListener("CurrentStateChanged", Silverlight.createDelegate(this, this.handleCurrentStateChanged));

        this.panelBackgroundElementi = this.main.FindName("panelBackgroundElementi");
        this.containerElementi = this.main.FindName("containerElementi");
        this.containerElementi.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handlecontainerElementiMouseEnter));
        this.containerElementi.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handlecontainerElementiMouseLeave));

        this.containerElementiTop = this.containerElementi["Canvas.Top"];
        this.containerElementiLeft = this.containerElementi["Canvas.Left"];

        this.containerElementiLeave = this.main.FindName("containerElementiLeave");
        this.containerElementiEnter = this.main.FindName("containerElementiEnter");

        this.containerVideoBase = this.main.FindName("containerVideoBase");
        this.labelVideo = this.main.FindName("labelVideo");
        this.labelVideo.Text = "";

        this.buttonVideoAttivo = this.main.FindName("buttonVideoAttivo");
        this.buttonVideoAttivo.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.handlebuttonVideoAttivoClick));
        this.labelbuttonVideoAttivo = this.main.FindName("labelButtonVideoAttivo");

        this.buttonPause = this.main.FindName("buttonPause");
        this.buttonPause.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.handlebuttonPauseClick));

        this.buttonPlay = this.main.FindName("buttonPlay");
        this.buttonPlay.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.handlebuttonPlayClick));


        control.content.OnFullScreenChange = Silverlight.createDelegate(this, this.handleFullScreen);

        this.buttonFull = this.main.FindName("buttonFull");
        this.buttonFull.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.handlebuttonFullClick));

        this.buttonFullParziale = this.main.FindName("buttonFullParziale");
        this.buttonFullParziale.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.handlebuttonFullParzialeClick));

        //volume controls   
        this.volumeUp = this.main.FindName("volumeUp");
        this.volumeUp.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handleVolumeUpButtonClicked));

        this.volumeDown = this.main.FindName("volumeDown");
        this.volumeDown.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handleVolumeDownButtonClicked));

        this.attachVideoElement();


        this.loadingInterfaceElement = this.main.findName("LoadingInterfaceelement");

        this.loadingInterfaceWait = this.main.findName("loadingInterfaceWait");

        this.loadingInterfaceout = this.main.findName("loadingInterfaceout");
        this.loadingInterfaceout.addEventListener("Completed", Silverlight.createDelegate(this, this.handleLoadingAnimationOutEnded));

        this.loadingInterface = this.main.findName("loadingInterface");
        this.loadingInterface.addEventListener("Completed", Silverlight.createDelegate(this, this.handleLoadingAnimationEnded));

        this.loadingInterface.Begin();

        this.loadServerData();


    },

    //Helpers
    getRandom: function() {
        thisNumber = Math.floor(Math.random() * 100000);
        return thisNumber;
    },

    //Methods

    loadServerData: function() {

        this.callBackLoadData(this);
    },

    refreshServerData: function(data) {

        try {
            this.configElement = data;

            if (this.isFirstLoadDataServer) {
                this.loadingInterfaceout.Begin();
                this.isStatusVideoOn = this.configElement.isStatusVideoOnAtStart;
                this.isFirstLoadDataServer = false;
                
            }

            if (this.configElement.timerRefresh != 0)
                setTimeout(Silverlight.createDelegate(this, this.loadServerData), this.configElement.timerRefresh);
        }
        catch (e) {
            alert("Impossibile aggiornare i dati di configurazione:" + e.Message + ". Lo scaricamento dei dati verrą riprovato entro 10 secondi");
            setTimeout(Silverlight.createDelegate(this, this.loadServerData), 10000);
        }

        this.setVideoElementData();


    },

    setVideoElementData: function(stopPreview) {
        var currEleVideo;
        var currEleImage;
        var currEleContainerVideo;
        var urlVideoFull;
        var urlVideoPreview;
        var urlImage;
        var labelVideo;


        var maxElement = this.configElement.elementiVideo.length;


        if (this.configElement.isStatusButtonVideoOn) {
            this.buttonVideoAttivo.Visibility = "Visible";
        }
        else {
            this.buttonVideoAttivo.Visibility = "Collapsed";
            this.isStatusVideoOn = false;
        }
        for (c = 0; c <= this.videoNum; c++) {


            if (c < maxElement) {
                urlVideoPreview = this.configElement.elementiVideo[c].previewUrl;
                urlVideoFull = this.configElement.elementiVideo[c].fullUrl;
                urlImage = this.configElement.elementiVideo[c].imgUrl + "?" + this.getRandom();
                labelVideo = this.configElement.elementiVideo[c].titolo;

                if (stopPreview)
                    this.contenitoriVideo[c].isPreviewActive = false;

                this.contenitoriVideo[c].initElement(urlVideoPreview, urlVideoFull, urlImage, labelVideo);


                if (this.currMainVideoIndex == c) {
                    this.contenitoriVideo[c].videoSwap();
                }

            }
            else {

                this.contenitoriVideo[c].reset();
            }

        }



        if (this.isStatusVideoOn)
            this.labelbuttonVideoAttivo.Text = "VIDEO OFF";
        else
            this.labelbuttonVideoAttivo.Text = "VIDEO ON";

        if (stopPreview)
            this.currPreviewVideo = 0;

    },

    attachVideoElement: function() {

        var currEleVideo;
        var currEleContainerVideo;
        var bufferMessage;
        var bufferMessageText;
        var loadingVideo;
        var labelNowPlaying;
        var containerVideoLeave;
        var containerVideoEnter;
        var wait;
        var bufferMessageTextEx;

        var buttonPreview;
        var buttonPreviewText;
        var buttonPlay;
        var buttonPlayText;
        var labelVideoText;
        var buttonPlaySfondo;
        var buttonPreviewSfondo;

        for (c = 0; c <= this.videoNum; c++) {
            currEleVideo = this.main.FindName(this.videoTag + c.toString());
            currEleContainerVideo = this.main.FindName(this.containerVideoTag + c.toString());
            currEleImage = this.main.FindName(this.imageTag + c.toString());
            bufferMessage = this.main.findName("bufferMsg" + c.toString());
            bufferMessageText = this.main.findName("bufferMsgText" + c.toString());
            loadingVideo = this.main.findName("loadingVideo" + c.toString());
            labelNowPlaying = this.main.findName(this.labelNowPlayingTag + c.toString());
            containerVideoLeave = this.main.findName(this.containerVideoLeaveTag + c.toString());
            containerVideoEnter = this.main.findName(this.containerVideoEnterTag + c.toString());
            wait = this.main.findName(this.waitTag + c.toString());
            bufferMessageTextEx = this.main.findName(this.bufferMessageTextExTag + c.toString());
            buttonPreview = this.main.findName(this.buttonPreviewTag + c.toString());
            buttonPreviewText = this.main.findName(this.buttonPreviewTextTag + c.toString());
            buttonPlay = this.main.findName(this.buttonPlayTag + c.toString());
            buttonPlayText = this.main.findName(this.buttonPlayTextTag + c.toString());
            labelVideoText = this.main.findName(this.labelVideoTextTag + c.toString());
            buttonPlaySfondo = this.main.findName(this.buttonPlaySfondoTag + c.toString());
            buttonPreviewSfondo = this.main.findName(this.buttonPreviewSfondoTag + c.toString());



            this.contenitoriVideo[c] = new RaiOlimpiadi.VideoElement(currEleVideo, currEleContainerVideo, currEleImage, labelVideoText, this, c, bufferMessage, bufferMessageText, loadingVideo, bufferMessageTextEx, wait, labelNowPlaying, containerVideoEnter, containerVideoLeave, buttonPreview, buttonPreviewText, buttonPreviewSfondo, buttonPlay, buttonPlayText, buttonPlaySfondo);
            this.contenitoriVideo[c].reset();

        }

    },

    //  event handler


    handlebuttonSpecialeClick: function(sender, eventArgs) {
        try {
            redirectToSpeciale();
        }
        catch (e)
       { alert("Funzione al momento non disponibile."); }

    },

    handlelogoWmvClick: function(sender, eventArgs) {
        try {
            redirectToWmp();
        }
        catch (e)
       { alert("Funzione al momento non disponibile."); }

    },


    handleLoadingAnimationOutEnded: function(sender, eventArgs) {
        this.loadingInterfaceElement.Visibility = "Collapsed";
    },

    handleLoadingAnimationEnded: function(sender, eventArgs) {
        this.loadingInterfaceWait.Begin();
    },

    handleMediaEnded: function(sender, eventArgs) {
        sender.Stop();
        sender.Play();
    },

    handleMediaFailed: function(sender, eventArgs) {
        this.videoMessageControl.writeText("Video non disponibile:" + eventArgs.errorMessage);
    },

    handleCurrentStateChanged: function(sender, eventArgs) {
        if (sender.CurrentState != "Playing")
            this.videoMessageControl.writeText(sender.CurrentState);
        else {
            this.buttonPlay.Visibility = "Collapsed";
            this.buttonPause.Visibility = "Visible";
            this.videoMessageControl.hide();
        }
    },

    handleBufferProgressChanged: function(sender, eventArgs) {
        if (sender.bufferingProgress >= 0 && sender.bufferingProgress < 1) {
            this.videoMessageControl.bufferingProgress(sender.bufferingProgress);
        }
        else {
            this.videoMessageControl.hide();
        }
    },

    handleVolumeUpButtonClicked: function(sender, args) {
        if (this.videoBase.volume < 1) {
            this.videoBase.volume += .2;

            sender.FindName(this.volumeTag + "0").visibility = "visible";

            var ele = sender.FindName(this.volumeTag + Math.round(this.videoBase.volume * 5));

            if (ele != null)
                ele.visibility = "visible"; //"Volume1 2 3...
        }
    },

    handleVolumeDownButtonClicked: function(sender, args) {
        if (Math.round(this.videoBase.volume * 5) >= 0) {

            var ele = sender.FindName(this.volumeTag + Math.round(this.videoBase.volume * 5));
            if (ele != null)
                ele.visibility = "collapsed";

            this.videoBase.volume -= .2;
        }
    },

    handlebuttonPauseClick: function(sender, eventArgs) {
        this.videoBase.Stop();
        this.buttonPlay.Visibility = "Visible";
        this.buttonPause.Visibility = "Collapsed";

    },

    handlebuttonPlayClick: function(sender, eventArgs) {
        this.videoBase.Play();
        this.buttonPlay.Visibility = "Collapsed";
        this.buttonPause.Visibility = "Visible";
    },

    handlebuttonVideoAttivoClick: function(sender, eventArgs) {
        if (this.isStatusVideoOn) {
            this.isStatusVideoOn = false;
            this.setVideoElementData(true);
        }
        else {
            this.isStatusVideoOn = true;
            this.setVideoElementData();
        }


    },

    handlecontainerElementiMouseEnter: function(sender, eventArgs) {
        if ((sender.getHost().content.fullScreen) && this.typeOfFullScreen == 0) {
            this.containerElementiEnter.Begin();

        }

    },

    handlecontainerElementiMouseLeave: function(sender, eventArgs) {
        if ((sender.getHost().content.fullScreen) && this.typeOfFullScreen == 0) {

            this.containerElementiLeave.Begin();

        }
    },


    handlebuttonFullParzialeClick: function(sender, eventArgs) {

        if (sender.getHost().content.fullScreen == false) {
            this.typeOfFullScreen = 1;
            sender.getHost().content.fullScreen = true;
        }
        else {
            if (this.typeOfFullScreen == 1) {

                sender.getHost().content.fullScreen = false;
            }
            else {
                this.typeOfFullScreen = 1;
                this.fullScreenVideoParziale(this.main);
            }
        }

    },

    handlebuttonFullClick: function(sender, eventArgs) {

        if (this.videoBase.CurrentState != "Playing")
            return;

        if (sender.getHost().content.fullScreen == false) {
            this.typeOfFullScreen = 0;
            sender.getHost().content.fullScreen = true;
        }
        else {
            if (this.typeOfFullScreen == 0) {

                sender.getHost().content.fullScreen = false;
            }
            else {
                this.typeOfFullScreen = 0;
                this.fullScreenVideo(this.main);
            }
        }

    },

    handleFullScreen: function(sender, eventArgs) {
        if (this.typeOfFullScreen == 0) {
            this.fullScreenVideo(sender);
        }
        else {
            this.fullScreenVideoParziale(sender);

        }

    },

    fullScreenVideoParziale: function(sender) {
        var plugin = sender.getHost();
        var targetWidth = plugin.content.actualWidth;
        var targetHeight = plugin.content.actualHeight;

        var ScaleFEle = sender.findName("ScaleF");


        if (sender.getHost().content.fullScreen == false) {
            ScaleFEle.ScaleX = 1;
            ScaleFEle.ScaleY = 1;
        }
        else {

            var ScaleFy = plugin.content.actualHeight / this.main.Height;
            var ScaleFx = plugin.content.actualWidth / this.main.Width;

            ScaleFEle.ScaleX = ScaleFx;
            ScaleFEle.ScaleY = ScaleFy;
        }
    },

    fullScreenVideo: function(sender) {

        var plugin = sender.getHost();
        var targetWidth = plugin.content.actualWidth;
        var targetHeight = plugin.content.actualHeight;

        this.main.Width = targetWidth;
        this.main.Height = targetHeight;
        var ScaleFEle = sender.findName("ScaleF");


        ScaleFEle.ScaleX = 1;
        ScaleFEle.ScaleY = 1;

        if (sender.getHost().content.fullScreen == false) {

            this.panelBackgroundElementi.Visibility = "Collapsed";
            this.containerVideoFullScreen.Visibility = "Collapsed";
            this.containerElementi["Canvas.ZIndex"] = 0;
            this.videoBase["Canvas.ZIndex"] = 1;
            this.containerElementi["Canvas.Top"] = this.containerElementiTop;
            this.containerElementi["Canvas.Left"] = this.containerElementiLeft;
            this.containerElementiLeave.Stop();
            this.containerElementiEnter.Stop();
            this.containerElementi.Opacity = 1;
            //this.containerElementi.Background = "#00000000";
            this.videoBase["Canvas.ZIndex"] = 0;
            this.containerSllogo.Visibility = "Visible";
        }
        else {

            var video_ratio;
            var display_ratio;

            var sourceWidthNatural = this.videoBase.NaturalVideoWidth;
            var sourceHeightNatural = this.videoBase.NaturalVideoHeight;
            this.containerVideoFullScreen.Height = targetHeight;
            this.containerVideoFullScreen.Width = targetWidth;
            this.containerVideoFullScreen["Canvas.Top"] = 0;
            this.containerVideoFullScreen["Canvas.Left"] = 0;
            this.containerSllogo.Visibility = "Collapsed";


            this.containerVideoFullScreen.Visibility = "Visible";
            //this.containerElementi.Background = "#19170101";
            this.panelBackgroundElementi.Visibility = "Visible";

            this.containerElementi["Canvas.ZIndex"] = 1;
            this.containerElementi["Canvas.Left"] = targetWidth - this.containerElementi.Width;
            this.containerElementi["Canvas.Top"] = (targetHeight / 2) - (this.containerElementi.Height / 2);
            this.containerElementiLeave.Begin();



            //TODO:  STOP VIDEO



            if ((targetWidth == 0) || (targetHeight == 0) || (sourceWidthNatural == 0) || (sourceHeightNatural == 0)) {

            }
            else {

                video_ratio = sourceWidthNatural / sourceHeightNatural;
                display_ratio = targetWidth / targetHeight;


                if (display_ratio > video_ratio) {

                    this.videoFullScreen.width = targetWidth * (sourceWidthNatural / sourceHeightNatural);
                    this.videoFullScreen.height = targetHeight;
                    this.videoFullScreen["Canvas.Left"] = targetWidth / 2 - this.videoFullScreen.width / 2;
                    this.videoFullScreen["Canvas.Top"] = 0;

                    //alert((sourceWidthNatural/sourceHeightNatural));

                }
                else {
                    this.videoFullScreen.width = targetWidth;
                    this.videoFullScreen.height = targetWidth / (sourceWidthNatural / sourceHeightNatural);

                    this.videoFullScreen["Canvas.Left"] = 0;
                    this.videoFullScreen["Canvas.Top"] = (targetHeight / 2 - this.videoFullScreen.height / 2); //+ (plugin.content.actualHeight);
                }
            }



        }

    }




}


RaiOlimpiadi.VideoElement = function(videoElement, containerVideoElement, imageElement, labelVideoText, base, videoIndex, bufferMessage, bufferMessageText, loadingVideo, bufferMessageTextEx, wait, labelNowPlaying, containerVideoEnter, containerVideoLeave, buttonPreview, buttonPreviewText, buttonPreviewSfondo, buttonPlay, buttonPlayText, buttonPlaySfondo) {
    this.videoElement = videoElement;
    this.imageElement = imageElement;
    this.videoIndex = videoIndex;
    this.base = base;
    this.labelNowPlaying = labelNowPlaying;
    this.containerVideoLeave = containerVideoLeave;
    this.containerVideoEnter = containerVideoEnter;
    this.controlElementCommand = new RaiOlimpiadi.VideoElementCommandControl(this, buttonPreview, buttonPreviewText, buttonPreviewSfondo, buttonPlay, buttonPlayText, buttonPlaySfondo);
    this.labelVideoText = labelVideoText;

    this.containerVideoElement = containerVideoElement;
    this.containerVideoElement.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.handleVideoSwapClick));
    this.containerVideoElement.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handleMouseEnter));
    this.containerVideoElement.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleMouseLeave));

    this.videoMessageControl = new RaiOlimpiadi.VideoMessageControl(bufferMessage, bufferMessageText, loadingVideo, bufferMessageTextEx, wait);
    this.videoElementControl = new RaiOlimpiadi.VideoElementControl(this.videoElement, this.videoMessageControl);
    this.isPreviewActive = false;
    this.isSelected = false;
    this.volTemp;

}



RaiOlimpiadi.VideoElement.prototype =
{

    initElement: function(urlVideoPreview, urlVideoFull, imageUrl, labelVideo) {
        this.urlVideoPreview = urlVideoPreview;
        this.urlVideoFull = urlVideoFull;
        this.imageUrl = imageUrl;
        this.labelVideo = labelVideo;
        this.labelVideoText.Text = this.labelVideo;

        this.containerVideoElement.Visibility = "Visible";

        this.containerVideoElement.Tag = this.videoIndex.toString();

        if ((this.urlVideoPreview == null) || (this.urlVideoPreview == "") || (this.isSelected == true) || ((this.base.isStatusVideoOn == false) && (this.isPreviewActive == false))) {
            this.undoPreview();
            //            this.imageElement.Source = this.imageUrl;
            //            this.imageElement.Visibility = "Visible";
            //            this.videoElement.Source = "";
            //            this.videoElement.Volume = 0;
            //            this.isPreviewActive = false;
        }
        else {

            this.doPreview();

            //            this.imageElement.Visibility = "Collapsed";
            //            this.isPreviewActive = true;
            //            if (this.videoElement.Source != this.urlVideoPreview) {
            //                this.videoElement.Source = this.urlVideoPreview;
            //                this.videoElement.Volume = 0;
            //            };
        }




    },

    isPreviewActivable: function() {
        if ((this.urlVideoPreview == null) || (this.urlVideoPreview == ""))
            return false;
        else
            return true;
    },

    isVideoFullActivable: function() {
        if ((this.urlVideoFull == null) || (this.urlVideoFull == ""))
            return false;
        else
            return true;
    },

    reset: function() {
        this.containerVideoElement.Visibility = "Collapsed";
        this.urlVideoPreview = null;
        this.urlVideoFull = null;
        this.imageUrl = null;
        this.labelVideo = "";
        this.isPreviewActive = false;
        this.isSelected = false;
    },


    undoSelectedElement: function() {
        if ((this.videoElement.Source != null) && (this.videoElement.Source != "") && ((this.base.isStatusVideoOn) || (this.isPreviewActive))) {
            this.videoElement.Play();
        }
        this.labelNowPlaying.Visibility = "Collapsed";
        this.isSelected = false;
    },

    pauseVideo: function() {
        if ((this.videoElement.Source != null) && (this.videoElement.Source != "") && ((this.base.isStatusVideoOn) || (this.isPreviewActive))) {
            this.videoElement.Stop();
        }
        this.labelNowPlaying.Visibility = "Visible";

    },

    undoPreview: function() {

        if (this.isPreviewActive)
            this.base.currPreviewVideo--;


        if ((this.isPreviewActive) && (this.base.configElement.isAudioPreview)) {
            this.base.videoBase.Volume = this.volTemp;
        }

        this.imageElement.Source = this.imageUrl;
        this.imageElement.Visibility = "Visible";
        this.videoElement.Source = "";
        this.isPreviewActive = false;
        this.videoMessageControl.hide();

    },

    doPreview: function() {

        if (this.isPreviewActive)
            return true;

        if (this.base.configElement.maxPreviewVideo <= this.base.currPreviewVideo) {
            alert("Possono essere attivati al massimo " + this.base.configElement.maxPreviewVideo + " video in preview contemporanea.");
            this.undoPreview();
            return false;
        }

        if ((this.urlVideoPreview != null) && (this.urlVideoPreview != "")) {
            this.imageElement.Visibility = "Collapsed";
            this.isPreviewActive = true;
            this.base.currPreviewVideo++;

            if (this.videoElement.Source != this.urlVideoPreview)
                this.videoElement.Source = this.urlVideoPreview;

            if (this.base.configElement.isAudioPreview) {
                this.videoElement.Volume = this.base.videoBase.Volume;
                this.volTemp = this.base.videoBase.Volume;
                this.base.videoBase.Volume = 0;
            }
        }
    },

    videoSwap: function() {

        if ((this.urlVideoFull == null) || (this.urlVideoFull == ""))
            return;

        this.isSelected = true;
        this.controlElementCommand.hide();

        var videoPos = this.containerVideoElement.Tag;

        this.base.videoBase.Opacity = 1;

        if ((this.base.videoBase.Source != this.urlVideoFull) || (this.base.videoBase.CurrentState == "Stopped")) {
            if ((this.base.isFirstExecution == true) && (this.base.configElement.initVideo != null) && (this.base.configElement.initVideo != ""))
                this.base.videoBase.Source = this.base.configElement.initVideo;
            else
                this.base.videoBase.Source = this.urlVideoFull;

            this.base.isFirstExecution = false;
            this.base.videoBase["Canvas.ZIndex"] = 1;
            this.base.videoBase["Canvas.ZIndex"] = 0;

            if (this.base.configElement.callbackVideoChange != null)
                this.base.configElement.callbackVideoChange(this.urlVideoFull);
        }

        if (this.labelVideo != null)
            this.base.labelVideo.Text = this.labelVideo;

        if (this.base.currMainVideoIndex != videoPos) {
            var prevEleVideo = this.base.contenitoriVideo[this.base.currMainVideoIndex];
            prevEleVideo.undoSelectedElement();
        }
        this.pauseVideo();

        this.base.containerVideoBase.Tag = videoPos;
        this.base.currMainVideoIndex = videoPos;

        if ((this.isPreviewActive) && (this.base.configElement.isAudioPreview)) {
            this.base.videoBase.Volume = this.volTemp;
            this.videoElement.Volume = 0;

        }
    },

    //  event handler

    handleMouseEnter: function(sender, eventArgs) {

        if (this.isSelected == false)
            this.controlElementCommand.show();

        this.containerVideoEnter.Begin();

        if ((this.isPreviewActive) && (this.isSelected == false) && (this.base.configElement.isAudioPreview)) {
            this.videoElement.Volume = this.base.videoBase.Volume;
            this.volTemp = this.base.videoBase.Volume;
            this.base.videoBase.Volume = 0;
        }

    },

    handleMouseLeave: function(sender, eventArgs) {
        this.controlElementCommand.hide();
        this.containerVideoLeave.Begin();

        if ((this.isPreviewActive) && (this.isSelected == false) && (this.base.configElement.isAudioPreview)) {
            this.base.videoBase.Volume = this.volTemp;
            this.videoElement.Volume = 0;

        }
    },

    handleVideoSwapClick: function(sender, eventArgs) {
        //this.videoSwap();
    }

}


RaiOlimpiadi.VideoElementControl = function(videoElement, videoMessageControl) {

    //    this.bufferMessage = bufferMessage;
    //    this.bufferMessageText = bufferMessageText;
    //    this.loadingVideo = loadingVideo;
    this.videoElement = videoElement;
    this.videoMessageControl = videoMessageControl;
    this.videoElement.addEventListener("MediaEnded", Silverlight.createDelegate(this, this.handleMediaEnded));
    this.videoElement.addEventListener("MediaFailed", Silverlight.createDelegate(this, this.handleMediaFailed));
    this.videoElement.addEventListener("bufferingProgressChanged", Silverlight.createDelegate(this, this.handleBufferProgressChanged));
    this.videoElement.addEventListener("CurrentStateChanged", Silverlight.createDelegate(this, this.handleCurrentStateChanged));

}



RaiOlimpiadi.VideoElementControl.prototype =
{

    //  event handler
    handleMediaEnded: function(sender, eventArgs) {
        sender.Stop();
        sender.Play();
    },

    handleMediaFailed: function(sender, eventArgs) {
        this.videoMessageControl.writeText("Video non disponibile:" + eventArgs.errorMessage);
    },

    handleCurrentStateChanged: function(sender, eventArgs) {
        if (sender.CurrentState == "Opening")
            this.videoMessageControl.writeText(sender.CurrentState);
        else {

            this.videoMessageControl.hide();
        }
    },

    handleBufferProgressChanged: function(sender, eventArgs) {
        if (sender.bufferingProgress >= 0 && sender.bufferingProgress < 1) {
            this.videoMessageControl.bufferingProgress(sender.bufferingProgress);
        }
        else {
            this.videoMessageControl.hide();
        }
    }
}



RaiOlimpiadi.VideoElementCommandControl = function(videoCommandControl, buttonPreview, buttonPreviewText, buttonPreviewSfondo, buttonPlay, buttonPlayText, buttonPlaySfondo) {
    this.videoElement = videoCommandControl;


    this.buttonPreview = buttonPreview;
    this.buttonPreview.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.handlebuttonPreviewClick));
    this.buttonPreview.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handleMouseEnterPreview));
    this.buttonPreview.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleMouseLeavePreview));

    this.buttonPlaySfondo = buttonPlaySfondo;

    this.buttonPreviewSfondo = buttonPreviewSfondo;

    this.buttonPreviewText = buttonPreviewText;

    this.buttonPlay = buttonPlay;
    this.buttonPlay.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.handlebuttonPlayClick));
    this.buttonPlay.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.handleMouseEnterPlay));
    this.buttonPlay.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.handleMouseLeavePlay));


    this.buttonPlayText = buttonPlayText;
    this.prevColor;

}



RaiOlimpiadi.VideoElementCommandControl.prototype =
{
    show: function() {



        if (this.videoElement.isPreviewActivable()) {

            if (this.videoElement.isPreviewActive == true) {
                this.buttonPreviewText.Text = "PREVIEW OFF";

            }
            else {
                this.buttonPreviewText.Text = "PREVIEW ON";
            }
            this.buttonPreview.Visibility = "Visible";
        }

        if (this.videoElement.isVideoFullActivable())
            this.buttonPlay.Visibility = "Visible";

    },

    hide: function() {
        this.buttonPreview.Visibility = "Collapsed";
        this.buttonPlay.Visibility = "Collapsed";
    },


    //handles Event   
    handlebuttonPlayClick: function(sender, eventArgs) {
        this.videoElement.videoSwap();
    },

    handleMouseEnterPlay: function(sender, eventArgs) {
        this.prevColor = this.buttonPlaySfondo.Fill;
        this.buttonPlaySfondo.Fill = "#FF00FF41";
    },

    handleMouseLeavePlay: function(sender, eventArgs) {
        this.buttonPlaySfondo.Fill = this.prevColor;
    },

    handlebuttonPreviewClick: function(sender, eventArgs) {
        if (this.videoElement.isPreviewActive == false) {
            this.videoElement.doPreview();
            this.buttonPreviewText.Text = "PREVIEW OFF";
        }
        else {
            this.buttonPreviewText.Text = "PREVIEW ON";
            this.videoElement.undoPreview();
        }

    },

    handleMouseEnterPreview: function(sender, eventArgs) {
        this.prevColor = this.buttonPreviewSfondo.Fill;
        this.buttonPreviewSfondo.Fill = "#FF00FF41";
    },

    handleMouseLeavePreview: function(sender, eventArgs) {
        this.buttonPreviewSfondo.Fill = this.prevColor;
    }

}


RaiOlimpiadi.VideoMessageControl = function(bufferMessage, bufferMessageText, loadingVideo, bufferMessageTextEx, wait) {

    this.bufferMessage = bufferMessage;
    this.bufferMessageText = bufferMessageText;
    this.loadingVideo = loadingVideo;
    this.bufferMessageTextEx = bufferMessageTextEx;
    this.wait = wait;
    this.hide();

}



RaiOlimpiadi.VideoMessageControl.prototype =
{

    hide: function() {
        this.bufferMessageText.Text = "";
        this.loadingVideo.Stop();
        this.bufferMessage.Visibility = "Collapsed";
        if (this.bufferMessageTextEx !== null)
            this.bufferMessageTextEx.Text = "";
    },

    Show: function() {
        this.loadingVideo.Stop();
        this.bufferMessage.Visibility = "Visible";
    },

    bufferingProgress: function(value) {

        if (this.loading == false)
            this.loadingStart();
        if (this.bufferMessage.Visibility = "Collapsed")
            this.bufferMessage.Visibility = "Visible";

        this.bufferMessageText.Text = Math.floor(value * 100) + "%"

        if (this.bufferMessageTextEx !== null)
            this.bufferMessageTextEx.Text = "";
    },

    loadingStart: function() {
        this.loadingVideo.Begin();
        this.wait.Visibility = "Visible";

        if (this.bufferMessage.Visibility = "Collapsed")
            this.bufferMessage.Visibility = "Visible";
    },

    loadingStop: function() {
        this.loadingVideo.Stop();
        this.wait.Visibility = "Collapsed";
    },

    writeText: function(text) {
        this.bufferMessage.Visibility = "Visible";
        this.loadingStop();
        if (this.bufferMessageTextEx !== null)
            this.bufferMessageTextEx.Text = text;
    }

}

RaiOlimpiadi.StartData = function(elementiVideo, isStatusButtonVideoOn, isStatusVideoOnAtStart, maxPreviewVideo, timerRefresh, isAudioPreview, callbackVideoChange, initVideo) {

    this.elementiVideo = elementiVideo;
    this.isStatusButtonVideoOn = isStatusButtonVideoOn;
    this.isStatusVideoOnAtStart = isStatusVideoOnAtStart;
    this.timerRefresh = timerRefresh;
    this.maxPreviewVideo = maxPreviewVideo;
    this.isAudioPreview = isAudioPreview;
    this.callbackVideoChange = callbackVideoChange;
    this.initVideo = initVideo;

}

RaiOlimpiadi.StartData.prototype =
{

}





