function checkNumber(input, min, max, msg)
{
    msg = msg + " field has invalid data: " + input.value;
    var str = input.value;
    for (var i = 0; i < str.length; i++) {
        var ch = str.substring(i, i + 1)
        if ((ch < "0" || "9" < ch) && ch != '.') {
            alert(msg);
            return false;
        }
    }
    var num = 0 + str
    if (num < min || max < num) {
        alert(msg + " not in range [" + min + ".." + max + "]");
        return false;
    }
    input.value = str;
    return true;
}

function computeGradenum2(input)
{
	   var gradenum=0;
    var thegrade=input;
   if (thegrade=="A+" || thegrade=="a+") gradenum=4;
   if (thegrade=="A"  || thegrade=="a") gradenum=4;
  if (thegrade=="A-" || thegrade=="a-") gradenum=3.7;
  if (thegrade=="B+"  || thegrade=="b+") gradenum=3.3;
  if (thegrade=="B" || thegrade=="b") gradenum=3;
  if (thegrade=="B-" || thegrade=="b-") gradenum=2.7;
  if (thegrade=="C+"  || thegrade=="c+") gradenum=2.3;
  if (thegrade=="C"  || thegrade=="c") gradenum=2;
  if (thegrade=="C-"  || thegrade=="c-") gradenum=1.7;
  if (thegrade=="D+"  || thegrade=="d+") gradenum=1.3;
  if (thegrade=="D" || thegrade=="d") gradenum=1;
  if (thegrade=="D-"  || thegrade=="d-") gradenum=.7;
  if (thegrade=="F+" || thegrade=="f+" ) gradenum=0;
  if (thegrade=="F" || thegrade=="f" ) gradenum=0;
  if (thegrade=="F-" || thegrade=="f-") gradenum=0;
     return gradenum;
     }

function computeField(input)
{
    if (input.value != null && input.value.length != 0)
        input.value = "" + eval(input.value);
        computeform(input.form);
}

function computeform(form)
{
    if ((form.units.value == null || form.units.value.length == 0)) {
        return;
    }
    if (!checkNumber(form.units, .5, 10, "Units")) {
        form.gradepoints.value = "Invalid";
        return;
    }
    if ((form.grade.value == null || form.grade.value.length == 0)) {
        return;
    }
    form.gradepoints.value = roundAmount(((computeGradenum2(form.grade.value)) *
form.units.value));
}

function computesumform(form)
{
      document.forms[6].gradepoints.value=0;
      document.forms[6].units.value=0;
      document.forms[6].grade.value=0;

     for(var i=0; i<6; i++) {
        if (!(document.forms[i].units.value == null || document.forms[i].units.value.length == 0)) {
           if (!(document.forms[i].units.value == null || document.forms[i].units.value.length == 0)) {
                var temp=computeField(document.forms[i].gradepoints);
                var temp=computeField(document.forms[i].units);
                var temp=computeform(document.forms[i]);
           if (!(document.forms[i].gradepoints.value == 0))
           document.forms[6].gradepoints.value = roundAmount(eval(document.forms[6].gradepoints.value)+(eval(document.forms[i].gradepoints.value)));    

           if (!(document.forms[i].units.value == 0))
           document.forms[6].units.value = roundAmount(eval(document.forms[6].units.value)+(eval(document.forms[i].units.value)));    
           }
      }
   }
if (!(document.forms[6].units.value == 0))
document.forms[6].grade.value=roundAmount((((eval(document.forms[6].gradepoints.value)/(eval(document.forms[6].units.value))+.000000001))));
  
}
function clearform(form)
{
    form.units.value = "";
    form.grade.value = "";
    form.gradepoints.value = "";
}

function roundAmount(n) {
 var s = "" + Math.round(n * 1000) / 1000
 var i = s.indexOf('.')
 if (i < 0) return s + ".000"
 var t = s.substring(0, i + 1) +
    s.substring(i + 1, i + 4)
 if (i + 2 == s.length) t += "00"
 return t
}

