/*
Modifier: Hao Zhu
Modification Date: 10/11/05
Modification Summary: Changed the starting value for "for-loop" of forms from "0" to "1", and changed the
		      ending value accordingly as well. 
*/



var courseNum = prompt("How many courses are you taking this semester?","4");
var college = true;

/* THE selectControl FUNCTION SETS THE FOCUS ON AND PLACES THE CURSOR IN THE FIRST INPUT BOX OF THE 
COURSE FORM. */

function selectControl (obj)
 {
    obj.select();
    obj.focus();
 }

/* THE round3 FUNCTION ROUNDS num TO THREE DECIMAL PLACES */

function round3(num) {
  var rounded = Math.round(num*1000)/1000;

  // If result is a whole number, append a ".0" to it
  if (rounded == Math.round(rounded)) {
    rounded = "" + rounded + ".0";
  }
  return rounded;
}

/* THE evalGPA FUNCTION GETS THE INPUT FROM THE COURSE FORM, CONVERTS IT FROM A STRING INTO A 
NUMBER WITH THE parseFloat FUNCTION, COMPUTES THE TOTALS, AND WRITES THE TOTAL TO THE APPROPRIATE 
FIELDS ON THE FORM.*/

function evalGPA()
  {
    var totalPoints = 0;
    var totalCourse = 0;
    var totalCredits = 0;

    for (var i = 1; i <= courseNum; i++)
      {
        if (document.forms[i].gradePoints.value.length)
          {
            totalCourse++;
            totalCredits += parseFloat(document.forms[i].credits.value);
            totalPoints += parseFloat(document.forms[i].gradePoints.value);
          }
      }

    if (totalCourse && totalPoints)
      {
        document.result.totalCredits.value = round3(totalCredits);
		document.result.totalPoints.value = round3(totalPoints);
        document.result.GPA.value = round3(totalPoints / totalCredits);
      }
  }


// THE resetGPA FUNCTION RESETS SET ALL FIELDS ON THE FORM TO BLANK/

function resetGPA()
  {
    for (var i = 1; i <= courseNum; i++)
      {
        document.forms[i].credits.value = "";
        document.forms[i].grade.value = "";
        document.forms[i].weighted.checked = false;
        document.forms[i].gradePoints.value = "";
      }

    document.result.totalCredits.value = "";
    document.result.totalPoints.value = "";
    document.result.GPA.value = "";
    document.current.cumCredits.value = "";
    document.current.cumPoints.value = "";
    document.current.cumGPA.value = "";
    document.projected.projectCredits.value = "";
    document.projected.projectPoints.value = "";
    document.projected.projectGPA.value = "";

    document.course0.credits.focus();
  }


// THE computeForm CALCULATES THE GRADE POINTS FOR THE COURSE AND WRITES IT TO THE FORM.

function computeForm(form) {
  var points = 0
  with (form) {
    if (form.credits.value.length != 0 && grade.value.length != 0) {
      if (grade.value.charAt(0) == "A") points = 4
      else if (grade.value.charAt(0) == "B") points = 3
      else if (grade.value.charAt(0) == "C") points = 2
      else if (grade.value.charAt(0) == "D") points = 1
      else if (grade.value.charAt(0) == "S" || grade.value.charAt(0) == "P") {
        gradePoints.value = "";
	return;
      }
      else points = 0
      if (college && grade.value.charAt(0) != "F") {
        if (grade.value.charAt(1) == "+") points += 0.3
        else if (grade.value.charAt(1) == "-") points -= 0.3
        if (points < 0) points = 0
        if (points > 4) points = 4
      }
      if (points && !college) points += weighted.checked
      form.gradePoints.value = round3(points * parseFloat(form.credits.value))
    }
  }
}


/* THE checkCredits FUNCTION EVALUATES THE CREDIT NUMBERS ENTERED IN THE FORM TO SEE IF THEY ARE 
APPROPRIATE.*/

function checkCredits(form)
  {
    var error = false;
    var str = form.credits.value;

    for (var i = 0; i < str.length; i++)
      {
        var checkStr = str.substring(i, i + 1);

        if ((checkStr < "0" || checkStr > "9") && checkStr != '.') error = true
      }

    if (error)
      {
        alert("Invalid number!");
        form.credits.value = "";
        form.credits.focus();
      }
    else
      computeForm(form)
  }


/* THE checkGrade FUNCTION EVALUATES THE CREDIT NUMBERS ENTERED IN THE FORM TO SEE IF THEY ARE 
APPROPRIATE.*/

function checkGrade(form)
  {
    var error = false;
    var str = form.grade.value.toUpperCase();

    for (var i = 0; i < str.length; i++)
      {
        var checkStr = str.substring(i, i + 1);

        if (checkStr != 'A' && checkStr != 'B' && checkStr != 'C' && checkStr != 'D' && checkStr != 'F' && checkStr != 'S' && checkStr != 'P' && checkStr != '+' && checkStr != '-') error = true
      }

    if (error)
      {
        alert("Invalid letter!");
        form.grade.value = "";
        form.grade.focus();
      }
    else
      {
         form.grade.value = str;
         computeForm(form)
      }
  }

/* THE checkCumCredits FUNCTION EVALUATES THE CREDIT NUMBERS ENTERED IN THE FORM TO SEE IF THEY ARE 
APPROPRIATE.*/

function checkCumCredits(form)
  {
    var error = false;
    var str = form.cumCredits.value;

    for (var i = 0; i < str.length; i++)
      {
        var checkStr = str.substring(i, i + 1);

        if ((checkStr < "0" || checkStr > "9") && checkStr != '.') error = true
      }

    if (error)
      {
        alert("Invalid letter!");
        form.cumCredits.value = "";
        form.cumCredits.focus();
      }
  }



/* THE checkCumPoints FUNCTION EVALUATES THE CREDIT NUMBERS ENTERED IN THE FORM TO SEE IF THEY ARE 
APPROPRIATE.*/

function checkCumPoints(form)
  {
    var error = false;
    var str = form.cumPoints.value;

    for (var i = 0; i < str.length; i++)
      {
        var checkStr = str.substring(i, i + 1);

        if ((checkStr < "0" || checkStr > "9") && checkStr != '.') error = true;
      }

    if (error)
      {
        alert("Invalid letter!");
        form.cumPoints.value = "";
        form.cumPoints.focus();
      }
  }


/*THE computeCurrent FUNCTION COMPUTES THE STUDENT'S CURRENT GPA FROM CURRENT HOURS AND CURRENT 
POINTS ENTERED BY THE STUDENT*/

function computeCurrent(form)
  {
    var currCredits = parseFloat(form.cumCredits.value);
    var currPoints = parseFloat(form.cumPoints.value);

    form.cumGPA.value = round3(currPoints / currCredits);

  }

function computeProjected(form)
  {
    var semCredits = parseFloat(document.result.totalCredits.value);
    var semPoints = parseFloat(document.result.totalPoints.value);
    var currCredits = parseFloat(document.current.cumCredits.value);
    var currPoints = parseFloat(document.current.cumPoints.value);
 
    form.projectCredits.value = round3(semCredits + currCredits);
    form.projectPoints.value  = round3(semPoints + currPoints);
    form.projectGPA.value = round3((semPoints + currPoints) / (semCredits +currCredits));
  }

