//*******************************************
//DO NOT REMOVE THIS COPYWRITE INFO!
//Mortgage Tax-Savings Calculator
//2004 Daniel C. Peterson ALL RIGHTS RESERVED
//Created: 10/07/2004
//Last Modified: 10/07/2004
//This script may not be copied, edited, distributed or reproduced
//without express written permission from
//Daniel C. Peterson of Web Winder Website Services
//For commercial use rates, contact:
//Dan Peterson:
//Web Winder Website Services
//P.O. Box 11
//Bemidji, MN  56619
//dan@webwinder.com
//http://www.webwinder.com
//Commercial User Licence #:5782-1237-133-1198
//Commercial Licence Date:2008-09-11
//*******************************************



function stripNum(num) {

   num=num.toString();


   var len = num.length;
   var rnum = "";
   var test = "";
   var j = 0;

   var b = num.substring(0,1);
   if(b == "-") {
      rnum = "-";
   }

   for(i = 0; i <= len; i++) {

      b = num.substring(i,i+1);

      if(b == "0" || b == "1" || b == "2" || b == "3" || b == "4" || b == "5" || b == "6" || b == "7" || b == "8" || b == "9" || b == ".") {
         rnum = rnum + "" + b;

      }

   }

   if(rnum == "" || rnum == "-") {
      rnum = 0;
   }

   rnum = Number(rnum);

   return rnum;

}



function computeMonthlyPayment(prin, numPmts, intRate) {

var pmtAmt = 0;

if(intRate == 0) {
   pmtAmt = prin / numPmts;
} else {
   
   if (intRate >= 1.0) {
     intRate = intRate / 100.0;
   }
   intRate /= 12;

   var pow = 1;
   for (var j = 0; j < numPmts; j++)
      pow = pow * (1 + intRate);

   pmtAmt = (prin * pow * intRate) / (pow - 1);

}

return pmtAmt;

}




function formatNumberDec(num, places, comma) {

var isNeg=0;

    if(num < 0) {
       num=num*-1;
       isNeg=1;
    }

    var myDecFact = 1;
    var myPlaces = 0;
    var myZeros = "";
    while(myPlaces < places) {
       myDecFact = myDecFact * 10;
       myPlaces = eval(myPlaces) + eval(1);
       myZeros = myZeros + "0";
    }
    
	onum=Math.round(num*myDecFact)/myDecFact;
		
	integer=Math.floor(onum);

	if (Math.ceil(onum) == integer) {
		decimal=myZeros;
	} else{
		decimal=Math.round((onum-integer)* myDecFact)
	}
	decimal=decimal.toString();
	if (decimal.length<places) {
        fillZeroes = places - decimal.length;
	   for (z=0;z<fillZeroes;z++) {
        decimal="0"+decimal;
        }
     }

   if(places > 0) {
      decimal = "." + decimal;
   }

   if(comma == 1) {
	integer=integer.toString();
	var tmpnum="";
	var tmpinteger="";
	var y=0;

	for (x=integer.length;x>0;x--) {
		tmpnum=tmpnum+integer.charAt(x-1);
		y=y+1;
		if (y==3 & x>1) {
			tmpnum=tmpnum+",";
			y=0;
		}
	}

	for (x=tmpnum.length;x>0;x--) {
		tmpinteger=tmpinteger+tmpnum.charAt(x-1);
	}


	finNum=tmpinteger+""+decimal;
   } else {
      finNum=integer+""+decimal;
   }

    if(isNeg == 1) {
       finNum = "-" + finNum;
    }

	return finNum;
}


function computeForm(form) {

if(document.taxSaveForm.prop_value.value == 0 || document.taxSaveForm.prop_value.value == "") {

   alert("Please enter the value of the property (purchase price).");

   document.taxSaveForm.prop_value.focus();

} else

if(document.taxSaveForm.principal.value == 0 || document.taxSaveForm.principal.value == "") {

   alert("Please enter the mortgage's principal amount.");

   document.taxSaveForm.principal.focus();

} else

if(document.taxSaveForm.rate.value == 0 || document.taxSaveForm.rate.value == "") {

   alert("Please enter the mortgage's annual interest rate.");

   document.taxSaveForm.rate.focus();

} else

if(document.taxSaveForm.term.value == 0 || document.taxSaveForm.term.value == "") {

   alert("Please enter the mortgage's term in number of years.");

   document.taxSaveForm.term.focus();

} else

if(document.taxSaveForm.tax_rate.value == 0 || document.taxSaveForm.tax_rate.value == "") {

   alert("Please enter the your state and federal tax rate.");

   document.taxSaveForm.tax_rate.focus();

} else

if(document.taxSaveForm.save_years.value == 0 || document.taxSaveForm.save_years.value == "") {

   alert("Please enter the number of years you wish to calculate the tax savings for (must be less than or equal to the loan term).");

   document.taxSaveForm.save_years.focus();

} else {

var Vprop_value = stripNum(document.taxSaveForm.prop_value.value);
var Vprincipal = stripNum(document.taxSaveForm.principal.value);
var Vrate = stripNum(document.taxSaveForm.rate.value);
var Vterm = stripNum(document.taxSaveForm.term.value);
var Vpoints = stripNum(document.taxSaveForm.points.value);
var Vclose_costs = stripNum(document.taxSaveForm.close_costs.value);
var Vprop_tax_rate = stripNum(document.taxSaveForm.prop_tax_rate.value);
var Vtax_rate = stripNum(document.taxSaveForm.tax_rate.value);
var Vsave_years = stripNum(document.taxSaveForm.save_years.value);

var months = Vterm * 12;

var Vmonthly_pmt = computeMonthlyPayment(Vprincipal, months, Vrate);
document.taxSaveForm.monthly_pmt.value = "$" + formatNumberDec(Vmonthly_pmt,2,1);

var prop_tax_perc = 0;
if(Vprop_tax_rate >= 1) {
   prop_tax_perc = Vprop_tax_rate / 100;
}
var Vann_prop_tax = Vprop_value * prop_tax_perc;
document.taxSaveForm.ann_prop_tax.value = "$" + formatNumberDec(Vann_prop_tax,2,1);

var prin = Vprincipal;
var i = Vrate;
if(i >= 1) {
   i /=100;
}
i /= 12;
var int_port = 0;
var accum_int = 0;
var prin_port = 0;
var save_months = 0;
if(Vsave_years > Vterm) {
   save_months = months;
   } else {
   save_months = Vsave_years * 12;
}
var cnt = 0;

while(cnt < save_months) {

   cnt += 1;

   int_port = prin * i;
   accum_int += int_port;
   prin_port = eval(Vmonthly_pmt) - eval(int_port);
   prin = eval(prin) - eval(prin_port);

}

var points_perc = Vpoints;
if(points_perc >= 1) {
   points_perc /= 100;
}
var points_amt = points_perc * Vprincipal;

var tax_perc = Vtax_rate;
if(tax_perc >= 1) {
   tax_perc /= 100;
}

var total_deduct = eval(accum_int) + eval(points_amt) + eval(Vsave_years * Vann_prop_tax);
var Vtax_savings = total_deduct * tax_perc;
document.taxSaveForm.tax_savings.value = "$" + formatNumberDec(Vtax_savings,2,1);


   }

}

function clearResults(form) {

document.taxSaveForm.monthly_pmt.value = "";
document.taxSaveForm.ann_prop_tax.value = "";
document.taxSaveForm.tax_savings.value = "";


}

function saveReport(form) {

if(document.taxSaveForm.monthly_pmt.value.length == 0 || document.taxSaveForm.ann_prop_tax.value.length == 0 || document.taxSaveForm.tax_savings.value.length == 0) {
   alert("Please calculate the top portion of the calculator before attempting to create the Annual Savings Report.");
} else {

var Vmonthly_pmt = stripNum(document.taxSaveForm.monthly_pmt.value);
var Vann_prop_tax = stripNum(document.taxSaveForm.ann_prop_tax.value);

var Vprop_value = stripNum(document.taxSaveForm.prop_value.value);
var Vprincipal = stripNum(document.taxSaveForm.principal.value);
var Vrate = stripNum(document.taxSaveForm.rate.value);
var Vterm = stripNum(document.taxSaveForm.term.value);
var Vpoints = stripNum(document.taxSaveForm.points.value);
var Vclose_costs = stripNum(document.taxSaveForm.close_costs.value);
var Vprop_tax_rate = stripNum(document.taxSaveForm.prop_tax_rate.value);
var Vtax_rate = stripNum(document.taxSaveForm.tax_rate.value);
var Vsave_years = stripNum(document.taxSaveForm.save_years.value);

var points_perc = Vpoints;
if(points_perc >= 1) {
   points_perc /= 100;
}
var points_amt = points_perc * Vprincipal;

var tax_perc = Vtax_rate;
if(tax_perc >= 1) {
   tax_perc /= 100;
}

var months = Vterm * 12;

var prin = Vprincipal;
var i = Vrate;
if(i >= 1) {
   i /=100;
}
i /= 12;
var int_port = 0;
var accum_int = 0;
var accum_ann_int = 0;
var prin_port = 0;
var save_months = 0;
if(Vsave_years > Vterm) {
   save_months = months;
   } else {
   save_months = Vsave_years * 12;
}
var cnt = 0;
var yr_cnt = 0;
var accum_pmts = 0;
var ann_pmts = Vmonthly_pmt * 12 + Vann_prop_tax;

var report_rows = "";

var ann_tax_deduct = 0;
var accum_tax_deduct = 0;
var ann_tax_save = 0;
var accum_tax_save = 0;

while(cnt < save_months) {

   cnt += 1;

   int_port = prin * i;
   accum_int += int_port;
   accum_ann_int += int_port;
   prin_port = eval(Vmonthly_pmt) - eval(int_port);
   prin = eval(prin) - eval(prin_port);



   if(cnt % 12 == 0) {
      yr_cnt += 1;

      accum_pmts += ann_pmts;

      report_rows += "<tr><td align='right'><font face='arial'><small>" + yr_cnt + "</td>";
      report_rows += "<td align='right'><font face='arial'><small>$" + formatNumberDec(ann_pmts,2,1) + "</td>";
      report_rows += "<td align='right'><font face='arial'><small>$" + formatNumberDec(accum_ann_int,2,1) + "</td>";

     ann_tax_deduct = eval(accum_ann_int) + eval(Vann_prop_tax);
     if(yr_cnt == 1) {
        ann_tax_deduct += points_amt;
     }
     ann_tax_save = ann_tax_deduct * tax_perc;
     accum_tax_save += ann_tax_save;

      report_rows += "<td align='right'><font face='arial'><small>$" + formatNumberDec(ann_tax_save,2,1) + "</td></tr>";

     accum_ann_int = 0;
     ann_tax_save = 0;

   }



}



var part1 = ("<head><title>Annual Tax Savings Report</title></head>" + "<body bgcolor= '#FFFFFF'><br><br><center><font face='arial'><big><strong>Annual Tax Savings Report</strong></big></font></center>");



var part2 = ("<center><table border=1 cellpadding=2 cellspacing=0><tr bgcolor='silver'><td align='center'><font face='arial'><small><b>Year</b></small></font></td><td align='center'><font face='arial'><small><b>Mortgage &<br>Property Tax<br>Payment</b></small></font></td><td align='center'><font face='arial'><small><b>Interest<br>Paid</b></small></font></td><td align='center'><font face='arial'><small><b>Tax<br>Savings</b></small></font></td></td></tr>");



var part3 = ("" + report_rows + "");



var part4 = ("<tr><td align='right'><font face='arial'><small><b>Total:</b></small></font></td><td align=right><font face='arial'><small><b>$" + formatNumberDec(accum_pmts,2,1) + "</b></small></font></td><td align=right><font face='arial'><small><b>$" + formatNumberDec(accum_int,2,1) + "</b></small></font></td><td align=right><font face='arial'><small><b>$" + formatNumberDec(accum_tax_save,2,1) + "</b></small></font></td></tr></table><br><center><form method='post'><input type='button' value='Close Window' onClick='window.close()'></form></center></body></html>");



var schedule = (part1 + "" + part2 + "" + part3 + part4 + "");



  reportWin = window.open("","","width=500,height=400,toolbar=yes,menubar=yes,scrollbars=yes");

  reportWin.document.write(schedule);

  reportWin.document.close();



}

}
