// Simple WPFe Ink Photo Annotation Sample, Gavin Gear (gaving)

var wpf;
var inkPresenter; // Corresponds to InkPresenter element in xaml
var dummyInkPresenter;
var strokesToPlayback;
var currentStrokeIndex = 0;
var currentPointIndex = 0;

var video;
var currentVideo = 0;
var currentVideoIndex = 0; //this will end up going away, since it will just be currentvideo
var numVideos = 8;
var isVideoPlaying = false;
var currStrokes;
var ReplayStrokes;

var recordedStrokesStartTimes = new Array(8);
var recordedStrokesClearTimes = new Array(8);
var recordedStrokes = new Array(8);
var initedStrokes = false;

function root_Loaded(sender, args) 
{
    wpf = document.getElementById("wpfobj");
    inkPresenter = sender.findname("inkPresenterElement");
    dummyInkPresenter = sender.findname("dummyInkPresenter");
    video=sender.findname("media");
        CacheImagesfromDB(sender);
        //BuildFiveRows(sender);

//    CreateFragment(sender,args);
//        GetInkStrokes("inkThumb1");
//        inkThumb=sender.findname("inkThumb1");
//        inkThumb.Width=.25*inkThumb.Width;
//        inkThumb.Height=.25*inkThumb.Height;

    
    
//    strokesToPlayback = sender.findname("inkToPlayBack");
//    resetInkPlayback();
//    sender.findname("timerStroke").begin();
}

function resetInkPlayback()
{

    inkPresenter.Strokes.Clear();
    newRPStroke = wpf.content.createFromXaml('<Stroke/>');
    newRPStroke.DrawingAttributes.Color = "black";
    inkPresenter.Strokes.Add(newRPStroke);
    currentStrokeIndex = 0;
    currentPointIndex = 0;
}
function resetInkPlaybackAlt()
{
    inkPresenter.Strokes.Clear();
    dummyInkPresenter.Strokes.Clear();
    newRPStroke = wpf.content.createFromXaml('<Stroke/>');
    newRPStroke.DrawingAttributes.Color = "black";
//    newRPStroke.DrawingAttributes.OutlineColor = "white";
    inkPresenter.Strokes.Add(newRPStroke);
    currentStrokeIndex = 0;
    currentPointIndex = 0;
}

function setStrokes(sender,args)
 {
   GetInkStrokesforPlayback(); 
}   

function ReplayDBInk(sender,args)
{
if (ButtonsEnabled==true)
{
sender.findName("ButtonGlower")["Canvas.Left"]=675;
sender.findName("GlowButton").begin();

if (ReplayStrokes != null)
PlayDBInk(ReplayStrokes);
else
ShowMessage("Can't replay empty or unsaved Canvas.")
  
}   
}   
           

function PlayDBInk(returnedStrokes)
{
ButtonsEnabled=false;
 StrokestoDummy(returnedStrokes);
 resetInkPlayback();
 timerStrokeCompleted();
}



function StrokestoDummy(returnedStrokes)
{
 var strokeCollection = 
                wpf.content.createFromXaml(returnedStrokes);
             currStrokes=returnedStrokes;
             ReplayStrokes=currStrokes;

            dummyInkPresenter.Strokes = strokeCollection;
}
function timerStrokeCompleted()
{
  if(currentStrokeIndex < dummyInkPresenter.Strokes.Count)
  {
  if(dummyInkPresenter.Strokes.GetItem(currentStrokeIndex).StylusPoints.Count > currentPointIndex)
    {
        
            var pointToAdd = dummyInkPresenter.Strokes.GetItem(currentStrokeIndex).StylusPoints.GetItem(currentPointIndex);
            if (currentPointIndex==0)
            {
                inkPresenter.Strokes.GetItem(currentStrokeIndex).DrawingAttributes.SetValue("Color", BrowserColorConverter(dummyInkPresenter.Strokes.GetItem(currentStrokeIndex).DrawingAttributes.Color)+ "");
                inkPresenter.Strokes.GetItem(currentStrokeIndex).DrawingAttributes.SetValue("Width", dummyInkPresenter.Strokes.GetItem(currentStrokeIndex).DrawingAttributes.Width);
                
               inkPresenter.Strokes.GetItem(currentStrokeIndex).DrawingAttributes.SetValue("OutlineColor", "#FFFFFF");
            }
            inkPresenter.Strokes.GetItem(currentStrokeIndex).StylusPoints.Add(pointToAdd);
            currentPointIndex++;
        }
                else
        {
            currentStrokeIndex++;
              
            currentPointIndex = 0;
            newRPStroke = wpf.content.createFromXaml('<Stroke/>');
            
            newRPStroke.DrawingAttributes.OutlineColor = "#FFFFFF";            
            inkPresenter.Strokes.Add(newRPStroke);
        }
  

    
    dbCallSender.findname("timerStroke").begin();

      }
      else
      {
        dummyInkPresenter.Strokes.Clear();

      inkPresenter.Strokes.Clear();
        DisplayRetrievedStrokes(currStrokes,"inkPresenterElement");
ButtonsEnabled=true;

      }
}

function RecordingMouseDown(sender,args)
{
   if (isRecording)
   {
     inkPresenter.CaptureMouse();
     //recordedStrokesStartTimes[currentVideoIndex][currentStrokeIndex] = video.Position.Seconds;
     recordedStrokesStartTimes[currentStrokeIndex] = video.Position.Seconds;
     currentStrokeIndex = currentStrokeIndex + 1;
     newStroke = wpf.content.createFromXAML('<Stroke/>');
     newStroke.DrawingAttributes.OutlineColor = "#FFFFFF";
     newStroke.DrawingAttributes.Color = "black";
     newStroke.StylusPoints.AddStylusPoints(args.GetStylusPoints(inkPresenter));
     inkPresenter.Strokes.Add(newStroke);
    // recordedStrokes[currentVideoIndex].Add(newStroke);
     //recordedStrokes.Add(newStroke);
   }
}

function RecordingMouseMove(sender,args)
{
   if (isRecording && newStroke != null)
   {
      newStroke.StylusPoints.AddStylusPoints(args.GetStylusPoints(inkPresenter));
   }
}

function Recording(sender,args)
{
isRecording=true;
}
function RecordingMouseUp(sender,args)
{
   if (isRecording)
   {
     newStroke = null;
     inkPresenter.ReleaseMouseCapture();
   }
}

function media_stop(sender, args) {

    sender.findName("media").stop();
    sender.findName("media").position="00:00:00";
    dummyInkPresenter.Strokes.clear();
    inkPresenter.Strokes.clear();
    
   // setMarkers(sender);
}

function media_pause(sender, args) {

    sender.findName("media").pause();
}

function media_begin(sender, args) {

    sender.findName("media").play();
   
}
function media_begin_ink(sender, args) {

    sender.findName("media").play();
    ReplayInk(sender,args);
}
function media_reset_all(sender, args) {

    sender.findName("media").stop();
    ClearStrokes(sender,args);
}
function onMarkerReached(sender, markerEventArgs)
{

  //sender.findName("timeTextBlock").Text =
 // 	markerEventArgs.marker.time.seconds.toString(); 
 ReplayVideoInk(sender,markerEventArgs);
  	
}
function onMediaOpened(sender, eventArgs)
{
setMarkers(sender);
}
function setMarkers(sender)
{
    var marker = 
         sender.getHost().content.createFromXaml
         (
              "<TimelineMarker Time='0:0:1' Type='Test' Text='0' />" 
         );
    sender.markers.add(marker);	
    marker = 
         sender.getHost().content.createFromXaml
         (
              "<TimelineMarker Time='0:0:3' Type='Test' Text='1' />" 
         );
    sender.markers.add(marker);	
     marker = 
         sender.getHost().content.createFromXaml
         (
              "<TimelineMarker Time='0:0:5' Type='Test' Text='2' />" 
         );
    sender.markers.add(marker);	
         marker = 
         sender.getHost().content.createFromXaml
         (
              "<TimelineMarker Time='0:0:6' Type='Test' Text='3' />" 
         );
    sender.markers.add(marker);	
             marker = 
         sender.getHost().content.createFromXaml
         (
              "<TimelineMarker Time='0:0:10' Type='Test' Text='4' />" 
         );
    sender.markers.add(marker);	
}

function ReplayVideoInk(sender,markerEventArgs)
{
 
 newStroke = null;
 resetInkPlaybackAlt();
 GetInkStrokesforVideoPlayback(markerEventArgs.marker.text); 
 
 timerStrokeCompleted(sender, markerEventArgs);
  
  newStroke = null;
}


