function chargeTimeValue() {
  var capn = document.getElementById("capacitynum").value;
  var caps = 0.001;
  if (document.getElementById("capacityscale").selectedIndex != 0) {
    caps = 1.0;
  }
  var curn = document.getElementById("currentnum").value;
  if (curn == 0)
    return Number.NaN;
  var curs = 0.001;
  if (document.getElementById("currentscale").selectedIndex != 0) {
    curs = 1.0;
  }
  return (capn * caps) / (curn * curs) * document.getElementById("efficiency").value;
}

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

function computeChargeTime() {
  var time = chargeTimeValue();
  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("chargetime").firstChild.nodeValue != answer )
    document.getElementById("chargetime").firstChild.nodeValue = answer;
}

function initChargeTimeCalculator() {
  if (document.addEventListener) {
    document.getElementById("capacitynum").addEventListener("change", computeChargeTime, false);
    document.getElementById("capacitynum").addEventListener("keyup", computeChargeTime, false);
    document.getElementById("capacityscale").addEventListener("change", computeChargeTime, false);
    document.getElementById("currentnum").addEventListener("change", computeChargeTime, false);
    document.getElementById("currentnum").addEventListener("keyup", computeChargeTime, false);
    document.getElementById("currentscale").addEventListener("change", computeChargeTime, false);
    document.getElementById("efficiency").addEventListener("change", computeChargeTime, false);
  } else {
    document.getElementById("capacitynum").attachEvent("onchange", computeChargeTime);
    document.getElementById("capacitynum").attachEvent("onkeyup", computeChargeTime);
    document.getElementById("capacityscale").attachEvent("onchange", computeChargeTime);
    document.getElementById("currentnum").attachEvent("onchange", computeChargeTime);
    document.getElementById("currentnum").attachEvent("onkeyup", computeChargeTime);
    document.getElementById("currentscale").attachEvent("onchange", computeChargeTime);
    document.getElementById("efficiency").attachEvent("onchange", computeChargeTime);
  }
  computeChargeTime();
}
