/*
 * GPA  Calculator Javascript
 */

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=3.7;  
	if (thegrade=="B+" || thegrade=="b+") gradenum=3.3;
	if (thegrade=="B" || thegrade=="b") gradenum=3;
	if (thegrade=="B-" || thegrade=="b-") gradenum=2.7;
	if (thegrade=="C+" || thegrade=="c+") gradenum=2.3;
	if (thegrade=="C" || thegrade=="c") gradenum=2;
	if (thegrade=="C-" || thegrade=="c-") gradenum=1.7;
	if (thegrade=="D+" || thegrade=="d+") gradenum=1.3;
	if (thegrade=="D" || thegrade=="d") gradenum=1;
	if (thegrade=="D-" || thegrade=="d-") gradenum=0.7;
	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)) {
		form.gradepoints.value = "Invalid";
		return;
	}
	if (!checkNumber(form.units, .5, 200, "Units")) {
		form.gradepoints.value = "Invalid";
		return;
    }
	if ((form.grade.value == null || form.grade.value.length == 0)) {
		form.gradepoints.value = "Invalid";
		return;
	}
	form.gradepoints.value = ((computeGradenum2(form.grade.value)) * form.units.value);
}

function computesumForm(form)

{
	document.forms[11].gradepoints.value=0;
	document.forms[11].units.value=0;
	document.forms[11].grade.value=0;

	for(var i=1; i<11; i++) {
		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.forms[11].gradepoints.value = eval(document.forms[11].gradepoints.value)+(eval(document.forms[i].gradepoints.value));
			if (!(document.forms[i].units.value == 0))
				document.forms[11].units.value = eval(document.forms[11].units.value)+(eval(document.forms[i].units.value));    
		}
	}

	if (!(document.forms[11].units.value == 0))
		document.forms[11].grade.value=(((eval(document.forms[11].gradepoints.value)/(eval(document.forms[11].units.value))+.000000001)));

}

function calc(form) {   
        form.cgpa.value=eval(form.expr.value/form.hours.value)
}

