
MediasitePlayer = function() { }

MediasitePlayer.prototype = {
    _type: 0,
    _element: null,

    CurrentSlideNumber: -1,
    CurrentFullSizeImage: null,
    DynamicAdd: false,
    PresentationEnded: false,
    IsPreview: false,
    OpenReported: false,
    ShowSlides: true,

    DefaultPopupWindowWidth: 1024,
    DefaultPopupWindowHeight: 768,

    OnBodyLoad: function() {
        if (!this.IsPreview) {
            this.LoadMediaPlayer();
        }
        else {
            $('PlayerSpeedControl').style.display = 'none';
            $('btnFullScreen').style.display = 'none';
        }
        $('PlayerMask').style.display = 'none';
    },

    OnLoad: function() {
        this.PlayerDetect = new SfKernel.PlayerDetect();
        loadingMask('loadingImage', 10, 10);

        var playerMode = SfKernel.GetQueryStringValue("mode");
        if (playerMode != null && playerMode.toLowerCase() == "skinpreview") {
            this.IsPreview = true;
        }
        if (LayoutOptions.SlideHeight == 0 || LayoutOptions.SlideWidth == 0) {
            this.ShowSlides = false;
        }

        LayoutOptions.OnLoad();

        this.LoadThemeStylesheet();
        this.BrowserHacks();
        this.ResizeWindow();

        var BannerLoaderInstance = new LoadBanners();
        BannerLoaderInstance.Banner = new Array('AdBanner', 'TitleBanner');
        if (LayoutOptions.Images["VendorLogo"]) {
            if (!$('VendorLogo')) {
                var contentElement = $('MediasitePlayerForm');
                var vendorLogoContainer = document.createElement('div');
                vendorLogoContainer.setAttribute('id', 'VendorLogo');
                vendorLogoContainer.setAttribute('height', LayoutOptions.Images["VendorLogo"].Height);
                vendorLogoContainer.setAttribute('width', LayoutOptions.Images["VendorLogo"].Width);
                contentElement.appendChild(vendorLogoContainer);
            }
            BannerLoaderInstance.Banner = new Array('AdBanner', 'TitleBanner', 'VendorLogo');
        }
        BannerLoaderInstance.OnLoad();

        var PlayerNotStartedImageInstance = new SkinImage('PlayerNotStarted');
        PlayerNotStartedImageInstance.ImageSRC = LayoutOptions.Images['PlayerNotStarted'].ImageFilename;
        PlayerNotStartedImageInstance.ImageHref = LayoutOptions.Images['PlayerNotStarted'].ImageUrl;
        PlayerNotStartedImageInstance.ImageHeight = LayoutOptions.Images['PlayerNotStarted'].Height;
        PlayerNotStartedImageInstance.ImageWidth = LayoutOptions.Images['PlayerNotStarted'].Width;
        PlayerNotStartedImageInstance.Alt = Localization.PlayerLayoutResource.NotStarted;
        PlayerNotStartedImageInstance.OnLoad();

        if (LayoutOptions.Images['PlayerAudioOnly']) {
            var AudioOnlyImageInstance = new SkinImage('PlayerAudioOnly');
            AudioOnlyImageInstance.ImageSRC = LayoutOptions.Images['PlayerAudioOnly'].ImageFilename;
            AudioOnlyImageInstance.ImageHref = LayoutOptions.Images['PlayerAudioOnly'].ImageUrl;
            AudioOnlyImageInstance.ImageHeight = LayoutOptions.Images['PlayerAudioOnly'].Height;
            AudioOnlyImageInstance.ImageWidth = LayoutOptions.Images['PlayerAudioOnly'].Width;
            AudioOnlyImageInstance.Alt = Localization.PlayerLayoutResource.AudioOnly;
            AudioOnlyImageInstance.OnLoad();
        }

        this.EventManager = new EventManager();
        this.OptionsManager = new OptionsManager();

        this.PopupWindows = new Object();
        this.PopupWindows.FullSize = null;
        this.PopupWindows.PreviewSlide = null;
        this.PopupWindows.Polls = null;

        this.presentationCard = new PresentationCardPanel("PresentationCardPanelInstance", window, "PresentationCardArea");
        this.presentationCard.ImageBase = LayoutOptions.ThemeImageBase + '/PresentationCard';
        this.presentationCard.ToolTipExpand = Localization.Common.Expand;
        this.presentationCard.ToolTipCollapse = Localization.Common.Collapse;
        this.presentationCard.AllowZooming = true;
        this.presentationCard.Mouseover_Width = "50px";
        this.presentationCard.Mouseover_Height = "65px";
        this.presentationCard.OnLoad();

        if ($('btnAskButton')) {
            this.btnAskInstance = new AskButtonPanel();
            this.btnAskInstance.button = new SfUI.Button('btnAskButton');
            this.btnAskInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnAskNormal.gif');
            this.btnAskInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnAskOver.gif');
            this.btnAskInstance.button.SetPressedImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnAskPressed.gif');
            this.btnAskInstance.button.SetDisabledImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnAskDisabled.gif');
            this.btnAskInstance.button.Enable(false);
            this.btnAskInstance.OnLoad();
        }
        if ($('btnLinks')) {
            this.btnLinksInstance = new LinksButtonPanel();
            this.btnLinksInstance.button = new SfUI.Button('btnLinks');
            this.btnLinksInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnLinksNormal.gif');
            this.btnLinksInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnLinksOver.gif');
            this.btnLinksInstance.button.SetDisabledImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnLinksDisabled.gif');
            this.btnLinksInstance.button.Enable(false);
            this.btnLinksInstance.OnLoad();
        }
        if ($('btnPoll')) {
            this.btnPollInstance = new PollButtonPanel();
            this.btnPollInstance.button = new SfUI.Button('btnPoll');
            this.btnPollInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnPollResultsNormal.gif');
            this.btnPollInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnPollResultsOver.gif');
            this.btnPollInstance.button.SetPressedImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnPollResultsPressed.gif');
            this.btnPollInstance.button.SetDisabledImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnPollResultsDisabled.gif');
            this.btnPollInstance.button.Enable(false);
            this.btnPollInstance.OnLoad();
        }
        if ($('btnEmail')) {
            this.btnEmailInstance = new EmailButtonArea();
            this.btnEmailInstance.button = new SfUI.Button('btnEmail');
            this.btnEmailInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnEmailNormal.gif');
            this.btnEmailInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnEmailOver.gif');
            this.btnEmailInstance.button.SetDisabledImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnEmailDisabled.gif');
            this.btnEmailInstance.button.Enable(false);
            this.btnEmailInstance.OnLoad();
        }
        if ($('btnHelp')) {
            this.btnHelpInstance = new HelpButtonArea();
            this.btnHelpInstance.button = new SfUI.Button('btnHelp');
            this.btnHelpInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnHelpNormal.gif');
            this.btnHelpInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnHelpOver.gif');
            this.btnHelpInstance.button.SetPressedImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnHelpPressed.gif');
            this.btnHelpInstance.button.SetDisabledImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnHelpDisabled.gif');
            this.btnHelpInstance.button.Enable(false);
            this.btnHelpInstance.OnLoad();
        }

        if ($('SlideTicker') && this.ShowSlides) {
            this.btnPreviousSlideInstance = new PreviousSlideButtonArea('btnPreviousSlideInstance');
            this.btnPreviousSlideInstance.button = new SfUI.Button('btnPreviousSlide');
            this.btnPreviousSlideInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnPrevNormal.gif');
            this.btnPreviousSlideInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnPrevOver.gif');
            this.btnPreviousSlideInstance.button.SetPressedImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnPrevPressed.gif');
            this.btnPreviousSlideInstance.button.SetDisabledImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnPrevDisabled.gif');
            this.btnPreviousSlideInstance.OnLoad();

            this.btnNextSlideInstance = new NextSlideButtonArea('btnNextSlideInstance');
            this.btnNextSlideInstance.button = new SfUI.Button('btnNextSlide');
            this.btnNextSlideInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnNextNormal.gif');
            this.btnNextSlideInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnNextOver.gif');
            this.btnNextSlideInstance.button.SetPressedImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnNextPressed.gif');
            this.btnNextSlideInstance.button.SetDisabledImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnNextDisabled.gif');
            this.btnNextSlideInstance.OnLoad();

            this.SlideNumberPanelInstance = new SlideNumberPanel("SlideNumberPanelInstance", window, "SlideNumberArea");
            this.SlideNumberPanelInstance.SlideText = Localization.Common.Slide;
            this.SlideNumberPanelInstance.OfText = Localization.Common.Of;
            this.SlideNumberPanelInstance.DefaultText = ' ';
        }

        if ($('SlideTabs')) {
            this.btnSlideShowInstance = new SlideShowButtonArea('btnSlideShow');
            this.btnSlideShowInstance.button = new SfUI.Button('btnSlideShow');
            this.btnSlideShowInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnSlideShowNormal.gif');
            this.btnSlideShowInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnSlideShowOver.gif');
            this.btnSlideShowInstance.button.SetButtonType(SfUI.ButtonType.Check);
            this.btnSlideShowInstance.button.SetChecked(true);
            this.btnSlideShowInstance.button.SetNormalImage(1, LayoutOptions.ThemeImageBase + '/CommandBar/btnSlideShowCheckedNormal.gif');
            this.btnSlideShowInstance.button.SetOverImage(1, LayoutOptions.ThemeImageBase + '/CommandBar/btnSlideShowCheckedOver.gif');
            this.btnSlideShowInstance.Enabled = true;
            this.btnSlideShowInstance.TooltipId = Localization.Common.SlideShow;
            this.btnSlideShowInstance.ControlArea = $('CurrentSlideArea');
            this.btnSlideShowInstance.OnLoad();

            this.btnSlideListInstance = new SlideShowButtonArea('btnSlideList');
            this.btnSlideListInstance.button = new SfUI.Button('btnSlideList');
            this.btnSlideListInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnSlideNavNormal.gif');
            this.btnSlideListInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/CommandBar/btnSlideNavOver.gif');
            this.btnSlideListInstance.button.SetButtonType(SfUI.ButtonType.Check);
            this.btnSlideListInstance.button.SetChecked(false);
            this.btnSlideListInstance.button.SetNormalImage(1, LayoutOptions.ThemeImageBase + '/CommandBar/btnSlideNavCheckedNormal.gif');
            this.btnSlideListInstance.button.SetOverImage(1, LayoutOptions.ThemeImageBase + '/CommandBar/btnSlideNavCheckedOver.gif');
            this.btnSlideListInstance.Enabled = true;
            this.btnSlideListInstance.TooltipId = Localization.Common.SlideList;
            this.btnSlideListInstance.ControlArea = $('CurrentSlideArea');
            this.btnSlideListInstance.OnLoad();
        }

        if ($('StatusBar')) {
            this.PlayerStatusPanelInstance = new PlayerStatusPanel("PlayerStatusPanelInstance", window, "PlayerStatusArea");
            this.PlayerStatusPanelInstance.OnLoad();

            this.PlayerPositionPanelInstance = new PlayerPositionPanel("PlayerPositionPanelInstance", window, "PlayerPositionArea");
            this.PlayerPositionPanelInstance.OnLoad();
        }

        if ($('PlayerControls')) {
            this.btnPlayPauseInstance = new PlayPauseButtonArea("btnPlayPauseInstance", window, "btnPlayPause");
            this.btnPlayPauseInstance.button = new PlayPauseButton("btnPlayPause", "mPlayer.btnPlayPauseInstance");
            this.btnPlayPauseInstance.button.PlayImageDetails.Over = LayoutOptions.ThemeImageBase + '/Player/Buttons/btnPlayOver.gif';
            this.btnPlayPauseInstance.button.PlayImageDetails.Normal = LayoutOptions.ThemeImageBase + '/Player/Buttons/btnPlayNormal.gif';
            this.btnPlayPauseInstance.button.PlayImageDetails.Disabled = LayoutOptions.ThemeImageBase + '/Player/Buttons/btnPlayDisabled.gif';
            this.btnPlayPauseInstance.button.PauseImageDetails.Over = LayoutOptions.ThemeImageBase + '/Player/Buttons/btnPauseOver.gif';
            this.btnPlayPauseInstance.button.PauseImageDetails.Normal = LayoutOptions.ThemeImageBase + '/Player/Buttons/btnPauseNormal.gif';
            this.btnPlayPauseInstance.button.PauseImageDetails.Disabled = LayoutOptions.ThemeImageBase + '/Player/Buttons/btnPauseDisabled.gif';
            this.btnPlayPauseInstance.button.StopImageDetails.Over = LayoutOptions.ThemeImageBase + '/Player/Buttons/btnStopOver.gif';
            this.btnPlayPauseInstance.button.StopImageDetails.Normal = LayoutOptions.ThemeImageBase + '/Player/Buttons/btnStopNormal.gif';
            this.btnPlayPauseInstance.button.StopImageDetails.Disabled = LayoutOptions.ThemeImageBase + '/Player/Buttons/btnStopDisabled.gif';
            this.btnPlayPauseInstance.button.ToolTipPlay = Localization.Buttons.Play;
            this.btnPlayPauseInstance.button.ToolTipPause = Localization.Buttons.Pause;
            this.btnPlayPauseInstance.button.ToolTipStop = Localization.Buttons.Stop;
            this.btnPlayPauseInstance.button.IsEnabled = false;
            this.btnPlayPauseInstance.OnLoad();

            this.btnSkipbackInstance = new SkipbackButtonArea("btnSkipbackInstance", window, "btnSkipback");
            this.btnSkipbackInstance.button = new SfUI.Button('btnSkipback');
            this.btnSkipbackInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/Player/Buttons/btnSkipbackNormal.gif');
            this.btnSkipbackInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/Player/Buttons/btnSkipbackOver.gif');
            this.btnSkipbackInstance.button.SetDisabledImage(0, LayoutOptions.ThemeImageBase + '/Player/Buttons/btnSkipbackDisabled.gif');
            this.btnSkipbackInstance.button.Enable(false);
            this.btnSkipbackInstance.OnLoad();

            this.btnMuteInstance = new MuteButtonArea("btnMuteInstance", window, "btnMute");
            this.btnMuteInstance.button = new SfUI.Button('btnMute');
            this.btnMuteInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/Player/Volume/btnMuteNormal.gif');
            this.btnMuteInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/Player/Volume/btnMuteOver.gif');
            this.btnMuteInstance.button.SetDisabledImage(0, LayoutOptions.ThemeImageBase + '/Player/Volume/btnMuteDisabled.gif');
            this.btnMuteInstance.button.SetButtonType(SfUI.ButtonType.Check);
            this.btnMuteInstance.button.SetNormalImage(1, LayoutOptions.ThemeImageBase + '/Player/Volume/btnMuteCheckedNormal.gif');
            this.btnMuteInstance.button.SetOverImage(1, LayoutOptions.ThemeImageBase + '/Player/Volume/btnMuteCheckedOver.gif');
            this.btnMuteInstance.button.Enable(false);
            this.btnMuteInstance.OnLoad();

            this.btnFullScreenInstance = new FullScreenButtonArea("btnFullScreenInstance", window, "btnFullScreen");
            this.btnFullScreenInstance.button = new SfUI.Button('btnFullScreen');
            this.btnFullScreenInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/Player/Buttons/btnFullScreenNormal.gif');
            this.btnFullScreenInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/Player/Buttons/btnFullScreenOver.gif');
            this.btnFullScreenInstance.button.SetDisabledImage(0, LayoutOptions.ThemeImageBase + '/Player/Buttons/btnFullScreenDisabled.gif');
            this.btnFullScreenInstance.button.Enable(false);
            this.btnFullScreenInstance.OnLoad();
        }

        if ($('CurrentSlideArea') && this.ShowSlides) {
            this.CurrentSlidePanelInstance = new CurrentSlidePanel("mPlayer.CurrentSlidePanelInstance", window, "CurrentSlideArea");
            this.CurrentSlidePanelInstance.ViewportWidth = Math.floor(LayoutOptions.SlideWidth / 3);
            this.CurrentSlidePanelInstance.ViewportHeight = Math.floor(LayoutOptions.SlideHeight / 3);
            this.CurrentSlidePanelInstance.OnLoad();
        }

        ChangePosition.OnLoad();
        $('btnCC').style.display = 'none';

        if (!this.IsPreview) {
            this.OnDataLoad();
        }
    },

    OnDataLoad: function() {
        Manifest.OnLoad();

        if (Manifest.CaptionsFile.length > 0) {
            document.writeln('<script src="' + Manifest.CaptionsFile + '" type="text/javascript"></script>');
        }

        $('ApplicationVersionArea').title = 'Mediasite ' + Manifest.Version;

        if (this.presentationCard) {
            this.presentationCard.OnDataLoad();
        }

        if (this.btnAskInstance) {
            this.btnAskInstance.OnDataLoad();
        }
        if (this.btnPollInstance) {
            this.btnPollInstance.OnDataLoad();
        }
        if (this.btnEmailInstance) {
            this.btnEmailInstance.OnDataLoad();
        }
        if (this.btnLinksInstance) {
            this.btnLinksInstance.OnDataLoad();

            this.LinksPanel = new LinksPanel("mPlayer.LinksPanel", window, "LinksPanel");
            this.LinksPanel.ID = "LinksPanel";
            this.LinksPanel.OnLoad();
        }

        if ($('SlideTabs')) {
            this.btnSlideShowInstance.OnDataLoad();
            this.btnSlideListInstance.OnDataLoad();
        }

        if ($('SlideTicker') && this.ShowSlides) {
            this.btnPreviousSlideInstance.OnDataLoad();
            this.btnNextSlideInstance.OnDataLoad();

            this.SlideNumberPanelInstance.OnDataLoad();
        }

        if ($('CurrentSlideArea') && this.ShowSlides) {
            this.CurrentSlidePanelInstance.OnDataLoad();

            this.ThumbnailsPanelInstance = new ThumbnailsPanel("mPlayer.ThumbnailsPanelInstance", window, "ThumbNailsArea");
            this.ThumbnailsPanelInstance.OnLoad();

            this.ChapterPointsPanelInstance = new ChapterPointsPanel("mPlayer.ChapterPointsPanelInstance", window, "ChapterPointsArea");
            this.ChapterPointsPanelInstance.OnLoad();
        }

        if ($('PlayerControls')) {
            this.btnPlayPauseInstance.OnDataLoad();
            this.btnSkipbackInstance.OnDataLoad();
            this.btnMuteInstance.OnDataLoad();
            this.btnFullScreenInstance.OnDataLoad();
            this.btnHelpInstance.OnDataLoad();

            this.PlayerSliderInstance = new SliderArea("mPlayer.PlayerSliderInstance", window, "PlayerSlider");
            this.PlayerSliderInstance.Orientation = SfUI.SfSlider.Orientation.Horizontal;
            this.PlayerSliderInstance.SliderBackgroundImage = LayoutOptions.ThemeImageBase + '/Player/slider_bkg.gif';
            this.PlayerSliderInstance.ThumbImage = LayoutOptions.ThemeImageBase + '/Player/thumb.gif';
            this.PlayerSliderInstance.ThumbOverImage = LayoutOptions.ThemeImageBase + '/Player/thumbOver.gif';

            this.VolumeSliderInstance = new VolumeSliderArea("mPlayer.VolumeSliderInstance", window, "VolumeSlider");
            this.VolumeSliderInstance.Orientation = SfUI.SfSlider.Orientation.Horizontal;
            this.VolumeSliderInstance.SliderBackgroundImage = LayoutOptions.ThemeImageBase + '/Player/Volume/slider_bkg.gif';
            this.VolumeSliderInstance.ThumbImage = LayoutOptions.ThemeImageBase + '/Player/Volume/thumb.gif';
            this.VolumeSliderInstance.ThumbOverImage = LayoutOptions.ThemeImageBase + '/Player/Volume/thumbOver.gif';
        }

        if ($('LanguageSelectionArea')) {
            this.LanguageSelectionAreaInstance = new LanguageDropDownArea("mPlayer.LanguageSelectionAreaInstance", window, "LanguageSelectionArea");
            this.LanguageSelectionAreaInstance.OnLoad();
        }

        if ($('CaptioningContainer')) {
            this.SamiDropDownPanelInstance = new SamiDropDownPanel("mPlayer.SamiDropDownPanelInstance", window, "Captioning");
            this.SamiDropDownPanelInstance.OnLoad();
        }

        if (Manifest.CaptionsFile.length > 0) {
            this.btnCCInstance = new CCButtonArea("btnCCInstance", window, "btnCC");
            this.btnCCInstance.button = new SfUI.Button('btnCC');
            this.btnCCInstance.button.SetNormalImage(0, LayoutOptions.ThemeImageBase + '/Player/Captioning/btnCCNormal.gif');
            this.btnCCInstance.button.SetOverImage(0, LayoutOptions.ThemeImageBase + '/Player/Captioning/btnCCOver.gif');
            this.btnCCInstance.button.SetDisabledImage(0, LayoutOptions.ThemeImageBase + '/Player/Captioning/btnCCDisabled.gif');
            this.btnCCInstance.button.Enable(true);
            this.btnCCInstance.OnLoad();
        }


        window.onbeforeunload = this.OnBeforeUnload;

        document.onkeyup = this.OnKeyUp;
    },

    OnBeforeUnload: function() {
        if (mPlayer.OpenReported) {
            mPlayer.ReportViewerPageClosed();
        }

        if (mPlayer.PopupWindows.FullSize) {
            mPlayer.PopupWindows.FullSize.close();
        }

        if (mPlayer.PopupWindows.PreviewSlide) {
            mPlayer.PopupWindows.PreviewSlide.close();
        }

        if (mPlayer.PopupWindows.Polls) {
            mPlayer.PopupWindows.Polls.close();
        }
    },

    LoadMediaPlayer: function() {
        if (this.PlayerDetect.GetPlayerType() == SfKernel.MediaPlayerType.SL1) {
            this.PlayerAreaInstance = new SL1PlayerArea("mPlayer.PlayerAreaInstance", window, "PlayerArea");

            $('PlayerSpeedControl').style.display = 'none';
            $('btnFullScreen').style.display = 'none';
        }
        else {
            this.PlayerAreaInstance = new WM7PlayerArea("mPlayer.PlayerAreaInstance", window, "PlayerArea");

            this.PlayerSpeedControlInstance = new PlayerSpeedControlPanel("mPlayer.PlayerSpeedControlInstance", window, "PlayerSpeedControl");
            this.PlayerSpeedControlInstance.OnLoad();
        }

        this.PlayerAreaInstance.OnLoad();
    },

    OnKeyUp: function(e) {
        if (SfEmailIsShowing || SfForumIsShowing || mPlayer.LinksPanel.IsShowing) {
            return;
        }

        var keyEvent = (window.event) ? event : e;

        if (Manifest.PlayStatus == SfKernel.PresentationPlayStatus.OnDemand) {
            switch (keyEvent.keyCode) {
                case 32: //Space
                    mPlayer.btnPlayPauseInstance.OnClick();
                    break;
                case 37: // left arrow
                    if (keyEvent.ctrlKey) {
                        if (mPlayer.btnPreviousSlideInstance) {
                            mPlayer.btnPreviousSlideInstance.OnClick();
                        }
                    }
                    else {
                        mPlayer.EventManager.PostCommandEvent(SfKernel.CommandEventId.SkipBack, this, null);
                    }
                    break;
                case 38:  // up arrow
                    if (mPlayer.PlayerSpeedControlInstance) {
                        mPlayer.PlayerSpeedControlInstance._rightDivOnClick$1();
                    }
                    break;
                case 39:  // right arrow
                    if (keyEvent.ctrlKey) {
                        if (mPlayer.btnNextSlideInstance) {
                            mPlayer.btnNextSlideInstance.OnClick();
                        }
                    }
                    else {
                        mPlayer.EventManager.PostCommandEvent(SfKernel.CommandEventId.SkipForward, this, null);
                    }
                    break;
                case 40:  // down arrow
                    if (mPlayer.PlayerSpeedControlInstance) {
                        mPlayer.PlayerSpeedControlInstance._leftDivOnClick$1();
                    }
                    break;
            }
        }

        switch (keyEvent.keyCode) {
            case 65:  //A
                mPlayer.btnAskInstance.OnClick();
                break;
            case 69:  //E
                mPlayer.btnEmailInstance.OnClick();
                break;
            case 76:  //L
                mPlayer.btnLinksInstance.OnClick();
                break;
            case 77:  //M
                mPlayer.btnMuteInstance.OnClick();
                break;
            case 80:  //P
                mPlayer.btnPollInstance.OnClick();
                break;
            case 83:  //S
                if (LayoutOptions.SlideHeight != 0 && LayoutOptions.SlideWidth != 0) {
                    if (keyEvent.shiftKey) {
                        if (mPlayer.CurrentSlidePanelInstance) {
                            mPlayer.CurrentSlidePanelInstance._toolbuttonController$1.ToggleSlideDescriptions();
                        }
                    }
                    else if (mPlayer.btnSlideListInstance && mPlayer.btnSlideShowInstance) {
                        if (mPlayer.btnSlideListInstance.button.GetChecked()) {
                            mPlayer.btnSlideShowInstance.OnClick();
                        }
                        else {
                            mPlayer.btnSlideListInstance.OnClick();
                        }
                    }
                }
                break;
            case 112: //F1
                mPlayer.btnHelpInstance.OnClick();
                break;
        }
    },


    LoadAudioLanguages: function(Languages, CurrentIndex) {
        if (this.LanguageSelectionAreaInstance) {
            this.LanguageSelectionAreaInstance.LoadLanguages(Languages, CurrentIndex);
        }
    },

    LoadThemeStylesheet: function() {
        var href = GlobalOptions.AppRoot + '/App_Themes/' + LayoutOptions.ThemeId + '/Images.css';
        document.writeln("<link id='themeStylesheet' rel='stylesheet' type='text/css' href='" + href + "'//>");
    },

    BrowserHacks: function() {
        // Firefox On Mac
        if (this.PlayerDetect.IsMac() && this.PlayerDetect.IsFirefox() && $('PresentationCardArea') != null) {
            // opacity used with overflow:hidden hides Silverlight video on Mac/Firefox
            $('PresentationCardArea').style.opacity = 1;
            $('PresentationCardArea').style.MozOpacity = 1;
        }

    },

    ResizeWindow: function() {
        var doResize = SfKernel.GetQueryStringValue("shouldResize");

        if (doResize) {
            var currentSize = document.viewport.getDimensions();
            window.resizeBy((LayoutOptions.PlayerWidth - currentSize.width), (LayoutOptions.PlayerHeight - currentSize.height));
        }
    },

    ReportViewerPageOpened: function() {
        if (Manifest.IsStandAlone || this.OpenReported) {
            return;
        }

        var callManager = new ReportingCallManager();
        SonicFoundry.Mediasite.Player.DataAccess.PlayerService.ReportViewerPageOpened
		(
			Manifest.PlaybackTicketId,
			mPlayer.PlayerDetect.GetPlayerType(),
			Manifest.PlayStatus,
			Function.createDelegate(callManager, callManager.OnSuccess),
			Function.createDelegate(callManager, callManager.OnFailure),
			'ReportViewerPageOpened'
		);

        this.OpenReported = true;
    },

    ReportViewerPageClosed: function() {
        var syncRequest = new Sys.Net.WebRequest();
        syncRequest.set_url(String.format("{0}/ReportViewerPageClosed?playbackTicketId=%22{1}%22", SonicFoundry.Mediasite.Player.DataAccess.PlayerService.get_path(), Manifest.PlaybackTicketId));
        syncRequest.set_httpVerb("GET");
        syncRequest.get_headers()["Content-Type"] = "application/json; charset=utf-8";
        syncRequest.set_executor(new SfKernel.XMLHttpSyncExecutor());
        syncRequest.invoke();
    },

    CreateShowSlideEventArgs: function(slideNumber) {
        var args = new Object();

        args.Command = SfKernel.ScriptCmdType.ShowSlide;
        args.Index = slideNumber;

        if (slideNumber < 1) {
            return args;
        }

        args.Image = this.GetImageLocation(slideNumber, SfKernel.SlideType.Normal);
        args.FullSizeImage = this.GetImageLocation(slideNumber, SfKernel.SlideType.FullSize);
        args.ThumbNailImage = this.GetImageLocation(slideNumber, SfKernel.SlideType.ThumbNail);

        return args;
    },

    KeepAddingToSlideTimings: function(slideNumber) {
        var maxTimings = Manifest.Slides.length;
        if (maxTimings > slideNumber) {
            return;
        }

        var startIndex = maxTimings + 1;
        var endIndex = slideNumber;

        var i;
        for (i = startIndex; i <= endIndex; ++i) {
            this.AddToSlideTimings(i);
        }
    },

    AddToSlideTimings: function(slideNumber) {
        Manifest.Slides[Manifest.Slides.length] = new Slide("", -1, "");
    },

    GetImageLocationUsingWidthAndHeight: function(slideNumber, width, height) {
        return Manifest.GetSlideUrl(slideNumber, width, height);
    },

    GetImageLocation: function(slideNumber, type) {
        if (type == SfKernel.SlideType.Normal) {
            return Manifest.GetSlideUrl(slideNumber, LayoutOptions.SlideWidth, LayoutOptions.SlideHeight);
        }
        else if (type == SfKernel.SlideType.ThumbNail) {
            return Manifest.GetSlideUrl(slideNumber, mPlayer.ThumbnailsPanelInstance.ThumbnailWidth, mPlayer.ThumbnailsPanelInstance.ThumbnailHeight);
        }
        else {
            return Manifest.GetSlideUrl(slideNumber);
        }
    }
}

LinksButtonPanel = function() {
    this.OnLoad = function() {
        this.button.Initialize();
        this.button.SetTooltip(Localization.Buttons.Links);
    }

    this.OnDataLoad = function() {
        if (Manifest.SupportingLinks.length > 0) {
            this.button.Enable(true);
            this.button.SetClickHandler(this.OnClick.bind(this));
        }
    }

    this.OnClick = function() {
        if (this.button._enabled) {
            mPlayer.LinksPanel.Show();
        }
    }
}

////////////////////////
AskButtonPanel = function() {
    this.PrimarySpeakerEmail = null;

    this.OnLoad = function() {
        this.button.Initialize();
        this.button.SetClickHandler(this.OnClick.bind(this));
        this.button.SetTooltip(Localization.Buttons.Ask);
        this.AddEventHandlers();
    }

    this.OnDataLoad = function() {
        this.LoadPrimarySpeakerEmail();
        this.HandleButtonState();
    }

    this.AddEventHandlers = function() {
        mPlayer.EventManager.Events.addHandler(SfKernel.EventType.Script, this.ScriptEventHandler.bind(this));
        mPlayer.EventManager.Events.addHandler(SfKernel.EventType.LivePlaybackStarted, this.DataAvailableEventHandler.bind(this));
    }

    this.ScriptEventHandler = function(sender, args) {
        switch (args.Command) {
            case SfKernel.ScriptCmdType.EndPresentation:
                if (Manifest.PlayStatus != SfKernel.PresentationPlayStatus.OnDemand) {
                    this.button.Enable(false);
                }
                break;
        }
    }

    this.DataAvailableEventHandler = function(sender, args) {
        this.HandleButtonState();
    }

    this.HandleButtonState = function() {
        if (Manifest.ForumEnabled) {
            if (Manifest.PlayStatus == SfKernel.PresentationPlayStatus.Live || Manifest.PlayStatus == SfKernel.PresentationPlayStatus.OnDemand) {
                this.button.Enable(true);
                return;
            }
        }

        this.button.Enable(false);
    }

    this.LoadPrimarySpeakerEmail = function() {
        if (Manifest.Presenters.length < 1) {
            this.PrimarySpeakerEmail = null;
            return;
        }

        this.PrimarySpeakerEmail = Manifest.Presenters[0].Email;
    }

    this.OnClick = function() {
        if (this.button._enabled) {
            SfForum.OpenAskQuestion();
        }
    }
}

/////////////////
PollButtonPanel = function() {
    this.OnLoad = function() {
        this.button.Initialize();
        this.button.SetTooltip(Localization.Buttons.Polls);
    }

    this.OnDataLoad = function() {
        this.HandleButtonState();
    }

    this.HandleButtonState = function() {
        if (Manifest.PollingEnabled) {
            this.button.Enable(true);
            this.button.SetClickHandler(this.OnClick.bind(this));
        }
        else {
            this.button.Enable(false);
        }
    }

    this.OnClick = function() {
        if (this.button._enabled) {
            // needs to be resizeable
            mPlayer.PopupWindows.Polls = WindowHelper.CreateNamedPopup(WindowHelper.PopupNames.ShowPolls, "polls", 600, 450, true, false);
            if (mPlayer.PopupWindows.Polls) {
                mPlayer.PopupWindows.Polls.focus();
            }
        }
    }
}
//////////
ChangeVideoPositionButtonArea = function() {
    this.OnLoad = function() {
        this.button.Initialize();
        this.button.SetTooltip(Localization.Buttons.ChangeVideoPosition);
        this.button.SetClickHandler(this.OnClick.bind(this));
        this.button.Enable(true);
    }

    this.OnClick = function() {
        toggleVariant();
    }
}
//////////
EmailButtonArea = function() {
    this.OnLoad = function() {
        this.button.Initialize();
        this.button.SetTooltip(Localization.Buttons.Email);
    }

    this.OnDataLoad = function() {
        if (GlobalOptions.AllowEmailForm == true) {
            this.button.Enable(true);
            this.button.SetClickHandler(this.OnClick.bind(this));
        }
    }

    this.OnClick = function() {
        if (this.button._enabled) {
            SfEmail.OpenEmailInvitation();
        }
    }
}
///////
HelpButtonArea = function() {
    this.OnLoad = function() {
        this.button.Initialize();
        this.button.SetTooltip(Localization.Buttons.Help);
    }

    this.OnDataLoad = function() {
        this.button.Enable(true);
        this.button.SetClickHandler(this.OnClick.bind(this));
    }

    this.OnClick = function() {
        if (this.button._enabled) {
            WindowHelper.PopupHelp(WindowHelper.GetPopupURL(WindowHelper.PopupNames.Help), 800, 600);
        }
    }
}
ControlButtonArea = function(id) {
    this.ID = id;
    this.Enabled = true;
    this.ControlArea = null;

    this.OnLoad = function() {
        if (this.Enabled == false) {
            this.Hide();
            return;
        }
        else {
            this.Show();
        }
        this.button.Initialize();
        this.button.SetClickHandler(this.OnClick.bind(this));
        this.button.SetTooltip(this.TooltipId);
    }

    this.OnClick = function() {
        if (this.button.GetChecked()) {
            this.HideControlArea();
        }
        else {
            this.ShowControlArea();
        }
    }

    this.ShowControlArea = function() {
        this.ControlArea.Show();
        this.button.SetChecked(true);
    }

    this.HideControlArea = function() {
        this.ControlArea.Hide();
        this.button.SetChecked(false);
    }

    this.Hide = function() {
        var divElement = this.GetDiv();

        if (this._originalDisplay == null) {
            this._originalDisplay = divElement.style.display;
        }

        divElement.style.display = 'none';
    }

    this.GetDiv = function() {
        if (this._div == null) {
            this._div = $(this.ID);
        }
        return this._div;
    }

    this.Show = function() {
        var divElement = this.GetDiv();

        var currentDisplay = divElement.style.display;
        if (currentDisplay != 'none') {
            this._originalDisplay = currentDisplay;
            return;
        }

        // currentdisplay == 'none'
        if (this._originalDisplay == null) {
            // not initialized
            this._originalDisplay = 'none';
            divElement.style.display = '';
        }
        else {
            if (this._originalDisplay == 'none') {
                divElement.style.display = '';
            }
            else {
                divElement.style.display = this._originalDisplay;
            }
        }
    }
}

ControlButtonGroup = function() {
    this.OnLoad = function() {
        this.ResetClickHandlersForButtons();
        this.SelectFirstEnabledButton();
    }

    this.SelectFirstEnabledButton = function() {
        for (var i = 0; i < this.Buttons.length; ++i) {
            if (this.Buttons[i].Enabled == true) {
                this.OnClick(this.Buttons[i].ID);
                return;
            }
        }
    }

    this.ResetClickHandlersForButtons = function() {
        var len = this.Buttons.length;

        for (var i = 0; i < len; ++i) {
            this.Buttons[i].Group = this;
            this.Buttons[i].button.SetClickHandler(this.OnClick.bind(this, this.Buttons[i].ID));
        }
    }

    this.ShowThisAndHideOthers = function(index) {
        for (var i = 0; i < this.Buttons.length; ++i) {
            if (i == index) {
                this.Buttons[i].ShowControlArea();
            }
            else {
                this.Buttons[i].HideControlArea();
            }
        }
    }

    this.OnClick = function(buttonID) {
        var index = this.FindClickedButtonIndex(buttonID);
        if (this.Buttons[index].button.IsChecked == true) {
            return;
        }
        this.ShowThisAndHideOthers(index);
    }

    this.FindClickedButtonIndex = function(buttonID) {
        for (var i = 0; i < this.Buttons.length; ++i) {
            if (this.Buttons[i].ID == buttonID) {
                return i;
            }
        }
        return -1;
    }
}

////////////////////////
PreviousSlideButtonArea = function(container) {
    this.Container = container;

    this.OnLoad = function() {
        this.button.Initialize();
        this.button.SetTooltip(Localization.Buttons.PreviousSlide);
    }

    this.OnDataLoad = function() {
        this.button.SetClickHandler(this.OnClick.bind(this));
        this.button.SetDblClickHandler(this.OnClick.bind(this));
        this.AddEventHandlers();
        this.HandleButtonState(-1);
    }

    this.AddEventHandlers = function() {
        mPlayer.EventManager.Events.addHandler(SfKernel.EventType.Script, this.ScriptEventHandler.bind(this));
        mPlayer.EventManager.Events.addHandler(SfKernel.EventType.PlayingFromBeginning, this.PlayingFromBeginningEventHandler.bind(this));
    }

    this.ScriptEventHandler = function(sender, args) {
        if (args.Command != SfKernel.ScriptCmdType.ShowSlide) {
            return;
        }
        this.HandleButtonState(args.Index);
    }

    this.PlayingFromBeginningEventHandler = function(sender, args) {
        this.HandleButtonState(-1);
    }

    this.OnClick = function() {
        var currentSlide = mPlayer.CurrentSlideNumber;

        var toJumpTo;
        if (mPlayer.PresentationEnded) {
            if (Manifest.Slides.length > 0) {
                toJumpTo = Manifest.Slides.length;
            }
            else {
                return;
            }
        }
        else if (currentSlide > 1) {
            toJumpTo = currentSlide - 1;
        }
        else {
            return;
        }

        mPlayer.EventManager.PostCommandEvent(SfKernel.CommandEventId.NavigateToSlide, this, { SlideNumber: toJumpTo });

    }

    this.HandleButtonState = function(currentSlide) {
        if (Manifest.PlayStatus != SfKernel.PresentationPlayStatus.OnDemand) {
            this.button.Enable(false);
            return;
        }

        if (currentSlide < 2) {
            this.button.Enable(false);
            return;
        }

        this.button.Enable(true);
    }
}

////////////////////////
NextSlideButtonArea = function(container) {
    this.Container = container;

    this.OnLoad = function() {
        this.button.Initialize();
        this.button.SetTooltip(Localization.Buttons.NextSlide);
    }

    this.OnDataLoad = function() {
        this.button.SetClickHandler(this.OnClick.bind(this));
        this.AddEventHandlers();
        this.HandleButtonState(-1);
    }

    this.AddEventHandlers = function() {
        mPlayer.EventManager.Events.addHandler(SfKernel.EventType.Script, this.ScriptEventHandler.bind(this));
        mPlayer.EventManager.Events.addHandler(SfKernel.EventType.PlayingFromBeginning, this.PlayingFromBeginningEventHandler.bind(this));
    }

    this.ScriptEventHandler = function(sender, args) {
        switch (args.Command) {
            case SfKernel.ScriptCmdType.ShowSlide:
                this.HandleButtonState(args.Index);
        }
    }

    this.PlayingFromBeginningEventHandler = function(sender, args) {
        this.HandleButtonState(-1);
    }

    this.OnClick = function() {
        var currentSlide = mPlayer.CurrentSlideNumber;
        var maxSlide = Manifest.Slides.length;
        if (currentSlide == -1 && maxSlide > 0) {
            mPlayer.EventManager.PostCommandEvent(SfKernel.CommandEventId.NavigateToSlide, this, { SlideNumber: 1 });
        }
        else if (currentSlide < maxSlide) {
            mPlayer.EventManager.PostCommandEvent(SfKernel.CommandEventId.NavigateToSlide, this, { SlideNumber: currentSlide + 1 });
        }
    }

    this.HandleButtonState = function(currentSlide) {
        if (Manifest.PlayStatus != SfKernel.PresentationPlayStatus.OnDemand) {
            this.button.Enable(false);
            return;
        }

        var maxSlide = Manifest.Slides.length;
        if (currentSlide == -1) {
            if (maxSlide > 0) {
                this.button.Enable(true);
            }
            else {
                this.button.Enable(false);
            }
            return;
        }

        if (currentSlide < maxSlide) {
            this.button.Enable(true);
        }
        else {
            this.button.Enable(false);
        }
    }
}


SlideNumberPanel = function(container, containingWindow, id) {
    this.Container = container;
    this.ContainingWindow = containingWindow;
    this.ID = id;

    this.SlideText = null;
    this.OfText = null;
    this.DefaultText = null;

    this.OnLoad = function() {
    }

    this.OnDataLoad = function() {
        this.AddEventHandlers();
    }


    this.SetText = function(val) {
        var textNode = document.createTextNode(val);

        var div = this.GetDiv();
        var firstChild = div.childNodes[0];
        if (firstChild) {
            div.replaceChild(textNode, firstChild);
        }
        else {
            div.appendChild(textNode);
        }
    }

    this.AddEventHandlers = function() {
        mPlayer.EventManager.Events.addHandler(SfKernel.EventType.Script, this.ScriptEventHandler.bind(this));
        mPlayer.EventManager.Events.addHandler(SfKernel.EventType.PlayingFromBeginning, this.PlayingFromBeginningEventHandler.bind(this));
        mPlayer.EventManager.Events.addHandler(SfKernel.EventType.LivePlaybackStarted, this.LivePlaybackStartedEventHandler.bind(this));
    }

    this.ScriptEventHandler = function(sender, args) {
        switch (args.Command) {
            case SfKernel.ScriptCmdType.ShowSlide:
                var index = args.Index;
                if (index < 1) {
                    this.SetBlankText();
                    return;
                }
                this.SetText(this.SlideText + " " + index + " " + this.OfText + " " + Manifest.Slides.length);
                break;
            case SfKernel.ScriptCmdType.EndPresentation:
                this.SetBlankText();
                break;
        }
    }
    this.LivePlaybackStartedEventHandler = function(sender, args) {
        var slideNumber = Manifest.Slides.length;
        if (slideNumber > 0) {
            this.SetText(this.SlideText + " " + slideNumber + " " + this.OfText + " " + slideNumber);
        }

    }

    this.PlayingFromBeginningEventHandler = function(sender, args) {
        if (mPlayer.CurrentSlideNumber == -1) {
            this.SetBlankText();
        }
    }

    this.SetBlankText = function() {
        this.SetText(this.DefaultText);
    }
}

SlideNumberPanel.prototype = new Panel();
SlideNumberPanel.prototype.constructor = SlideNumberPanel;
SlideNumberPanel.prototype.baseClass = Panel.prototype.constructor;


//////////////////////
SlideShowButtonArea = function(id) {
    this.ID = id;
    this.OnLoad = function() {
        if (!this.Enabled) {
            this.Hide();
            return;
        }
        this.Show();
        this.button.Initialize();
        this.button.SetTooltip(this.TooltipId);
    }

    this.OnDataLoad = function() {
        this.button.SetClickHandler(this.OnClick.bind(this));
    }

    this.OnClick = function() {
        if (!this.button.GetChecked()) {
            if (this.ID == 'btnSlideShow') {
                this.ShowControlArea();
            }
            else {
                this.HideControlArea();
            }
        }
    }

    this.ShowControlArea = function() {
        this.ControlArea.show();
        mPlayer.btnSlideShowInstance.button.SetChecked(true);
        mPlayer.btnSlideListInstance.button.SetChecked(false);
    }

    this.HideControlArea = function() {
        this.ControlArea.hide();
        mPlayer.btnSlideListInstance.button.SetChecked(true);
        mPlayer.btnSlideShowInstance.button.SetChecked(false);
    }

    this.Hide = function() {
        var divElement = this.GetDiv();
        if (this._originalDisplay == null) {
            this._originalDisplay = divElement.style.display;
        }
        divElement.style.display = 'none';
    }

    this.GetDiv = function() {
        if (this._div == null) {
            this._div = $(this.ID);
        }
        return this._div;
    }

    this.Show = function() {
        var divElement = this.GetDiv();

        var currentDisplay = divElement.style.display;
        if (currentDisplay != 'none') {
            this._originalDisplay = currentDisplay;
            return;
        }

        // currentdisplay == 'none'
        if (this._originalDisplay == null) {
            // not initialized
            this._originalDisplay = 'none';
            divElement.style.display = '';
        }
        else {
            if (this._originalDisplay == 'none') {
                divElement.style.display = '';
            }
            else {
                divElement.style.display = this._originalDisplay;
            }
        }
    }
}

/// Theme Image
SkinImage = function(id) {
    this.ID = id;
    this.ImageSRC = null;
    //this.ImageBackSRC = null;
    this.ImageHref = null;
    this.ImageWidth = null;
    this.ImageHeight = null;
    this.ParentWidth = null;
    this.ParentHeight = null;
    this.Alt = '';
    this.Style = null;
    this.ParentStyle = null;

    this.OnLoad = function() {
        var ParentElement = $(this.ID);

        if (!ParentElement) {
            return;
        }

        this.ParentWidth = ParentElement.style.width;
        this.ParentHeight = ParentElement.style.height;

        var parentStyle = ParentElement.style;
        ParentElement.setAttribute('style', parentStyle + this.ParentStyle);
        var BannerPanel = this.createBannerPanel();
        ParentElement.appendChild(BannerPanel);
    }

    this.createBannerPanel = function() {
        //        banners as img tags.    
        //        var imgElement = $(document.createElement('img'));
        //        imgElement.setAttribute('id', this.ID + 'Image');
        //        imgElement.setAttribute('src', this.ImageSRC);
        //        imgElement.setAttribute('alt', this.Alt);
        //        imgElement.setAttribute('style', this.Style);
        //        imgElement.setAttribute('border', '0');

        //      banners as divs with background images        
        var imgElement = $(document.createElement('div'));
        imgElement.setAttribute('id', this.ID + 'Image');
        imgElement.setAttribute('style', this.Style);
        imgElement.setAttribute('border', '0');
        imgElement.setStyle({
            backgroundRepeat: 'no-repeat',
            backgroundImage: 'url(' + this.ImageSRC + ')',
            height: this.ImageHeight + 'px',
            width: this.ImageWidth + 'px'
        });
        imgElement.setAttribute('title', this.Alt);
        if (this.ImageHeight != null && this.ImageWidth != null) {
            imgElement.setAttribute('height', this.ImageHeight);
            imgElement.setAttribute('width', this.ImageWidth);
        }
        else {
            imgElement.setAttribute('height', this.ParentHeight.replace("px", ""));
            imgElement.setAttribute('width', this.ParentWidth.replace("px", ""));
        }

        if (this.ImageHref != '') // if there's no link, dont create the tag
        {
            var aElement = $(document.createElement('a'));
            aElement.setAttribute('id', this.ID + 'Link');
            aElement.setAttribute('href', this.ImageHref);
            aElement.setAttribute('target', '_offsite');
            aElement.appendChild(imgElement);
            imgElement.setStyle({ cursor: 'pointer', cursor: 'hand' })
            return aElement;
        }
        else {
            return imgElement;
        }
    }
}

// Banners
function LoadBanners() {
    this.Banner = null;
    this.OnLoad = function() {
        for (var i = 0; i < this.Banner.length; i++) {
            if (LayoutOptions.Images[this.Banner[i]]) {
                var BannerInstance = new SkinImage(this.Banner[i]);
                BannerInstance.ImageSRC = LayoutOptions.Images[this.Banner[i]].ImageFilename;
                BannerInstance.ImageHref = LayoutOptions.Images[this.Banner[i]].ImageUrl;
                BannerInstance.ImageHeight = LayoutOptions.Images[this.Banner[i]].Height;
                BannerInstance.ImageWidth = LayoutOptions.Images[this.Banner[i]].Width;
                BannerInstance.OnLoad();
            }
        }
    }
}

//Slider Area
SliderArea = function(container, containingWindow, id) {
    this.ID = id;
    this.Slider = null;
    this.mediaLengthObtainedEventHandler = null;
    this.playerTimerUpdatedEventHandler = null;
    this.IsCurrentlyDragging = false;
    this.Orientation = SfUI.SfSlider.Orientation.Vertical;

    this.OnLoad = function() {
        if (Manifest.PlayStatus == SfKernel.PresentationPlayStatus.OnDemand) {
            this.Initialize();
            this.Slider.SetEnabled(true);
            this.AddEventHandlers();
        }
    }

    this.Initialize = function() {
        var imageInfo = { SliderBackroundImage: this.SliderBackgroundImage, ThumbImage: this.ThumbImage, ThumbOverImage: this.ThumbOverImage };
        this.Slider = new SfUI.SfSlider({ NamePrefix: this.ID, Orientation: this.Orientation, ImageInfo: imageInfo });
    }

    this.AddEventHandlers = function() {
        mPlayer.EventManager.Events.addHandler(SfKernel.EventType.MediaLengthObtained, this.MediaLengthObtainedEventHandler.bind(this));
        mPlayer.EventManager.Events.addHandler(SfKernel.EventType.TimerLoop, this.TimerLoopEventHandler.bind(this));

        this.Slider.AddClickHandler(Function.createDelegate(this, this.OnSliderClick));
        this.Slider.AddDragHandler(Function.createDelegate(this, this.OnSliderDrag));
    }

    this.MediaLengthObtainedEventHandler = function(sender, range) {
        this.Slider.SetRange(range.Left, range.Right);
    }

    this.TimerLoopEventHandler = function(sender, args) {
        if (this.IsCurrentlyDragging == true) {
            return;
        }
        this.Slider.SetPosition(args["Position"]);
    }

    this.OnSliderClick = function(sender, args) {
        this.Slider.SetPosition(args.Position);

        var sliderArgs = new SfKernel.SliderArgs(SfKernel.SliderNotifyType.NewPosition, args.Position);
        mPlayer.EventManager.PostEvent(SfKernel.EventType.SliderNotify, this, sliderArgs);
    }

    this.OnSliderDrag = function(sender, dragArgs) {
        if (dragArgs.DragEventType == SfUI.SfSlider.DragEventType.DragMove) {
            this.Slider.SetPosition(dragArgs.Position);

            var sliderArgs = new SfKernel.SliderArgs(SfKernel.SliderNotifyType.DragPosition, dragArgs.Position);
            mPlayer.EventManager.PostEvent(SfKernel.EventType.SliderNotify, this, sliderArgs);
        }
        else if (dragArgs.DragEventType == SfUI.SfSlider.DragEventType.BeginDrag) {
            var sliderArgs = new SfKernel.SliderArgs(SfKernel.SliderNotifyType.BeginDrag, dragArgs.Position);

            mPlayer.EventManager.PostEvent(SfKernel.EventType.SliderNotify, this, sliderArgs);
            this.IsCurrentlyDragging = true;
        }
        else if (dragArgs.DragEventType == SfUI.SfSlider.DragEventType.EndDrag) {
            var newPositionArgs = new SfKernel.SliderArgs(SfKernel.SliderNotifyType.NewPosition, dragArgs.Position);
            mPlayer.EventManager.PostEvent(SfKernel.EventType.SliderNotify, this, newPositionArgs);

            var endDragArgs = new SfKernel.SliderArgs(SfKernel.SliderNotifyType.EndDrag, dragArgs.Position);
            mPlayer.EventManager.PostEvent(SfKernel.EventType.SliderNotify, this, endDragArgs);
            this.IsCurrentlyDragging = false;
        }
    }
}

function loadingMask(container, max, num) {

    createBlocks(container, num);
    for (var i = 0; i < max; ++i)                       // max repeats before stop
    {
        setTimeout('paintBlocks(' + num + ')', i * 1600);  // interval between repeat
    }
}

function createBlocks(container, num) {
    var blockPaintInterval = 0;
    var container = document.getElementById(container);
    for (var i = 0; i < num; ++i) {
        var e = document.createElement('div');
        e.setAttribute('id', 'spinDiv' + i);
        e.setAttribute('class', 'spinDiv');
        container.appendChild(e);
    }
}

function paintBlocks(num) {
    var i = 0;
    var t = 100;
    var c = 150;
    for (var j = 1; j < num; ++j) {
        setTimeout('colorBlock(' + i + ',' + num + ',' + c + ',' + c + ',' + c + ')', t);
        c = (c + 20);  // grayscale step
        t = t + 100;   // chase length
    }
}

function colorBlock(i, num, r, g, b) {
    if (i < num) {
        var e = document.getElementById('spinDiv' + i);
        e.style.backgroundColor = 'rgb(' + r + ',' + g + ',' + b + ')';
        setTimeout('colorBlock(' + (++i) + ',' + num + ',' + r + ',' + g + ',' + b + ')', 100);
    }
}

var mPlayer = new MediasitePlayer();
try {
    mPlayer.OnLoad();
}
catch (error) {
    PresentationFailedToLoad('manifestFailedErrorDialog', error.message);
}

