      var planner = new Calculators.planning.Retirement(45, 65, 50000.00, 1000.00, 0.1000, 0.0800, 0.0800, 0.0400, 20, 0.9000, 0.0310, false, false);
      planner.calculate();

      function plotValues(){
        var chart = new FusionCharts("FusionCharts/FCF_MSArea2D.swf", "graphId", "530", "250");
        var dataXml = generateDataXml();
        chart.setDataXML(dataXml);
        chart.render("graph");
      };

      function generateDataXml(){
        var returnXml = new Array();
        returnXml.push("<?xml version='1.0'?>\n");
        returnXml.push("<graph caption='' xAxisName='Age' yAxisName='Thousands of Dollars' animation='0' decimalPrecision='0' numberPrefix='$' showNames='1' formatNumberScale='0' rotateNames='0' showLimits='1'>");

        var yearlySnapshot = planner.getYearlySnapshots();
		var startingPoint = planner.getStartingAge();
		var endingPoint = planner.getEndingAge();

        // Add ages
        returnXml.push("<categories>");
        for (var i = startingPoint; i <= endingPoint; ++i) {
          var showMarker = (i % 5) ? 0 : 1;
          // Always show the endpoints
          if (i == startingPoint || i == endingPoint) {
            showMarker = 1;
          }
          returnXml.push("  <category name='" + i + "' showname='" + showMarker + "'/>");
        }
        returnXml.push("</categories>");

        // Add savings data
        returnXml.push("<dataset seriesname='Savings' color='afd8f8' areaBorderColor='b1dafa' showValues='0' showAnchors='0'>");
        for (var i = startingPoint; i < endingPoint; ++i) {
        	returnXml.push("<set value='");
        	returnXml.push((yearlySnapshot[i].getBeginningBalance().getAmount() / 1000) + "");
        	returnXml.push("' />");
        }
        returnXml.push("</dataset>");

        // Add expenses data
        returnXml.push("<dataset seriesname='Expenses' color='f6bd0f' areaBorderColor='f8dd11' showValues='0' showAnchors='0'>");
        for (var i = startingPoint; i < endingPoint; ++i) {
        	returnXml.push("<set value='");
        	returnXml.push((yearlySnapshot[i].getWithdrawal().getAmount() / 1000) + "");
        	returnXml.push("' />");
        }
        returnXml.push("</dataset>");

        // Close the XML
        returnXml.push("</graph>");

        return returnXml.join("");
      }

      function updateCalcs() {
      	var currentAge = document.getElementById("currentAge").value;
      	var retirementAge = document.getElementById("retirementAge").value;
        var income = parseFloat(document.getElementById("income").value.replace(/\$/g, "").replace(/,/g, ""));
        var savings = parseFloat(document.getElementById("savings").value.replace(/\$/g, "").replace(/,/g, ""));
        var preRoR = parseFloat(document.getElementById("preRoR").value.replace(/%/g, "")) / 100;
        var postRoR = parseFloat(document.getElementById("postRoR").value.replace(/%/g, "")) / 100;
        var contribution = parseFloat(document.getElementById("contribution").value.replace(/%/g, "")) / 100;
        var raise = parseFloat(document.getElementById("raise").value.replace(/%/g, "")) / 100;
      	var retiredYears = document.getElementById("retiredYears").value;
        var percentOfIncome = parseFloat(document.getElementById("percentOfIncome").value.replace(/%/g, "")) / 100;
        var rateOfInflation = parseFloat(document.getElementById("rateOfInflation").value.replace(/%/g, "")) / 100;

        if (currentAge != planner.getCurrentAge() ||
            retirementAge != planner.getRetirementAge() ||
            income != planner.getIncome().getAmount() ||
            savings != planner.getSavings().getAmount() ||
            preRoR != planner.getCurrentRateOfReturn().getAmount() ||
            postRoR != planner.getRetiredRateOfReturn().getAmount() ||
            contribution != planner.getContribution().getAmount() ||
            raise != planner.getRaise().getAmount() ||
            retiredYears != planner.getYearsOfRetirement() ||
            percentOfIncome != planner.getExpenses().getAmount() ||
            rateOfInflation != planner.getRateOfInflation().getAmount()) {
                planner = new Calculators.planning.Retirement(currentAge, retirementAge, income, savings, preRoR, postRoR, contribution, raise, retiredYears, percentOfIncome, rateOfInflation, false, false);
                planner.calculate();

                calculate();
            }
      }

      function calculate() {
        // Update the data entry fields (with proper formatting)
      	document.getElementById("currentAge").value = planner.getCurrentAge();
      	document.getElementById("retirementAge").value = planner.getRetirementAge();
        document.getElementById("income").value = planner.getIncome().formatted();
        document.getElementById("savings").value = planner.getSavings().formatted();
        document.getElementById("preRoR").value = planner.getCurrentRateOfReturn().formatted();
        document.getElementById("postRoR").value = planner.getRetiredRateOfReturn().formatted();
        document.getElementById("contribution").value = planner.getContribution().formatted();
        document.getElementById("raise").value = planner.getRaise().formatted();
      	document.getElementById("retiredYears").value = planner.getYearsOfRetirement();
        document.getElementById("percentOfIncome").value = planner.getExpenses().formatted();
        document.getElementById("rateOfInflation").value = planner.getRateOfInflation().formatted();

        // Update the graph
        plotValues();

        // Update static fields
				jQuery("#total_at_retirement").val(planner.getSavingsAtRetirement().formatted());
				jQuery("#retirement_depleted").val(planner.getAgeWhenSavingsExpires());
				jQuery("#retirement_income").val(planner.getSalaryAtRetirement().formatted());				
      }

      function displayReport() {
        var report = new Calculators.report.PlannerReport(planner);
        var WINDOW_OPTIONS = "toolbar=no, menubar=no, resizable=yes, scrollbars=yes";
        var reportWindow = window.open("", "_new", WINDOW_OPTIONS);
        reportWindow.document.write(report.getHtmlReport());
        reportWindow.document.close();
      }


