// Detect Client Browser type
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
jsVersion = 1.1;
// JavaScript helper required to detect Flash Player PlugIn version information
function JSGetSwfVer(i){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
      		var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			descArray = flashDescription.split(" ");
			tempArrayMajor = descArray[2].split(".");
			versionMajor = tempArrayMajor[0];
			versionMinor = tempArrayMajor[1];
			if ( descArray[3] != "" ) {
				tempArrayMinor = descArray[3].split("r");
			} else {
				tempArrayMinor = descArray[4].split("r");
			}
      		versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
            flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
      	} else {
			flashVer = -1;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	// Can't detect in all other cases
	else {
		
		flashVer = -1;
	}
	return flashVer;
} 
// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) 
{
 	reqVer = parseFloat(reqMajorVer + "." + reqRevision);
   	// loop backwards through the versions until we find the newest version	
	for (i=25;i>0;i--) {	
		if (isIE && isWin && !isOpera) {
			versionStr = VBGetSwfVer(i);
		} else {
			versionStr = JSGetSwfVer(i);		
		}
		if (versionStr == -1 ) { 
			return false;
		} else if (versionStr != 0) {
			if(isIE && isWin && !isOpera) {
				tempArray         = versionStr.split(" ");
				tempString        = tempArray[1];
				versionArray      = tempString .split(",");				
			} else {
				versionArray      = versionStr.split(".");
			}
			versionMajor      = versionArray[0];
			versionMinor      = versionArray[1];
			versionRevision   = versionArray[2];
			
			versionString     = versionMajor + "." + versionRevision;   // 7.0r24 == 7.24
			versionNum        = parseFloat(versionString);
        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
			if ( (versionMajor > reqMajorVer) && (versionNum >= reqVer) ) {
				return true;
			} else {
				return ((versionNum >= reqVer && versionMinor >= reqMinorVer) ? true : false );	
			}
		}
	}	
}


var calculations = 0;

var set1ResultsArray = new Array("$111.11", "10 yrs.", "6.8%", "$5,000.00", "120", "$8,888.88", "$3,888.88");
var set2ResultsArray = new Array("$222.22", "20 yrs.", "7.8%", "$6,000.00", "120", "$8,888.88", "$2,888.88");
var set3ResultsArray = new Array("$333.33", "30 yrs.", "8.8%", "$7,000.00", "120", "$8,888.88", "$1,888.88");

var resultsArray = new Array (set1ResultsArray, set2ResultsArray, set3ResultsArray);
//var labelsArray = new Array("MONTHLY LOAN PAYMENT:", "Loan Term:", "Interest Rate:", "Loan Amount:", "# of Payments:", "Total Paid:", "Total Interest:");

var set1IDsArray = new Array( "set1label02", "set1label04", "set1label06", "set1label08", "set1label10","set1label12","set1label14");

var set2IDsArray = new Array("set2label02", "set2label04", "set2label06", "set2label08", "set2label10", "set2label12", "set2label14");

var set3IDsArray = new Array("set3label02", "set3label04","set3label06", "set3label08","set3label10", "set3label12",  "set3label14");
//???
var IDsArray = new Array (set1IDsArray, set2IDsArray, set3IDsArray);

function formatDecimals (numberToFormat){
	numberToFormat = Math.round(numberToFormat * 100) / 100;
	return numberToFormat;
}

function addDecimals (numberToFormat){
	var localString = numberToFormat.toString()
	if (localString.indexOf(".") == -1){
		localString = localString + ".00";
	}
	return localString;
}

function insertCommas (startNum){
	var numFormat = startNum.toString();
	var commas = Math.floor((numFormat.length - 1)/3);
	var pieces = new Array();
	var endNum = new String();
	if (commas == 0){
		return startNum;
	} else {
		for (x=0; x <= commas; x++){
			if (x < commas){
				pieces[x] = numFormat.substr(((numFormat.length) - (3 * (x+1))), 3);
				pieces[x] = "," + pieces[x];
			} else {
				var capture = numFormat.length % 3;
				if (capture == 0){
					capture = 3;
				}
				pieces[x] = numFormat.substr(0, capture);
			}
		}
		for (y = commas; y >= 0; y--){
			endNum += pieces[y];
		}
		return endNum;
	}
}

function splitForCommas(startingPoint){
	var numString = startingPoint.toString();
	if (numString.indexOf(".") > -1){
		numArray = numString.split(".");
		numArray[0] = insertCommas (numArray[0]);
		if(numArray[1].length == 1){
			numArray[1] = numArray[1] + "0";
		}
		numString = numArray[0] + "." + numArray[1];
	}
	else
	{
		numString = insertCommas (numString);
	}
	return numString;
}


function fillFields (){
	var field, fillTo;
	if (calculations > 3){
		fillTo = 3;
	} else {
		fillTo = calculations;
	}
	for (set = 0; set < fillTo; set++){
		field = 0;
		/*for (subset =0; subset< 6; subset++){
					document.getElementById(IDsArray[set][field]).childNodes[0].nodeValue = labelsArray[subset];
			field++;
			}*/

		for (subset = 0; subset < 7; subset++){
			document.getElementById(IDsArray[set][field]).childNodes[0].nodeValue = resultsArray[set][subset];
			field++;
		}
	}
}

function displayResults(newCalc)
{
	if (calculations > 2)
	{
		for (x = 0; x <7; x++)
		{
			resultsArray[2][x] = resultsArray[1][x];
		}
	}
	if (calculations > 1)
	{
		for (x = 0; x <7; x++)
		{
			resultsArray[1][x] = resultsArray[0][x];
		}
	}
	for (x = 0; x <7; x++)
	{
		resultsArray[0][x] = newCalc[x];
	}
	fillFields();
}

function resetAll ()
{
	var field;
	for (set = 0; set < 3; set++)
	{
		field = 0;
		for (subset = 0; subset < 7; subset++)
		{
			document.getElementById(IDsArray[set][field]).childNodes[0].nodeValue = ' ';
			field++;
			/*document.getElementById(IDsArray[set][field]).childNodes[0].nodeValue = ' ';
			field++;*/
		}
	}
	document.getElementById("termInput").value="0";
	document.getElementById("arpInput").value="6.8";
	document.getElementById("amountInput").value="0.00";
	calculations = 0;
}

function calculate()
{
	var loanAmount = Number(document.getElementById("amountInput").value);
	var displayRate = Number(document.getElementById("arpInput").value);
	var interestRate = Number(displayRate)/1200;
	var years = Number(document.getElementById("termInput").value);
	var months = years*12;
	var fraction, denominator, monthlyRateNoFormat, totalPaid, interestPaid, monthlyRateFormatted, totalPaidString, interestPaidString;
	var calcArray = new Array();
	if (isNaN(loanAmount) || (loanAmount == 0))
	{
		alert("ERROR: Loan Amount must be a number greater than zero.");
	}
	else if (loanAmount >= 1000000)
	{
		alert("ERROR: Loan Amount must be a number less than 1,000,000.00");
	}
	else if (isNaN(interestRate))
	{
		alert("ERROR: Interest Rate must be a number.");
	}
	else if ((displayRate < 0) || (displayRate >= 100))
	{
		alert("ERROR: Interest Rate must be a number greater than zero and less than 100.");
	}
	else if (isNaN(years) || (years == 0) || (years > 99))
	{
		alert("ERROR: Loan Term must be a whole number greater than zero and less than 100.");
	}
	else if (!(years - Math.floor(years)) == 0)
	{
		alert("ERROR: Loan Term must be a whole number greater than zero and less than 100.");
	}
	else if (interestRate == 0)
	{
		monthlyRateNoFormat = loanAmount / months;
		monthlyRateNoFormat = formatDecimals (monthlyRateNoFormat);
		monthlyRateFormatted = addDecimals(monthlyRateNoFormat);
		monthlyRateFormatted = splitForCommas(monthlyRateFormatted);
		monthlyRateFormatted = "$" + monthlyRateFormatted;
		totalPaid = formatDecimals (loanAmount);
		totalPaidString = addDecimals(totalPaid);
		totalPaidString = splitForCommas(totalPaidString)
		totalPaidString = "$" + totalPaidString;
		loanAmount = formatDecimals (loanAmount);
		loanAmount = addDecimals (loanAmount);
		loanAmount = splitForCommas (loanAmount);
		loanAmount = "$" + loanAmount;
		calcArray[0] = monthlyRateFormatted;
		calcArray[1] = years + " yrs.";
		calcArray[2] = displayRate + "%";
		calcArray[3] = loanAmount;
		calcArray[4] = splitForCommas(months);
		calcArray[5] = totalPaidString;
		calcArray[6] = "$0.00";
		calculations++;
		displayResults(calcArray);
	}
	else
	{

		denominator = Math.pow((1 + interestRate), months) - 1;
		fraction = interestRate / denominator;
		monthlyRateNoFormat = (interestRate + fraction) * loanAmount;
		monthlyRateNoFormat = formatDecimals (monthlyRateNoFormat);
		monthlyRateFormatted = addDecimals(monthlyRateNoFormat);
		monthlyRateFormatted = splitForCommas(monthlyRateFormatted);
		monthlyRateFormatted = "$" + monthlyRateFormatted;
		totalPaid = monthlyRateNoFormat * months;
		totalPaid = formatDecimals (totalPaid);
		totalPaid = formatDecimals (totalPaid);
		totalPaidString = addDecimals(totalPaid);
		totalPaidString = splitForCommas(totalPaidString);
		totalPaidString = "$" + totalPaidString;
		interestPaid = totalPaid - loanAmount;
		interestPaid = formatDecimals (interestPaid);
		interestPaid = formatDecimals (interestPaid);
		interestPaidString = addDecimals(interestPaid);
		interestPaidString = splitForCommas(interestPaidString);
		interestPaidString = "$" + interestPaidString;
		monthlyRateFormatted = monthlyRateFormatted;
		loanAmount = formatDecimals (loanAmount);
		loanAmount = addDecimals (loanAmount);
		loanAmount = splitForCommas (loanAmount);
		loanAmount = "$" + loanAmount;
		calcArray[0] = monthlyRateFormatted;
		calcArray[1] = years + " yrs.";
		calcArray[2] = displayRate + "%";
		calcArray[3] = loanAmount;
		calcArray[4] = splitForCommas(months);
		calcArray[5] = totalPaidString;
		calcArray[6] = interestPaidString;
		calculations++;
		displayResults(calcArray);
	}
}