// AJAX calls

function createRequest() {
  var xmlhttp;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
}

var req = createRequest();

function sendRequest(uri) {
  req.open('get', uri);
  if(uri.indexOf('/videoswv?') == 0) {
    req.onreadystatechange = handleSWVResponse;
    resetSWVMessages();
    showMatchesDiv();
    ele('matchedsegs').innerHTML = "<font size=-1><br>Searching...<br>&nbsp;</font>";
  } else if (uri.indexOf('/videorelated?') == 0) {
    req.onreadystatechange = handleRelatedResponse;
    ele('relatedvids').innerHTML = "<font size=-1><br>Searching...<br>&nbsp;</font>";    
  } else if (uri.indexOf('/videopopular?') == 0) {
    req.onreadystatechange = handlePopularResponse;
    ele('popularvids').innerHTML = "<font size=-1><br>Searching...<br>&nbsp;</font>";
  } else {
    return;
  }
  req.send(null);
}

function handleSWVResponse() {
  if (req.readyState == 4) {
    var resp = req.responseText;
    var matchedsegs = ele('matchedsegs');
    var sHTML = "<br>";
    var lineArr = resp.split("\r\n");
    var eleArr;
    var query = lineArr[0];
    if (lineArr[1] == "0") {
      sHTML += "<font size=-1>Your search - <b>" + query + 
	       "</b> - did not match any scenes in this video.</font>"
    } else {
      ele('nummatches').innerHTML = "<b>" + lineArr[1] + "</b> match";
      if (lineArr[1] > 1) {
        ele('nummatches').innerHTML += "es&nbsp;";
      } else {
	ele('nummatches').innerHTML += "&nbsp;";
      }
      for (var i = 2; i < lineArr.length - 1; i++) {
        eleArr = lineArr[i].split("\t");
        sHTML += "<div class='playresultimage' id='seg" + i + 
                 "'><a href='javascript:void(0)' onclick='vpseek(" + 
                 eleArr[0] + ")'><img src='" + eleArr[1] + 
                 "' alt=''></a></div>" +
                 "<div class='playresulttext'>" +
                 "  <div class='playsectiontranscript'>" + eleArr[2] +
                 "</div><div class='timestamp'>" + eleArr[3] + "</div>" + 
                 "</div>";
      }
    }
    matchedsegs.innerHTML = sHTML;
  }
}

function handleRelatedResponse () {
  if (req.readyState == 4) {
    outputGrid('relatedvids', req.responseText)
  }
}

function handlePopularResponse () {
  if (req.readyState == 4) {
    outputGrid('popularvids', req.responseText)
  }
}

function outputGrid(divname, resp) {
  var sHTML = "<p>";
  var fHTML = "";
  var lineArr = resp.split("\r\n");
  var eleArr;
  var plDocids = "";
  var plFirstDocid;
  if (lineArr[0] == "0") {
    sHTML += "<font size=-1>No matching videos.</font>"
  } else {
    sHTML += "<table cellpadding=0 cellspacing=3>";
    for (var i = 1; i < lineArr.length - 1; i++) {
      eleArr = lineArr[i].split("\t");
      if (i % 2 == 1) {
        sHTML += "<tr>";
      }
      sHTML += "<td align=center class=standardfont valign=top>" +
               "<a href='/videoplay?docid=" +
	       eleArr[0] + "'><img border=1 height=" + eleArr[5] +
               " width=100 alt='' title=\"" + 
               eleArr[3] + "\" src='" + 
	       eleArr[1] + "'><br><a href='/videoplay?docid=" + 
               eleArr[0] + "' title='" + eleArr[3] + "'>" + eleArr[2] + 
               "</a><br><font color=green>" + 
               eleArr[4] + "</font></td>";
      plDocids += eleArr[0] + ",";
      if (i == 1) {
        plFirstDocid = eleArr[0];
      }
      if (i % 2 == 0) {
        sHTML += "</tr>";
        sHTML += "<tr><td height=10></td></tr>";
      }
    }
    if (i % 2 == 0) {
      sHTML += "<td></td></tr>"
    }
    sHTML += "</table>";
    if (lineArr.length > 3) {
      fHTML += "<div id='playb2b'><a href=/videoplay?docid=" + plFirstDocid + "&pl=" + plDocids + ">";
      fHTML += "<img src=/common/playoverlay.gif border=0 align=absmiddle></a> "
      fHTML += "<a href=/videoplay?docid=" + plFirstDocid + "&pl=" + plDocids + ">";
      fHTML += "<b>Play these back-to-back</b></a></div>";
    }
  }
  fHTML += sHTML;
  ele(divname).innerHTML = fHTML;
}

function updateText(obj, cl, text) {
  obj.className = cl;
  obj.innerHTML = text;
}

function resetSWVMessages () {
  updateText(ele("matchedsegs"), "", "");
  updateText(ele("nummatches"), "", "");
}

function showMatchesDiv() {
  switchTab(ele('lthisvideolink'), 'E1DAE1');
  hideEle(ele('morevideosblock')); 
  showEle(ele('thisvideoblock'));
  hideEle(ele('summary'));
  showEle(ele('matches'));
}

function vpsearchthisshow(thequery) {
  var thedocid = window.location.search.split("docid=")[1].split("&")[0];
  sendRequest("/videoswv?docid=" + thedocid + 
		 "&q=" + prepareSearchParams(thequery));
  return false;
}

function vpsearch(query, allVideos, hasTranscript) {
  if (allVideos) {
    return pvsearch(query);
  } else if (hasTranscript) {
    return vpsearchthisshow(query);
  } else { 
    showMatchesDiv();
    return false;
  }
}

function vpseek(time) {
  var movie = ele("VideoPlayback");
  movie.SetVariable("seekTime", time/1000);
}

function getFullScreenWindowParams() {
  return "toolbar=no" + ",width=" + screen.availWidth  
         + ",height=" + screen.availHeight 
         + ",status=no,resizable=yes,fullscreen=yes"
         + ",scrollbars=0";
}

function goFullscreen(videoPath, time, state) {
  var timeRegex = new RegExp("&begin=[0-9]+", "i");
  var newVideoUrl = videoPath.replace(
                      timeRegex, "&begin=" + Math.floor(time * 1000));
  var w = window.open(
          "http://video.google.com" + '/videopopup?q=' 
           + prepareSearchParams(newVideoUrl) 
           + "&windowtitle=" 
           + prepareSearchParams(window.document.title + " - Full Screen"), 
           "GoogleVideo", getFullScreenWindowParams());
  w.focus();
}

function expand() {
  window.moveTo(0,0);
  window.resizeTo(screen.availWidth, screen.availHeight);
}

function removeScrollBars() {
  document.body.scroll = 'no';
}

function getNoCacheURL(url) {
  return url + "&ms=" + new Date().getTime();
}

function playNextVideo() {
  var plArr = window.location.href.match("pl=[,\\d-]+");
  var pl;
  if(plArr != null) {
    pl = plArr[0];
    var curDocid = window.location.href.match("docid=([\\d-]+)&*")[1];
    var nextDocidStart = pl.indexOf(curDocid) + curDocid.length + 1;
    var nextDocidEnd = pl.indexOf(",", nextDocidStart);
    if (nextDocidEnd != -1) {
      var nextDocid = pl.substring(nextDocidStart, nextDocidEnd);
      window.location.href = "http://" + window.location.host + "/videoplay?docid=" + nextDocid + "&" + pl;
    }
  }
}

var tabs = new Array("thisvideo","morevideos");
var links = new Array("related", "popular", "playlist");

var windowH;
var usableH;
var cornerH;
var fudgeH = 14;

function onWindowResize() {

  if(!(windowH = window.innerHeight)) {
    if(!(windowH = document.documentElement.clientHeight)) {
      windowH = document.body.clientHeight;
    }
  }

  usableH = windowH - ele("topblock").offsetHeight;
  
  ele("playvideoblock").style.height = usableH;
  ele("VideoPlayback").style.height = usableH;
  ele("summary").style.height = usableH;
  ele("matches").style.height = usableH;
  ele("morenav").style.height = usableH;

  cornerH = usableH - ele("abovecorner").offsetHeight - fudgeH;

  ele("corner").style.height = cornerH;
  ele("videopurchasediv").style.height = cornerH;
  ele("videopurchaseiframe").style.height = cornerH;
}

function switchToPurchase() {
  hideEle(ele('thumbsetc'));
  hideEle(ele('purchaseorthumbs'));
  showEle(ele('videopurchasediv'));
  showEle(ele('thumbsorpurchase'));

  cornerH = usableH - ele("abovecorner").offsetHeight;
  ele("corner").style.height = cornerH;
  ele("videopurchasediv").style.height = cornerH;
  ele("videopurchaseiframe").style.height = cornerH;
}
function switchToThumbs() {
  hideEle(ele('videopurchasediv'));
  hideEle(ele('thumbsorpurchase'));
  showEle(ele('thumbsetc'));
  showEle(ele('purchaseorthumbs'));
}
