//variables for input fields
var down = 0;
var tax = 0;
var share = 0;

//fractional mortgage is a constant
var fractional = 0.075;

//variables for formulas and outputs
var purchasePrice = 0;
var taxBracket = 0;
var downPaymentPercent = 0;
var downPaymentCurrency	= 0;
var afterTaxSavings = 0;
var balance = 0;
var annualMortgagePayments = 0;
var fractionalMortgage = 0;
var annualTaxSavings = 0;
var monthlyPayment = 0;
var netAnnualMortgagePayments = 0;
var annualMortgageInterest = 0;
var adjMonthlyPaymentsAfterTaxSavings = 0;
var payment = 0;

function resetForm() {
	document.frmFinance.rdoShare[0].checked = true;
	document.frmFinance.rdoDown[0].checked = true;
	document.frmFinance.rdoTax[3].checked = true;
	initializeVariables();
	calculate();
	writeOutput();
	return;
}

function finance() {
	initializeVariables();
	calculate();
	writeOutput();
	return;
}

function initializeVariables() {
	//get values from form
	down = parseFloat(getCheckedValue(document.frmFinance.rdoDown));
	share = parseFloat(getCheckedValue(document.frmFinance.rdoShare));
	tax = parseFloat(getCheckedValue(document.frmFinance.rdoTax));
	return;
}

function calculate(){
	purchasePrice = share;
	taxBracket = tax;
	downPaymentPercent = down;
	downPaymentCurrency	= parseFloat(downPaymentPercent) * parseFloat(purchasePrice);
	balance = parseFloat(purchasePrice) - downPaymentCurrency;
	fractionalMortgage = fractional;
	monthlyPayment = (balance * fractionalMortgage)/12;
	annualMortgageInterest = monthlyPayment * 12;
	afterTaxSavings = parseFloat(annualMortgageInterest) * taxBracket;
	annualMortgagePayments = annualMortgageInterest;
	annualTaxSavings = annualMortgageInterest * taxBracket;
	netAnnualMortgagePayments = annualMortgagePayments - annualTaxSavings;
	adjMonthlyPaymentsAfterTaxSavings = netAnnualMortgagePayments / 12;
	payment = adjMonthlyPaymentsAfterTaxSavings;
	return;
}

function writeOutput() {
	//divs
	document.getElementById('purchasePrice').innerHTML='<em>' + formatCurrency(purchasePrice, true) + '</em>';
	document.getElementById('taxBracket').innerHTML='<em>' + formatPercent(taxBracket, 0) + '</em>';
	document.getElementById('downPayment').innerHTML='<em>' + formatPercent(downPaymentPercent, 0) + ' - ' + formatCurrency(downPaymentCurrency, true) + '</em>';	
	document.getElementById('afterTaxSavings').innerHTML='<em>' + formatCurrency(afterTaxSavings, true) + '</em>';
	document.getElementById('balance').innerHTML='<em>' + formatCurrency(balance, true) + '</em>';
	document.getElementById('annualMortgagePayments').innerHTML='<em>' + formatCurrency(annualMortgagePayments, true) + '</em>';
	document.getElementById('fractionalMortgage').innerHTML='<em>' + formatPercent(fractionalMortgage, 2) + '</em>';
	document.getElementById('annualTaxSavings').innerHTML='<em>' + formatCurrency(annualTaxSavings, true) + '</em>';
	document.getElementById('monthlyPayment').innerHTML='<em>' + formatCurrency(monthlyPayment, true) + '</em>';
	document.getElementById('netAnnualMortgagePayments').innerHTML='<em>' + formatCurrency(netAnnualMortgagePayments, true) + '</em>';
	document.getElementById('annualMortgageInterest').innerHTML='<em>' + formatCurrency(annualMortgageInterest, true) + '</em>';
	document.getElementById('adjMonthlyPaymentsAfterTaxSavings').innerHTML='<em>' + formatCurrency(adjMonthlyPaymentsAfterTaxSavings, true) + '</em>';
	document.getElementById('payment').innerHTML='<em>' + formatCurrency(payment, false) + ' per month</em>';
	return;
}

function formatCurrency(strValue, cents) {
	strValue = strValue.toString().replace(/\$\,/g,'');
	dblValue = parseFloat(strValue);
	
	blnSign = (dblValue == (dblValue = Math.abs(dblValue)));
	dblValue = Math.floor(dblValue*100+0.50000000001);
	intCents = dblValue%100;
	strCents = intCents.toString();
	dblValue = Math.floor(dblValue/100).toString();
	if(intCents<10) {
		strCents = "0" + strCents; 
	}
	for (var i = 0; i < Math.floor((dblValue.length-(1+i))/3); i++) {
		dblValue = dblValue.substring(0, dblValue.length-(4*i+3)) + ',' + dblValue.substring(dblValue.length-(4*i+3));
	}
	
	if(cents) {
		return (((blnSign)?'':'-') + '$' + dblValue + '.' + strCents);
	}
	else {
		var strRoundMe = dblValue + '.' + strCents;
		var dblRounded = Math.round(parseFloat(strRoundMe));
		return ((blnSign)?'':'-') + '$' + dblRounded;
	}
		
}

function formatPercent(Expression, NumDigitsAfterDecimal) {
    var intDecimals = NumDigitsAfterDecimal;
    var dbInVal = Expression * 100;
    var bNegative = false;
    var iInVal = 0;
    var strInVal;
    var strWhole = "", strDec = "";
    var strTemp = "", strOut = "";
    var iLen = 0;

    if (dbInVal < 0) {
        bNegative = true;
        dbInVal *= -1;
    }

    dbInVal = dbInVal * Math.pow(10, intDecimals)
    iInVal = parseInt(dbInVal);
    if ((dbInVal - iInVal) >= .5) {
        iInVal++;
    }
    strInVal = iInVal + "";
    strWhole = strInVal.substring(0, (strInVal.length - intDecimals));
    strDec = strInVal.substring((strInVal.length - intDecimals), strInVal.length);
    while (strDec.length < intDecimals) {
        strDec = "0" + strDec;
    }
    iLen = strWhole.length;
    if (iLen >= 3) {
        while (iLen > 0) {
            strTemp = strWhole.substring(iLen - 3, iLen);
            if (strTemp.length == 3) {
                strOut = "," + strTemp + strOut;
                iLen -= 3;
            }
            else {
                strOut = strTemp + strOut;
                iLen = 0;
            }
        }
        if (strOut.substring(0, 1) == ",") {
            strWhole = strOut.substring(1, strOut.length);
        }
        else {
            strWhole = strOut;
        }
    }
    if (bNegative) {
        return "-" + strWhole + "." + strDec + "%";
    }
    else {
		if (intDecimals == 0) {
			return strWhole + "%";
		}
		else {
			return strWhole + "." + strDec + "%";
		}
    }
}

// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

// set the radio button with the given value as being checked
// do nothing if there are no radio buttons
// if the given value does not exist, all the radio buttons
// are reset to unchecked
function setCheckedValue(radioObj, newValue) {
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}
