// JavaScript Document

<!-- hide this script tag's contents from old browsers
function round2d(n){return(.01* Math.round(100*n));}

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=4;
  if (thegrade=="B+"  || thegrade=="b+") gradenum=3;
  if (thegrade=="B" || thegrade=="b") gradenum=3;
  if (thegrade=="B-" || thegrade=="b-") gradenum=3;
  if (thegrade=="C+"  || thegrade=="c+") gradenum=2;
  if (thegrade=="C"  || thegrade=="c") gradenum=2;
  if (thegrade=="C-"  || thegrade=="c-") gradenum=2;
  if (thegrade=="D+"  || thegrade=="d+") gradenum=1;
  if (thegrade=="D" || thegrade=="d") gradenum=1;
  if (thegrade=="D-"  || thegrade=="d-") gradenum=1;
  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 = ((computeGradenum2(form.grade.value)) *
form.units.value);
}

function computesumForm(form)
{
      document.sum.gradepoints.value=0;
      document.sum.units.value=0;
      document.sum.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.sum.gradepoints.value = eval(document.sum.gradepoints.value)+(eval(document.forms[i].gradepoints.value));

           if (!(document.forms[i].units.value == 0))
           document.sum.units.value = eval(document.sum.units.value)+(eval(document.forms[i].units.value));
           }
      }
   }
if (!(document.sum.units.value == 0))
document.sum.grade.value=round2d(((eval(document.sum.gradepoints.value)/(eval(document.sum.units.value))+.000000001)));

}
function clearForm(form)
{
    form.units.value = "";
    form.grade.value = "";
    form.gradepoints.value = "";
}

function computeGoalGPA()
{
	// get data 
	currGPAnum = parseFloat(document.goalGPA.currGPA.value);
	cumCrednum = parseFloat(document.goalGPA.cumCred.value);
	targetGPAnum = parseFloat(document.goalGPA.targetGPA.value);
	remainCrednum = parseFloat(document.goalGPA.remainCred.value);
	document.goalGPA.newGPA.value = 0;
	
	//final grade points
	gradePoints = targetGPAnum * (cumCrednum + remainCrednum);
	
	// Find points needed now
	gradePoints = gradePoints - (currGPAnum * cumCrednum);
	
	//calculate needed GPA
	newGPAnum = round2d(gradePoints/remainCrednum);
	
	if(!(newGPAnum == 0))
		document.goalGPA.newGPA.value = newGPAnum;
}
	
function computeNewGPA()
{
	//get data
	GPAnownum = parseFloat(document.substituteGPA.GPAnow.value);
	totalCredsnum = parseFloat(document.substituteGPA.totalCreds.value);
	courseCredsnum = parseFloat(document.substituteGPA.courseCreds.value);
	thegradeOld = document.substituteGPA.orgGrade.value;
	thegradeNew = document.substituteGPA.newGrade.value;
	
	
	//computer old grade value
	var gradenumOld=0;
   	if (thegradeOld=="A+" || thegradeOld=="a+") gradenumOld=4;
   	if (thegradeOld=="A"  || thegradeOld=="a") gradenumOld=4;
  	if (thegradeOld=="A-" || thegradeOld=="a-") gradenumOld=4;
  	if (thegradeOld=="B+"  || thegradeOld=="b+") gradenumOld=3;
  	if (thegradeOld=="B" || thegradeOld=="b") gradenumOld=3;
  	if (thegradeOld=="B-" || thegradeOld=="b-") gradenumOld=3;
  	if (thegradeOld=="C+"  || thegradeOld=="c+") gradenumOld=2;
  	if (thegradeOld=="C"  || thegradeOld=="c") gradenumOld=2;
  	if (thegradeOld=="C-"  || thegradeOld=="c-") gradenumOld=2;
  	if (thegradeOld=="D+"  || thegradeOld=="d+") gradenumOld=1;
  	if (thegradeOld=="D" || thegradeOld=="d") gradenumOld=1;
  	if (thegradeOld=="D-"  || thegradeOld=="d-") gradenumOld=1;
  	if (thegradeOld=="F+" || thegradeOld=="f+" ) gradenumOld=0;
  	if (thegradeOld=="F" || thegradeOld=="f" ) gradenumOld=0;
  	if (thegradeOld=="F-" || thegradeOld=="f-") gradenumOld=0;
	
	//compute new grade value
	var gradenumNew=0;
   	if (thegradeNew=="A+" || thegradeNew=="a+") gradenumNew=4;
   	if (thegradeNew=="A"  || thegradeNew=="a") gradenumNew=4;
  	if (thegradeNew=="A-" || thegradeNew=="a-") gradenumNew=4;
  	if (thegradeNew=="B+"  || thegradeNew=="b+") gradenumNew=3;
  	if (thegradeNew=="B" || thegradeNew=="b") gradenumNew=3;
  	if (thegradeNew=="B-" || thegradeNew=="b-") gradenumNew=3;
  	if (thegradeNew=="C+"  || thegradeNew=="c+") gradenumNew=2;
  	if (thegradeNew=="C"  || thegradeNew=="c") gradenumNew=2;
  	if (thegradeNew=="C-"  || thegradeNew=="c-") gradenumNew=2;
  	if (thegradeNew=="D+"  || thegradeNew=="d+") gradenumNew=1;
  	if (thegradeNew=="D" || thegradeNew=="d") gradenumNew=1;
  	if (thegradeNew=="D-"  || thegradeNew=="d-") gradenumNew=1;
  	if (thegradeNew=="F+" || thegradeNew=="f+" ) gradenumNew=0;
  	if (thegradeNew=="F" || thegradeNew=="f" ) gradenumv=0;
  	if (thegradeNew=="F-" || thegradeNew=="f-") gradenumNew=0;
	
	
	//old grade points
	var oldGradePoints = GPAnownum * totalCredsnum;
	
	//new grade points
	var newGradePoints = oldGradePoints - (gradenumOld * courseCredsnum) + (gradenumNew * courseCredsnum);
	
	//calculate new gpa
	newGPAnum = round2d(newGradePoints/totalCredsnum);
	
	document.substituteGPA.GPAthen.value = newGPAnum;
}

function computeCumulativeGPA()
{
	termGPAnum = parseFloat(document.cumulativeGPA.termGPA.value);
	termCrednum = parseFloat(document.cumulativeGPA.termCred.value);
	cumGPAnum = parseFloat(document.cumulativeGPA.cumGPA.value);
	cumCrednum = parseFloat(document.cumulativeGPA.cumCred.value);
	
	//get total grade points
	var totGradPts = 0;
	totGradPts = (termGPAnum * termCrednum) + (cumGPAnum * cumCrednum);
	
	//get total credit hours
	var totCred = 0;
	totCred = termCrednum + cumCrednum;
	
	
	//calculate GPA
	yourNewGPA = round2d(totGradPts/totCred);
	document.cumulativeGPA.GPA.value = yourNewGPA;
	
}
<!-- done hiding from old browsers -->
