var creditScore			= 0;
var letterGrade			= "F";
var pts_seriousEvent	= 0;
var pts_histLength		= 0;
var pts_creditLimit		= 0;
var pts_creditOwed		= 0;
var pts_newCredit		= 0;
var hasMortgage			= false;
var hasCreditCard		= false;
var hasFinanceAccts		= false;
var hasAutoLoan			= false;
var hasStudentLoan		= false;
var hasOtherLoan		= false;


/** getScore: Point of execution. Makes calls to all sub-routines and is called by user form. */
function getScore(form){

	//i. Fetch data from form
	fetchUserData(form);

	//ii. Crunch the numbers
	creditScore = estimateScore(
		pts_seriousEvent,		// Late payments
		pts_creditOwed,			// % of credit limit owed
		pts_histLength,			// how long of a history
		pts_newCredit,			// # recent credit inquiries
		hasMortgage,			// True or False
		hasAutoLoan,			// True or False
		hasStudentLoan,			// True or False
		hasOtherLoan,			// True or False
		hasCreditCard,			// True or False
		hasFinanceAccts);		// True or False

	//iii. determine a letter grade
	letterGrade = getLetterGrade(creditScore);

	//vi. write score to screen.
	if (pts_histLength>0){
		displayScore(creditScore,letterGrade);
	}else{
		alert("Sorry but there is not enough history to determine a credit score.");
	}
}



/** getUserData: Fetch values from form and populate variables */
function fetchUserData(form){
	pts_seriousEvent= form.seriousEvent.value;
	pts_histLength	= form.histLength.value;
	pts_creditLimit	= form.creditLimit.value;
	pts_creditOwed	= form.creditOwed.value;
	pts_newCredit	= form.newCredit.value;
	hasMortgage		= form.mortgage.checked;
	hasCreditCard	= form.creditCard.checked;
	hasFinanceAccts	= form.financeAccts.checked;
	hasAutoLoan		= form.autoLoan.checked;
	hasStudentLoan	= form.studentLoan.checked;
	hasOtherLoan	= form.otherLoan.checked;
}


/** getLetterGrade: lookup a school letter grade to equate the value of the score */
function getLetterGrade(score){

	var grade;
	
	if (score>=820){
		grade="A+";
	}else if (score>=780){
		grade="A";
	}else if (score>=720){
		grade="A-";
	}else if (score>=680){
		grade="B";
	}else if (score>=620){
		grade="C";
	}else if (score>=550){
		grade="D";
	}else if (score<550){
		grade="F";
	}else{
		grade="N/A";
	}

	return grade;
}


/** Put score and letter grade on the page */
function displayScore(score,grade){

	 var grade_color = "grade_red"

	 if (creditScore>=700) grade_color = "grade_green";
	 if (creditScore<=560) grade_color = "grade_red";
	 setClass(document.getElementById("grade_box"),"grade_visible");
	 setClass(document.getElementById("grade"),grade_color);

	document.getElementById("score").innerHTML = score;
	document.getElementById("grade").innerHTML = grade;
}



 /** estimateScore: Pass pertinent details and get FAKO score output */
 function estimateScore(
	pts_seriousEvent,	// Late payments
	pts_creditOwed,		// % of credit limit owed
	pts_histLength,		// how long of a history
	pts_newCredit,		// # recent credit inquiries
	hasMortgage,		// True or False
	hasAutoLoan,		// True or False
	hasStudentLoan,		// True or False
	hasOtherLoan,		// True or False
	hasCreditCard,		// True or False
	hasFinanceAccts)	// True or False
	{

	//Length of time (years) since a serious credit event (190 pts)
	switch(Number(pts_seriousEvent)){
		case .5: pts_seriousEvent = 190; break; 
		case 1:  pts_seriousEvent = 180; break;
		case 2:  pts_seriousEvent = 125; break;
		case 3:  pts_seriousEvent = 125; break;
		case 4:  pts_seriousEvent = 55;  break;
		case 5:  pts_seriousEvent = 55;  break;
		case 6:  pts_seriousEvent = 35;  break;
		case 7:  pts_seriousEvent = 25;  break;
		case 8:  pts_seriousEvent = 15;  break;
		default: pts_seriousEvent = 0;   break;
	}

	//Percentage of credit limit owed (165 pts)
	switch(Number(pts_creditOwed)){
		case 100:pts_creditOwed = 165; break;    
		case 90: pts_creditOwed = 150; break;
		case 80: pts_creditOwed = 140; break;
		case 70: pts_creditOwed = 130; break;
		case 60: pts_creditOwed = 120; break;
		case 50: pts_creditOwed = 110; break;
		case 40: pts_creditOwed = 100; break;
		case 30: pts_creditOwed = 75;  break;
		case 20: pts_creditOwed = 50;  break;
		case 10: pts_creditOwed = 25;  break;
		case 0:  pts_creditOwed = 0;   break;
		default: pts_creditOwed = 0;
	}

	//Length of credit history (85 pts)
	switch(Number(pts_histLength)){
		case .5: pts_histLength = 85; break;    
		case 1:  pts_histLength = 79; break;
		case 2:  pts_histLength = 71; break;
		case 3:  pts_histLength = 63; break;
		case 4:  pts_histLength = 55; break;
		case 5:  pts_histLength = 47; break;
		case 6:  pts_histLength = 39; break;
		case 7:  pts_histLength = 31; break;
		case 8:  pts_histLength = 23; break;
		case 9:  pts_histLength = 15; break;
		case 10: pts_histLength = 0;  break;
		default: pts_histLength = 0;
	}

	//New credit Inquiries (55pts)
	switch(Number(pts_newCredit)){
		case 0:  pts_newCredit = 0;  break;    
		case 1:  pts_newCredit = 15; break;
		case 2:  pts_newCredit = 30; break;
		case 3:  pts_newCredit = 30; break;
		case 4:  pts_newCredit = 45; break;
		case 5:  pts_newCredit = 45; break;
		case 6:  pts_newCredit = 45; break;
		case 7:  pts_newCredit = 50; break;
		case 8:  pts_newCredit = 50; break;
		case 9:  pts_newCredit = 55; break;
		case 10: pts_newCredit = 55; break;
		default: pts_newCredit = 0;
	}

	//Types of accounts (55pts)
	var acctTypes = 0;
	if (hasMortgage) acctTypes = acctTypes+18;
	if (hasAutoLoan) acctTypes = acctTypes+10;
	if (hasStudentLoan) acctTypes = acctTypes+9;
	if (hasOtherLoan) acctTypes = acctTypes+9;
	if (hasCreditCard) acctTypes = acctTypes+9;
	if (hasFinanceAccts && acctTypes>0) acctTypes = acctTypes-17;

	//850 total possible points (795  acctTypes)
	var pts_total = (795 + acctTypes) - (pts_seriousEvent + pts_creditOwed + pts_histLength + pts_newCredit);
	return pts_total;
 }



/** setClass: Dynamically change the CSS class of an object */
function setClass(obj,cssClassName) {
	obj.className = cssClassName;
}
