function runTimeValue() {
  var ocapn = document.getElementById("oldcapacitynum").value;
  if (ocapn == 0)
    return Number.NaN;
  var ocaps = 0.001;
  if (document.getElementById("oldcapacityscale").selectedIndex != 0) {
    ocaps = 1.0;
  }
  var otimen = document.getElementById("oldtimenum").value;
  if (otimen == 0)
    return 0.0;
  var otimes = 1.0;
  if (document.getElementById("oldtimescale").selectedIndex != 0) {
    otimes = 1.0/60.0;
  }
  var ncapn = document.getElementById("newcapacitynum").value;
  if (ncapn == 0)
    return 0.0;
  var ncaps = 0.001;
  if (document.getElementById("newcapacityscale").selectedIndex != 0) {
    ncaps = 1.0;
  }

  return (otimen * otimes) * (ncapn * ncaps) / (ocapn * ocaps);
}

function plural(n) {
  return Math.round(n) == 1 ? "" : "s";
}

function computeRunTime() {
  var time = runTimeValue();
  var answer;
  if (isNaN(time)) {
    answer = "forever";
  } else {
    var hours = Math.floor(time);
    var minutes = Math.round(60 * (time - hours));
    if (hours > 0) {
      answer = hours.toFixed(0) + " hour" + plural(hours) + " " + minutes.toFixed(0) + " minute" + plural(minutes);
    } else {
      if (minutes > 0) {
        answer = minutes.toFixed(0) + " minute" + plural(minutes);
      } else {
        answer = "less than a minute";
      }
    }
  }
  if (document.getElementById("newruntime").firstChild.nodeValue != answer )
    document.getElementById("newruntime").firstChild.nodeValue = answer;
}

function initRunTimeCalculator() {
  if (document.addEventListener) {
    document.getElementById("oldcapacitynum").addEventListener("change", computeRunTime, false);
    document.getElementById("oldcapacitynum").addEventListener("keyup", computeRunTime, false);
    document.getElementById("oldcapacityscale").addEventListener("change", computeRunTime, false);
    document.getElementById("oldtimenum").addEventListener("keyup", computeRunTime, false);
    document.getElementById("oldtimescale").addEventListener("change", computeRunTime, false);
    document.getElementById("newcapacitynum").addEventListener("change", computeRunTime, false);
    document.getElementById("newcapacitynum").addEventListener("keyup", computeRunTime, false);
    document.getElementById("newcapacityscale").addEventListener("change", computeRunTime, false);
  } else {
    document.getElementById("oldcapacitynum").attachEvent("onchange", computeRunTime);
    document.getElementById("oldcapacitynum").attachEvent("onkeyup", computeRunTime);
    document.getElementById("oldcapacityscale").attachEvent("onchange", computeRunTime);
    document.getElementById("oldtimenum").attachEvent("onkeyup", computeRunTime);
    document.getElementById("oldtimescale").attachEvent("onchange", computeRunTime);
    document.getElementById("newcapacitynum").attachEvent("onchange", computeRunTime);
    document.getElementById("newcapacitynum").attachEvent("onkeyup", computeRunTime);
    document.getElementById("newcapacityscale").attachEvent("onchange", computeRunTime);
  }
  computeRunTime();
}