//begin_lib
//  RRSP Savings Calcualtors
//  Copyright (C) 2002-2009 by Walter Harder ALL RIGHTS RESERVED
//  e-mail walter@harder.net

<!-- CalcIt function to calculate worksheet -->
function CalcIt() {
var form = document.rrsp;

//var ProvNo = form.Province.value - 0;
var ProvNo=form.Province.selectedIndex;
var Year = form.TaxYear.value;
var TaxableIncome = strip(form.TaxableIncome.value);

var aTaxes = calctax(ProvNo,Year,TaxableIncome);
var RRSPContribution = strip(form.Contribution.value);
var RRSPTaxableIncome = TaxableIncome - RRSPContribution;

if ((RRSPContribution > 0) && (RRSPTaxableIncome < FedBasic)){
  var contribution = TaxableIncome - FedBasic;
  if (contribution > 0)
  alert("You have made an RRSP contribution that exceeds the amount required to "+
		"reduce your taxes to zero.  \nYou need only contribute " + formatdollar(contribution) +
		" for this taxation year.")		
  else
  alert("You have made an RRSP contribution that exceeds the amount required to "+
		"reduce your taxes to zero.  \nNo RRSP contribution is required.");
  }
var fedtax = aTaxes[0];
var provtax = aTaxes[1];

var aTaxesRRSP = calctax(ProvNo,Year,RRSPTaxableIncome);

var fedrrsptax = aTaxesRRSP[0];
var provrrsptax = aTaxesRRSP[1];

var fedsaving = fedtax - fedrrsptax;
var provsaving = provtax - provrrsptax;
var totalsaving = fedsaving - - provsaving;

form.FedNoRRSP.value = formatdollar(fedtax);
form.ProvNoRRSP.value = formatdollar(provtax);
form.TotNoRRSP.value = formatdollar(strip(form.FedNoRRSP.value) - - strip(form.ProvNoRRSP.value));

form.FedWithRRSP.value = formatdollar(fedrrsptax);
form.ProvWithRRSP.value = formatdollar(provrrsptax);
form.TotWithRRSP.value = formatdollar(strip(form.FedWithRRSP.value) - - strip(form.ProvWithRRSP.value));

form.FedSavings.value = formatdollar(strip(form.FedNoRRSP.value) - strip(form.FedWithRRSP.value));
form.ProvSavings.value = formatdollar(strip(form.ProvNoRRSP.value) - strip(form.ProvWithRRSP.value));
form.TotSavings.value = formatdollar(strip(form.TotNoRRSP.value) - strip(form.TotWithRRSP.value));

form.FedROI.value = formatpct(strip(form.FedSavings.value) / RRSPContribution * 100,1);
form.ProvROI.value = formatpct(strip(form.ProvSavings.value) / RRSPContribution * 100,1);
form.TotROI.value = formatpct(strip(form.TotSavings.value) / RRSPContribution * 100,1);

if (strip(form.Period.value) == 0) {form.Period.value = 1};
if (form.Principal.className == "OR") {form.Principal.value = form.Contribution.value;};
form.Period2.value = "at the end of " + form.Period.value + " years assuming monthly compounding";
form.Payment.value = formatdollar(strip(form.Rate.value)/1200*strip(form.Principal.value)/(1-Math.pow(1+strip(form.Rate.value)/1200,(0-strip(form.Period.value)*12))));
if (form.Refund.className == "OR") {form.Refund.value = form.TotSavings.value};

var pmt = strip(form.Payment.value);
var Tint = 0;
var interest, i;
var bal = strip(form.Principal.value);
var rate = form.Rate.value;
var paydownmonth = form.Period3.value;
var months = form.Period.value * 12;
if (months > 0) {
	for (i = 1; i<months; i++){
		if (bal < 0) {bal = 0};
	    interest = bal * rate/1200;
	    Tint = Tint - - interest;
	    if (i == paydownmonth) {bal = bal - strip(form.Refund.value)};
		bal = bal - - interest - pmt;
	}
}
form.Cost.value = formatdollar(Tint);
form.RRSPValue.value = formatdollar(strip(form.Contribution.value) * Math.pow(1+strip(form.RRSPRate.value)/1200,strip(form.Period.value)*12));
}

//end_lib