// 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 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";
//    newRPStroke.DrawingAttributes.OutlineColor = "white";
    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)
{  //get xaml out of savedInk.xml, which is known by xml element in html
//   var persistenceXml = document.getElementById("persistenceFromServerXml");
//    if (persistenceXml != null && persistenceXml.documentElement != null)
//              
//            var inkdata = persistenceXml.documentElement.selectSingleNode("/InkCollection/Ink[@Number='1']");
//            if (inkdata != null)
//            {
//                var strokeCollectionNode = inkdata.selectSingleNode("./strokeData/StrokeCollection");
//                if (strokeCollectionNode != null)
//                {
//                    var mystrokeCollectionXaml = strokeCollectionNode.xml;
//                }
 
   GetInkStrokesforPlayback(); 
           
}
function StrokestoDummy(returnedStrokes)
{
 var strokeCollection = 
                wpf.content.createFromXaml(returnedStrokes);
            dummyInkPresenter.Strokes = strokeCollection;
            
            
}

function timerStrokeCompleted(sender, args)
{
    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);
        }
    }
    else
    {
      //  resetInkPlayback();
    }
    sender.findname("timerStroke").begin();
}

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;
}

