
function SlideManager(mplayer)
{
    this.CurrentSlide = 0;
    this.FocusFrame=1;
    this.Expanded=false;
    
    this.ListPanel = new ListPanel(SlideManager.Names.Main);
    
    mplayer.eventList.addListener(MediasitePlayer.Events.FullScreen,Event.createDelegate(this,this.handleFullScreenChange));
    mplayer.eventList.addListener(MediasitePlayer.Events.PanelSwitch,Event.createDelegate(this,this.handlePanelSwitch));
    mplayer.eventList.addListener(MediasitePlayer.Events.SlideChanged,Event.createDelegate(this,this.OnSlideChange));
    mss.AddAnimationMouseEventListeners("SlidesPanel_GoToStart",Event.createDelegate(this, this.handleGoToStartMouseUp));
    mss.AddAnimationMouseEventListeners("SlidesPanel_GoToEnd",Event.createDelegate(this, this.handleGoToEndMouseUp));
    mss.AddAnimationMouseEventListeners("SlidesPanel_PageUp",Event.createDelegate(this, this.handlePageUpMouseUp));
    mss.AddAnimationMouseEventListeners("SlidesPanel_PageDown",Event.createDelegate(this, this.handlePageDownMouseUp));
    this.ListPanel.eventList.addListener("DrawItem",Event.createDelegate(this,this.handleDrawItem));
    this.ListPanel.eventList.addListener("Clicked",Event.createDelegate(this,this.handleClicked));
    this.ListPanel.ObjectList = Manifest.Slides;
    this.ListPanel.SetTopIndex(0);
}

SlideManager.Names={};
SlideManager.Names.Main="SlidesPanel";
SlideManager.Names.Target='Slide_Target_';

SlideManager.prototype=
{

handleDrawItem:function(drawItemArgs)
{
        
    var itemText="";
    var imageSource="Empty_ppt_big.jpg";
      
    if (drawItemArgs.Object!=null)
    {
        var slideDescription=drawItemArgs.Object.Text;
        var slideNumber=drawItemArgs.ObjectIndex+1;
        var slideTime=mss.FormatTimeHHMMSS(drawItemArgs.Object.Time);
        itemText= slideNumber+")  "+slideTime+"\r\n"+slideDescription;

        var imageSource=Manifest.GetSlideUrl(slideNumber);
    }
    
    var textCanvas = mss.FindName(drawItemArgs.ItemPanel.Name+"_Text");
    textCanvas.Text=itemText;
    //    mss.AlignText(textCanvas,TextAlign.CenterVertical);

    var imagePanel=mss.FindName(drawItemArgs.ItemPanel.Name+"_Slide");
    if (imagePanel!=null)
    {
        imagePanel.Source = imageSource;
    }

},

handleClicked:function(clickedArgs)
{
    window.mplayer.SeekTime(clickedArgs.Object.Time);
    this.Toggle();
},

handlePanelSwitch:function(panelName) 
{
   if (panelName!=SlideManager.Names.Main)
   {
        if (this.Expanded)
        {
            this.Show(false);
        }
   }
},

handleFullScreenChange:function(fullScreen) 
{
   this.SetVisible(!fullScreen);
},

handleSlideManagerClicked:function(sender,eventArgs) 
{
   this.Toggle();
},

handleGoToStartMouseUp:function(sender,eventArgs) 
{
    this.ListPanel.GoToStart();
},
handleGoToEndMouseUp:function(sender,eventArgs) 
{
    this.ListPanel.GoToEnd();
},
handlePageUpMouseUp:function(sender,eventArgs) 
{
    this.ListPanel.PageUp();
},
handlePageDownMouseUp:function(sender,eventArgs) 
{
   this.ListPanel.PageDown();
},

Toggle:function() 
{
    if (!this.Expanded)
    {
        window.mplayer.RequestPanelSwitch(SlideManager.Names.Main);
    }
    this.Show(!this.Expanded);
},

Show:function(show) 
{
    if (show)
    {
        mss.Animate(MediasitePlayer.AnimationEvent.SlideNavigationShow);
    }
    else
    {
        mss.Animate(MediasitePlayer.AnimationEvent.SlideNavigationHide);
    }
    this.Expanded=show;
},

SetVisible:function(show) 
{
    mss.SetVisible(SlideManager.Names.Main,show);
},

handleSlideMouseEnter:function(sender, eventArgs) 
{
    var idx=this.GetIndexFromName(sender.Name);
	mss.Animate("SlideMouseEnter_"+idx);
},

handleSlideMouseLeave:function(sender, eventArgs) 
{
    var idx=this.GetIndexFromName(sender.Name);
	mss.Animate("SlideMouseLeave_"+idx);
},

handleSlideMouseDown:function(sender, eventArgs) 
{
    var idx=this.GetIndexFromName(sender.Name);

    if (idx>-1)
    {
   	    var slide = this.GetSlideFromFrameIndex(idx); 
    	
	    if (slide!=null)
	    {
            window.mplayer.SeekTime(slide.Time);
	    }
    }
},

OnSlideChange:function(currentSlide)
{
//    this.CurrentSlide=currentSlide;
//    
//    var source,firstSlide;
//    var page=Math.floor((this.CurrentSlide-1)/this.TotalSlides);
//	                
//     firstSlide=page*this.TotalSlides+1;
//     
//     SfDebug.DPF(SfDebug.Verbose, "TotalSlides: "+ this.TotalSlides+" ManifestLength:"+Manifest.Slides.length);
//     SfDebug.DPF(SfDebug.Verbose, "CurrentSlide:" + this.CurrentSlide+" FirstSlide: "+firstSlide+" Page: "+page);
//     
//     for(index=0;index<this.TotalSlides;index++)
//     {
//            source=null;
//            var canvasName="Slide."+(index+1)+".Image";
//      
//            if ((firstSlide+index)<Manifest.Slides.length)
//            {
//                source=Manifest.GetSlideUrl(firstSlide+index);
//            }
//            var imagePanel=mss.FindName(canvasName);
//            if (imagePanel!=null)
//            {
//                imagePanel.Source = source;
//            }
//            
//        }
},

SetFocus:function(index)
{
    this.FocusFrame=index;
    mss.Animate("Slide_"+index+"_SetHighlight");
},


GetIndexFromName:function(name)
{
    if (name.indexOf(SlideManager.Names.Target)>-1)
    {
        var str = name.substr(SlideManager.Names.Target.length,1);   
    	return parseInt(str); 
    }
    
    return -1;
},

GetSlideFromFrameIndex:function(index)
{
   if (this.CurrentSlide<4) 
   {
        offset=0;
   }
   else 
   {
        offset = this.CurrentSlide-3;
   }
   
   ix = index-1+offset;
   
   if (ix<Manifest.Slides.length)
   {
        return Manifest.Slides[ix];
   }
   else
   {
        return null;
   }
}

}


