﻿
var plugin;
var windowMaxZIndex=100;
var windowIsMoving=false;
var windowIsResizing=false;
var windowLastMousePosX;
var windowLastMousePosY;
var windowScale=1;
var windowResizeDirHor;
var windowResizeDirVer;
var mediaIsSynching = false;
var mediaPositionChanging = false;
var mediaVolumeChanging = false;
var transcriptScrolling = false;
var transcriptScrollRange = 0;
var searchResultsScrolling = false;
var searchResultsScrollRange = 0;
var cancelWindowMouseDown = false;
var inkStroke = null;
var inkColor = "#99FFFF00";
var inkSize = 12;


var _completed = false;
var _posMax = 0;
var _duration = 0;
var _posCurrent = 0;

var _recContent;
var _captions;
var _transcript;


var _chapterGroup = 1;
var _thumbGroup = 1;
var cccc;


function PageLoad(control, userContext, rootElement)
{
	plugin = control;
	plugin.content.onResize=PageResize;
	plugin.content.onFullScreenChange=PageFullscreen;
	_recContent = new Content("cbx_recording.xml");
	_captions = new Sami("captions.smi");
	_transcript = new Sami("transcript.smi");		
	PagePopulate();

	window.setInterval("PageUpdateStatus()",200);
	var vidCnt = _recContent.Videos().GetCount();
	if(vidCnt>1)
		window.setInterval("PageSyncMedia()",100);
}

function PageSyncMedia()
{

	var media1 = plugin.content.findName("Media1");
	var media2 = plugin.content.findName("Media2");
	
		var pos1 = media1.Position;
		var pos2 = media2.Position;
		plugin.content.findName("Media1Time").Text=SecondsToStringWithMilliseconds(pos1.Seconds);
		plugin.content.findName("Media2Time").Text=SecondsToStringWithMilliseconds(pos2.Seconds);
		if((pos1.Seconds - pos2.Seconds) > 0.2)
		{
			media1.Pause();
			mediaIsSynching=true;
		}
		else if((pos1.Seconds - pos2.Seconds) < -0.2)
		{
			media2.Pause();
			mediaIsSynching=true;
		}
		else
		{
			if(mediaIsSynching)
			{
				DoPlay();
				mediaIsSynching=false;
			}
		}
	
	
}

function PagePopulate()
{

	plugin.content.findName("XBarMetaDisplay").Text = _recContent.Meta().GetTitle() + " | " + _recContent.Meta().GetAuthor() + " | " + _recContent.Meta().GetDate();
	VideosPopulate();	
	ChaptersPopulate(_chapterGroup);
	ThumbnailsPopulate(_thumbGroup);
	TranscriptPopulate();

}

function PerformSearch()
{
	plugin.content.findName("SearchResultsScroll").Visibility="Collapsed";
	var searchTerm = plugin.content.findName("SearchTermEntryText").Text;
	if(searchTerm.length==0)
	{
		var tb = plugin.content.createFromXaml('<TextBlock Foreground="#FFFFFFFF" FontSize="12" Text="No search term entered."/>');
		plugin.content.findName("SearchResultsField").Children.Clear();
		plugin.content.findName("SearchResultsField").Children.Add(tb);				
		return;
	}

	var results = _recContent.SearchItems().SearchFor(searchTerm);
	if(results)
	{
		plugin.content.findName("SearchResultsField").Children.Clear();
		var bottom = 0;
		for(var i=0; i<results.length; i++)
		{
			var lowest = 0;
			var resultXaml = '<Canvas Cursor="Hand" Name="SearchResultFieldItem_' + i + '_' + results[i].GetTime() + '"  >' +
				'<TextBlock Width="460" Text="' + SecondsToString(results[i].GetTime()) + '" Foreground="#FFFFFFFF" />' +
				'<TextBlock Name="SearchResultFieldItemText_' + i + '" Canvas.Left="80" Width="380"  TextWrapping="Wrap" FontSize="12" Text="' + results[i].GetText() + '" Foreground="#FFFFFFFF" />';
			if(results[i].GetFileThumb()!="")
			{	
				resultXaml += '<Rectangle Canvas.Top="25" Width="64" Height="48">' +
					'<Rectangle.Fill>' +
						'<ImageBrush ImageSource="' + results[i].GetFileThumb() + '"/>' +
					'</Rectangle.Fill>' +
				'</Rectangle>';
				lowest = 73;
			}
			resultXaml += '</Canvas>';
			
			var cv = plugin.content.createFromXaml(resultXaml);
			plugin.content.findName("SearchResultsField").Children.Add(cv);	
			
			cv.addEventListener("MouseLeftButtonDown","SearchResultEntryMouseDown");
			cv.addEventListener("MouseLeftButtonUp","SearchResultEntryMouseUp");
			cv.addEventListener("MouseMove","SearchResultEntryMouseMove");
			cv.addEventListener("MouseEnter","SearchResultEntryMouseEnter");
			cv.addEventListener("MouseLeave","SearchResultEntryMouseLeave");
			cv["Canvas.Top"] = bottom;
			
			if(plugin.content.findName("SearchResultFieldItemText_" + i)["Canvas.Top"]+plugin.content.findName("SearchResultFieldItemText_" + i).ActualHeight > lowest)
				lowest = (plugin.content.findName("SearchResultFieldItemText_" + i)["Canvas.Top"]+plugin.content.findName("SearchResultFieldItemText_" + i).ActualHeight);
			bottom += lowest+15;


			if(bottom > plugin.content.findName("SearchResultsClip").Height)
			{
				plugin.content.findName("SearchResultsScroll").Visibility="Visible";
				var searchResultsHeight = bottom;
				searchResultsScrollRange = searchResultsHeight - plugin.content.findName("SearchResultsClip").Height;
				plugin.content.findName("SearchResultsScrollKnob").Height = plugin.content.findName("SearchResultsClip").Height * plugin.content.findName("SearchResultsScroll").Height / searchResultsHeight ;
			}
			
		}
	}
	else
	{
		var tb = plugin.content.createFromXaml('<TextBlock Foreground="#FFFFFFFF" FontSize="12" Text="No results found."/>');
		plugin.content.findName("SearchResultsField").Children.Clear();
		plugin.content.findName("SearchResultsField").Children.Add(tb);				
		return;	
	
	}

}

function TranscriptPopulate()
{
	var maxRowWidth = plugin.content.findName("TranscriptClip").Width;
	var rowWidth = 0;
	var row = 0;


	var entryCount=0;
	
	if(!_transcript.IsNull())
	{

		for(var i=0; i<_transcript.Entries().GetCount(); i++)
		{
			var e = _transcript.Entries().GetEntry(i).GetText();
			var t = e.split(" ");
			for(var j=0;j<t.length;j++)
			{
			
				var tb = plugin.content.createFromXaml('<TextBlock Name="' + "transcriptEntry" + entryCount + "_" + _transcript.Entries().GetEntry(i).GetTime()/1000 + '" Cursor="Hand" Foreground="#FFFFFFFF" FontSize="12" Text="' + t[j] + ' "/>');
			
				plugin.content.findName("TranscriptField").Children.Add(tb);
			
				rowWidth += tb.ActualWidth;

				if(rowWidth >= maxRowWidth)
				{
					row++;
					rowWidth = tb.ActualWidth;
				}
			

				tb["Canvas.Left"] = rowWidth - tb.ActualWidth;
				tb["Canvas.Top"] = row * tb.ActualHeight;
				tb.addEventListener("MouseLeftButtonDown","TranscriptEntryMouseDown");
				tb.addEventListener("MouseLeftButtonUp","TranscriptEntryMouseUp");
				tb.addEventListener("MouseMove","TranscriptEntryMouseMove");
				tb.addEventListener("MouseEnter","TranscriptEntryMouseEnter");
				tb.addEventListener("MouseLeave","TranscriptEntryMouseLeave");
				entryCount++;
			}
		}

		if(plugin.content.findName("TranscriptField").Children.Count==0)
		{
			var tb = plugin.content.createFromXaml('<TextBlock  Foreground="#FFFFFFFF" FontSize="12" Text="No transcript available."/>');
			plugin.content.findName("TranscriptField").Children.Add(tb);
		}
		else
		{
			var tb = plugin.content.findName("TranscriptField").Children.GetItem(plugin.content.findName("TranscriptField").Children.Count-1);
			if(tb["Canvas.Top"]+tb.ActualHeight > plugin.content.findName("TranscriptClip").Height)
			{
				plugin.content.findName("TranscriptScroll").Visibility="Visible";
				var transcriptHeight = tb["Canvas.Top"]+tb.ActualHeight;
				transcriptScrollRange = transcriptHeight - plugin.content.findName("TranscriptClip").Height;
				plugin.content.findName("TranscriptScrollKnob").Height = plugin.content.findName("TranscriptClip").Height * plugin.content.findName("TranscriptScroll").Height / transcriptHeight ;
			}
		}
	}
}

function VideosPopulate()
{
	var vidCnt = _recContent.Videos().GetCount();
	if(vidCnt>0)
	{
		plugin.content.findName("Media1").Source = _recContent.Videos().GetVideo(0).GetFile();
		if(plugin.content.findName("Media1").Source=="broadcast.asx")
		{
			ApplyPreset(4);
		}
		else
		{
			ApplyPreset(1);
		}
	}
	if(vidCnt>1)
	{
		plugin.content.findName("Media2").Source = _recContent.Videos().GetVideo(1).GetFile();
		plugin.content.findName("Display2MediaProgress").Visibility="Visible";
		plugin.content.findName("Display2ButtonModeSlides").Visibility="Visible";
		plugin.content.findName("Display2ButtonModeVideo").Visibility="Visible";
		ApplyPreset(1);

	}
}

function ThumbnailsPopulate(group)
{
	var cnt = _recContent.Slides().GetCount();
	var groups = Math.ceil(cnt / 9);
	plugin.content.findName("ThumbnailsGroupDisplay").Text = group + "|" + groups;
	for(var i=0; i<9; i++)
	{
		var thumb = ((group-1) * 9) + i;
		if(thumb < cnt)
		{
			plugin.content.findName("ThumbnailImage"+Number(i+1)+"Time").Text = SecondsToString(_recContent.Slides().GetSlide(thumb).GetTime());
			plugin.content.findName("ThumbnailImage"+Number(i+1)).Source = _recContent.Slides().GetSlide(thumb).GetFileThumb();
		}
		else
		{
			plugin.content.findName("ThumbnailImage"+Number(i+1)+"Time").Text = "";
			plugin.content.findName("ThumbnailImage"+Number(i+1)).Source = "";
		}
			
	}
}

function ChaptersPopulate(group)
{
	var cnt = _recContent.Chapters().GetCount();
	var groups = Math.ceil(cnt / 15);
	plugin.content.findName("ChaptersGroupDisplay").Text = group + "|" + groups;
	for(var i=0; i<15; i++)
	{
		var chap = ((group-1) * 15) + i;
		if(chap < cnt)
			plugin.content.findName("ChapterLabel"+Number(i+1)).Text = SecondsToString(_recContent.Chapters().GetChapter(chap).GetTime()) + "    " + _recContent.Chapters().GetChapter(chap).GetTitle();
		else
			plugin.content.findName("ChapterLabel"+Number(i+1)).Text = "";
	}
	
}

function PageResize()
{
	PageUpdateLayout();
}

function PageFullscreen()
{
	if(plugin.content.fullScreen)
	{
		plugin.content.findName("XBarButtonFullIconVert").Visibility="Collapsed";
	}
	else
	{
		plugin.content.findName("XBarButtonFullIconVert").Visibility="Visible";
	}
	PageUpdateLayout();
}

function PageUpdateLayout()
{

	var page = plugin.content.findName("Page");
	var body = page.findName("Body");
	page.Width = plugin.content.ActualWidth;
	page.Height = plugin.content.ActualHeight;

	var bodyAspect = body.Width/body.Height;
	var pageAspect = page.Width/page.Height;
	var bodyScale = 1;

	if(pageAspect > bodyAspect)
	{
		
		body["Canvas.Top"]=0;
		bodyScale=page.Height/body.Height;
		body["Canvas.Left"]=Math.floor((page.Width-(body.Width*bodyScale))/2);
		
	}
	else
	{
		body["Canvas.Left"]=0;
		bodyScale=page.Width/body.Width;
		body["Canvas.Top"]=Math.floor((page.Height-(body.Height*bodyScale))/2);
	}
	page.findName("BodyScale").ScaleX=bodyScale;
	page.findName("BodyScale").ScaleY=bodyScale;
	

}

function PageUpdateStatus()
{
	//update position slide knob
	
	if(!mediaPositionChanging)
	{
		try
		{
			UpdateXBarSlideVolumeKnob();
			UpdateXBarSlidePositionKnob();
			UpdateXBarPositionDisplay();
			
			
		}
		catch(ex)
		{

		}

		//get position
		var pos = GetPosition();

		//update slide
		var slide = plugin.content.findName("Slide").ImageSource;
		for(var i=_recContent.Slides().GetCount()-1; i>=0; i--)
		{
			if(_recContent.Slides().GetSlide(i).GetTime() < pos)
			{
				if(slide != _recContent.Slides().GetSlide(i).GetFileNormal())
				{
					plugin.content.findName("Slide").ImageSource=_recContent.Slides().GetSlide(i).GetFileNormal();
				}
				break;
			}	
		}

		//update caption
		var caption = plugin.content.findName("CaptionsField").Text;
		if(!_captions.IsNull())
		{
			for(var i=_captions.Entries().GetCount()-1; i>=0; i--)
			{
				if(_captions.Entries().GetEntry(i).GetTime() / 1000 < pos)
				{
					if(caption != _captions.Entries().GetEntry(i).GetText())
					{
						plugin.content.findName("CaptionsField").Text = _captions.Entries().GetEntry(i).GetText();
					}
					break;
				}
			}
		}
		

	}
			
			
}

function GoToThumbnail(index)
{
	var thumb = ((_thumbGroup-1) * 9) + index -1;
	var time = _recContent.Slides().GetSlide(thumb).GetTime();
	GoToPosition(time);
	cancelWindowMouseDown=true;
}

function GoToChapter(index)
{
	var chap = ((_chapterGroup-1) * 15) + index -1;
	var time = _recContent.Chapters().GetChapter(chap).GetTime();
	GoToPosition(time);
	cancelWindowMouseDown=true;
}

function GoToPosition(secs)
{
	var media1 = plugin.content.findName("Media1");
	var media2 = plugin.content.findName("Media2");
	var pos = media1.Position;
	pos.Seconds = secs;
	media1.Position=pos;
	media2.Position=pos;
}

function GetPosition()
{
	var media1 = plugin.content.findName("Media1");
	var pos = media1.Position;
	return pos.Seconds;
}

function SecondsToString(secs)
{
    var s=0;
    var m=0;
    var h=0;
    
    h=Math.floor(secs/3600);
    secs=secs-(3600*h);
    m=Math.floor(secs/60);
    secs=secs-(60*m);
    s=Math.floor(secs);
    
    if(h<10)
        h="0"+h;
    if(m<10)
        m="0"+m;
    if(s<10)
        s="0"+s;
    return h+":"+m+":"+s;
}

function SecondsToStringWithMilliseconds(secs)
{
	var ms=0;
	var s=0;
    var m=0;
    var h=0;
   
    h=Math.floor(secs/3600);
    secs=secs-(3600*h);
    m=Math.floor(secs/60);
    secs=secs-(60*m);
    s=Math.floor(secs);
	ms=secs%1;
    s=Number(s)+Number(ms);
	s=s.toFixed(3);
    if(h<10)
        h="0"+h;
    if(m<10)
        m="0"+m;
    if(s<10)
        s="0"+s;
    return h+":"+m+":"+s;
}

function ShowInk()
{
	plugin.content.findName("Display1InkPresenter").Visibility="Visible";
	plugin.content.findName("Display2InkPresenter").Visibility="Visible";
}

function HideInk()
{
	plugin.content.findName("Display1InkPresenter").Visibility="Collapsed";
	plugin.content.findName("Display2InkPresenter").Visibility="Collapsed";
}

function ClearInk()
{
	plugin.content.findName("Display1InkPresenter").Strokes.Clear();
	plugin.content.findName("Display2InkPresenter").Strokes.Clear();
}

function UpdateXBarPositionDisplay()
{
	
	var media1 = plugin.content.findName("Media1");
	var pos = media1.Position;
	plugin.content.findName("XBarPositionDisplay").Text=SecondsToString(pos.Seconds)+" | "+SecondsToString(media1.NaturalDuration.Seconds);
	_posCurrent = pos.Seconds;
	if(_posCurrent>_posMax)
		_posMax=_posCurrent;
	_duration = media1.NaturalDuration.Seconds;
	if(_posMax > _duration - 5)
		_completed = true;

	
}

function UpdateXBarSlideVolumeKnob()
{
	
	var media1 = plugin.content.findName("Media1");
	var track = plugin.content.findName("XBarSliderVolumeTrack");
	var knob = plugin.content.findName("XBarSliderVolumeKnob");
	var perc = media1.Volume;
	knob["Canvas.Left"]=perc*(track.Width-knob.Width);
}

function UpdateXBarSlidePositionKnob()
{
	var media1 = plugin.content.findName("Media1");
	var pos = media1.Position;
	var track = plugin.content.findName("XBarSliderPositionTrack");
	var knob = plugin.content.findName("XBarSliderPositionKnob");
	var perc = pos.Seconds/media1.NaturalDuration.Seconds;
	knob["Canvas.Left"]=perc*(track.Width-knob.Width);
	
}

function UpdateTranscriptScroll()
{
	
	UpdateTranscriptScrollKnob();
}

function UpdateTranscriptScrollKnob()
{
	
	var track = plugin.content.findName("TranscriptScroll");
	var knob = plugin.content.findName("TranscriptScrollKnob");
	if(track.Visibility=="Visible")
	{
		var perc = Math.abs(plugin.content.findName("TranscriptField")["Canvas.Top"] / transcriptScrollRange);
		knob["Canvas.Top"] = perc *(track.Height-knob.Height);
	}
	
}

function UpdateSearchResultsScrollKnob()
{
	
	var track = plugin.content.findName("SearchResultsScroll");
	var knob = plugin.content.findName("SearchResultsScrollKnob");
	if(track.Visibility=="Visible")
	{
		var perc = Math.abs(plugin.content.findName("SearchResultsField")["Canvas.Top"] / searchResultsScrollRange);
		knob["Canvas.Top"] = perc *(track.Height-knob.Height);
	}
	
}

function ApplyPreset(index)
{
	switch(index)
	{
		case 1:
			plugin.content.findName("Display1").Visibility="Visible";
			plugin.content.findName("Display1")["Canvas.Left"]=10;
			plugin.content.findName("Display1")["Canvas.Top"]=124;
			plugin.content.findName("Display1").Width=320;
			plugin.content.findName("Display1").Height=240;
			plugin.content.findName("Display1SurfaceVideo").Width=320;
			plugin.content.findName("Display1SurfaceVideo").Height=240;
			plugin.content.findName("Display1InkPresenter").Width=320;
			plugin.content.findName("Display1InkPresenter").Height=240;
			plugin.content.findName("Display1InkPresenterSurface").Width=320;
			plugin.content.findName("Display1InkPresenterSurface").Height=240;
			plugin.content.findName("Display2").Visibility="Visible";
			plugin.content.findName("Display2")["Canvas.Left"]=340;
			plugin.content.findName("Display2")["Canvas.Top"]=124;
			plugin.content.findName("Display2").Width=674;
			plugin.content.findName("Display2").Height=538;
			plugin.content.findName("Display2SurfaceVideo").Width=674;
			plugin.content.findName("Display2SurfaceVideo").Height=538;
			plugin.content.findName("Display2SurfaceImage").Width=674;
			plugin.content.findName("Display2SurfaceImage").Height=538;
			plugin.content.findName("Display2InkPresenter").Width=674;
			plugin.content.findName("Display2InkPresenter").Height=538;
			plugin.content.findName("Display2InkPresenterSurface").Width=674;
			plugin.content.findName("Display2InkPresenterSurface").Height=538;
			ClearInk();
			break;
		case 2:
			plugin.content.findName("Display1").Visibility="Visible";
			plugin.content.findName("Display1")["Canvas.Left"]=10;
			plugin.content.findName("Display1")["Canvas.Top"]=124;
			plugin.content.findName("Display1").Width=674;
			plugin.content.findName("Display1").Height=538;
			plugin.content.findName("Display1SurfaceVideo").Width=674;
			plugin.content.findName("Display1SurfaceVideo").Height=538;
			plugin.content.findName("Display1InkPresenter").Width=674;
			plugin.content.findName("Display1InkPresenter").Height=538;
			plugin.content.findName("Display1InkPresenterSurface").Width=674;
			plugin.content.findName("Display1InkPresenterSurface").Height=538;
			plugin.content.findName("Display2").Visibility="Visible";
			plugin.content.findName("Display2")["Canvas.Left"]=694;
			plugin.content.findName("Display2")["Canvas.Top"]=124;
			plugin.content.findName("Display2").Width=320;
			plugin.content.findName("Display2").Height=240;
			plugin.content.findName("Display2SurfaceVideo").Width=320;
			plugin.content.findName("Display2SurfaceVideo").Height=240;
			plugin.content.findName("Display2SurfaceImage").Width=320;
			plugin.content.findName("Display2SurfaceImage").Height=240;
			plugin.content.findName("Display2InkPresenter").Width=320;
			plugin.content.findName("Display2InkPresenter").Height=240;
			plugin.content.findName("Display2InkPresenterSurface").Width=320;
			plugin.content.findName("Display2InkPresenterSurface").Height=240;
			ClearInk();
			break;
		case 3:
			plugin.content.findName("Display1").Visibility="Visible";
			plugin.content.findName("Display1")["Canvas.Left"]=10;
			plugin.content.findName("Display1")["Canvas.Top"]=196;
			plugin.content.findName("Display1").Width=496;
			plugin.content.findName("Display1").Height=375;
			plugin.content.findName("Display1SurfaceVideo").Width=496;
			plugin.content.findName("Display1SurfaceVideo").Height=375;
			plugin.content.findName("Display1InkPresenter").Width=496;
			plugin.content.findName("Display1InkPresenter").Height=375;
			plugin.content.findName("Display1InkPresenterSurface").Width=496;
			plugin.content.findName("Display1InkPresenterSurface").Height=375;	
			plugin.content.findName("Display2").Visibility="Visible";
			plugin.content.findName("Display2")["Canvas.Left"]=516;
			plugin.content.findName("Display2")["Canvas.Top"]=196;
			plugin.content.findName("Display2").Width=496;
			plugin.content.findName("Display2").Height=375;
			plugin.content.findName("Display2SurfaceVideo").Width=496;
			plugin.content.findName("Display2SurfaceVideo").Height=375;
			plugin.content.findName("Display2SurfaceImage").Width=496;
			plugin.content.findName("Display2SurfaceImage").Height=375;
			plugin.content.findName("Display2InkPresenter").Width=496;
			plugin.content.findName("Display2InkPresenter").Height=375;
			plugin.content.findName("Display2InkPresenterSurface").Width=496;
			plugin.content.findName("Display2InkPresenterSurface").Height=375;
			ClearInk();
			break;
		case 4:
			plugin.content.findName("Display1").Visibility="Visible";
			plugin.content.findName("Display1")["Canvas.Left"]=10;
			plugin.content.findName("Display1")["Canvas.Top"]=10;
			plugin.content.findName("Display1").Width=1004;
			plugin.content.findName("Display1").Height=748;
			plugin.content.findName("Display1SurfaceVideo").Width=1004;
			plugin.content.findName("Display1SurfaceVideo").Height=748;
			plugin.content.findName("Display1InkPresenter").Width=1004;
			plugin.content.findName("Display1InkPresenter").Height=748;
			plugin.content.findName("Display1InkPresenterSurface").Width=1004;
			plugin.content.findName("Display1InkPresenterSurface").Height=748;
			plugin.content.findName("Display2").Visibility="Collapsed";
			plugin.content.findName("Display2")["Canvas.Left"]=0;
			plugin.content.findName("Display2")["Canvas.Top"]=0;
			plugin.content.findName("Display2").Width=0;
			plugin.content.findName("Display2").Height=0;
			plugin.content.findName("Display2SurfaceVideo").Width=0;
			plugin.content.findName("Display2SurfaceVideo").Height=0;
			plugin.content.findName("Display2SurfaceImage").Width=0;
			plugin.content.findName("Display2SurfaceImage").Height=0;
			plugin.content.findName("Display2InkPresenter").Width=0;
			plugin.content.findName("Display2InkPresenter").Height=0;
			plugin.content.findName("Display2InkPresenterSurface").Width=0;
			plugin.content.findName("Display2InkPresenterSurface").Height=0;
			ClearInk();
			break;
		case 5:
			plugin.content.findName("Display1").Visibility="Collapsed";
			plugin.content.findName("Display1")["Canvas.Left"]=0;
			plugin.content.findName("Display1")["Canvas.Top"]=0;
			plugin.content.findName("Display1").Width=0;
			plugin.content.findName("Display1").Height=0;
			plugin.content.findName("Display1SurfaceVideo").Width=0;
			plugin.content.findName("Display1SurfaceVideo").Height=0;
			plugin.content.findName("Display1InkPresenter").Width=0;
			plugin.content.findName("Display1InkPresenter").Height=0;
			plugin.content.findName("Display1InkPresenterSurface").Width=0;
			plugin.content.findName("Display1InkPresenterSurface").Height=0;
			plugin.content.findName("Display2").Visibility="Visible";
			plugin.content.findName("Display2")["Canvas.Left"]=10;
			plugin.content.findName("Display2")["Canvas.Top"]=10;
			plugin.content.findName("Display2").Width=1004;
			plugin.content.findName("Display2").Height=748;
			plugin.content.findName("Display2SurfaceVideo").Width=1004;
			plugin.content.findName("Display2SurfaceVideo").Height=748;
			plugin.content.findName("Display2SurfaceImage").Width=1004;
			plugin.content.findName("Display2SurfaceImage").Height=748;
			plugin.content.findName("Display2InkPresenter").Width=1004;
			plugin.content.findName("Display2InkPresenter").Height=748;
			plugin.content.findName("Display2InkPresenterSurface").Width=1004;
			plugin.content.findName("Display2InkPresenterSurface").Height=748;
			ClearInk();
			break;
	}
}

function MouseLeftButtonDown(sender, mouseEventArgs)
{
	switch(sender.name)
	{
		case "SearchButtonSubmit":
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "SearchResultsScroll":
			sender.CaptureMouse();
			searchResultsScrolling=true;
			var perc = mouseEventArgs.getPosition(sender).y/sender.Height;
			plugin.content.findName("SearchResultsField")["Canvas.Top"] = perc * searchResultsScrollRange * -1;
			UpdateSearchResultsScrollKnob();
			cancelWindowMouseDown=true;
			break;
		case "TranscriptScroll":
			sender.CaptureMouse();
			transcriptScrolling=true;
			var perc = mouseEventArgs.getPosition(sender).y/sender.Height;
			plugin.content.findName("TranscriptField")["Canvas.Top"] = perc * transcriptScrollRange * -1;
			UpdateTranscriptScrollKnob();
			cancelWindowMouseDown=true;
			break;
		case "Display1InkPresenter":
			sender.CaptureMouse();
			inkStroke = plugin.content.CreateFromXaml("<Stroke/>");
			inkStroke.DrawingAttributes.Width=inkSize;
			inkStroke.DrawingAttributes.Height=inkSize;
			inkStroke.DrawingAttributes.Color=inkColor;
			inkStroke.DrawingAttributes.OutlineColor="#22000000";
			inkStroke.StylusPoints.AddStylusPoints(mouseEventArgs.GetStylusPoints(sender));
			sender.Strokes.Add(inkStroke);
			cancelWindowMouseDown=true;
			break;
		case "Display2InkPresenter":
			sender.CaptureMouse();
			inkStroke = plugin.content.CreateFromXaml("<Stroke/>");
			inkStroke.DrawingAttributes.Width=inkSize;
			inkStroke.DrawingAttributes.Height=inkSize;
			inkStroke.DrawingAttributes.Color=inkColor;
			inkStroke.DrawingAttributes.OutlineColor="#22000000";
			inkStroke.StylusPoints.AddStylusPoints(mouseEventArgs.GetStylusPoints(sender));
			sender.Strokes.Add(inkStroke);
			cancelWindowMouseDown=true;
			break;
		case "InkButtonColorYellow":
			plugin.content.findName("InkButtonColorYellowRectangle").Stroke="#FFAAAAAA";
			plugin.content.findName("InkButtonColorRedRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorGreenRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorBlueRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorBlackRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorWhiteRectangle").Stroke="#FFFFFFFF";
			inkColor="#99FFFF00";
			cancelWindowMouseDown=true;
			break;
		case "InkButtonColorRed":
			plugin.content.findName("InkButtonColorYellowRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorRedRectangle").Stroke="#FFAAAAAA";
			plugin.content.findName("InkButtonColorGreenRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorBlueRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorBlackRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorWhiteRectangle").Stroke="#FFFFFFFF";
			inkColor="#99FF0000";
			cancelWindowMouseDown=true;
			break;
		case "InkButtonColorGreen":
			plugin.content.findName("InkButtonColorYellowRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorRedRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorGreenRectangle").Stroke="#FFAAAAAA";
			plugin.content.findName("InkButtonColorBlueRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorBlackRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorWhiteRectangle").Stroke="#FFFFFFFF";
			inkColor="#9900FF00";
			cancelWindowMouseDown=true;
			break;
		case "InkButtonColorBlue":
			plugin.content.findName("InkButtonColorYellowRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorRedRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorGreenRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorBlueRectangle").Stroke="#FFAAAAAA";
			plugin.content.findName("InkButtonColorBlackRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorWhiteRectangle").Stroke="#FFFFFFFF";
			inkColor="#990000FF";
			cancelWindowMouseDown=true;
			break;
		case "InkButtonColorBlack":
			plugin.content.findName("InkButtonColorYellowRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorRedRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorGreenRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorBlueRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorBlackRectangle").Stroke="#FFAAAAAA";
			plugin.content.findName("InkButtonColorWhiteRectangle").Stroke="#FFFFFFFF";
			inkColor="#99000000";
			cancelWindowMouseDown=true;
			break;
		case "InkButtonColorWhite":
			plugin.content.findName("InkButtonColorYellowRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorRedRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorGreenRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorBlueRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorBlackRectangle").Stroke="#FFFFFFFF";
			plugin.content.findName("InkButtonColorWhiteRectangle").Stroke="#FFAAAAAA";
			inkColor="#99FFFFFF";
			cancelWindowMouseDown=true;
			break;
		case "InkButtonSizeHuge":
			plugin.content.findName("InkButtonSizeHugeEllipse").Fill="#FFAAAAAA";
			plugin.content.findName("InkButtonSizeLargeEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeMediumEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeSmallEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeTinyEllipse").Fill="#FF000000";
			inkSize=23;
			cancelWindowMouseDown=true;
			break;
		case "InkButtonSizeLarge":
			plugin.content.findName("InkButtonSizeHugeEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeLargeEllipse").Fill="#FFAAAAAA";
			plugin.content.findName("InkButtonSizeMediumEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeSmallEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeTinyEllipse").Fill="#FF000000";
			inkSize=18;
			cancelWindowMouseDown=true;
			break;
		case "InkButtonSizeMedium":
			plugin.content.findName("InkButtonSizeHugeEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeLargeEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeMediumEllipse").Fill="#FFAAAAAA";
			plugin.content.findName("InkButtonSizeSmallEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeTinyEllipse").Fill="#FF000000";
			inkSize=13;
			cancelWindowMouseDown=true;
			break;
		case "InkButtonSizeSmall":
			plugin.content.findName("InkButtonSizeHugeEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeLargeEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeMediumEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeSmallEllipse").Fill="#FFAAAAAA";
			plugin.content.findName("InkButtonSizeTinyEllipse").Fill="#FF000000";
			inkSize=8;
			cancelWindowMouseDown=true;
			break;
		case "InkButtonSizeTiny":
			plugin.content.findName("InkButtonSizeHugeEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeLargeEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeMediumEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeSmallEllipse").Fill="#FF000000";
			plugin.content.findName("InkButtonSizeTinyEllipse").Fill="#FFAAAAAA";
			inkSize=3;
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryCloseButton":
			plugin.content.findName("KeyEntry").Visibility="Collapsed";
			cancelWindowMouseDown=true;
			break;
		case "SearchTermEntry":
			plugin.content.findName("KeyEntry").Visibility="Visible";
			plugin.content.findName("SearchTermEntryText").Text = "";
			cancelWindowMouseDown=true;
			break;

		case "ThumbnailGroupButtonPrevious":
			var cnt = _recContent.Slides().GetCount();
			var groups = Math.ceil(cnt / 9);
			if(_thumbGroup>1)
			{
				_thumbGroup--;
			}		
			ThumbnailsPopulate(_thumbGroup);
			cancelWindowMouseDown=true;
			break;
		case "ThumbnailGroupButtonNext":
			var cnt = _recContent.Slides().GetCount();
			var groups = Math.ceil(cnt / 9);
			if(_thumbGroup<groups)
			{
				_thumbGroup++;
			}		
			ThumbnailsPopulate(_thumbGroup);
			cancelWindowMouseDown=true;
			break;
		case "ThumbnailButton1":
			GoToThumbnail(1);
			break;
		case "ThumbnailButton2":
			GoToThumbnail(2);
			break;
		case "ThumbnailButton3":
			GoToThumbnail(3);
			break;
		case "ThumbnailButton4":
			GoToThumbnail(4);
			break;
		case "ThumbnailButton5":
			GoToThumbnail(5);
			break;
		case "ThumbnailButton6":
			GoToThumbnail(6);
			break;
		case "ThumbnailButton7":
			GoToThumbnail(7);
			break;
		case "ThumbnailButton8":
			GoToThumbnail(8);
			break;
		case "ThumbnailButton9":
			GoToThumbnail(9);
			break;

		case "ChapterGroupButtonPrevious":
			var cnt = _recContent.Chapters().GetCount();
			var groups = Math.ceil(cnt / 9);
			if(_chapterGroup>1)
			{
				_chapterGroup--;
			}		
			ChaptersPopulate(_chapterGroup);
			cancelWindowMouseDown=true;
			break;
		case "ChapterGroupButtonNext":
			var cnt = _recContent.Chapters().GetCount();
			var groups = Math.ceil(cnt / 9);
			if(_chapterGroup<groups)
			{
				_chapterGroup++;
			}		
			ChaptersPopulate(_chapterGroup);
			cancelWindowMouseDown=true;
			break;
		case "ChapterButton1":
			GoToChapter(1);
			break;
		case "ChapterButton2":
			GoToChapter(2);
			break;
		case "ChapterButton3":
			GoToChapter(3);
			break;
		case "ChapterButton4":
			GoToChapter(4);
			break;
		case "ChapterButton5":
			GoToChapter(5);
			break;
		case "ChapterButton6":
			GoToChapter(6);
			break;
		case "ChapterButton7":
			GoToChapter(7);
			break;
		case "ChapterButton8":
			GoToChapter(8);
			break;
		case "ChapterButton9":
			GoToChapter(9);
			break;
		case "ChapterButton10":
			GoToChapter(10);
			break;
		case "ChapterButton11":
			GoToChapter(11);
			break;
		case "ChapterButton12":
			GoToChapter(12);
			break;
		case "ChapterButton13":
			GoToChapter(13);
			break;
		case "ChapterButton14":
			GoToChapter(14);
			break;
		case "ChapterButton15":
			GoToChapter(15);
			break;
		
		case "XBarButtonChapters":
			if(plugin.content.findName("Chapters").Visibility=="Visible")
			{
				plugin.content.findName("Chapters").Visibility="Collapsed";
			}
			else
			{
				windowMaxZIndex++;
				plugin.content.findName("Chapters")["Canvas.ZIndex"]=windowMaxZIndex;
				plugin.content.findName("Chapters").Visibility="Visible";
			}
			break;
		case "ChaptersCloseButton":
			plugin.content.findName("Chapters").Visibility="Collapsed";
			cancelWindowMouseDown=true;
			break;
		case "XBarButtonThumbnails":
			if(plugin.content.findName("Thumbnails").Visibility=="Visible")
			{
				plugin.content.findName("Thumbnails").Visibility="Collapsed";
			}
			else
			{
				windowMaxZIndex++;
				plugin.content.findName("Thumbnails")["Canvas.ZIndex"]=windowMaxZIndex;
				plugin.content.findName("Thumbnails").Visibility="Visible";
			}
			break;
		case "ThumbnailsCloseButton":
			plugin.content.findName("Thumbnails").Visibility="Collapsed";
			cancelWindowMouseDown=true;
			break;
		case "XBarButtonSearch":
			if(plugin.content.findName("Search").Visibility=="Visible")
			{
				plugin.content.findName("Search").Visibility="Collapsed";
			}
			else
			{
				windowMaxZIndex++;
				plugin.content.findName("Search")["Canvas.ZIndex"]=windowMaxZIndex;
				plugin.content.findName("Search").Visibility="Visible";
			}
			break;
		case "SearchCloseButton":
			plugin.content.findName("Search").Visibility="Collapsed";
			cancelWindowMouseDown=true;
			break;
		case "XBarButtonInk":
			if(plugin.content.findName("Ink").Visibility=="Visible")
			{
				plugin.content.findName("Ink").Visibility="Collapsed";
				HideInk();
			}
			else
			{
				windowMaxZIndex++;
				plugin.content.findName("Ink")["Canvas.ZIndex"]=windowMaxZIndex;
				plugin.content.findName("Ink").Visibility="Visible";
				ShowInk();
			}
			break;
		case "InkCloseButton":
			plugin.content.findName("Ink").Visibility="Collapsed";
			HideInk();
			cancelWindowMouseDown=true;
			break;
		case "InkButtonClear":
			ClearInk();
			cancelWindowMouseDown=true;
			break;
		case "XBarButtonCaptions":
			if(plugin.content.findName("Captions").Visibility=="Visible")
			{
				plugin.content.findName("Captions").Visibility="Collapsed";
			}
			else
			{
				windowMaxZIndex++;
				plugin.content.findName("Captions")["Canvas.ZIndex"]=windowMaxZIndex;
				plugin.content.findName("Captions").Visibility="Visible";
			}
			break;
		case "CaptionsCloseButton":
			plugin.content.findName("Captions").Visibility="Collapsed";
			cancelWindowMouseDown=true;
			break;
		case "XBarButtonTranscript":
			if(plugin.content.findName("Transcript").Visibility=="Visible")
			{
				plugin.content.findName("Transcript").Visibility="Collapsed";
			}
			else
			{
				windowMaxZIndex++;
				plugin.content.findName("Transcript")["Canvas.ZIndex"]=windowMaxZIndex;
				plugin.content.findName("Transcript").Visibility="Visible";
			}
			break;
		case "TranscriptCloseButton":
			plugin.content.findName("Transcript").Visibility="Collapsed";
			cancelWindowMouseDown=true;
			break;
		case "XBarSliderVolume":
			mediaVolumeChanging=true;
			sender.CaptureMouse();
			var media1 = plugin.content.findName("Media1");
			var perc = mouseEventArgs.getPosition(sender).x/sender.Width;
			media1.Volume=perc;	
			break;
		case "XBarSliderPosition":
			mediaPositionChanging=true;
			sender.CaptureMouse();	
			var media1 = plugin.content.findName("Media1");
			var media2 = plugin.content.findName("Media2");
			plugin.content.findName("Media1").pause();
			plugin.content.findName("Media2").pause();
			var perc = mouseEventArgs.getPosition(sender).x/sender.Width;
			var pos = media1.Position;
			pos.Seconds = media1.NaturalDuration.Seconds*perc;
			media1.Position=pos;
			media2.Position=pos;		
			break;
		case "Display1":
				
			break;
		case "Display2":

			break;
		case "Display2ButtonModeSlides":
			plugin.content.findName("Display2SurfaceImage").Visibility="Visible";
			plugin.content.findName("Display2SurfaceVideo").Visibility="Collapsed";
			plugin.content.findName("Display2ButtonModeSlidesEllipse").Stroke="#FFFF0000";
			plugin.content.findName("Display2ButtonModeVideoEllipse").Stroke="#FFFFFFFF";
			cancelWindowMouseDown=true;
			break;
		case "Display2ButtonModeVideo":
			plugin.content.findName("Display2SurfaceImage").Visibility="Collapsed";
			plugin.content.findName("Display2SurfaceVideo").Visibility="Visible";
			plugin.content.findName("Display2ButtonModeSlidesEllipse").Stroke="#FFFFFFFF";
			plugin.content.findName("Display2ButtonModeVideoEllipse").Stroke="#FFFF0000";
			cancelWindowMouseDown=true;
			break;
		case "ShowXBarButton":
			if(plugin.content.findName("XBar").Visibility!="Visible")
			{
				plugin.content.findName("XBar").Visibility="Visible";
				plugin.content.findName("ShowXBarButton").Opacity=1;
			}
			else
			{
				plugin.content.findName("XBar").Visibility="Collapsed";
				plugin.content.findName("ShowXBarButton").Opacity=0.25;
			}
			break;
		case "XBarButtonPlay":
			DoPlay();
			break;
		case "XBarButtonPause":
			plugin.content.findName("Media1").pause();
			plugin.content.findName("Media2").pause();
			break;
		case "XBarButtonStop":
			plugin.content.findName("Media1").stop();
			plugin.content.findName("Media2").stop();
			break;
		case "XBarButtonMute":
			plugin.content.findName("Media1").IsMuted = !plugin.content.findName("Media1").IsMuted;
			if(plugin.content.findName("Media1").IsMuted)
			{
				plugin.content.findName("XBarButtonMuteIcon").Fill="#FFFF0000";
			}
			else
			{
				plugin.content.findName("XBarButtonMuteIcon").Fill="#FFFFFFFF";
			}
			break;
		case "XBarButtonFull":
			plugin.content.fullScreen=!plugin.content.fullScreen;
			break;
		case "XBarButtonPreset1":
			ApplyPreset(1);
			break;
		case "XBarButtonPreset2":
			ApplyPreset(2);
			break;
		case "XBarButtonPreset3":
			ApplyPreset(3);
			break;
		case "XBarButtonPreset4":
			ApplyPreset(4);
			break;
		case "XBarButtonPreset5":
			ApplyPreset(5);
			break;
		case "KeyEntry1":
			plugin.content.findName("SearchTermEntryText").Text += "1";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntry2":
			plugin.content.findName("SearchTermEntryText").Text += "2";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntry3":
			plugin.content.findName("SearchTermEntryText").Text += "3";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntry4":
			plugin.content.findName("SearchTermEntryText").Text += "4";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntry5":
			plugin.content.findName("SearchTermEntryText").Text += "5";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntry6":
			plugin.content.findName("SearchTermEntryText").Text += "6";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntry7":
			plugin.content.findName("SearchTermEntryText").Text += "7";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntry8":
			plugin.content.findName("SearchTermEntryText").Text += "8";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntry9":
			plugin.content.findName("SearchTermEntryText").Text += "9";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntry0":
			plugin.content.findName("SearchTermEntryText").Text += "0";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryA":
			plugin.content.findName("SearchTermEntryText").Text += "a";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryB":
			plugin.content.findName("SearchTermEntryText").Text += "b";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryC":
			plugin.content.findName("SearchTermEntryText").Text += "c";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryD":
			plugin.content.findName("SearchTermEntryText").Text += "d";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryE":
			plugin.content.findName("SearchTermEntryText").Text += "e";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryF":
			plugin.content.findName("SearchTermEntryText").Text += "f";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryG":
			plugin.content.findName("SearchTermEntryText").Text += "g";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryH":
			plugin.content.findName("SearchTermEntryText").Text += "h";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryI":
			plugin.content.findName("SearchTermEntryText").Text += "i";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryJ":
			plugin.content.findName("SearchTermEntryText").Text += "j";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryK":
			plugin.content.findName("SearchTermEntryText").Text += "k";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryL":
			plugin.content.findName("SearchTermEntryText").Text += "l";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryM":
			plugin.content.findName("SearchTermEntryText").Text += "m";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryN":
			plugin.content.findName("SearchTermEntryText").Text += "n";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryO":
			plugin.content.findName("SearchTermEntryText").Text += "o";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryP":
			plugin.content.findName("SearchTermEntryText").Text += "p";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryQ":
			plugin.content.findName("SearchTermEntryText").Text += "q";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryR":
			plugin.content.findName("SearchTermEntryText").Text += "r";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryS":
			plugin.content.findName("SearchTermEntryText").Text += "s";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryT":
			plugin.content.findName("SearchTermEntryText").Text += "t";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryU":
			plugin.content.findName("SearchTermEntryText").Text += "u";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryV":
			plugin.content.findName("SearchTermEntryText").Text += "v";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryW":
			plugin.content.findName("SearchTermEntryText").Text += "w";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryX":
			plugin.content.findName("SearchTermEntryText").Text += "x";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryY":
			plugin.content.findName("SearchTermEntryText").Text += "y";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryZ":
			plugin.content.findName("SearchTermEntryText").Text += "z";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntrySpace":
			plugin.content.findName("SearchTermEntryText").Text += " ";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntrySpace":
			plugin.content.findName("SearchTermEntryText").Text += " ";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryBack":
			plugin.content.findName("SearchTermEntryText").Text = "";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		case "KeyEntryEnter":
			plugin.content.findName("KeyEntry").Visibility="Collapsed";
			PerformSearch();
			cancelWindowMouseDown=true;
			break;
		
	}
}

function MouseLeftButtonUp(sender, mouseEventArgs)
{
	switch(sender.name)
	{
		case "Display1InkPresenter":
			inkStroke = null;
			sender.ReleaseMouseCapture();
			break;
		case "Display2InkPresenter":
			inkStroke = null;
			sender.ReleaseMouseCapture();
			break;


		case "XBarSliderVolume":
			if(mediaVolumeChanging)
			{
				mediaVolumeChanging=false;
				sender.ReleaseMouseCapture();
			}
			break;
		case "XBarSliderPosition":
			if(mediaPositionChanging)
			{
				mediaPositionChanging=false;
				sender.ReleaseMouseCapture();
				DoPlay();
			}		
			break;
		case "TranscriptScroll":
			if(transcriptScrolling)
			{
				transcriptScrolling = false;
				sender.ReleaseMouseCapture();
			}
		case "SearchResultsScroll":
			if(searchResultsScrolling)
			{
				searchResultsScrolling = false;
				sender.ReleaseMouseCapture();
			}
			
	}
}

function MouseMove(sender, mouseEventArgs)
{
	switch(sender.name)
	{

		case "Display1InkPresenter":
			if(inkStroke != null)
			{
				inkStroke.StylusPoints.AddStylusPoints(mouseEventArgs.GetStylusPoints(sender));
			}
			break;
		case "Display2InkPresenter":
			if(inkStroke != null)
			{
				inkStroke.StylusPoints.AddStylusPoints(mouseEventArgs.GetStylusPoints(sender));
			}
			break;

		case "XBarSliderVolume":
			if(mediaVolumeChanging)
			{
				var media1 = plugin.content.findName("Media1");
				var perc = mouseEventArgs.getPosition(sender).x/sender.Width;
				if(perc>=0 && perc<=1)
				{
					media1.Volume=perc;
				}
				UpdateXBarSlideVolumeKnob();
			}
			break;
		case "XBarSliderPosition":
			if(mediaPositionChanging)
			{
				var media1 = plugin.content.findName("Media1");
				var media2 = plugin.content.findName("Media2");
				var perc = mouseEventArgs.getPosition(sender).x/sender.Width;
				if(perc>=0 && perc<=1)
				{
					var pos = media1.Position;
					pos.Seconds = media1.NaturalDuration.Seconds*perc;
					media1.Position=pos;
					media2.Position=pos;
				}
				
				UpdateXBarSlidePositionKnob();
				UpdateXBarPositionDisplay();
			}	
			break;
		case "TranscriptScroll":
			if(transcriptScrolling)
			{
				var perc = mouseEventArgs.getPosition(sender).y/sender.Height;
				if(perc>=0 && perc<=1)
				{
					plugin.content.findName("TranscriptField")["Canvas.Top"] = perc * transcriptScrollRange * -1;
				}
				UpdateTranscriptScrollKnob();
			}
		case "SearchResultsScroll":
			if(searchResultsScrolling)
			{
				var perc = mouseEventArgs.getPosition(sender).y/sender.Height;
				if(perc>=0 && perc<=1)
				{
					plugin.content.findName("SearchResultsField")["Canvas.Top"] = perc * searchResultsScrollRange * -1;
				}
				UpdateSearchResultsScrollKnob();
			}
			
	}
				
}

function MouseEnter(sender, mouseEventArgs)
{
	switch(sender.name)
	{
		case "Display1":
			plugin.content.findName("Display1ToolBar").Visibility="Visible";
			break;
		case "Display2":
			plugin.content.findName("Display2ToolBar").Visibility="Visible";
			break;

		case "XBarButtonPlay":
			plugin.content.findName("XBarButtonPlayTimelineMouseEnter").Begin();
			break;
		case "XBarButtonPause":
			plugin.content.findName("XBarButtonPauseTimelineMouseEnter").Begin();
			break;
		case "XBarButtonStop":
			plugin.content.findName("XBarButtonStopTimelineMouseEnter").Begin();
			break;
		case "XBarButtonMute":
			plugin.content.findName("XBarButtonMuteTimelineMouseEnter").Begin();
			break;

		case "XBarButtonPreset1":
			plugin.content.findName("XBarButtonPreset1TimelineMouseEnter").Begin();
			break;
		case "XBarButtonPreset2":
			plugin.content.findName("XBarButtonPreset2TimelineMouseEnter").Begin();
			break;
		case "XBarButtonPreset3":
			plugin.content.findName("XBarButtonPreset3TimelineMouseEnter").Begin();
			break;
		case "XBarButtonPreset4":
			plugin.content.findName("XBarButtonPreset4TimelineMouseEnter").Begin();
			break;
		case "XBarButtonPreset5":
			plugin.content.findName("XBarButtonPreset5TimelineMouseEnter").Begin();
			break;

		case "XBarButtonChapters":
			plugin.content.findName("XBarButtonChaptersTimelineMouseEnter").Begin();
			break;
		case "XBarButtonThumbnails":
			plugin.content.findName("XBarButtonThumbnailsTimelineMouseEnter").Begin();
			break;
		case "XBarButtonCaptions":
			plugin.content.findName("XBarButtonCaptionsTimelineMouseEnter").Begin();
			break;
		case "XBarButtonTranscript":
			plugin.content.findName("XBarButtonTranscriptTimelineMouseEnter").Begin();
			break;
		case "XBarButtonInk":
			plugin.content.findName("XBarButtonInkTimelineMouseEnter").Begin();
			break;
		case "XBarButtonSearch":
			plugin.content.findName("XBarButtonSearchTimelineMouseEnter").Begin();
			break;

		case "XBarButtonFull":
			plugin.content.findName("XBarButtonFullTimelineMouseEnter").Begin();
			break;

		case "ThumbnailGroupButtonPrevious":
			plugin.content.findName("ThumbnailGroupButtonPreviousTimelineMouseEnter").Begin();
			break;
		case "ThumbnailGroupButtonNext":
			plugin.content.findName("ThumbnailGroupButtonNextTimelineMouseEnter").Begin();
			break;

		case "ThumbnailButton1":
			plugin.content.findName("ThumbnailButton1TimelineMouseEnter").Begin();
			break;
		case "ThumbnailButton2":
			plugin.content.findName("ThumbnailButton2TimelineMouseEnter").Begin();
			break;
		case "ThumbnailButton3":
			plugin.content.findName("ThumbnailButton3TimelineMouseEnter").Begin();
			break;
		case "ThumbnailButton4":
			plugin.content.findName("ThumbnailButton4TimelineMouseEnter").Begin();
			break;
		case "ThumbnailButton5":
			plugin.content.findName("ThumbnailButton5TimelineMouseEnter").Begin();
			break;
		case "ThumbnailButton6":
			plugin.content.findName("ThumbnailButton6TimelineMouseEnter").Begin();
			break;
		case "ThumbnailButton7":
			plugin.content.findName("ThumbnailButton7TimelineMouseEnter").Begin();
			break;
		case "ThumbnailButton8":
			plugin.content.findName("ThumbnailButton8TimelineMouseEnter").Begin();
			break;
		case "ThumbnailButton9":
			plugin.content.findName("ThumbnailButton9TimelineMouseEnter").Begin();
			break;

		case "ChapterGroupButtonPrevious":
			plugin.content.findName("ChapterGroupButtonPreviousTimelineMouseEnter").Begin();
			break;
		case "ChapterGroupButtonNext":
			plugin.content.findName("ChapterGroupButtonNextTimelineMouseEnter").Begin();
			break;

		case "ChapterButton1":
			plugin.content.findName("ChapterButton1TimelineMouseEnter").Begin();
			break;
		case "ChapterButton2":
			plugin.content.findName("ChapterButton2TimelineMouseEnter").Begin();
			break;
		case "ChapterButton3":
			plugin.content.findName("ChapterButton3TimelineMouseEnter").Begin();
			break;
		case "ChapterButton4":
			plugin.content.findName("ChapterButton4TimelineMouseEnter").Begin();
			break;
		case "ChapterButton5":
			plugin.content.findName("ChapterButton5TimelineMouseEnter").Begin();
			break;
		case "ChapterButton6":
			plugin.content.findName("ChapterButton6TimelineMouseEnter").Begin();
			break;
		case "ChapterButton7":
			plugin.content.findName("ChapterButton7TimelineMouseEnter").Begin();
			break;
		case "ChapterButton8":
			plugin.content.findName("ChapterButton8TimelineMouseEnter").Begin();
			break;
		case "ChapterButton9":
			plugin.content.findName("ChapterButton9TimelineMouseEnter").Begin();
			break;
		case "ChapterButton10":
			plugin.content.findName("ChapterButton10TimelineMouseEnter").Begin();
			break;
		case "ChapterButton11":
			plugin.content.findName("ChapterButton11TimelineMouseEnter").Begin();
			break;
		case "ChapterButton12":
			plugin.content.findName("ChapterButton12TimelineMouseEnter").Begin();
			break;
		case "ChapterButton13":
			plugin.content.findName("ChapterButton13TimelineMouseEnter").Begin();
			break;
		case "ChapterButton14":
			plugin.content.findName("ChapterButton14TimelineMouseEnter").Begin();
			break;
		case "ChapterButton15":
			plugin.content.findName("ChapterButton15TimelineMouseEnter").Begin();
			break;

		case "ShowXBarButton":
			plugin.content.findName("ShowXBarButtonTimelineMouseEnter").Begin();
			break;
			
		case "ChaptersCloseButton":
			plugin.content.findName("ChaptersCloseButtonTimelineMouseEnter").Begin();
			break;
		case "ThumbnailsCloseButton":
			plugin.content.findName("ThumbnailsCloseButtonTimelineMouseEnter").Begin();
			break;
		case "TranscriptCloseButton":
			plugin.content.findName("TranscriptCloseButtonTimelineMouseEnter").Begin();
			break;
		case "CaptionsCloseButton":
			plugin.content.findName("CaptionsCloseButtonTimelineMouseEnter").Begin();
			break;
		case "InkCloseButton":
			plugin.content.findName("InkCloseButtonTimelineMouseEnter").Begin();
			break;
		case "SearchCloseButton":
			plugin.content.findName("SearchCloseButtonTimelineMouseEnter").Begin();
			break;
			
		case "InkButtonClear":
			plugin.content.findName("InkButtonClearTimelineMouseEnter").Begin();
			break;
		case "Display2ButtonModeSlides":
			plugin.content.findName("Display2ButtonModeSlidesTimelineMouseEnter").Begin();
			break;
		case "Display2ButtonModeVideo":
			plugin.content.findName("Display2ButtonModeVideoTimelineMouseEnter").Begin();
			break;
			
			
	}
}

function MouseLeave(sender, mouseEventArgs)
{
	switch(sender.name)
	{
		case "Display1InkPresenter":
			inkStroke = null;
			sender.ReleaseMouseCapture();
			break;
		case "Display2InkPresenter":
			inkStroke = null;
			sender.ReleaseMouseCapture();
			break;
		case "Display1":
			plugin.content.findName("Display1ToolBar").Visibility="Collapsed";
			break;
		case "Display2":
			plugin.content.findName("Display2ToolBar").Visibility="Collapsed";
			break;

		case "XBarButtonPlay":
			plugin.content.findName("XBarButtonPlayTimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonPlayTimelineMouseLeave").Begin();
			break;
		case "XBarButtonPause":
			plugin.content.findName("XBarButtonPauseTimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonPauseTimelineMouseLeave").Begin();
			break;
		case "XBarButtonStop":
			plugin.content.findName("XBarButtonStopTimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonStopTimelineMouseLeave").Begin();
			break;
		case "XBarButtonMute":
			plugin.content.findName("XBarButtonMuteTimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonMuteTimelineMouseLeave").Begin();
			break;

		case "XBarButtonPreset1":
			plugin.content.findName("XBarButtonPreset1TimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonPreset1TimelineMouseLeave").Begin();
			break;
		case "XBarButtonPreset2":
			plugin.content.findName("XBarButtonPreset2TimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonPreset2TimelineMouseLeave").Begin();
			break;
		case "XBarButtonPreset3":
			plugin.content.findName("XBarButtonPreset3TimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonPreset3TimelineMouseLeave").Begin();
			break;
		case "XBarButtonPreset4":
			plugin.content.findName("XBarButtonPreset4TimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonPreset4TimelineMouseLeave").Begin();
			break;
		case "XBarButtonPreset5":	
			plugin.content.findName("XBarButtonPreset5TimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonPreset5TimelineMouseLeave").Begin();
			break;

		case "XBarButtonChapters":
			plugin.content.findName("XBarButtonChaptersTimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonChaptersTimelineMouseLeave").Begin();
			break;
		case "XBarButtonThumbnails":
			plugin.content.findName("XBarButtonThumbnailsTimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonThumbnailsTimelineMouseLeave").Begin();
			break;
		case "XBarButtonCaptions":
			plugin.content.findName("XBarButtonCaptionsTimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonCaptionsTimelineMouseLeave").Begin();
			break;
		case "XBarButtonTranscript":
			plugin.content.findName("XBarButtonTranscriptTimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonTranscriptTimelineMouseLeave").Begin();
			break;
		case "XBarButtonInk":
			plugin.content.findName("XBarButtonInkTimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonInkTimelineMouseLeave").Begin();
			break;
		case "XBarButtonSearch":
			plugin.content.findName("XBarButtonSearchTimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonSearchTimelineMouseLeave").Begin();
			break;

		case "XBarButtonFull":
			plugin.content.findName("XBarButtonFullTimelineMouseEnter").Stop();
			plugin.content.findName("XBarButtonFullTimelineMouseLeave").Begin();
			break;

		case "ThumbnailGroupButtonPrevious":
			plugin.content.findName("ThumbnailGroupButtonPreviousTimelineMouseEnter").Stop();
			plugin.content.findName("ThumbnailGroupButtonPreviousTimelineMouseLeave").Begin();
			break;
		case "ThumbnailGroupButtonNext":
			plugin.content.findName("ThumbnailGroupButtonNextTimelineMouseEnter").Stop();
			plugin.content.findName("ThumbnailGroupButtonNextTimelineMouseLeave").Begin();
			break;

		case "ThumbnailButton1":
			plugin.content.findName("ThumbnailButton1TimelineMouseEnter").Stop();
			plugin.content.findName("ThumbnailButton1TimelineMouseLeave").Begin();
			break;
		case "ThumbnailButton2":
			plugin.content.findName("ThumbnailButton2TimelineMouseEnter").Stop();
			plugin.content.findName("ThumbnailButton2TimelineMouseLeave").Begin();
			break;
		case "ThumbnailButton3":
			plugin.content.findName("ThumbnailButton3TimelineMouseEnter").Stop();
			plugin.content.findName("ThumbnailButton3TimelineMouseLeave").Begin();
			break;
		case "ThumbnailButton4":
			plugin.content.findName("ThumbnailButton4TimelineMouseEnter").Stop();
			plugin.content.findName("ThumbnailButton4TimelineMouseLeave").Begin();
			break;
		case "ThumbnailButton5":
			plugin.content.findName("ThumbnailButton5TimelineMouseEnter").Stop();
			plugin.content.findName("ThumbnailButton5TimelineMouseLeave").Begin();
			break;
		case "ThumbnailButton6":
			plugin.content.findName("ThumbnailButton6TimelineMouseEnter").Stop();
			plugin.content.findName("ThumbnailButton6TimelineMouseLeave").Begin();
			break;
		case "ThumbnailButton7":
			plugin.content.findName("ThumbnailButton7TimelineMouseEnter").Stop();
			plugin.content.findName("ThumbnailButton7TimelineMouseLeave").Begin();
			break;
		case "ThumbnailButton8":
			plugin.content.findName("ThumbnailButton8TimelineMouseEnter").Stop();
			plugin.content.findName("ThumbnailButton8TimelineMouseLeave").Begin();
			break;
		case "ThumbnailButton9":
			plugin.content.findName("ThumbnailButton9TimelineMouseEnter").Stop();
			plugin.content.findName("ThumbnailButton9TimelineMouseLeave").Begin();
			break;
		
		case "ChapterGroupButtonPrevious":
			plugin.content.findName("ChapterGroupButtonPreviousTimelineMouseEnter").Stop();
			plugin.content.findName("ChapterGroupButtonPreviousTimelineMouseLeave").Begin();
			break;
		case "ChapterGroupButtonNext":
			plugin.content.findName("ChapterGroupButtonNextTimelineMouseEnter").Stop();
			plugin.content.findName("ChapterGroupButtonNextTimelineMouseLeave").Begin();
			break;

		case "ChapterButton1":
			plugin.content.findName("ChapterButton1TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton1TimelineMouseLeave").Begin();
			break;
		case "ChapterButton2":
			plugin.content.findName("ChapterButton2TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton2TimelineMouseLeave").Begin();
			break;
		case "ChapterButton3":
			plugin.content.findName("ChapterButton3TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton3TimelineMouseLeave").Begin();
			break;
		case "ChapterButton4":
			plugin.content.findName("ChapterButton4TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton4TimelineMouseLeave").Begin();
			break;
		case "ChapterButton5":
			plugin.content.findName("ChapterButton5TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton5TimelineMouseLeave").Begin();
			break;
		case "ChapterButton6":
			plugin.content.findName("ChapterButton6TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton6TimelineMouseLeave").Begin();
			break;
		case "ChapterButton7":
			plugin.content.findName("ChapterButton7TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton7TimelineMouseLeave").Begin();
			break;
		case "ChapterButton8":
			plugin.content.findName("ChapterButton8TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton8TimelineMouseLeave").Begin();
			break;
		case "ChapterButton9":
			plugin.content.findName("ChapterButton9TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton9TimelineMouseLeave").Begin();
			break;
		case "ChapterButton10":
			plugin.content.findName("ChapterButton10TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton10TimelineMouseLeave").Begin();
			break;
		case "ChapterButton11":
			plugin.content.findName("ChapterButton11TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton11TimelineMouseLeave").Begin();
			break;
		case "ChapterButton12":
			plugin.content.findName("ChapterButton12TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton12TimelineMouseLeave").Begin();
			break;
		case "ChapterButton13":
			plugin.content.findName("ChapterButton13TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton13TimelineMouseLeave").Begin();
			break;
		case "ChapterButton14":
			plugin.content.findName("ChapterButton14TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton14TimelineMouseLeave").Begin();
			break;
		case "ChapterButton15":
			plugin.content.findName("ChapterButton15TimelineMouseEnter").Stop();
			plugin.content.findName("ChapterButton15TimelineMouseLeave").Begin();
			break;

		case "ShowXBarButton":
			plugin.content.findName("ShowXBarButtonTimelineMouseEnter").Stop();
			plugin.content.findName("ShowXBarButtonTimelineMouseLeave").Begin();
			break;
			
		case "ChaptersCloseButton":
			plugin.content.findName("ChaptersCloseButtonTimelineMouseEnter").Stop();
			plugin.content.findName("ChaptersCloseButtonTimelineMouseLeave").Begin();
			break;
		case "ThumbnailsCloseButton":
			plugin.content.findName("ThumbnailsCloseButtonTimelineMouseEnter").Stop();
			plugin.content.findName("ThumbnailsCloseButtonTimelineMouseLeave").Begin();
			break;
		case "TranscriptCloseButton":
			plugin.content.findName("TranscriptCloseButtonTimelineMouseEnter").Stop();
			plugin.content.findName("TranscriptCloseButtonTimelineMouseLeave").Begin();
			break;
		case "CaptionsCloseButton":
			plugin.content.findName("CaptionsCloseButtonTimelineMouseEnter").Stop();
			plugin.content.findName("CaptionsCloseButtonTimelineMouseLeave").Begin();
			break;
		case "InkCloseButton":
			plugin.content.findName("InkCloseButtonTimelineMouseEnter").Stop();
			plugin.content.findName("InkCloseButtonTimelineMouseLeave").Begin();
			break;
		case "SearchCloseButton":
			plugin.content.findName("SearchCloseButtonTimelineMouseEnter").Stop();
			plugin.content.findName("SearchCloseButtonTimelineMouseLeave").Begin();
			break;
			
		case "InkButtonClear":
			plugin.content.findName("InkButtonClearTimelineMouseEnter").Stop();
			plugin.content.findName("InkButtonClearTimelineMouseLeave").Begin();
			break;
			
		case "Display2ButtonModeSlides":
			plugin.content.findName("Display2ButtonModeSlidesTimelineMouseEnter").Stop();
			plugin.content.findName("Display2ButtonModeSlidesTimelineMouseLeave").Begin();
			break;
		case "Display2ButtonModeVideo":
			plugin.content.findName("Display2ButtonModeVideoTimelineMouseEnter").Stop();
			plugin.content.findName("Display2ButtonModeVideoTimelineMouseLeave").Begin();
			break;			
			
	}
}

function KeyDown(sender, keyEventArgs)
{

	//KeyDown only comes from the root, unfortunately
	var searchTerm = plugin.content.findName("SearchTermEntryText").Text;
	switch(keyEventArgs.key)
	{
		//Backspace
		case 1:	
			searchTerm = "";
			break;
		//Enter
		case 3:
			PerformSearch();
			break;
		//Space
		case 9:
			searchTerm += " ";
			break
		//Left
		case 14:
			searchTerm = "";
			break;
		//Up
		case 15:

			break;
		//Right
		case 16:

			break;
		//Down
		case 17:
	
			break;
		//Digit0
		case 20:
			searchTerm += "0";
			break;
		//Digit1
		case 21:
			searchTerm += "1";
			break;
		//Digit2
		case 22:
			searchTerm += "2";
			break;
		//Digit3
		case 23:
			searchTerm += "3";
			break;
		//Digit4
		case 24:
			searchTerm += "4";
			break;
		//Digit5
		case 25:
			searchTerm += "5";
			break;
		//Digit6
		case 26:
			searchTerm += "6";
			break;
		//Digit7
		case 27:
			searchTerm += "7";
			break;
		//Digit8
		case 28:
			searchTerm += "8";
			break;
		//Digit9
		case 29:
			searchTerm += "9";
			break;
		//A
		case 30:
			searchTerm += "a";
			break;
		//B
		case 31:
			searchTerm += "b";
			break;
		//C
		case 32:
			searchTerm += "c";
			break;
		//D
		case 33:
			searchTerm += "d";
			break;
		//E
		case 34:
			searchTerm += "e";
			break;
		//F
		case 35:
			searchTerm += "f";
			break;
		//G
		case 36:
			searchTerm += "g";
			break;
		//H
		case 37:
			searchTerm += "h";
			break;
		//I
		case 38:
			searchTerm += "i";
			break;
		//J
		case 39:
			searchTerm += "j";
			break;
		//K
		case 40:
			searchTerm += "k";
			break;
		//L
		case 41:
			searchTerm += "l";
			break;
		//M
		case 42:
			searchTerm += "m";
			break;
		//N
		case 43:
			searchTerm += "n";
			break;
		//O
		case 44:
			searchTerm += "o";
			break;
		//P
		case 45:
			searchTerm += "p";
			break;
		//Q
		case 46:
			searchTerm += "q";
			break;
		//R
		case 47:
			searchTerm += "r";
			break;
		//S
		case 48:
			searchTerm += "s";
			break;
		//T
		case 49:
			searchTerm += "t";
			break;
		//U
		case 50:
			searchTerm += "u";
			break;
		//V
		case 51:
			searchTerm += "v";
			break;
		//W
		case 52:
			searchTerm += "w";
			break;
		//X
		case 53:
			searchTerm += "x";
			break;
		//Y
		case 54:
			searchTerm += "y";
			break;
		//Z
		case 55:
			searchTerm += "z";
			break;

	}
	plugin.content.findName("SearchTermEntryText").Text = searchTerm;
	plugin.content.findName("Search").Visibility="Visible";
	PerformSearch();
}


function WindowMouseDown(sender, mouseEventArgs)
{
	if(cancelWindowMouseDown)
	{
		cancelWindowMouseDown=false;
		return;
	}
	windowMaxZIndex++;
 	sender.Visibility="collapsed";
 	sender["Canvas.ZIndex"]=windowMaxZIndex;
 	sender.Visibility="visible";
 	sender.CaptureMouse();
 	windowLastMousePosX=mouseEventArgs.getPosition(null).x;
 	windowLastMousePosY=mouseEventArgs.getPosition(null).y;
 	sender.Cursor="None";
 	windowIsMoving=true;
 	windowResizeDirHor="";
 	windowResizeDirVer="";
 	if(mouseEventArgs.getPosition(sender).x<4)
 	{
 	 	windowIsResizing=true;
  		windowResizeDirHor="left";
  		windowIsMoving=false;
 	}
 	if(mouseEventArgs.getPosition(sender).y<4)
 	{
  		windowIsResizing=true;
  		windowResizeDirVer="up";
  		windowIsMoving=false;
 	}
 	if(sender.Width-mouseEventArgs.getPosition(sender).x<4)
 	{
  		windowIsResizing=true;
  		windowResizeDirHor="right";
  		windowIsMoving=false;
 	}
 	if(sender.Height-mouseEventArgs.getPosition(sender).y<4)
 	{
  		windowIsResizing=true;
  		windowResizeDirVer="down";
  		windowIsMoving=false;
 	}
}

function WindowMouseMove(sender, mouseEventArgs)
{
 	if(windowIsMoving)
 	{
  		sender["Canvas.Left"]+= (mouseEventArgs.getPosition(null).x-windowLastMousePosX) / windowScale;
  		sender["Canvas.Top"]+= (mouseEventArgs.getPosition(null).y-windowLastMousePosY) / windowScale;
  		windowLastMousePosX=mouseEventArgs.getPosition(null).x;
  		windowLastMousePosY=mouseEventArgs.getPosition(null).y;
 	}
 	if(windowIsResizing)
 	{
  		if(sender.Name=="Display1")
  		{
   			if(windowResizeDirHor=="left")
   			{
    				sender["Canvas.Left"]+= (mouseEventArgs.getPosition(null).x-windowLastMousePosX) / windowScale;
    				sender.Width-= (mouseEventArgs.getPosition(null).x-windowLastMousePosX) / windowScale;
    				sender.findName("Display1SurfaceVideo").Width=sender.Width;
				sender.findName("Display1InkPresenterSurface").Width=sender.Width;
					sender.Height=sender.Width*(plugin.content.findName("Media1").NaturalVideoHeight/plugin.content.findName("Media1").NaturalVideoWidth);
					sender.findName("Display1SurfaceVideo").Height=sender.Width*(plugin.content.findName("Media1").NaturalVideoHeight/plugin.content.findName("Media1").NaturalVideoWidth);
					sender.findName("Display1InkPresenterSurface").Height=sender.Width*(plugin.content.findName("Media1").NaturalVideoHeight/plugin.content.findName("Media1").NaturalVideoWidth);
    				windowLastMousePosX=mouseEventArgs.getPosition(null).x;
   			}
   			if(windowResizeDirVer=="up")
   			{
    				sender["Canvas.Top"]+= (mouseEventArgs.getPosition(null).y-windowLastMousePosY) / windowScale;
    				sender.Height-= (mouseEventArgs.getPosition(null).y-windowLastMousePosY) / windowScale;
    				sender.findName("Display1SurfaceVideo").Height=sender.Height;
					sender.findName("Display1InkPresenterSurface").Height=sender.Height;
					sender.Width=sender.Height*(plugin.content.findName("Media1").NaturalVideoWidth/plugin.content.findName("Media1").NaturalVideoHeight);
					sender.findName("Display1SurfaceVideo").Width=sender.Height*(plugin.content.findName("Media1").NaturalVideoWidth/plugin.content.findName("Media1").NaturalVideoHeight);
					sender.findName("Display1InkPresenterSurface").Width=sender.Height*(plugin.content.findName("Media1").NaturalVideoWidth/plugin.content.findName("Media1").NaturalVideoHeight);
    				windowLastMousePosY=mouseEventArgs.getPosition(null).y;
   			}
   			if(windowResizeDirHor=="right")
   			{
    				sender.Width+= (mouseEventArgs.getPosition(null).x-windowLastMousePosX) / windowScale;
    				sender.findName("Display1SurfaceVideo").Width=sender.Width;
					sender.findName("Display1InkPresenterSurface").Width=sender.Width;
					sender.Height=sender.Width*(plugin.content.findName("Media1").NaturalVideoHeight/plugin.content.findName("Media1").NaturalVideoWidth);
					sender.findName("Display1SurfaceVideo").Height=sender.Width*(plugin.content.findName("Media1").NaturalVideoHeight/plugin.content.findName("Media1").NaturalVideoWidth);
					sender.findName("Display1InkPresenterSurface").Height=sender.Width*(plugin.content.findName("Media1").NaturalVideoHeight/plugin.content.findName("Media1").NaturalVideoWidth);
    				windowLastMousePosX=mouseEventArgs.getPosition(null).x;
   			}
   			if(windowResizeDirVer=="down")
   			{
    				sender.Height+= (mouseEventArgs.getPosition(null).y-windowLastMousePosY) / windowScale;
    				sender.findName("Display1SurfaceVideo").Height=sender.Height;
					sender.findName("Display1InkPresenterSurface").Height=sender.Height;
					sender.Width=sender.Height*(plugin.content.findName("Media1").NaturalVideoWidth/plugin.content.findName("Media1").NaturalVideoHeight);
					sender.findName("Display1SurfaceVideo").Width=sender.Height*(plugin.content.findName("Media1").NaturalVideoWidth/plugin.content.findName("Media1").NaturalVideoHeight);
					sender.findName("Display1InkPresenterSurface").Width=sender.Height*(plugin.content.findName("Media1").NaturalVideoWidth/plugin.content.findName("Media1").NaturalVideoHeight);
    				windowLastMousePosY=mouseEventArgs.getPosition(null).y;
   			}
   
  		}
  		if(sender.Name=="Display2")
  		{
   			if(windowResizeDirHor=="left")
   			{
    				sender["Canvas.Left"]+= (mouseEventArgs.getPosition(null).x-windowLastMousePosX) / windowScale;
    				sender.Width-= (mouseEventArgs.getPosition(null).x-windowLastMousePosX) / windowScale;
    				sender.findName("Display2SurfaceVideo").Width=sender.Width;
    				sender.findName("Display2SurfaceImage").Width=sender.Width;
					sender.findName("Display2InkPresenterSurface").Width=sender.Width;
					sender.Height=sender.Width*(plugin.content.findName("Media2").NaturalVideoHeight/plugin.content.findName("Media2").NaturalVideoWidth);
					sender.findName("Display2SurfaceVideo").Height=sender.Width*(plugin.content.findName("Media2").NaturalVideoHeight/plugin.content.findName("Media2").NaturalVideoWidth);
    				sender.findName("Display2SurfaceImage").Height=sender.Width*(plugin.content.findName("Media2").NaturalVideoHeight/plugin.content.findName("Media2").NaturalVideoWidth);
					sender.findName("Display2InkPresenterSurface").Height=sender.Width*(plugin.content.findName("Media2").NaturalVideoHeight/plugin.content.findName("Media2").NaturalVideoWidth);
    				windowLastMousePosX=mouseEventArgs.getPosition(null).x;
   			}
   			if(windowResizeDirVer=="up")
   			{
    				sender["Canvas.Top"]+= (mouseEventArgs.getPosition(null).y-windowLastMousePosY) / windowScale;
    				sender.Height-= (mouseEventArgs.getPosition(null).y-windowLastMousePosY) / windowScale;
    				sender.findName("Display2SurfaceVideo").Height=sender.Height;
    				sender.findName("Display2SurfaceImage").Height=sender.Height;
				sender.findName("Display2InkPresenterSurface").Height=sender.Height;
					sender.Width=sender.Height*(plugin.content.findName("Media2").NaturalVideoWidth/plugin.content.findName("Media2").NaturalVideoHeight);
					sender.findName("Display2SurfaceVideo").Width=sender.Height*(plugin.content.findName("Media2").NaturalVideoWidth/plugin.content.findName("Media2").NaturalVideoHeight);
    				sender.findName("Display2SurfaceImage").Width=sender.Height*(plugin.content.findName("Media2").NaturalVideoWidth/plugin.content.findName("Media2").NaturalVideoHeight);
					sender.findName("Display2InkPresenterSurface").Width=sender.Height*(plugin.content.findName("Media2").NaturalVideoWidth/plugin.content.findName("Media2").NaturalVideoHeight);
    				windowLastMousePosY=mouseEventArgs.getPosition(null).y;
   			}
   			if(windowResizeDirHor=="right")
   			{
    				sender.Width+= (mouseEventArgs.getPosition(null).x-windowLastMousePosX) / windowScale;
    				sender.findName("Display2SurfaceVideo").Width=sender.Width;
    				sender.findName("Display2SurfaceImage").Width=sender.Width;
					sender.findName("Display2InkPresenterSurface").Width=sender.Width;
					sender.Height=sender.Width*(plugin.content.findName("Media2").NaturalVideoHeight/plugin.content.findName("Media2").NaturalVideoWidth);
					sender.findName("Display2SurfaceVideo").Height=sender.Width*(plugin.content.findName("Media2").NaturalVideoHeight/plugin.content.findName("Media2").NaturalVideoWidth);
    				sender.findName("Display2SurfaceImage").Height=sender.Width*(plugin.content.findName("Media2").NaturalVideoHeight/plugin.content.findName("Media2").NaturalVideoWidth);
					sender.findName("Display2InkPresenterSurface").Height=sender.Width*(plugin.content.findName("Media2").NaturalVideoHeight/plugin.content.findName("Media2").NaturalVideoWidth);
    				windowLastMousePosX=mouseEventArgs.getPosition(null).x;
   			}
   			if(windowResizeDirVer=="down")
   			{
    				sender.Height+= (mouseEventArgs.getPosition(null).y-windowLastMousePosY) / windowScale;
    				sender.findName("Display2SurfaceVideo").Height=sender.Height;
    				sender.findName("Display2SurfaceImage").Height=sender.Height;
					sender.findName("Display2InkPresenterSurface").Height=sender.Height;
					sender.Width=sender.Height*(plugin.content.findName("Media2").NaturalVideoWidth/plugin.content.findName("Media2").NaturalVideoHeight);
					sender.findName("Display2SurfaceVideo").Width=sender.Height*(plugin.content.findName("Media2").NaturalVideoWidth/plugin.content.findName("Media2").NaturalVideoHeight);
    				sender.findName("Display2SurfaceImage").Width=sender.Height*(plugin.content.findName("Media2").NaturalVideoWidth/plugin.content.findName("Media2").NaturalVideoHeight);
					sender.findName("Display2InkPresenterSurface").Width=sender.Height*(plugin.content.findName("Media2").NaturalVideoWidth/plugin.content.findName("Media2").NaturalVideoHeight);
    				windowLastMousePosY=mouseEventArgs.getPosition(null).y;
   			}
   
  		}
 	}
}

function WindowMouseUp(sender, mouseEventArgs)
{
 	windowIsMoving=false;
 	windowIsResizing=false;
 	sender.ReleaseMouseCapture();
	sender.Cursor="Arrow";
}

function MediaEnded(sender, eventArgs)
{
	plugin.content.findName("Media1").stop();
	var vidCnt = _recContent.Videos().GetCount();
	if(vidCnt>1)
		plugin.content.findName("Media2").stop();
}

function MediaStateChanged(sender, eventArgs)
{
	switch(sender.CurrentState)
	{
		case "Buffering":

			break;
		case "Closed":
			
			break;

		case "Error":
	
			break;
		case "Opening":

			break;
		case "Paused":
			plugin.content.findName("XBarButtonPlay").Visibility="Visible";
			plugin.content.findName("XBarButtonPause").Visibility="Collapsed";
			break;
		case "Playing":
			plugin.content.findName("XBarButtonPlay").Visibility="Collapsed";
			plugin.content.findName("XBarButtonPause").Visibility="Visible";
			break;
		case "Stopped":
			plugin.content.findName("XBarButtonPlay").Visibility="Visible";
			plugin.content.findName("XBarButtonPause").Visibility="Collapsed";
			break;
	}
}

function TranscriptEntryMouseDown(sender, mouseEventArgs)
{
	cancelWindowMouseDown=true;
	var time = sender.Name.split("_")[1];
	
	GoToPosition(time);
}

function TranscriptEntryMouseUp(sender, mouseEventArgs)
{

}

function TranscriptEntryMouseMove(sender, mouseEventArgs)
{

}

function TranscriptEntryMouseEnter(sender, mouseEventArgs)
{

}

function TranscriptEntryMouseLeave(sender, mouseEventArgs)
{

}

function SearchResultEntryMouseDown(sender, mouseEventArgs)
{
	cancelWindowMouseDown=true;
	var time = sender.Name.split("_")[2];
	
	GoToPosition(time);
}

function SearchResultEntryMouseUp(sender, mouseEventArgs)
{

}

function SearchResultEntryMouseMove(sender, mouseEventArgs)
{

}

function SearchResultEntryMouseEnter(sender, mouseEventArgs)
{

}

function SearchResultEntryMouseLeave(sender, mouseEventArgs)
{

}


function MediaBufferingProgressChanged(sender, eventArgs)
{
	plugin.content.findName(sender.Name + "BufferingProgress").Width=50 * sender.BufferingProgress;
}

function MediaDownloadProgressChanged(sender, eventArgs)
{
	plugin.content.findName(sender.Name + "DownloadProgress").Width=50 * sender.DownloadProgress;
	
}

function DoPlay()
{
	plugin.content.findName("Media1").play();
	var vidCnt = _recContent.Videos().GetCount();
	if(vidCnt>1)
		plugin.content.findName("Media2").play();
}


