
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.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.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.SetClickHandler(this.OnClick.bind(this));
		this.button.SetTooltip(Localization.Buttons.Help);
	}
	
	this.OnClick = function()
	{
		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);
}

