// JavaScript Document

<!-- 
// This gpa calculator script was written by 
// Matt Stueve, mstueve@blue.weeg.uiowa.edu
// Feel free to re-distribute, but please
// leave this notice in place

function round2d(n){return(.01* Math.round(100*n));}

function gpacalc()
{
//define valid grades and their values
var gr = new Array(); 
var cr = new Array();
var ingr = new Array();
var incr = new Array();

// define valid grades and their values
var grcount = 27; 
gr[1] = "A"; 
cr[1] = 4; 
gr[2] = "A-";
cr[2] = 3.67;
gr[3] = "B+";
cr[3] = 3.33;
gr[4] = "B";
cr[4] = 3;
gr[5] = "B-";
cr[5] = 2.67;
gr[6] = "C+";
cr[6] = 2.33;
gr[7] = "C";
cr[7] = 2;
gr[8] = "C-";
cr[8] = 1.67;
gr[9] = "D+";
cr[9] = 1.33;
gr[10] = "D";
cr[10] = 1;
gr[11] = "D-";
cr[11] = 0.67;
gr[12] = "E";
cr[12] = 0;
gr[13]  = "a";
cr[13] = 4; 
gr[14] = "a-";
cr[14] = 3.67;
gr[15] = "b+";
cr[15] = 3.33;
gr[16] = "b";
cr[16] = 3;
gr[17] = "b-";
cr[17] = 2.67;
gr[18] = "c+";
cr[18] = 2.33;
gr[19] = "c";
cr[19] = 2;
gr[20] = "c-";
cr[20] = 1.67;
gr[21] = "d+";
cr[21] = 1.33;
gr[22] = "d";
cr[22] = 1;
gr[23] = "d-";
cr[23] = 0.67;
gr[24] = "e";
cr[24] = 0;
gr[25] = "F";
cr[25] = 0;
gr[26] = "f";
cr[26] = 0;


// retrieve user input
ingr[0] = document.GPACalcForm.GR1.value;
ingr[1] = document.GPACalcForm.GR2.value;
ingr[2] = document.GPACalcForm.GR3.value;
ingr[3] = document.GPACalcForm.GR4.value;
ingr[4] = document.GPACalcForm.GR5.value;
ingr[5] = document.GPACalcForm.GR6.value;
ingr[6] = document.GPACalcForm.GR7.value;
ingr[7] = document.GPACalcForm.GR8.value;
incr[0] = document.GPACalcForm.CR1.value;
incr[1] = document.GPACalcForm.CR2.value;
incr[2] = document.GPACalcForm.CR3.value;
incr[3] = document.GPACalcForm.CR4.value;
incr[4] = document.GPACalcForm.CR5.value;
incr[5] = document.GPACalcForm.CR6.value;
incr[6] = document.GPACalcForm.CR7.value;
incr[7] = document.GPACalcForm.CR8.value;


// Calculate GPA
var allgr =0;
var allcr = 0;
var gpa = 0;
for (var x = 0; x < 8; x++)
        {
        if (ingr[x] == "") break;
//      if (isNaN(parseInt(incr[x]))) alert("Error- You did not enter a numeric credits value for Class If the class is worth 0 credits then enter the number 0 in the field."); 
        var validgrcheck = 0;
        for (var xx = 0; xx < grcount; xx++)
                {
                if (ingr[x] == gr[xx])
                        {
                        allgr = allgr + (parseInt(incr[x],10) * cr[xx]);
                        allcr = allcr + parseInt(incr[x],10);
                        validgrcheck = 1;
                        break;
                        }
                }
        if (validgrcheck == 0)
                {
                alert("Error- Could not recognize the grade entered for Class " + eval(x + 1) + ". Please use standard college grades in the form of a a- b+ ... f or A A- B+ ... F");
                return 0;
                }
        }

// this if-check prevents a divide by zero error
if (allcr == 0)
        {
        alert("Error- You did not enter any credit values! GPA = N/A");
        return 0;
        }

gpa = round2d(allgr / allcr);

alert("Your semester GPA =  " + eval(gpa));

return 0;
}

function cumCalc()
{
//define valid grades and their values
var gr = new Array(); 
var cr = new Array();
var ingr = new Array();
var incr = new Array();

// define valid grades and their values
var grcount = 27; 
gr[1] = "A"; 
cr[1] = 4; 
gr[2] = "A-";
cr[2] = 3.67;
gr[3] = "B+";
cr[3] = 3.33;
gr[4] = "B";
cr[4] = 3;
gr[5] = "B-";
cr[5] = 2.67;
gr[6] = "C+";
cr[6] = 2.33;
gr[7] = "C";
cr[7] = 2;
gr[8] = "C-";
cr[8] = 1.67;
gr[9] = "D+";
cr[9] = 1.33;
gr[10] = "D";
cr[10] = 1;
gr[11] = "D-";
cr[11] = 0.67;
gr[12] = "E";
cr[12] = 0;
gr[13]  = "a";
cr[13] = 4; 
gr[14] = "a-";
cr[14] = 3.67;
gr[15] = "b+";
cr[15] = 3.33;
gr[16] = "b";
cr[16] = 3;
gr[17] = "b-";
cr[17] = 2.67;
gr[18] = "c+";
cr[18] = 2.33;
gr[19] = "c";
cr[19] = 2;
gr[20] = "c-";
cr[20] = 1.67;
gr[21] = "d+";
cr[21] = 1.33;
gr[22] = "d";
cr[22] = 1;
gr[23] = "d-";
cr[23] = 0.67;
gr[24] = "e";
cr[24] = 0;
gr[25] = "F";
cr[25] = 0;
gr[26] = "f";
cr[26] = 0;


// retrieve user input
ingr[0] = document.GPACalcForm.GR1.value;
ingr[1] = document.GPACalcForm.GR2.value;
ingr[2] = document.GPACalcForm.GR3.value;
ingr[3] = document.GPACalcForm.GR4.value;
ingr[4] = document.GPACalcForm.GR5.value;
ingr[5] = document.GPACalcForm.GR6.value;
ingr[6] = document.GPACalcForm.GR7.value;
ingr[7] = document.GPACalcForm.GR8.value;
incr[0] = document.GPACalcForm.CR1.value;
incr[1] = document.GPACalcForm.CR2.value;
incr[2] = document.GPACalcForm.CR3.value;
incr[3] = document.GPACalcForm.CR4.value;
incr[4] = document.GPACalcForm.CR5.value;
incr[5] = document.GPACalcForm.CR6.value;
incr[6] = document.GPACalcForm.CR7.value;
incr[7] = document.GPACalcForm.CR8.value;

// Calculate GPA
var allgr =0;
var allcr = 0;
var gpa = 0;
for (var x = 0; x < 8; x++)
        {
        if (ingr[x] == "") break;
//      if (isNaN(parseInt(incr[x]))) alert("Error- You did not enter a numeric credits value for Class If the class is worth 0 credits then enter the number 0 in the field."); 
        var validgrcheck = 0;
        for (var xx = 0; xx < grcount; xx++)
                {
                if (ingr[x] == gr[xx])
                        {
                        allgr = allgr + (parseInt(incr[x],10) * cr[xx]);
                        allcr = allcr + parseInt(incr[x],10);
                        validgrcheck = 1;
                        break;
                        }
                }
        if (validgrcheck == 0)
                {
                alert("Error- Could not recognize the grade entered for Class " + eval(x + 1) + ". Please use standard college grades in the form of a a- b+ ...f.");
                return 0;
                }
        }

// this if-check prevents a divide by zero error
if (allcr == 0)
        {
        alert("Error- You did not enter any credit values! GPA = N/A");
        return 0;
        }

gpa = allgr / allcr;

// set variables
var cumGPAnum = 0;
var cumCredTotal = 0;

// retrieve user input
cumGPAnum = parseFloat(document.GPACalcForm.cumGPA.value);
cumCredTotal = parseFloat(document.GPACalcForm.cumCredits.value);

if (document.GPACalcForm.cumGPA.value == "") 
   {  alert("You need to enter your previous cumulative gpa in order to calculate your new one.");
            return 0;
   }
   if (document.GPACalcForm.cumCredits.value == "") 
   {  alert("You need to enter the total number of credits you earned prior to this semester.");
            return 0;
   }
   if (document.GPACalcForm.cumGPA.value == gpa) 
   {  if (confirm("Are you sure you are entering your previous cumulative GPA, and not your new semester GPA?" +
                  " Hit OK if your sure, otherwise hit Cancel to change your values."))
      {}
      else
            return 0;
   }

// find total points
var points = 0;
points = (cumGPAnum * cumCredTotal);

// Add semester values to cumulative
points = points + allgr;
var credits = 0;
credits = cumCredTotal + allcr;

// Calculate new cumulative gpa
var newCum = 0;
newCum = round2d(points / credits);

alert("Your new cumulative GPA is " + eval(newCum));


return 0;
}
function GoalCalc()
{
              
// set variables
var currGPAnum = 0;
var currCredTotal = 0;
var goalGPAnum = 0;
var newCreditnum = 0;

// retrieve user input
currGPAnum = parseFloat(document.GoalGPACalc.currGPA.value);
cumCredTotal = parseFloat(document.GoalGPACalc.currCredits.value);
goalGPAnum = parseFloat(document.GoalGPACalc.goalGPA.value);
newCreditnum = parseFloat(document.GoalGPACalc.newCredits.value);

// find goal points
var points1 = 0;
points1 = goalGPAnum * (cumCredTotal + newCreditnum);

// Find points needed now
points1 = points1 - (currGPAnum * cumCredTotal);

// Calculate needed GPA
var GPA1 = 0;
GPA1 = round2d(points1 / newCreditnum);
GPA1 = String(GPA1).substring(0,5);

alert("To reach your goal, your GPA for your next " + eval(newCreditnum) + " credits must be " + eval(GPA1));

return 0;
}

function RepeatCalc()
{
           
// set variables
var CurrGPANum = 0;
var CurrCreditsNum = 0;
var CourseCreditsNum = 0;
var OldGradeNum = 0;
var NewGradeNum = 0;
var y = 0;
var z = 0;
var gr = new Array(); 
var cr = new Array();

// define valid grades and their values
var grcount = 27; 
gr[1] = "A"; 
cr[1] = 4; 
gr[2] = "A-";
cr[2] = 3.67;
gr[3] = "B+";
cr[3] = 3.33;
gr[4] = "B";
cr[4] = 3;
gr[5] = "B-";
cr[5] = 2.67;
gr[6] = "C+";
cr[6] = 2.33;
gr[7] = "C";
cr[7] = 2;
gr[8] = "C-";
cr[8] = 1.67;
gr[9] = "D+";
cr[9] = 1.33;
gr[10] = "D";
cr[10] = 1;
gr[11] = "D-";
cr[11] = 0.67;
gr[12] = "E";
cr[12] = 0;
gr[13]  = "a";
cr[13] = 4; 
gr[14] = "a-";
cr[14] = 3.67;
gr[15] = "b+";
cr[15] = 3.33;
gr[16] = "b";
cr[16] = 3;
gr[17] = "b-";
cr[17] = 2.67;
gr[18] = "c+";
cr[18] = 2.33;
gr[19] = "c";
cr[19] = 2;
gr[20] = "c-";
cr[20] = 1.67;
gr[21] = "d+";
cr[21] = 1.33;
gr[22] = "d";
cr[22] = 1;
gr[23] = "d-";
cr[23] = 0.67;
gr[24] = "e";
cr[24] = 0;
gr[25] = "F";
cr[25] = 0;
gr[26] = "f";
cr[26] = 0;

// retrieve user input
CurrGPANum = parseFloat(document.RepeatCalcForm.CurrGPA.value);
CurrCreditsNum = parseFloat(document.RepeatCalcForm.CurrCredits.value);
CourseCreditsNum = parseFloat(document.RepeatCalcForm.CourseCredits.value);
OldGrade = document.RepeatCalcForm.OldGrade.value;
NewGrade = document.RepeatCalcForm.NewGrade.value;

// Calculate new GPA
        for (var xx = 0; xx < grcount; xx++)
                {
                if (OldGrade == gr[xx])
                        {
                        OldGradeNum = cr[xx];
                                      
                        break;
                        }
                }
                
  for (var xx = 0; xx < grcount; xx++)
                {
                if (NewGrade == gr[xx])
                        {
                        NewGradeNum = cr[xx];
                                      
                        break;
                        }
                }

var GPA1 = 0;
y = CurrGPANum * CurrCreditsNum;
                        
z = y + CourseCreditsNum * (NewGradeNum - OldGradeNum);     
                       
GPA1 = round2d(z / CurrCreditsNum);

alert("Your new GPA will be"+ eval(GPA1));
return 0;
}

function validateForm(form) 
{
   if (form.cumGPA.value == "") 
   {  alert("You need to enter your previous cumulative gpa in order to calculate your new one.");
            return false;
   }
   if (form.cumCredits.value == "") 
   {  alert("You need to enter the total number of credit hours you earned prior to this semester.");
            return false;
   }
   if (form.cumGPA.value == form.gpa.value) 
   {  confirm("Are you sure you are entering your cumulative gpa, and not your new semester gpa?");
   }
   
  else 
   {  return true;
   }
}


