            var savings = new Calculators.planning.CollegeSavings(0.00, 250.00, 0.08, 0.065);
            savings.addExpense(9, 18, 22000.00, 8000.00);
            savings.addExpense(5, 18, 22000.00, 8000.00);savings.calculate();
            
            function plotValues(){
                var graphType = null;
                var graphTypeElement = document.graph_method_form.graph_method;
                for (var i = 0; i < graphTypeElement.length; i++) {
                    if (graphTypeElement[i].checked == true) {
                        graphType = graphTypeElement[i].value;
                    }
                }
                if (graphType == "by_year") {
                    // Line graph
                    var chart = new FusionCharts("FusionCharts/FCF_MSLine.swf", "graphId", "500", "210");
                    var dataXml = generateExpensesByYearDataXml();
                    chart.setDataXML(dataXml);
                    chart.render("graph");
                }
                else 
                    if (graphType == "by_child") {
                        // Bar graph
                        var chart = new FusionCharts("FusionCharts/FCF_Column3D.swf", "graphId", "500", "210");
                        var dataXml = generateExpensesByChildDataXml();
                        chart.setDataXML(dataXml);
                        chart.render("graph");
                    }
            };
            
            function generateExpensesByYearDataXml(){
                var returnXml = new Array();
                returnXml.push("<?xml version='1.0'?>\n");
                returnXml.push("<graph caption='' subcaption='' bgcolor='ffffff' yAxisMinValue='0.0' formatNumberScale='0' decimalPrecision='0' animation='0' showvalues='0' showanchors='0' numberPrefix='$'>");
                returnXml.push("<categories>");
                var snapshots = savings.getYearlySnapshots();
                for (var i = 1; i < snapshots.length; i++) {
                    var showMarker = 1;
                    returnXml.push("  <category name='" + i + "' showname='" + showMarker + "'/>");
                }
                returnXml.push("<\/categories>");
                returnXml.push("<dataset seriesName='Balance' color='afd8f8'>");
                for (var i = 1; i < snapshots.length; i++) {
					var snapshot = snapshots[i];
					if (snapshot != undefined) {
						var value = snapshots[i].getBeginningBalance().rounded();
						if (value < 0) {
							value = 0;
						}
						returnXml.push("  <set name='" + value + "' value='" + value + "' />");
					}
                }
                returnXml.push("<\/dataset>");
                returnXml.push("<dataset seriesName='Expenses' color='f6bd0f'>");
                for (var i = 1; i < snapshots.length; i++) {
					var snapshot = snapshots[i];
					if (snapshot != undefined) {
						var value = snapshot.getExpenses().rounded();
						if (value < 0) {
							value = 0;
						}
						returnXml.push("  <set name='" + value + "' value='" + value + "' />");
					}
                }
                returnXml.push("<\/dataset>");
                
                returnXml.push("<\/graph>");
                
                return returnXml.join("");
            }
            
            function generateExpensesByChildDataXml(){
				var colors = new Array();
				colors[0] = 'f6bd0f';
				colors[1] = 'afd8f8';
				colors[2] = '7f1aaf';
				colors[3] = '7b1fd2';
				colors[4] = '7fdc53';
				colors[5] = '7f1136';
				colors[6] = '2f1f5f';
                var returnXml = new Array();
                returnXml.push("<?xml version='1.0'?>\n");
                returnXml.push("<graph caption='' bgcolor='ffffff' xAxisName='' yAxisName='' showNames='1' showValues='1' decimalPrecision='0' formatNumberScale='0' numberPrefix='$' formatNumber='1' animation='0'>");
				var expenses = savings.getExpenses();
				for (var i=0; i<expenses.length; i++) {
					var amt = savings.expenses[i].calculateCosts(savings.getRateOfInflation());
					var color = colors[i];
					if (color == undefined) {
						color = '7f7fff';
					}
	                returnXml.push("  <set name='Child " + (i+1) + "' value='" + amt.getAmount() + "' color='" + color + "' />");
				}
                returnXml.push("<\/graph>");
                
                return returnXml.join("");
            }
            
            function recalcNeeded(currentSavings, rateOfReturn, monthlyContributions, rateOfInflation, expenses) {
              if (currentSavings != savings.getSavings().getAmount() ||
                  rateOfReturn != savings.getRateOfReturn().getAmount() ||
                  monthlyContributions != savings.getMonthlyContributions().getAmount() ||
                  rateOfInflation != savings.getRateOfInflation().getAmount())
                return true;

              var savingsExpenses = savings.getExpenses();
              if (savingsExpenses.length != expenses.length)
                return true;

              for (var i=0; i<expenses.length; i++) {
                if (Number(savingsExpenses[i].getCurrentAge()) != Number(expenses[i].getCurrentAge()) ||
                    Number(savingsExpenses[i].getCollegeAge()) != Number(expenses[i].getCollegeAge()) ||
                    Number(savingsExpenses[i].getTuition().getAmount()) != Number(expenses[i].getTuition().getAmount()) ||
                    Number(savingsExpenses[i].getBoard().getAmount()) != Number(expenses[i].getBoard().getAmount())) {
                  return true;
                }
              }

              return false;
            }

            function updateCalcs(){
                var currentSavings = parseFloat(document.getElementById("savings").value.replace(/\$/g, "").replace(/,/g, ""));
                var rateOfReturn = parseFloat(document.getElementById("rate_of_return").value.replace(/%/g, "")) / 100;
                var monthlyContributions = parseFloat(document.getElementById("monthly_contributions").value.replace(/\$/g, "").replace(/,/g, ""));
                var rateOfInflation = parseFloat(document.getElementById("inflation").value.replace(/%/g, "")) / 100;
				
                var expenses = new Array();
                for (var i=1; i<=4; i++) {
                  var age = document.getElementById("child_" + i + "_age").value;
                  var collegeAge = document.getElementById("child_" + i + "_college_age").value;
                  var tuition = parseFloat(document.getElementById("child_" + i + "_tuition").value.replace(/\$/g, "").replace(/,/g, ""));
                  var board = parseFloat(document.getElementById("child_" + i + "_board").value.replace(/\$/g, "").replace(/,/g, ""));

                  if (!isNaN(age) && (age > 0) && !isNaN(collegeAge) && (collegeAge > 0)) {
                    if ((!isNaN(tuition) && (tuition > 0.01)) || (!isNaN(board) && (board > 0.01))) {
                      expenses.push(new Calculators.planning.CollegeExpense(age, collegeAge, tuition, board));
                    }
                  }
                }

                if (recalcNeeded(currentSavings, rateOfReturn, monthlyContributions, rateOfInflation, expenses)) {
                  savings.clearExpenses();
                  savings = new Calculators.planning.CollegeSavings(currentSavings, monthlyContributions, rateOfReturn, rateOfInflation);

                  for (var i=0; i<expenses.length; i++) {
                    var expense = expenses[i];
                    savings.addExpense(expense.getCurrentAge(), expense.getCollegeAge(), expense.getTuition(), expense.getBoard());
                  }

                  savings.calculate();
                  calculate();
                }
            }
            
            function calculate(){
                document.getElementById("savings").value = savings.getSavings().formatted();
                document.getElementById("rate_of_return").value = savings.getRateOfReturn().formatted();
                document.getElementById("monthly_contributions").value = savings.getMonthlyContributions().formatted();
                document.getElementById("inflation").value = savings.getRateOfInflation().formatted();

                document.getElementById("savings_status").value = savings.getMonthlyContributionsRequired().formatted();
				        var expenses = savings.getExpenses();
                for (var i=1; i<=4; i++) {
                  var currentAge = "";
                  var collegeAge = "";
                  var tuition = "";
                  var board = "";
                  if ((i-1) < expenses.length) {
                    currentAge = expenses[i-1].getCurrentAge();
                    collegeAge = expenses[i-1].getCollegeAge();
                    tuition = expenses[i-1].getTuition().formatted();
                    board = expenses[i-1].getBoard().formatted();
                  }
                  document.getElementById("child_" + i + "_age").value = currentAge;
                  document.getElementById("child_" + i + "_college_age").value = collegeAge;
                  document.getElementById("child_" + i + "_tuition").value = tuition;
                  document.getElementById("child_" + i + "_board").value = board;
                }

                // Update the graph
                plotValues();
            }
            
            function displayReport(){
                var report = new Calculators.report.CollegeSavingsReport(savings);
                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();
            }


