// 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] = "A+";

cr[12] = 4;

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] = "a+";

cr[24] = 4;

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] = "A+";

cr[12] = 4;

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] = "a+";

cr[24] = 4;

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);


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;

   }

}

