
function createSilverlight()
{
	
	Silverlight.detectUserAgent();
	var bInstalled=Silverlight.isInstalled("1.0");
	
	if(!bInstalled)
	{
		document.getElementById('InstallPromptDiv').style.display='block';
		return;
	}
	else
	{
		if(document.getElementById('SilverlightControlHost'))
			document.getElementById('SilverlightControlHost').style.display='none';
	}
	
	var newHTML="<div id='slowrap'><object id='NBAPlayerWindowObject' type='application/x-silverlight' style='background-color:#192D51;height:300px;width:400px;'>"+"<param name='Windowless' value='"+NBAVideoPlayer.Windowless+"' />"+"<param name='Background' value='"+NBAVideoPlayer.BackgroundColor+"' />"+"</object></div>";

	//document.write(newHTML);
	document.getElementById('NBAVideoPlayerContainer').innerHTML = newHTML;
	
			// Initialize player, via Media.js
			Sys.Application.initialize(); 
			Sys.Application.add_init(function() {
			    $create(Sys.Preview.UI.Xaml.Media.Player,
			        {
			            "mediaUrl":NBAVideoPlayer.VideoUrl, // Video url, as given on page.
			            "autoPlay":NBAVideoPlayer.AutoPlay, 
			            "xamlSource":"/silverlight_video/NBAPlayerSkinTweak.xaml" // XAML skin url.
			        },
			        null, 
			        null, 
			        $get("NBAPlayerWindowObject")); // ID of OBJECT tag.
			});
			// --------------------------------
			
			// Useful elements on XAML objects tree
			NBAVideoPlayer.SLObj=null;
			NBAVideoPlayer.PlayerObj=null;
			NBAVideoPlayer.MediaElement=null;
			NBAVideoPlayer.CurrentMedia=null;
			NBAVideoPlayer.UIElement=null;
			// --------------------------------

			
			/*Silverlight.createObjectEx({
			source: "/silverlight_video/NBAPlayerSkin.xaml",
			parentElement: document.getElementById("NBAVideoPlayerContainer"),
			id: "SilverlightControl",
			properties: {
				width: "100%",
				height: "100%",
				version: "1.0",
				isWindowless:"true",
	            background:"#00FFFFFF",
	            Background: NBAVideoPlayer.BackgroundColor,
	            Windowless: NBAVideoPlayer.Windowless,
	            inplaceInstallPrompt: true
			},
			events: {
				onLoad:
				function(sender, context, source) 
				{
	            var rootCanvas = source;
	            var plugin = sender;
				} 
			}
		});



			// Initialize player, via Media.js
			Sys.Application.initialize(); 
			Sys.Application.add_init(function() {
			    $create(Sys.Preview.UI.Xaml.Media.Player,
			        {
			            "mediaUrl":NBAVideoPlayer.VideoUrl, // Video url, as given on page.
			            "autoPlay":NBAVideoPlayer.AutoPlay, 
			            "xamlSource":"/silverlight_video/NBAPlayerSkin.xaml" // XAML skin url.
			        },
			        null, 
			        null, 
			        $get("NBAPlayerWindowObject")); // ID of OBJECT tag.
			});
			// --------------------------------
			
			// Useful elements on XAML objects tree
			NBAVideoPlayer.SLObj=null;
			NBAVideoPlayer.PlayerObj=null;
			NBAVideoPlayer.MediaElement=null;
			NBAVideoPlayer.CurrentMedia=null;
			NBAVideoPlayer.UIElement=null;			
			*/
}




function NBAVideoPlayerLoaded(sender, args){ // Executed when XAML loaded.
    NBAVideoPlayer.PlayerObj=sender;
    NBAVideoPlayer.MediaElement=sender.findName("VideoWindow");
    NBAVideoPlayer.MediaElement.Visibility="Collapsed";
    NBAVideoPlayer.PlayerObj.findName("Buffering_Spin").Begin();
    NBAVideoPlayer.SLObj=$find('NBAPlayerWindowObject');
    NBAVideoPlayer.UIElement=sender.findName('UIWrap');
    
    NBAVideoPlayer.Params.TimeBufferProgressBar=sender.findName("TimeBufferProgressBar");
    NBAVideoPlayer.Params.TimeUnbufferedBar=sender.findName("TimeUnbufferedBar");
    NBAVideoPlayer.Params.TimePlayedBar=sender.findName("TimePlayedBar");
    NBAVideoPlayer.Params.TimeSlider=sender.findName("TimeSlider");
    NBAVideoPlayer.Params.TimeThumb=sender.findName("TimeThumb");
    NBAVideoPlayer.Params.ControlsElement=sender.findName("VideoControls");
    
    // Media component and controls events registration.
    // Many of them are for future use.
    
    NBAVideoPlayer.UIElement.AddEventListener("MouseEnter",NBAVideoPlayer.SLEvent.MouseEnter);
    NBAVideoPlayer.UIElement.AddEventListener("MouseLeave",NBAVideoPlayer.SLEvent.MouseLeave);
    NBAVideoPlayer.UIElement.AddEventListener("MouseLeftButtonDown",NBAVideoPlayer.SLEvent.MouseDown);
    NBAVideoPlayer.UIElement.AddEventListener("MouseLeftButtonUp",NBAVideoPlayer.SLEvent.MouseUp);
    NBAVideoPlayer.UIElement.AddEventListener("MouseMove",NBAVideoPlayer.SLEvent.MouseMove);
    
    sender.findName("PlayButtonLarge_Show").AddEventListener("Completed",NBAVideoPlayer.ControlEvent.PlayButtonLarge.ShowCompleted);
    sender.findName("PlayButtonLarge_Hide").AddEventListener("Completed",NBAVideoPlayer.ControlEvent.PlayButtonLarge.HideCompleted);
    sender.findName("InformationBar_Show").AddEventListener("Completed",NBAVideoPlayer.ControlEvent.InformationBar.ShowCompleted);
    sender.findName("InformationBar_Hide").AddEventListener("Completed",NBAVideoPlayer.ControlEvent.InformationBar.HideCompleted);
    
    var mEl=NBAVideoPlayer.MediaElement;
    mEl.AddEventListener("MediaOpened",NBAVideoPlayer.MediaEvent.MediaOpened);
    mEl.AddEventListener("CurrentStateChanged", NBAVideoPlayer.MediaEvent.MediaStateChanged);
    mEl.AddEventListener("BufferingProgressChanged", NBAVideoPlayer.MediaEvent.BufferingProgressChanged);
    mEl.AddEventListener("DownloadProgressChanged", NBAVideoPlayer.MediaEvent.DownloadProgressChanged);
    mEl.AddEventListener("MediaEnded", NBAVideoPlayer.MediaEvent.MediaEnded);
    mEl.AddEventListener("MediaFailed", NBAVideoPlayer.MediaEvent.MediaFailed);
    mEl=null;
    
    var cEl;
    cEl=sender.findName("PlayPauseButton");
    cEl.addEventListener("MouseEnter",NBAVideoPlayer.ControlEvent.PlayPause.MouseEnter);
    cEl.addEventListener("MouseLeave",NBAVideoPlayer.ControlEvent.PlayPause.MouseLeave);
    cEl.addEventListener("MouseLeftButtonDown",NBAVideoPlayer.ControlEvent.PlayPause.MouseDown);
    cEl.addEventListener("MouseLeftButtonUp",NBAVideoPlayer.ControlEvent.PlayPause.MouseUp);
    cEl.addEventListener("MouseMove",NBAVideoPlayer.ControlEvent.PlayPause.MouseMove);
    
    cEl=sender.findName("StopButton");
    cEl.addEventListener("MouseEnter",NBAVideoPlayer.ControlEvent.Stop.MouseEnter);
    cEl.addEventListener("MouseLeave",NBAVideoPlayer.ControlEvent.Stop.MouseLeave);
    cEl.addEventListener("MouseLeftButtonDown",NBAVideoPlayer.ControlEvent.Stop.MouseDown);
    cEl.addEventListener("MouseLeftButtonUp",NBAVideoPlayer.ControlEvent.Stop.MouseUp);
    cEl.addEventListener("MouseMove",NBAVideoPlayer.ControlEvent.Stop.MouseMove);
    
    cEl=sender.findName("MuteButton");
    cEl.addEventListener("MouseEnter",NBAVideoPlayer.ControlEvent.Mute.MouseEnter);
    cEl.addEventListener("MouseLeave",NBAVideoPlayer.ControlEvent.Mute.MouseLeave);
    cEl.addEventListener("MouseLeftButtonDown",NBAVideoPlayer.ControlEvent.Mute.MouseDown);
    cEl.addEventListener("MouseLeftButtonUp",NBAVideoPlayer.ControlEvent.Mute.MouseUp);
    cEl.addEventListener("MouseMove",NBAVideoPlayer.ControlEvent.Mute.MouseMove);

    cEl=sender.findName("VolumeSlider");
    cEl.addEventListener("MouseEnter",NBAVideoPlayer.ControlEvent.VolumeSlider.MouseEnter);
    cEl.addEventListener("MouseLeave",NBAVideoPlayer.ControlEvent.VolumeSlider.MouseLeave);
    cEl.addEventListener("MouseLeftButtonDown",NBAVideoPlayer.ControlEvent.VolumeSlider.MouseDown);
    cEl.addEventListener("MouseLeftButtonUp",NBAVideoPlayer.ControlEvent.VolumeSlider.MouseUp);
    cEl.addEventListener("MouseMove",NBAVideoPlayer.ControlEvent.VolumeSlider.MouseMove);
    
    cEl=sender.findName("VolumeThumb");
    cEl.addEventListener("MouseEnter",NBAVideoPlayer.ControlEvent.VolumeThumb.MouseEnter);
    cEl.addEventListener("MouseLeave",NBAVideoPlayer.ControlEvent.VolumeThumb.MouseLeave);
    cEl.addEventListener("MouseLeftButtonDown",NBAVideoPlayer.ControlEvent.VolumeThumb.MouseDown);
    cEl.addEventListener("MouseLeftButtonUp",NBAVideoPlayer.ControlEvent.VolumeThumb.MouseUp);
    cEl.addEventListener("MouseMove",NBAVideoPlayer.ControlEvent.VolumeThumb.MouseMove);
    
    cEl=sender.findName("PlayButtonLarge");
    cEl.addEventListener("MouseEnter",NBAVideoPlayer.ControlEvent.PlayButtonLarge.MouseEnter);
    cEl.addEventListener("MouseLeave",NBAVideoPlayer.ControlEvent.PlayButtonLarge.MouseLeave);
    cEl.addEventListener("MouseLeftButtonDown",NBAVideoPlayer.ControlEvent.PlayButtonLarge.MouseDown);
    cEl.addEventListener("MouseLeftButtonUp",NBAVideoPlayer.ControlEvent.PlayButtonLarge.MouseUp);
    cEl.addEventListener("MouseMove",NBAVideoPlayer.ControlEvent.PlayButtonLarge.MouseMove);
    
    cEl=sender.findName("TimeSlider");
    cEl.addEventListener("MouseEnter",NBAVideoPlayer.ControlEvent.TimeSlider.MouseEnter);
    cEl.addEventListener("MouseLeave",NBAVideoPlayer.ControlEvent.TimeSlider.MouseLeave);
    cEl.addEventListener("MouseLeftButtonDown",NBAVideoPlayer.ControlEvent.TimeSlider.MouseDown);
    cEl.addEventListener("MouseLeftButtonUp",NBAVideoPlayer.ControlEvent.TimeSlider.MouseUp);
    cEl.addEventListener("MouseMove",NBAVideoPlayer.ControlEvent.TimeSlider.MouseMove);
    
    cEl=sender.findName("TimeThumb");
    cEl.addEventListener("MouseEnter",NBAVideoPlayer.ControlEvent.TimeThumb.MouseEnter);
    cEl.addEventListener("MouseLeave",NBAVideoPlayer.ControlEvent.TimeThumb.MouseLeave);
    cEl.addEventListener("MouseLeftButtonDown",NBAVideoPlayer.ControlEvent.TimeThumb.MouseDown);
    cEl.addEventListener("MouseLeftButtonUp",NBAVideoPlayer.ControlEvent.TimeThumb.MouseUp);
    cEl.addEventListener("MouseMove",NBAVideoPlayer.ControlEvent.TimeThumb.MouseMove);

    cEl=NBAVideoPlayer.Params.TimeBufferProgressBar;
    cEl.AddEventListener("MouseEnter",NBAVideoPlayer.ControlEvent.TimeBufferProgressBar.MouseEnter);
    cEl.AddEventListener("MouseLeave",NBAVideoPlayer.ControlEvent.TimeBufferProgressBar.MouseLeave);
    cEl.AddEventListener("MouseLeftButtonDown",NBAVideoPlayer.ControlEvent.TimeBufferProgressBar.MouseDown);
    cEl.AddEventListener("MouseLeftButtonUp",NBAVideoPlayer.ControlEvent.TimeBufferProgressBar.MouseUp);
    cEl.AddEventListener("MouseEnter",NBAVideoPlayer.ControlEvent.TimeBufferProgressBar.MouseMove);
    
    cEl=null;
}


// Parameters and some XAML objects reference.
NBAVideoPlayer.Params={
    Reset:function(){ // Resets parameters when loading new video.
        this.TimeSliderWidth=172;
        this.StopModeEntered=false;
        this.CurrentMediaState="";
        this.TitleSet=false;
    },
    FirstTimePlayStarted:false, // Used for autoplay functionality.
    TimeSlider:null, // XAML element.
    TimeBufferProgressBar:null, // XAML element: buffering progress.
    TimeUnbufferedBar:null, // XAML element: helper element.
    TimePlayedBar:null, // XAML element: playing progress.
    TimeThumb:false, // XAML element.
    ControlsElement:null, // XAML element: used to enable/disable controld when loading.
    TimeSliderWidth: 172, // Constant for now.
    CurrentMediaState:"", // Last fired by media element. For future use.
    CurrentVolumePosition:0, // Used revert volume slider to last position when mute unpressed.
    Debug:false, // For temporary debug function.
    PlayedSliderAdjustInterval:null, // Interval object. Updates the playbar skin while playing.
    BufferingShowing:false, // True when buffering animation is displayed, to prevent the play symbol to show up.
    LargePlayShowing:false, // True when the central play symbol is visible. For future use.
    StopModeEntered:false, // True when the video stopped for any reason.
    TitleSet:false, // Indicates whether the metadata title was already set.
    MouseOverSL:false, // True when mouse is hovering Silverlight application.
    MouseIsDragging:false, // True when mouse is dragged over the application.
    AutoPlay:NBAVideoPlayer.AutoPlay, // Recieved from page.
    IsStreaming:true // True when media is streaming.
}
// --------------------------------

// Changes to different video.
NBAVideoPlayer.SetMedia=function(url){
    NBAVideoPlayer.Params.StopModeEntered=false;
    NBAVideoPlayer.Params.FirstTimePlayStarted=false;
    NBAVideoPlayer.Params.IsStreaming=false;
    //NBAVideoPlayer.Actions.AdjustPlayedSrubber();
    NBAVideoPlayer.MediaElement.source=url;
    NBAVideoPlayer.Actions.AdjustPlayedSrubber();
}
// --------------------------------


NBAVideoPlayer.Actions={
    ShowHidePlaceHolder:function(show){ // Controls visibility of background image.
        if(show) {NBAVideoPlayer.MediaElement.Visibility="Collapsed"}
        else {NBAVideoPlayer.MediaElement.Visibility="Visible"};
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
    },
    ShowHideLargePlay:function(show){ // Controls buffering central play symbol visibility.
        if(NBAVideoPlayer.Params.AutoPlay && !NBAVideoPlayer.Params.FirstTimePlayStarted) {
            show=false; // Prevents showing when autoplay is set to true.
        }
        if(show){
            if(NBAVideoPlayer.Params.BufferingShowing) return; // Prevents showing when buffering icon is displayed.
            var el=NBAVideoPlayer.PlayerObj.findName("PlayButtonLarge");
            el.Visibility="Visible";
            NBAVideoPlayer.PlayerObj.findName("PlayButtonLarge_Show").Begin(); // Starts fade animation.
            NBAVideoPlayer.Params.LargePlayShowing=true;
        }else{
            NBAVideoPlayer.PlayerObj.findName("PlayButtonLarge_Hide").Begin();
            NBAVideoPlayer.Params.LargePlayShowing=false;
        }
        NBAVideoPlayer.Actions.AdjustPlayedSrubber(); 
    },
    ShowHideBuffering:function(show){ // Controls buffering icon bar visibility.
        if(NBAVideoPlayer.Params.AutoPlay && !NBAVideoPlayer.Params.FirstTimePlayStarted) {
            show=true; // Forces to show when autoplay is set to true.
        }
        if(show){
            NBAVideoPlayer.Actions.ShowHideLargePlay(false); 
            NBAVideoPlayer.PlayerObj.findName("Buffering_Show").Begin();
            NBAVideoPlayer.Params.BufferingShowing=true;
        }else{
            NBAVideoPlayer.PlayerObj.findName("Buffering_Hide").Begin();
            NBAVideoPlayer.Params.BufferingShowing=false;
        }
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
    },
    ShowHideInformationBar:function(show){ // Controls title bar visibility.
        if(show){
            NBAVideoPlayer.PlayerObj.findName("InformationBar").Visibility="Visible";
            NBAVideoPlayer.PlayerObj.findName("InformationBar_Show").Begin();
        }else{
            NBAVideoPlayer.PlayerObj.findName("InformationBar_Hide").Begin();
        }
    },
    ShowHideVideoControls:function(show){ // Controls control bar visibility.
        if(show){
            NBAVideoPlayer.PlayerObj.findName("VideoControls_Show").Begin();
        }else{
            NBAVideoPlayer.PlayerObj.findName("VideoControls_Hide").Begin();
        }
    },
    SetTitle:function(){ // Writes metadata to title.
        try{ // Checks to see whether Name attribute exists.
            NBAVideoPlayer.PlayerObj.findName("InformationBarTextTitle").Text=NBAVideoPlayer.MediaElement.Attributes.GetItemByName("Title").Value;
        }catch(e){}
        NBAVideoPlayer.Params.TitleSet=true;
        if(NBAVideoPlayer.Params.MouseOverSL){ 
            // Until title is set, bar is invisible, even when mouse is hovering application.
            NBAVideoPlayer.Actions.ShowHideInformationBar(true);
            NBAVideoPlayer.Actions.ShowHideVideoControls(true);
        }
    },
    ResetTitle:function(){ // Removes title text when changing video.
        NBAVideoPlayer.PlayerObj.findName("InformationBarTextTitle").Text="";
        NBAVideoPlayer.Params.TitleSet=false;
        NBAVideoPlayer.Actions.ShowHideInformationBar(false);
    },
    SetLogo:function(url){ // Downloads logo image. URL is retrieved from page.
        var logoEl=NBAVideoPlayer.PlayerObj.findName("InformationBarLogo");
        logoEl.addEventListener("DownloadProgressChanged",
            function(sender,args){
                if(sender.downloadProgress == 1.0){
                    window.setTimeout(function(){
                        // Using timeout looks weird, but it's the only solution.
                        // More info: http://silverlight.net/forums/t/3935.aspx
                        // http://www.firstfloorsoftware.com/BlogPost.aspx?id=12097
                        NBAVideoPlayer.PlayerObj.findName("InformationBar")["Height"]=parseInt(sender["Height"])+5;
                        NBAVideoPlayer.PlayerObj.findName("InformationBarBg")["Height"]=parseInt(sender["Height"])+5;
                        NBAVideoPlayer.PlayerObj.findName("InformationBarLogo")["Canvas.Left"]=400-sender["Width"]-7;
                        NBAVideoPlayer.PlayerObj.findName("InformationBarLogo")["Canvas.Top"]=2;
                        NBAVideoPlayer.PlayerObj.findName("InformationBarLogo_Show").Begin();
                    },1000);
                }
            }
        );
        
        logoEl.Source=url;
    },
    AdjustPlayedSrubber:function(){ 
        // Playbar's appearance is different on both sides of the scrubber.
        // This function adjusts skin to reflect scrubber position.
        NBAVideoPlayer.Params.TimePlayedBar["Width"]=NBAVideoPlayer.Params.TimeThumb["Canvas.Left"]-47;
        NBAVideoPlayer.Params.TimePlayedBar["Canvas.Left"]=-(NBAVideoPlayer.Params.TimeThumb["Canvas.Left"]-52);
    },
    AdjustPlayedSliderConstantly:function(start){ 
        // Sets inrerval to AdjustPlayedSrubber() when playing.
        if(start){
            NBAVideoPlayer.Params.PlayedSliderAdjustInterval=setInterval(NBAVideoPlayer.Actions.AdjustPlayedSrubber,100);
        }else{
            clearInterval(NBAVideoPlayer.Params.PlayedSliderAdjustInterval);
        }
    },
    EnterStopMode:function(){
        // Stops video, reverts playbar to start, shows placeholder, hides buffer...
        NBAVideoPlayer.Params.StopModeEntered=true;
        if(NBAVideoPlayer.MediaElement.Position.Seconds!=0){
            NBAVideoPlayer.MediaElement.Position="00:00:00";
        }
        NBAVideoPlayer.Actions.ShowHideBuffering(false);
        NBAVideoPlayer.Actions.ShowHidePlaceHolder(true);
        NBAVideoPlayer.Actions.ShowHideLargePlay(true);
        NBAVideoPlayer.Actions.DisableEnableControls(false);
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        debug("stop mode entered");
    },
    DisableEnableControls:function(disable){
        // Disables controls while opening media.
        // When opening video, the media components queues all control commands (play, stop...).
        // When it processes the queue, the video might go crazy.
        if(disable){
            NBAVideoPlayer.Params.ControlsElement["IsHitTestVisible"]="False";
            NBAVideoPlayer.Actions.ShowHideLargePlay(false);
        }else{
            NBAVideoPlayer.Params.ControlsElement["IsHitTestVisible"]="true";
        }
    }
}


NBAVideoPlayer.MediaEvent={
    MediaOpened:function(sender,args){
        //NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        NBAVideoPlayer.Params.Reset();
        NBAVideoPlayer.CurrentMedia=sender;

        NBAVideoPlayer.PlayerObj.findName("PlaceholderImage").Source=NBAVideoPlayer.BackgroundImage;
        NBAVideoPlayer.Actions.SetLogo(NBAVideoPlayer.TitleImage);
        NBAVideoPlayer.Actions.SetTitle();
        
        if(!NBAVideoPlayer.Params.AutoPlay){
            NBAVideoPlayer.Actions.ShowHideBuffering(false);
            NBAVideoPlayer.Actions.ShowHideLargePlay(true);
        }
        NBAVideoPlayer.Params.CurrentVolume=sender.Volume;
        
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        NBAVideoPlayer.Actions.DisableEnableControls(false);
        NBAVideoPlayer.Params.FirstTimePlayStarted=true;
    },
    MediaStateChanged:function(sender, args){ 
        // Event that the media component fires as the video goes.
	    
	    if(NBAVideoPlayer != null)
	    {    
	        if(sender.CurrentState != "Playing" && sender.CurrentState != "Buffering")
	        {
	        	NBAVideoPlayer.Actions.ShowHideInformationBar(true);
	        	NBAVideoPlayer.Actions.ShowHideVideoControls(true);	
	        }
	        else if(sender.CurrentState == "Playing")
	        {
	        	NBAVideoPlayer.Actions.ShowHideInformationBar(false);
	        	NBAVideoPlayer.Actions.ShowHideVideoControls(false);	
	        }
        }
        
        var sE=NBAVideoPlayer.MediaEvent;
        debug(sender.CurrentState); 
        switch(sender.CurrentState){
            case "Buffering":
                sE.Buffering(sender, args);
            break;
            case "Closed":
                sE.Closed(sender, args);
            break;
            case "Error":
                sE.Error(sender, args);
            break;
            case "Opening":
                sE.Opening(sender, args);
            break;
            case "Paused":
                sE.Paused(sender, args);
            break;
            case "Playing":
                sE.Playing(sender, args);
            break;
            case "Stopped":
                sE.Stopped(sender, args);
            break;
        }
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
    },
    Buffering:function(sender, args){
        NBAVideoPlayer.Actions.DisableEnableControls(false);
        NBAVideoPlayer.Actions.ShowHideBuffering(true);
        NBAVideoPlayer.Params.CurrentMediaState="Buffering";
        NBAVideoPlayer.Actions.AdjustPlayedSliderConstantly(true);
    },
    Closed:function(sender, args){
        NBAVideoPlayer.Actions.ShowHideBuffering(false);
        NBAVideoPlayer.Actions.ShowHidePlaceHolder(true);
        NBAVideoPlayer.Actions.ResetTitle();
        NBAVideoPlayer.ParamsCurrentMediaState="Closed";
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        NBAVideoPlayer.Actions.AdjustPlayedSliderConstantly(false);
    },
    Error:function(sender, args){
        NBAVideoPlayer.Actions.ShowHideBuffering(false);
        NBAVideoPlayer.Actions.ShowHidePlaceHolder(true);
        NBAVideoPlayer.Params.CurrentMediaState="Error";
        NBAVideoPlayer.Actions.AdjustPlayedSliderConstantly(false);
    },
    Opening:function(sender, args){
        NBAVideoPlayer.Actions.DisableEnableControls(true);
        NBAVideoPlayer.Params.CurrentMediaState="Opening";
        NBAVideoPlayer.Actions.ShowHideBuffering(true);
        if(NBAVideoPlayer.Params.StopModeEntered) return;
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        NBAVideoPlayer.Actions.ShowHideBuffering(true);
        NBAVideoPlayer.Actions.ShowHidePlaceHolder(true);
        NBAVideoPlayer.Actions.ShowHideLargePlay(false);
    },
    Paused:function(sender, args){
        NBAVideoPlayer.Actions.ShowHideBuffering(false);
        NBAVideoPlayer.Actions.ShowHideLargePlay(true);
        NBAVideoPlayer.Params.CurrentMediaState="Paused";
        if(NBAVideoPlayer.MediaElement.Position.Seconds==0){
            NBAVideoPlayer.Actions.ShowHidePlaceHolder(true);
        }
        NBAVideoPlayer.Actions.AdjustPlayedSliderConstantly(false);
    },
    Playing:function(sender, args){
        NBAVideoPlayer.Actions.DisableEnableControls(false);
        if(NBAVideoPlayer.Params.StopModeEntered) {
            return;
        }
        NBAVideoPlayer.Actions.ShowHideBuffering(false);
        NBAVideoPlayer.Actions.ShowHidePlaceHolder(false);
        NBAVideoPlayer.Actions.ShowHideLargePlay(false);
        NBAVideoPlayer.Actions.SetTitle();
        NBAVideoPlayer.Params.CurrentMediaState="Playing";
        NBAVideoPlayer.Actions.AdjustPlayedSliderConstantly(true);
    },
    Stopped:function(sender, args){
        NBAVideoPlayer.Actions.EnterStopMode();
        NBAVideoPlayer.Actions.SetTitle();
        NBAVideoPlayer.Params.CurrentMediaState="Stopped";
        NBAVideoPlayer.Actions.AdjustPlayedSliderConstantly(false);
    },
    BufferingProgressChanged:function(sender, args){
        NBAVideoPlayer.Params.CurrentMediaState="BufferingProgressChanged";
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
    },
    DownloadProgressChanged:function(sender, args){
        if(sender.DownloadProgress!=1) { // Streaming media fires this event once.
            NBAVideoPlayer.Params.FirstTimePlayStarted=true;
        }else{
            NBAVideoPlayer.Params.IsStreaming=true;
        }
        // Controls the appearance of the download progress indicator:
        NBAVideoPlayer.Params.TimeBufferProgressBar.Width=
            sender.DownloadProgress*NBAVideoPlayer.Params.TimeSliderWidth;
        NBAVideoPlayer.Params.TimeUnbufferedBar.Width=
            NBAVideoPlayer.Params.TimeSliderWidth-NBAVideoPlayer.Params.TimeBufferProgressBar.Width;
        NBAVideoPlayer.Params.TimeUnbufferedBar["Canvas.Left"]=NBAVideoPlayer.Params.TimeBufferProgressBar.Width+50;
        NBAVideoPlayer.Params.CurrentMediaState="DownloadProgressChanged";
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
    },
    MediaEnded:function(sender, args){
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        NBAVideoPlayer.MediaElement.Stop();
        NBAVideoPlayer.Actions.ShowHideBuffering(false);
        NBAVideoPlayer.Actions.ShowHidePlaceHolder(true);
        NBAVideoPlayer.Actions.ShowHideLargePlay(true);
        NBAVideoPlayer.Params.CurrentMediaState="MediaEnded";
        NBAVideoPlayer.Actions.AdjustPlayedSliderConstantly(false);
    },
    MediaFailed:function(sender, args){
        //alert("Failed to load.");
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        NBAVideoPlayer.Actions.ShowHideBuffering(false);
        NBAVideoPlayer.Actions.ShowHidePlaceHolder(true);
        NBAVideoPlayer.Actions.ShowHideLargePlay(false);
        NBAVideoPlayer.Actions.ResetTitle();
        NBAVideoPlayer.Params.CurrentMediaState="MediaFailed";
        NBAVideoPlayer.Actions.AdjustPlayedSliderConstantly(false);
    }
}

// Silverlight object events handlers.
NBAVideoPlayer.SLEvent={ 
    MouseEnter:function(sender, args){
        NBAVideoPlayer.Params.MouseOverSL=true;
        if(NBAVideoPlayer.Params.TitleSet){
            NBAVideoPlayer.Actions.ShowHideInformationBar(true);
        }
        NBAVideoPlayer.Actions.ShowHideVideoControls(true);
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
    },
    MouseLeave:function(sender, args){
        NBAVideoPlayer.Params.MouseOverSL=false;
        
        
        if(NBAVideoPlayer.SLObj.get_playState() == "Playing")
        {
        	NBAVideoPlayer.Actions.ShowHideInformationBar(false);
        	NBAVideoPlayer.Actions.ShowHideVideoControls(false);
        }
        
        if(NBAVideoPlayer.Params.MouseIsDragging) {
            NBAVideoPlayer.Params.MouseIsDragging=false;
            debug("leave sl");
        }
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
    },
    MouseDown:function(sender, args){
        NBAVideoPlayer.Actions.AdjustPlayedSrubber(); // Incase user clicks the timebar.
    },
    MouseUp:function(sender, args){
        NBAVideoPlayer.Actions.AdjustPlayedSrubber();
    },
    MouseMove:function(sender, args){
        if(NBAVideoPlayer.Params.MouseIsDragging) {
            NBAVideoPlayer.Actions.AdjustPlayedSrubber(); // Incase user clicks the timebar and drags.
        }
        
    }
}

// Controls events handlers.
NBAVideoPlayer.ControlEvent={
    PlayPause:{
        MouseEnter:function(sender, args){

        },
        MouseLeave:function(sender, args){

        },
        MouseDown:function(sender, args){
            NBAVideoPlayer.Params.StopModeEntered=false;
        },
        MouseUp:function(sender, args){

        },
        MouseMove:function(sender, args){

        }
    },
    Stop:{
        MouseEnter:function(sender, args){

        },
        MouseLeave:function(sender, args){

        },
        MouseDown:function(sender, args){
            NBAVideoPlayer.Actions.EnterStopMode();
        },
        MouseUp:function(sender, args){
            
        },
        MouseMove:function(sender, args){

        }
    },
    TimeSlider:{
        MouseEnter:function(sender, args){

        },
        MouseLeave:function(sender, args){

        },
        MouseDown:function(sender, args){
            NBAVideoPlayer.Params.MouseIsDragging=true;
            NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        },
        MouseUp:function(sender, args){
            mouseUp=false;
            NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        },
        MouseMove:function(sender, args){
            
        }
    },
    TimeThumb:{
        MouseEnter:function(sender, args){
            
        },
        MouseLeave:function(sender, args){
            
        },
        MouseDown:function(sender, args){
            NBAVideoPlayer.Params.MouseIsDragging=true;
            NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        },
        MouseUp:function(sender, args){
            NBAVideoPlayer.Params.MouseIsDragging=false;
            NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        },
        MouseMove:function(sender, args){

        }
    },
    TimeBufferProgressBar:{
        MouseEnter:function(sender, args){
            
        },
        MouseLeave:function(sender, args){

        },
        MouseDown:function(sender, args){
            NBAVideoPlayer.Params.MouseIsDragging=true;
            NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        },
        MouseUp:function(sender, args){
            NBAVideoPlayer.Params.MouseIsDragging=false;
            NBAVideoPlayer.Actions.AdjustPlayedSrubber();
        },
        MouseMove:function(sender, args){
            
        }
    },
    Mute:{
        MouseEnter:function(sender, args){
            
        },
        MouseLeave:function(sender, args){
            
        },
        MouseDown:function(sender, args){
            
        },
        MouseUp:function(sender, args){
            var mEl=NBAVideoPlayer.MediaElement;
            var vThumb=NBAVideoPlayer.PlayerObj.findName("VolumeThumb");
            if(!mEl.IsMuted){
                NBAVideoPlayer.Params.CurrentVolumePosition=vThumb["Canvas.Left"];
                vThumb["Canvas.Left"]=0;
            }else{
                if(vThumb["Canvas.Left"]==0){ // Reverts volume slider to previous position.
                    vThumb["Canvas.Left"]=NBAVideoPlayer.Params.CurrentVolumePosition;
                }
            }
        },
        MouseMove:function(sender, args){
            
        }
    },
    VolumeThumb:{
        MouseEnter:function(sender, args){
            
        },
        MouseLeave:function(sender, args){
            
        },
        MouseDown:function(sender, args){
            
        },
        MouseUp:function(sender, args){
            
        },
        MouseMove:function(sender, args){
            
        }
    },
    VolumeSlider:{
        MouseEnter:function(sender, args){
            
        },
        MouseLeave:function(sender, args){
            
        },
        MouseDown:function(sender, args){
            
        },
        MouseUp:function(sender, args){
            
        },
        MouseMove:function(sender, args){
            
        }
    },
    PlayButtonLarge:{
        MouseEnter:function(sender, args){
            
        },
        MouseLeave:function(sender, args){
            
        },
        MouseDown:function(sender, args){
            NBAVideoPlayer.Params.StopModeEntered=false;
        },
        MouseUp:function(sender, args){
            NBAVideoPlayer.ControlEvent.PlayPause.MouseUp.apply(this, arguments);
            NBAVideoPlayer.MediaElement.Play();
        },
        MouseMove:function(sender, args){
            
        },
        ShowCompleted:function(sender,args){
            // When symbol show animation is complete, make the symbol clickable.
            NBAVideoPlayer.PlayerObj.findName("PlayButtonLarge").IsHitTestVisible="True";
        },
        HideCompleted:function(sender,args){
            // When symbol hide animation is complete, make the symbol clickable.
            // To prevent clicking it when it's opacity set to zero.
            NBAVideoPlayer.PlayerObj.findName("PlayButtonLarge").IsHitTestVisible="False";
        }
    },
    InformationBar:{
        ShowCompleted:function(sender,args){
            
        },
        HideCompleted:function(sender,args){
            
        }
    }
}

// temporary debug function
function debug(str){
    if(NBAVideoPlayer.Params.Debug){
        $get("debug").innerHTML+=(new Date())+" - "+str+"<br />";
    }
}
// --------------------------------



createSilverlight();
