/*
 * Handles javascript calculations for savings (investment) calculator.                      
 *
 * @author Andy Tong
 * @version $Revision: $ $Date: $
 */
var WINDOW_OPTIONS = "toolbar=no, menubar=no, resizable=yes, scrollbars=yes";
var FORMULAS = new Calculators.math.Formulas();
var savings;
var comparison;
var calculated;

// Calculates values based on data entered in form
function updateCalcs() {
	var returnRate = new Calculators.type.Rate(strip($("#returnRate").val()) / 100);
	var yearsToSave = strip($("#yearsToSave").val());
	var monthlySavings = new Calculators.type.Money(strip($("#monthlySavings").val()));
	var comparisonMonthlySavings = new Calculators.type.Money(strip($("#comparisonMonthlySavings").val()));
	var initialInvestment = new Calculators.type.Money(strip($("#amountSaved").val()));
	savings = new Calculators.planning.SavingsGoal(returnRate.getAmount(), yearsToSave,
			monthlySavings.getAmount(), initialInvestment.getAmount());
    comparison = new Calculators.planning.SavingsGoal(returnRate.getAmount(), yearsToSave,
    		comparisonMonthlySavings.getAmount(), initialInvestment.getAmount()); 
	
    var savingsGoal = new Calculators.type.Money(strip($("#savingsGoal").val()));
    var comparisonMonthlySavings = new Calculators.type.Money(strip($("#comparisonMonthlySavings").val()));
    var calculatedMonthlySavings = new Calculators.type.Money(-FORMULAS.pmt(returnRate.monthly(),
            yearsToSave * 12, -initialInvestment.getAmount(), savingsGoal.getAmount()));
    calculated = new Calculators.planning.SavingsGoal(returnRate.getAmount(), yearsToSave,
			calculatedMonthlySavings.getAmount(), initialInvestment.getAmount());
    
    
    $("#returnRate").val(returnRate.formatted());
    $("#monthlySavings").val(monthlySavings.formatted());
    $("#comparisonMonthlySavings").val(comparisonMonthlySavings.formatted());
    $("#monthlySavings").val(monthlySavings.formatted());
    $("#amountSaved").val(initialInvestment.formatted());
    $("#savingsGoal").val(savingsGoal.formatted());
    
    $("#savings").text(savingsGoal.formatted());
    $("#years").text(yearsToSave);
    $("#calculatedMonthlySavings").text(calculatedMonthlySavings.formatted());
}            
          
function strip(unformatted) {
   return new String(unformatted).replace(/[\$%,]/g, "");
}

// Shows investment report
function displayReport() {
	var savingsGoal = new Calculators.type.Money(strip($("#savingsGoal").val()));
	var report = new Calculators.report.SavingsGoalReport(savings, comparison, calculated, savingsGoal);
    var reportWindow = window.open("", "_new", WINDOW_OPTIONS);
    reportWindow.document.write(report.getHtmlReport());
    reportWindow.document.close();
} 
               
// Update FusionChart values
function plotValues() {
    var chart = new FusionCharts("FusionCharts/FCF_MSColumn3D.swf", "graphId", "400", "250");
    var xml = generateXmlData(); 
    chart.setDataXML(xml);
    chart.render("graph");
}

// XML for FusionCharts
function generateXmlData() {
    var years = new Number($("#yearsToSave").val());
    var xml = new Array();
    xml.push("<graph caption='Yearly Investments' showValues='0' showLegend='1' animation='0' numberPrefix='$' decimalPrecision='0' formatNumberScale='0'>");
    xml.push("  <categories font='Arial' fontSize='11' fontColor='000000'>");
    for (var i = 0; i <= years; ++i) {
        xml.push("    <category name='" + i + "'/>");    
    }                                         
    xml.push("  </categories>");
    xml.push("  <dataset color='0066ff' seriesname='Investment'>");   
    for (var i = 0; i <= years; ++i) {
        xml.push("    <set value='" + savings.getYearlyStatement(i).getBalance().getAmount() + "' />");
    }                                         
    xml.push("  </dataset>");
    
    xml.push("  <dataset seriesname='Comparison'>");   
    for (var i = 0; i <= years; ++i) {
    	xml.push("    <set value='" + comparison.getYearlyStatement(i).getBalance().getAmount() + "' />");
    }                                         
    xml.push("  </dataset>");
    xml.push("</graph>");
    return xml.join("");
} 