var instantMessageDiv = null;
var instantMessageDivBG = null;

// Check for new instant messages every 1 minutes
var instantMessageCheckRequest = createHttpRequest();
var instantMessageInterval = null;
function startInstantMessageInterval() {
  instantMessageInterval = setInterval("checkForInstantMessage()", 1 * 60 * 1000);
}

var showingInstantMessage = false;

var html = null;
var body = null;

var instantMessageDeleteRequest = createHttpRequest();
var instantMessageDefaultDeleteRequest = createHttpRequest();

function createInstantMessageDivs() {
  if (instantMessageDiv) {
    return;
  }

  instantMessageDiv = document.createElement("div");
  instantMessageDiv.setAttribute("id", "instant-message-write");

  instantMessageDivBG = document.createElement("div");
  body.appendChild(instantMessageDivBG);
  instantMessageDivBG.setAttribute("id", "instant-message-write-bg");
  instantMessageDivBG.style.position = "absolute";
  instantMessageDivBG.style.zIndex = "5";
  instantMessageDivBG.style.top = "0px";
  instantMessageDivBG.style.left = "0px";
  instantMessageDivBG.style.width = html.offsetWidth + "px";
  instantMessageDivBG.style.height = html.offsetHeight + "px";
  instantMessageDivBG.style.backgroundImage = "url('/images/body-im-bg.gif')";

  body.appendChild(instantMessageDiv);
  instantMessageDiv.style.top = "100px";
  instantMessageDiv.style.left = (body.offsetWidth / 2 - instantMessageDiv.offsetWidth / 2) + "px";
}

function writeInstantMessage(personId, answerId) {
  body.style.cursor = "wait";
  checkForDelete(5 * 1000);

  showingInstantMessage = true;

  createInstantMessageDivs();

  var divRequest = createHttpRequest();
  divRequest.open("GET", "/instantMessageHandler.do?command=getForm&personId=" + personId
                  + (answerId ? "&answerId=" + answerId : ""), false);
  divRequest.send(null);
  if (divRequest.readyState == 4 && divRequest.status == 200) {
    instantMessageDiv.innerHTML = divRequest.responseText;
    document.forms.instantMessage.message.focus();
  }
  document.forms.instantMessage.message.focus();
  body.style.cursor = "default";
}

function sendInstantMessage(form) {
  body.style.cursor = "wait";
  var request = createHttpRequest();
  request.open("GET", "/instantMessageHandler.do?command=sendForm&personId="
               + form.personId.value
               + "&message=" + encodeURIComponent(form.message.value), false);
  request.send(null);
  if (request.readyState == 4 && request.status == 200) {
    instantMessageDiv.innerHTML = request.responseText;
    document.forms.instantMessage.closeButton.focus();
    setTimeout('closeInstantMessageForm()', 2 * 1000);
  }
  body.style.cursor = "default";
  return false;
}

function closeInstantMessageForm() {
  checkForDelete(10);

  if (instantMessageDiv) {
    instantMessageDiv.innerHTML = "";
    instantMessageDiv.style.display = "none";
    body.removeChild(instantMessageDiv);
    instantMessageDiv = null;
  }
  if (instantMessageDivBG) {
    instantMessageDivBG.innerHTML = "";
    instantMessageDivBG.style.display = "none";
    body.removeChild(instantMessageDivBG);
    instantMessageDivBG = null;
  }
  showingInstantMessage = false;
}

function checkForInstantMessage() {
  if (showingInstantMessage) {
    instantMessageCheckRequest.abort();
    return;
  }
  instantMessageCheckRequest.open("GET", "/instantMessageHandler.do?command=check", true);
  instantMessageCheckRequest.onreadystatechange = handleCheckInstantMessageResponse;
  instantMessageCheckRequest.send(null);
}

function handleCheckInstantMessageResponse(response) {
  if (showingInstantMessage) {
    instantMessageCheckRequest.abort();
    return;
  }
  if (instantMessageCheckRequest.readyState == 4 && instantMessageCheckRequest.status == 200) {
    if (trim(instantMessageCheckRequest.responseText).length != 0) {
      createInstantMessageDivs();
      showingInstantMessage = true;
      instantMessageDiv.innerHTML = instantMessageCheckRequest.responseText;
      if (document.forms.instantMessage.elements["id"]) {
        var request = createHttpRequest();
        request.open("GET", "/instantMessageHandler.do?command=markAsRead&id="
                     + document.forms.instantMessage.elements["id"].value, true);
        request.send(null);
      }
    }
  }
}

function nextInstantMessage() {
  clearInterval(instantMessageInterval);
  instantMessageCheckRequest.abort();
  closeInstantMessageForm();
  startInstantMessageInterval();
  checkForInstantMessage();
}


function checkForDelete(delay) {
  if (document.forms && document.forms.instantMessage && document.forms.instantMessage.doDelete && document.forms.instantMessage.doDelete.checked) {
    instantMessageDefaultDeleteRequest.open("GET", "/instantMessageHandler.do?command=setDefaultDelete&doDelete="
                                            + (document.forms.instantMessage.doDelete.checked ? "true" : "false"), true);
    instantMessageDefaultDeleteRequest.send(null);

    // Wait some time so we don't delete the answer if we like to quote it
    var id = document.forms.instantMessage.id.value;
    setTimeout("doDelete(" + id + ")", delay);
  }
}

function doDelete(id) {
  instantMessageDeleteRequest.open("GET", "/instantMessageHandler.do?command=delete&id=" + id, true);
  instantMessageDeleteRequest.send(null);
}

function quoteInstantMessage(text) {
  document.forms.instantMessage.message.value =
    text + "\n\n" + document.forms.instantMessage.message.value;
  document.forms.instantMessage.message.focus();
}
