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=-1;
         var thegrade=input;   
   if (thegrade=="A+" || thegrade=="a+") gradenum=4.3;
   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 (gradenum==-1) {
      gradenum=0;
      alert("This is not a valid Grade. Valid Grades are A+ thru D or F...only.");
   }
        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.hours.value == null || form.hours.value.length == 0)) {
        return;
    }
    if (!checkNumber(form.hours, .5, 200, "Hours")) {
        form.qualtypoints.value = "Invalid";
        return;
    }
    if ((form.grade.value == null || form.grade.value.length == 0)) {           
        return;
    }
    form.qualtypoints.value = ((computeGradenum2(form.grade.value)) *
form.hours.value);
}
function computesumForm(form)
{
      document.forms[6].qualtypoints.value=0;
      document.forms[6].hours.value=0;
      document.forms[6].grade.value=0;
     for(var i=0; i<6; i++) {
    if (!(document.forms[i].hours.value == null || document.forms[i].hours.value.length == 0)) {
    if (!(document.forms[i].hours.value == null || document.forms[i].hours.value.length == 0)) {
                var temp=computeField(document.forms[i].qualtypoints);
                var temp=computeField(document.forms[i].hours);
                var temp=computeForm(document.forms[i]);
           if (!(document.forms[i].qualtypoints.value == 0))
           document.forms[6].qualtypoints.value = eval(document.forms[6].qualtypoints.value)+(eval(document.forms[i].qualtypoints.value));    
           if (!(document.forms[i].hours.value == 0))
           document.forms[6].hours.value = eval(document.forms[6].hours.value)+(eval(document.forms[i].hours.value));    
           }
      }
   }
if (!(document.forms[6].hours.value == 0))
var gpa=(((eval(document.forms[6].qualtypoints.value)/(eval(document.forms[6].hours.value))+.000000001)));
document.forms[6].grade.value=gpa.toFixed(2);

}

function computeCumCurr(form)
{    
if ((form.hours.value == null || form.hours.value.length == 0)) {
        return;
    }
    if (!checkNumber(form.hours, .5, 300, "Cum Hours")) {
        form.qualtypoints.value = "Invalid";
        return;
    }
if ((form.grade.value == null || form.grade.value.length == 0)) {
        return;
    }
    if (!checkNumber(form.grade, .0001, 4.3, "Cum GPA")) {
        form.qualtypoints.value = "Invalid";
        return;
    }
form.qualtypoints.value = form.grade.value * form.hours.value;
}
function computeCumPoss(form)
{
if ((document.forms[6].grade.value == null || document.forms[6].grade.value.length == 0)) {
  alert("Re-check/Re-compute Predicted Current GPA fields");
   form.hours.value = "Invalid";
   form.grade.value = "Invalid";  
   form.qualtypoints.value = "Invalid";
        return;
}
if ((document.forms[7].grade.value == null || document.forms[7].grade.value.length == 0)) {
  alert("Re-check/Re-compute Cumulative GPA transcript data");
     form.hours.value = "Invalid";
     form.grade.value = "Invalid";  
     form.qualtypoints.value = "Invalid";
        return;
}
form.hours.value = (eval(document.forms[6].hours.value) + eval(document.forms[7].hours.value));
form.qualtypoints.value = (eval(document.forms[6].qualtypoints.value) + eval(document.forms[7].qualtypoints.value));
var possGPA= ((form.qualtypoints.value / form.hours.value)+ .000000001);
form.grade.value = possGPA.toFixed(2);
}
function clearForm(form)
{
    form.hours.value = "";
    form.grade.value = "";
    form.qualtypoints.value = "";
}

