var prevID = null;
var prevCaptionID = null;
var gotContent = false;

function updateContent() {
  var d = MochiKit.Async.doXHR(startTime + "/check/");
  d.addCallback(function(req) {
    MochiKit.Async.callLater(1, updateContent);
    var result = req.responseText;
    if (result.substring(0, 5) == "next:") {
      var newSessionID = result.substring(5);
      document.location.replace("../" + newSessionID + "/");
      return;
    }
    if (prevID && result == prevID)
      return;
    if (result == "")
      result = null;
    prevID = result;
    var frame = document.getElementById("contentFrame");
    // First try the W3C standard "contentDocument" property; if that fails,
    // try IE's "contentWindow.document".
    var frameDoc = frame.contentDocument;
    if (!frameDoc)
      frameDoc = frame.contentWindow.document;
    if (result) {
      playAudio(mediaBase + "accevent/sounds/alert.mp3");
      gotContent = true;
      frameDoc.location.replace(startTime + "/content/");
    } else {
      var msg = gettext("Please wait.");
      frameDoc.body.innerHTML = "<p>" + msg + "</p>";
    }
  });
}

function updateCaption() {
  var d = MochiKit.Async.doXHR(startTime + "/check/caption");
  d.addCallback(function(req) {
    MochiKit.Async.callLater(1, updateCaption);
    var result = req.responseText;
    if (result == "")
      result = null;
    if (result == prevCaptionID)
      return;
    prevCaptionID = result;
    var d2 = MochiKit.Async.doXHR(startTime + "/content/caption");
    d2.addCallback(function(req2) {
      var content = req2.responseText;
      var frame = document.getElementById("captionFrame");
      // First try the W3C standard "contentDocument" property; if that fails,
      // try IE's "contentWindow.document".
      var frameDoc = frame.contentDocument;
      if (!frameDoc)
        frameDoc = frame.contentWindow.document;
      var body = frameDoc.body;
      body.innerHTML = content;
      var ps = body.getElementsByTagName("p");
      if (ps.length > 0) {
        var last = ps.item(ps.length - 1);
        last.scrollIntoView(false);
      }
    });
  });
}

function checkChat() {
  var d = MochiKit.Async.doXHR(startTime + "/check_chat/");
  d.addCallback(function(req) {
try {
    MochiKit.Async.callLater(1, checkChat);
    var result = req.responseText;
    if (!result)
      return;
    var names = result.split("|");
    var rec = getChatRecorder();
    for (var i = 0; i < names.length; i++) {
      var name = names[i];
      if (!rec.hasStream(name))
        rec.playAV(name, false);
    }
} catch (e) { window.alert(e); }
  });
}

function playArchive() {
  var now = new Date().getTime() / 1000;
  startTime += Math.floor(now - startTimeLocal);
  setTimeout(updateContent, 100);
  if (hasInternalCaption)
    setTimeout(updateCaption, 100);
  setTimeout(checkChat, 1000);
}

dojo.addOnLoad(function() {
  if (dojo.byId("flashvideo"))
    swfobject.embedSWF(mediaBase + "accevent/swf/viewer.swf", "flashvideo", "320", "240", "9.0.115", null, {rtmpurl: mainRTMP, mainstreamname: mainStreamName, prerecorded: "true"});
  swfobject.embedSWF(mediaBase + "accevent/swf/recorder.swf", "chatrecorder", "1", "1", "9.0.115", null, {rtmpurl: chatRTMP});
});
