// requires jQuery.js, commonCalculator.js
jQuery(function() {
	jQuery("#calculatorForm").bind('submit', calculate);		
	
	calculate();
});

function calculate() {
	var income = getInputMoney("#income");
	var price = getInputMoney("#homePrice");
	var closingCosts = getInputMoney("#closingCosts");
	var downPayment = getInputMoney("#downPayment");	
	var rate = getInputRate("#annualInterestRate");
	var paymentYears = getInputNumber("#yearsOfPayments");
	var taxes = getInputMoney("#realEstateTax");
	var hazardInsurance = getInputMoney("#hazardInsurance");
	var mortgageInsurance = getInputMoney("#mortgageInsurance");
	var otherMonthlyCosts = getInputMoney("#otherCosts");
	var monthlyDebt = getInputMoney("#monthlyDebt");

	var mortgageQualifier = new Calculators.loan.QualifyForHomePurchase(income, rate, paymentYears, price, downPayment, closingCosts, taxes, hazardInsurance, mortgageInsurance, otherMonthlyCosts, monthlyDebt);
	
	var qualifyText = mortgageQualifier.qualifies() ? "Yes" : "No";
	
	jQuery("#reportQualify").text(qualifyText);
	jQuery("#reportMortgage").text(mortgageQualifier.getMortgage().formatted());
	jQuery("#reportMonthlyLoan").text(mortgageQualifier.getLoan().getMonthlyPayment().formatted());
	jQuery("#reportMonthlyMortgage").text(mortgageQualifier.getTotalMonthlyMortgagePayment().formatted());
	jQuery("#maxHousingExpense").text(mortgageQualifier.getMaximumHousingExpense().formatted());
	jQuery("#maximumDTI").text(mortgageQualifier.getMaximumDTI().formatted());
	jQuery("#reportMaxMonthlyMortgage").text(mortgageQualifier.getMaximumMortgagePayment().formatted());
	plotValues(mortgageQualifier);
	return false;
}

function plotValues(mortgageQualifier){
	var chart = new FusionCharts("FusionCharts/FCF_Pie3D.swf", "graphId", "250", "240");
	var dataXml = generateDataXml(mortgageQualifier);
	chart.setDataXML(dataXml);
	chart.render("graph");
};

function generateDataXml(mortgageQualifier){
	var returnXml = new Array();
	returnXml.push("<?xml version='1.0'?>\n");
	returnXml.push("<graph caption='Monthly Mortgage' xAxisName='' yAxisName='' showNames='0' showValues='0' decimalPrecision='2' formatNumberScale='0' numberPrefix='$' formatNumber='1' animation='0' baseFontColor='999999' pieYScale='60'>");
	returnXml.push("  <set name='Loan' value='");
	returnXml.push(mortgageQualifier.getLoan().getMonthlyPayment().getAmount());
	returnXml.push("' hoverText='Monthly loan payment: ");
	returnXml.push(mortgageQualifier.getLoan().getMonthlyPayment().formatted());
	returnXml.push("' color='afd8f8' />");	
	if(mortgageQualifier.getMonthlyTaxes().getAmount() > 0.0) {
		returnXml.push("  <set name='Taxes' value='");
		returnXml.push(mortgageQualifier.getMonthlyTaxes().getAmount());
		returnXml.push("' hoverText='Monthly real estate taxes: ");
		returnXml.push(mortgageQualifier.getMonthlyTaxes().formatted());
		returnXml.push("' color='f6bd0f' />");
	}
	if(mortgageQualifier.getMonthlyHazardInsurance().getAmount() > 0.0) {
		returnXml.push("  <set name='Insurance' value='");
		returnXml.push(mortgageQualifier.getMonthlyHazardInsurance().getAmount());
		returnXml.push("' hoverText='Monthly hazard insurance: ");
		returnXml.push(mortgageQualifier.getMonthlyHazardInsurance().formatted());
		returnXml.push("' color='33CC33' />");
	}
	if(mortgageQualifier.getMonthlyMortgageInsurance().getAmount() > 0.0) {
		returnXml.push("  <set name='PMI' value='");
		returnXml.push(mortgageQualifier.getMonthlyMortgageInsurance().getAmount());
		returnXml.push("' hoverText='Monthly mortgage insurance: ");
		returnXml.push(mortgageQualifier.getMonthlyMortgageInsurance().formatted());
		returnXml.push("' color='0000ff' />");
	}
	if (mortgageQualifier.getOtherMonthlyFees().getAmount() > 0.0) {
		returnXml.push("  <set name='Other' value='");
		returnXml.push(mortgageQualifier.getOtherMonthlyFees().getAmount());
		returnXml.push("' hoverText='Other monthly fees: ");
		returnXml.push(mortgageQualifier.getOtherMonthlyFees().formatted());
		returnXml.push("' color='ff0000' />");	
	}
	returnXml.push("</graph>");

	return returnXml.join("");
}
