var submit_timeout_id = null;
var preview_timeout_id = null;
var last_preview = null;
var awaiting_preview = false;
var preview_timeout_expected = null;
function xhr() {
  try { return new XMLHttpRequest(); } catch (e) {}
  try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
  try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
  return null; // lose
}
function urlencode(s) {
  s = escape(s);
  s = s.replace("+", "%2B");
  return s
}
function submitComment() {
  var x = xhr();
  x.onreadystatechange = function() { if (x.readyState == 4) done(x.responseText); }
  var item    = urlencode(document.getElementById("item").value);
  var name    = urlencode(document.getElementById("name").value);
  var email   = urlencode(document.getElementById("email").value);
  var url     = urlencode(document.getElementById("url").value);
  var captcha = urlencode(document.getElementById("captcha").value);
  var text    = urlencode(document.getElementById("text").value);
  var data = "item=" + item + "&name=" + name + "&email=" + email + "&url=" + url + "&captcha=" + captcha + "&text=" + text
  document.getElementById("comment_status").innerHTML = "Trying to post comment ...";
  try {
    x.open("POST", "/cgi-bin/comment.pl", true);
    x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    x.send(data);
    submit_timeout_id = window.setTimeout(timed_out, 40000);
  }
  catch (e) {
    timed_out(); // good enough, I guess.
  }
}
function done(response) {
  if (submit_timeout_id != null) window.clearTimeout(submit_timeout_id);
  submit_timeout_id = null;
  var e = document.getElementById("comment_status");
  response = response.replace(/^\s*/, "").replace(/\s*$/, "");
  if (response == "ok") { e.innerHTML = "Your comment has been posted and is waiting for moderation."; }
  else if (response == "badcaptcha") { e.innerHTML = "Sorry, you appear to be a spambot. Did you forget to enter the secret word?"; }
  else { e.innerHTML = "Sorry, but the comment system appears to be broken. Please try again later."; }
}
function timed_out() {
  document.getElementById("comment_status").innerHTML = "It seems like we failed to post your comment. Please try again later. Sorry!";
}
function maybePreview() {
  var now = new Date();
  if (preview_timeout_id == null && !awaiting_preview && (last_preview == null || now-last_preview >= 3000)) {
    // preview at most every 3s; not while waiting for timeout or response
    preview();
  }
  else if (preview_timeout_id == null || now >= preview_timeout_expected+3000) {
    var delta = 3100-(now-last_preview);
    preview_timeout_expected = now+delta;
    preview_timeout_id = window.setTimeout(previewTimedOut, delta);
  }
  else {
  }
}
function previewTimedOut() {
  preview_timeout_id = null;
  maybePreview(); // try again
}
function preview() {
  var now = new Date();
  last_preview = now;
  awaiting_preview = true;
  var x = xhr();
  x.onreadystatechange = function() {
    if (x.readyState == 4) donePreview(x.responseText); }
  var text = document.getElementById("text").value;
  x.open("POST", "/cgi-bin/markdown.pl", true);
  x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  x.send("text=" + urlencode(text));
}
function donePreview(response) {
  awaiting_preview = false;
  response = response.replace(/^\s*/, "").replace(/\s*$/, "");
  if (response != "") {
    response = '<p class="preview_intro">Preview:</p> ' + response;
  }
  var e = document.getElementById("comment_preview");
  if (e) e.innerHTML = response;
}
function hidebody() {
  document.getElementById("itembody").style.display="none";
  document.getElementById("noitembody").style.display="block";
}
function showbody() {
  document.getElementById("itembody").style.display="block";
  document.getElementById("noitembody").style.display="none";
}
