
/**
 * Attaches an onclick event to each link with rel="external" that opens the
 * link in a new window.
 */
function initExternalLinks() {
  var as = document.getElementsByTagName("a");
  for (var i = 0; i < as.length; i++) {
    if (as[i].getAttribute("rel") == "external") {
      as[i].onclick = openNewWindow;
    }
  }

  function openNewWindow() {
    window.open(this.href);
    return false;
  }
}

function firePasswordReminder(frm) {
  frm.entity.value='security';
  frm.command.value='login';
  
  if (frm.username.value == '') {
    frm.username.focus();
    alert('Please enter your username in the username field first.');
  } else {
    frm.entity.value='user';
    frm.command.value='forgotPassword';
    frm.submit();
  }
  
  return false;
}

function fireLogin(frm) {
  frm.entity.value='security';
  frm.command.value='login';
  
  if (frm.username.value == '') {
    frm.username.focus();
    alert('Please enter your username in the username field first.');
  } else if (frm.password.value == '') {
    frm.password.focus();
    alert('Please enter your password in the password field first.');
  } else {
    frm.submit();
  }
  
  return false;
}

var DELIVERY_IN_PROGRESS = false;

function updateDistributionProgress(targetUrl, paramString) {
  var req = newXMLHttpRequest();

  var handlerFunction = getReadyStateHandler(req, drawProgress);
  req.onreadystatechange = handlerFunction;  
  req.open("POST", targetUrl, true);
  req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

  req.send(paramString);
 }

function drawProgress(distributionXML) {
  var delivering = false;
  var distributionList = distributionXML.getElementsByTagName("root")[0];  
  var distributions = distributionList.getElementsByTagName("distribution");  

  var container = document.getElementById('progressHolder');
  container.innerHTML = ''; // clear contents
  
  for (var j = 0; j < distributions.length ; j++) {
    var distribution = distributions[j];
    var id = distribution.getElementsByTagName("id")[0].firstChild.nodeValue;
    var name = distribution.getElementsByTagName("name")[0].firstChild.nodeValue;
    var emailsQueued = parseInt(distribution.getElementsByTagName("emailsQueued")[0].firstChild.nodeValue);
    var emailsSent = parseInt(distribution.getElementsByTagName("emailsSent")[0].firstChild.nodeValue);
    var percentage = distribution.getElementsByTagName("percentage")[0].firstChild.nodeValue;
    var lastSentDate = '';
    if (distribution.getElementsByTagName("lastSentDate")[0].firstChild) {
      lastSentDate = distribution.getElementsByTagName("lastSentDate")[0].firstChild.nodeValue;
    }
    
    if (emailsQueued > 0) {
      if (percentage != 100) {
        delivering = true;
      }
      DELIVERY_IN_PROGRESS = (DELIVERY_IN_PROGRESS || delivering);
            
      var divHolder = document.createElement("div");
      divHolder.className="progressBar";

      var divName = document.createElement("div");
      divName.className = "distributionName";
      divName.appendChild(document.createTextNode(name));
      divHolder.appendChild(divName);
      
      var divSent = document.createElement("div");
      divSent.className = "sentDate";      
      divSent.appendChild(document.createTextNode("Started: " + lastSentDate));
      divHolder.appendChild(divSent);

      var divStatus = document.createElement("div");
      divStatus.className = "status";
      divStatus.appendChild(document.createTextNode(emailsSent + " / " + emailsQueued));
      divHolder.appendChild(divStatus);

      var divProgress = document.createElement("div");
      divProgress.className = "progress";

      var divIndicator = document.createElement("div");
      divIndicator.className = "indicator";
      divIndicator.style.width = "" + percentage + "%";
      divProgress.appendChild(divIndicator);    
      divHolder.appendChild(divProgress);

      var divPercent = document.createElement("div");
      divPercent.className = "percentage";
      divPercent.appendChild(document.createTextNode(percentage + "%"));
      divHolder.appendChild(divPercent);
      
      if (percentage != 100) {
        var divCancel = document.createElement("div");      
        var aCancel = document.createElement("a");
        aCancel.href = __EMAIL__ + "?entity=round&command=cancelDelivery&distributionId=" + id;
        aCancel.onclick = function () { return confirm('Are you sure you want to cancel this delivery?'); }
        aCancel.appendChild(document.createTextNode("Cancel"));
        divCancel.appendChild(aCancel);      
        divHolder.appendChild(divCancel);
      } else {      
        var divRemove = document.createElement("div");      
        var aRemove = document.createElement("a");
        aRemove.href = __EMAIL__ + "?entity=round&command=removeDelivery&distributionId=" + id;
        aRemove.onclick = function () { return confirm('Are you sure you want to delete this delivery?'); }
        aRemove.appendChild(document.createTextNode("Delete"));
        divRemove.appendChild(aRemove);      
        divHolder.appendChild(divRemove);
      }
      container.appendChild(divHolder);
    }
  }
    
}

var MARKING_IN_PROGRESS = false;

function updateMarkingProgress(targetUrl, paramString) {
  var req = newXMLHttpRequest();

  var handlerFunction = getReadyStateHandler(req, drawMarkingProgress);
  req.onreadystatechange = handlerFunction;
  req.open("POST", targetUrl, true);
  req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

  req.send(paramString);
}

function drawMarkingProgress(markingXML) {
  var marking = false;
  var distributionList = markingXML.getElementsByTagName("root")[0];
  var distributions = distributionList.getElementsByTagName("marking");

  var container = document.getElementById('m-progressHolder');
  container.innerHTML = ''; // clear contents

  for (var j = 0; j < distributions.length ; j++) {
    var distribution = distributions[j];
    var totalUsersToMark = parseInt(distribution.getElementsByTagName("totalUsersToMark")[0].firstChild.nodeValue);
    var usersMarked = parseInt(distribution.getElementsByTagName("usersMarked")[0].firstChild.nodeValue);
    var percentage = distribution.getElementsByTagName("percentage")[0].firstChild.nodeValue;

    if (totalUsersToMark > 0) {
      if (percentage != 100) {
        marking = true;
      }
      MARKING_IN_PROGRESS = (MARKING_IN_PROGRESS || marking);

      var divHolder = document.createElement("div");
      divHolder.className="progressBar";

      var divName = document.createElement("div");
      divName.className = "distributionName";
      divName.appendChild(document.createTextNode("Marking"));
      divHolder.appendChild(divName);

      var divStatus = document.createElement("div");
      divStatus.className = "status";
      divStatus.appendChild(document.createTextNode(usersMarked + " / " + totalUsersToMark));
      divHolder.appendChild(divStatus);

      var divProgress = document.createElement("div");
      divProgress.className = "progress";

      var divIndicator = document.createElement("div");
      divIndicator.className = "indicator";
      divIndicator.style.width = "" + percentage + "%";
      divProgress.appendChild(divIndicator);
      divHolder.appendChild(divProgress);

      var divPercent = document.createElement("div");
      divPercent.className = "percentage";
      divPercent.appendChild(document.createTextNode(percentage + "%"));
      divHolder.appendChild(divPercent);

      container.appendChild(divHolder);
    }
  }
}