/*
Originator: 	  Tonya Stacy Joseph, Brooklyn, NY
Modified By: 	  Office of Web Development
Modified Date: 	December 22, 2005
                December 05, 2006 - Bug fix
Change Log: 	  Adapt the script for Bowling Green State University, requested by Emily from Center for Multicultural and Academic Initiatives
*/


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++)
  for (var i = 0; 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()
{
  // Bug fix - variable i starts at 0 instead of 1 - dchen (12/5/07)
  //for (var i = 1; i <= courseNum; i++)
  for (var i = 0; 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));
}


