function newRowValue(){
	
	switch(navigator.appName){
		case 'Netscape':
	
			var input = new Array(6);
				input[0] = document.createElement("INPUT");
					input[0].setAttribute('type', 'text');
					input[0].setAttribute('size', '8');
				input[1] = document.createElement("INPUT");
					input[1].setAttribute('type', 'text');
					input[1].setAttribute('size', '5');
					input[1].setAttribute('onKeyUp', 'fvalidGradeCheck(this, 1); fcomputeGPA();');
				input[2] = document.createElement("INPUT");
					input[2].setAttribute('type', 'text');
					input[2].setAttribute('size', '5');
					input[2].setAttribute('onKeyUp', 'fmodInput(this); fcomputeGPA();');
				input[3] = document.createElement("INPUT");
					input[3].setAttribute('type', 'checkbox');
					input[3].setAttribute('onClick', "fcomputeGPA();");
				input[4] = document.createElement("INPUT");
					input[4].setAttribute('type', 'text');
					input[4].setAttribute('size', '5');
					input[4].setAttribute('readonly', 'true');
				input[5] = document.createElement("INPUT");
					input[5].setAttribute('type', 'button');
					input[5].setAttribute('value', '<- Reset Row');
					input[5].setAttribute('onMouseOver', "help(12);");
					input[5].setAttribute('onClick', "freset(this); fcomputeGPA();");
			var div = new Array(5);
			var cell = new Array(5);
			var fform = document.createElement("FORM");
				fform.setAttribute("method", "POST");

			var row = document.getElementById("myTbody");
						
			var fnewRow = row.insertRow(-1);
			
			var i = 0;
	
			while(i<=5){												
				div[i]=document.createElement("DIV");
				div[i].setAttribute("align", "center");
	
				div[i].appendChild(input[i]);
				cell[i] = fnewRow.insertCell(-1);
					if(i==0){cell[i].setAttribute('class', 'optCell');}
					if(i==1 || i==2){cell[i].setAttribute('class', 'reqCell');}
					if(i==5){cell[i].setAttribute('class', 'calCell');} 			
				cell[i].appendChild(div[i]);
				
				i++;	
			}
			
		break;
		default:
			var pointer = document.getElementById("mainRow");
			var form = pointer.getElementsByTagName("FORM");
			var dupNode = form[0].cloneNode(true);
	
			dupNode.reset();	
	
			var tableBody = document.getElementById("myTbody");
			var newRow = tableBody.insertRow(-1);
			newRow.appendChild(dupNode);
	}
}

function removeRow(){

	switch(navigator.appName){
		case 'Netscape':
	
			var rowCount = 1;
			var body = document.getElementById("myTbody");
			var rows = body.getElementsByTagName("TR");

			while(rows[rowCount] != null){rowCount++;}

			if (rowCount > 10) { body.deleteRow(-1);}

			
		break;
		default:
			
			var i = 0;
			var formCount = 0;
			var tableBody;
	
			while (document.forms[i].name != "mainForm"){i++;}
			while (document.forms[i].name != "totals"){i++; formCount++;}
	
        		if (formCount > 12){
				tableBody = document.getElementById("myTbody");
				tableBody.deleteRow(-1);}
	}
}

function calcPrevGPA(input){
	var gpa = Number(input.prevQpoints.value)/Number(input.prevCreds.value);
	var grade = 'F';
	
	if (gpa >= 4.0){
		grade = 'A';
	}
	if(gpa >= 3.7 && gpa < 4.0){
		grade = 'A-'
	} 
	if(gpa >= 3.3 && gpa < 3.7){
		grade = 'B+';
	}
	if(gpa >= 3.0 && gpa < 3.3){
		grade = 'B';	
	}
	if(gpa >= 2.7 && gpa < 3.0){
		grade = 'B-';	
	}
	if(gpa >= 2.3 && gpa < 2.7){
		grade = 'C+';	
	}
	if(gpa >= 2.0 && gpa < 2.3){
		grade = 'C';	
	}
	if(gpa >= 1.7 && gpa < 2.0){
		grade = 'C-';	
	}
	if(gpa >= 1.3 && gpa < 1.7){
		grade = 'D-';	
	}
	if(gpa >= 1.0 && gpa < 1.3){
		grade = 'D';	
	}
	if(gpa >= 0.7 && gpa < 1.0){
		grade = 'D-';	
	}
	
	
if(navigator.appName == 'Netscape'){
	var bod = document.getElementById("myTbody");
	var r = bod.getElementsByTagName("TR");
	var field = r[0].getElementsByTagName("INPUT");
	field[0].value = "Past Info.";
	field[1].value = input.prevCreds.value;
	field[2].value = grade;
	fcomputeRow(gpa, 0); 
	
	fcomputeGPA()}
else{
	var i = 0;
	while (document.forms[i].name != "mainForm"){i++;}
	document.forms[i].course.value = "Past Info.";
	document.forms[i].credits.value = input.prevCreds.value;
	document.forms[i].grade.value = grade;
	validGradeCheck(document.forms[i], 1); 
	document.forms[i].qpoints.value = input.prevQpoints.value;
	computeGPA()
	};	

}


function clearAll(){
var i = 0;
while (document.forms[i] != null){document.forms[i].reset(); i++;}				
}

function modInput(form, flag){
form.grade.value = form.grade.value.toUpperCase();
form.grade.value = form.grade.value.replace(" ", "");	

validGradeCheck(form, flag);
}

function validGradeCheck(form, flag){

var gradePoint;

switch(form.grade.value){
	case 'A':
		gradePoint = 4.0;
		computeRow(form, gradePoint);
	break;
	case 'A-':
		gradePoint = 3.7;
		computeRow(form, gradePoint);
	break;
	case 'B+':
		gradePoint = 3.3;
		computeRow(form, gradePoint);
	break;
	case 'B':
		gradePoint = 3.0;
		computeRow(form, gradePoint);
	break;
	case 'B-':
		gradePoint = 2.7;
		computeRow(form, gradePoint);
	break;
	case 'C+':
		gradePoint = 2.3;
		computeRow(form, gradePoint);
	break;
	case 'C':
		gradePoint = 2.0;
		computeRow(form, gradePoint);
	break;
	case 'C-':
		gradePoint = 1.7;
		computeRow(form, gradePoint);
	break;
	case 'D+':
		gradePoint = 1.3;
		computeRow(form, gradePoint);
	break;
	case 'D':
		gradePoint = 1.0;
		computeRow(form, gradePoint);
	break;
	case 'D-':
		gradePoint = .7;
		computeRow(form, gradePoint);
	break;
	case 'F':
		gradePoint = 0;
		computeRow(form, gradePoint);
	break;
	case '':
	break;
	default:
		if(flag == 0){
		alert("A(n) " + form.grade.value +" is not a possible grade."); 
		form.grade.value = "";}
	}
}

function computeRow(form, grade){
	if (form.credits.value != ""){
		if(Number(form.credits.value) >= 0 || Number(form.credits.value) <= 30){form.qpoints.value = Number(form.credits.value) * Number(grade);}
	}

}

function computeGPA(){
	var i = 0;
	var credits = 0;
	var qpoints = 0;
	var pnpCredits = 0;
	var fcredits = 0;
	var fqpoints = 0;

	while(document.forms[i].name != "mainForm"){i++;}

	while(document.forms[i].name != "totals"){

		if(document.forms[i].qpoints.value != ""){
			credits += Number(document.forms[i].credits.value);
			qpoints += Number(document.forms[i].qpoints.value);
			if(document.forms[i].fspec.checked == true){
				fcredits += Number(document.forms[i].credits.value);
				fqpoints += Number(document.forms[i].qpoints.value);
			}
		}		
		i++;
	}
	document.totals.cumQpoints.value = qpoints;
	document.totals.cumCredits.value = credits;
	document.totals.credits.value = fcredits;
	document.totals.qpoints.value = fqpoints;
	if(credits != 0 || qpoints != 0){document.totals.cumGrade.value = qpoints/credits; document.totals.cumGrade.value = Math.round(10000 * Number(document.totals.cumGrade.value))/10000;}else{document.totals.cumGrade.value = 0};
	if(fcredits != 0 || fqpoints != 0){document.totals.grade.value = fqpoints/fcredits; document.totals.grade.value = Math.round(10000 * Number(document.totals.grade.value))/10000;}else{document.totals.grade.value = 0};
	document.totals.cumCredits.value = Number(document.totals.cumCredits.value) + pnpCredits;
}

function help(column){
var text = new Array(11);
	text[0]= document.createTextNode("(OPTIONAL) Enter Abreviated Course Title (Acct 215)");
	text[1]= document.createTextNode("Enter Amount of Credits Received for Corresponding Course.");
	text[2]= document.createTextNode("Enter Letter Grade Received in Corresponding Course (A, A-, etc.)");
	text[3]= document.createTextNode("When checked, corresponding grade not figured into cumulative GPA.");
	text[4]= document.createTextNode("Check to determine GPA for a specific course or group of courses.");
	text[5]= document.createTextNode("Quality Points are calculated for you based on credits and letter grade.");
	text[6]= document.createTextNode("Total Credits: Calculated For You.");
	text[7]= document.createTextNode("Cumulative GPA: Calculated For You.");
	text[8]= document.createTextNode("Total Quality Points: Calculated For You.");	
	text[9]= document.createTextNode("Adds Row for an Extra Course to be Calculated.");
	text[10]=document.createTextNode("Deletes the Last Row from the Calculation Table");
	text[11]=document.createTextNode("Clears all Entered Data");
	text[12]=document.createTextNode("Clears Data Entered in this Row");

	var help = document.getElementById("helpRow");
	help.deleteCell(0);
	
	var newCell=help.insertCell(0);
	newCell.setAttribute('colSpan', '7');
	var div = document.createElement("DIV");
		div.setAttribute("align", "center");
	var font = document.createElement("FONT");
		font.setAttribute("color","#cc0000");
		
	
	font.appendChild(text[column]);
	div.appendChild(font);
	newCell.appendChild(div);
}

function fmodInput(input){
	input.value = input.value.toUpperCase();
	input.value = input.value.replace(" ", "");

	fvalidGradeCheck(input, 0);
}
function fvalidGradeCheck(input, flag){

	if(flag == 0){i = 2}else{i = 1};
	var rowNum = getRowNum(input, i);
	
var body = document.getElementById("myTbody");
var row = body.getElementsByTagName("TR");
var field = row[rowNum].getElementsByTagName("INPUT");
var grade = field[2].value;
	
	var gradePoint;
	switch(grade){
	case 'A':
		gradePoint = 4.0;
		fcomputeRow(gradePoint, rowNum);
	break;
	case 'A-':
		gradePoint = 3.7;
		fcomputeRow(gradePoint, rowNum);
	break;
	case 'B+':
		gradePoint = 3.3;
		fcomputeRow(gradePoint, rowNum);
	break;
	case 'B':
		gradePoint = 3.0;
		fcomputeRow(gradePoint, rowNum);
	break;
	case 'B-':
		gradePoint = 2.7;
		fcomputeRow(gradePoint, rowNum);
	break;
	case 'C+':
		gradePoint = 2.3;
		fcomputeRow(gradePoint, rowNum);
	break;
	case 'C':
		gradePoint = 2.0;
		fcomputeRow(gradePoint, rowNum);
	break;
	case 'C-':
		gradePoint = 1.7;
		fcomputeRow(gradePoint, rowNum);
	break;
	case 'D+':
		gradePoint = 1.3;
		fcomputeRow(gradePoint, rowNum);
	break;
	case 'D':
		gradePoint = 1.0;
		fcomputeRow(gradePoint, rowNum);
	break;
	case 'D-':
		gradePoint = .7;
		fcomputeRow(gradePoint, rowNum);
	break;
	case 'F':
		gradePoint = 0;
		fcomputeRow(gradePoint, rowNum);
	break;
	case 'S':
	case 'P':
	case 'T':
	case 'N':
	case "NP":
		field[3].checked = true;
	break;	
	case '':
	break;
	default:
		if(flag == 0){
		alert("A(n) " + grade +" is not a possible grade."); 
		input.value = "";}
	}
	

}
function getRowNum(input, cellNum){
var tempVal = input.value;
input.value = '-1';
var i = 0;
var flag = 0;
var body = document.getElementById("myTbody");
var row = body.getElementsByTagName("TR");
var field;
	while(flag != 1){
		field = row[i].getElementsByTagName("INPUT");
		if(field[cellNum].value == '-1'){flag = 1}else{i++};		
	}

	field[cellNum].value = tempVal;

//	input.value = tempVal;
	return(i);
}
function fcomputeRow(grade, rowNum){

var body=document.getElementById("myTbody");
var row=body.getElementsByTagName("TR");
var input = row[rowNum].getElementsByTagName("INPUT");
if(input[1].value != "" && input[2].value != ""){input[4].value = Number(input[1].value) * grade;}			

}
function freset(input){
var rownum = getRowNum(input, 5);										
var body = document.getElementById("myTbody");
var row = body.getElementsByTagName("TR");
var field = row[rownum].getElementsByTagName("INPUT");
var i = 0;
	while(i<=6){
		if(i<3){field[i].value="";}
		if(i==3){field[i].checked = false;}
		if(i==4){field[i].value="";}
		i++;
	}	

}
function resetAll(){

var body = document.getElementById("myTbody");
var row = body.getElementsByTagName("TR");
var field; 
var rowi = 0;
var i;

while(row[rowi] != null){
	field = row[rowi].getElementsByTagName("INPUT");
	i = 0;
	while(i<=5){
		if(i<3){field[i].value="";}
		if(i==3){field[i].checked = false;}
		if(i==4){field[i].value="";}
		i++;
		}	
	rowi++;
	}	
document.totals.reset();

}
function fcomputeGPA(){

var body = document.getElementById("myTbody");
var row = body.getElementsByTagName("TR");
var input; 
var i = 0;


var credits = 0;
var qpoints = 0;
var pnpCredits = 0;
var fcredits = 0;
var fqpoints = 0;

while(row[i] != null){
	input = row[i].getElementsByTagName("INPUT");
	if(input[4].value != "" && input[4].value != 'NaN'){	
		credits+=Number(input[1].value);
		qpoints+=Number(input[4].value);					
		if(input[3].checked == true){						
			fcredits+=Number(input[1].value);
			fqpoints+=Number(input[4].value);				
			}
		}	


	i++;
	}		

	
	document.totals.cumQpoints.value = qpoints;
	document.totals.cumCredits.value = credits;
	document.totals.credits.value = fcredits;
	document.totals.qpoints.value = fqpoints;
	if(credits != 0 || qpoints != 0){document.totals.cumGrade.value = qpoints/credits; document.totals.cumGrade.value = Math.round(10000 * Number(document.totals.cumGrade.value))/10000;}else{document.totals.cumGrade.value = 0};
	if(fcredits != 0 || fqpoints != 0){document.totals.grade.value = fqpoints/fcredits; document.totals.grade.value = Math.round(10000 * Number(document.totals.grade.value))/10000;}else{document.totals.grade.value = 0};
	document.totals.cumCredits.value = Number(document.totals.cumCredits.value) + pnpCredits;

}