//------------------------------------------------------------------------------
//   $Id: mortgage.js,v 1.9 2004-02-11 11:41:25-05 soglesby Exp $
//   $Source: /bbsrc/web/docs/us/jscommon/calculators/mortgage.js,v $
//   $Revision: 1.9 $
//------------------------------------------------------------------------------

function Mortgage()
{
	//Set up default values 
	this.principal = 0; 	// Loan principal
	this.rate = 4;					// Interest rate expressed as %
	this.period = 25;				// Loan period in years
	this.points = 0;				// Points (if any)
	this.mnthlypayment = monthlyPayment(this.principal, 12, this.rate, this.period * 12);
	this.startdate = generateStartDate();
	this.prepayamt = 0;
	//this.prepayfreq = 'month';
	this.prepaystrt = generateStartDate();
	this.proceeds = this.principal;
	this.eff_rate = this.rate;
	this.amortize = false;
	this.width = "100%";
	
	this.set = MortgageValueSet;
	this.calculate = MortgageCalculate;
	this.showAmortization = MortgageShowAmortization;
	this.putMtgeInfo = MortgagePutMtgeInfo;
	this.compareTotals = MortgageCompareTotals;
	this.setWidth = MortgageSetWidth;
	//this.print = MtgeCalcPrintResult;
}

function MortgageSetWidth(w)
{
	this.width = w;
}

function generateStartDate()
{
	var d = new Date();
	var obj = new Object();
	obj.month = d.getMonth();
	obj.year = d.getYear();

	if (obj.year < 1000)
		obj.year += 1900;
		
	return obj;
}

function MortgageValueSet(obj)
{
	var fld = obj.name;
	var val = obj.value;

	//alert("val= "+ val+ "\nfld= "+fld);
	if (val == null)
		val = obj[obj.selectedIndex].value;

	if (typeof(val) == "string")
	{
		/* strip out any commas from the value */
		val = val.replace(/,/g, "");
	}
	
	if (fld == 'amortize')
	{
		this.amortize = obj.checked;
		return true;
	}
	else if (fld == 'prepayfreq')
	{
		this.prepayfreq = val;
		return true;
	}
	
	if (val == "")
		val = 0;

	if (isNaN(val) || val < 0)
	{
		alert('You must enter a positive numeric value in this field');
		obj.focus();
		return false;
	}
	
	if ((fld == 'rate' || fld == 'period') && val <= 0)
	{
		alert('Value must be greater than 0');
		obj.focus();
		return false;
	}
	if ((fld == 'rate') && val > 29)
	{
		alert('Interest Rate: Value must be less than 29');
		obj.focus();
		return false;
	}
	if ((fld == 'period') && val > 99)
	{
		alert('Loan Period: Value must be less than 99');
		obj.focus();
		return false;
	}
	if ((fld == 'points') && val > 12)
	{
		alert('Points: Value must be less than 12');
		obj.focus();
		return false;
	}
	switch (fld)
	{
	case 'principal':
	    if (val != 0)
		this.mnthlypayment = '';
	    else
		return true;
	    break;
	case 'mnthlypayment':
	    if (val != 0)
		this.principal = '';
	    else
		return true;
	    break;
	case 'start_month':
		this.startdate.month = val;
		return true;
	case 'start_year':
		this.startdate.year = val;
		return true;
	case 'ppm_month':
		this.prepaystrt.month = val;
		//alert("case-prepay-month= " + val);
		return;
	case 'ppm_year':
		this.prepaystrt.year = val;
		return;
	}
	
	this[fld] = val;
}

function MortgageCalculate()
{
	var points = Number(this.points); 	//convert/force to a integer;
	if (this.principal == ""){
	 	this.principal = calcAmortPrincipal(this.mnthlypayment, 12, this.rate, this.period * 12);
	}
	else{
	 	this.mnthlypayment = monthlyPayment(this.principal, 12, this.rate, this.period * 12);
	}
	this.proceeds = this.principal * (1 - (points / 100));
	

	this.eff_rate = calculateEffRate(this.mnthlypayment, this.proceeds, this.period);
}

function calculateEffRate(payment, amount, period){
//Calculate the effective rate, solution by Newton-Raphson Method

	var ee=0.01
	var X=0;
	var MAXGUESSES=100;
	var min_rate=.01;
	var max_rate=.2;
	var tmp1=0;
	var rate=0;
	var solution;
	
	for (var ii=0; ii<MAXGUESSES; ii++) {
		rate=min_rate + (max_rate - min_rate)/2;
		mon_rate=rate/12;
		tmp1=mon_rate*amount/(1-Math.pow(1+mon_rate,-1*period*12));
		X=payment - tmp1;
		if (X < 0){
			max_rate=rate;
		}else{
			min_rate=rate;
		}
		if (Math.abs(X) < ee) break;
	}
	solution = Math.round(rate*100000)/1000;
	return solution;
}


function MortgageShowAmortization(type)
{
    var principal = this.principal;
	var payment = Number(this.mnthlypayment);
	var interest = this.rate / 12 / 100;
	var periods = this.period * 12;
	var month = Number(this.startdate.month) + 1;
	var year = this.startdate.year;
	var beg_year = year;
	var end_year = year + this.period;
	var ppm_amount = Number(this.prepayamt);
	var ppm_month = this.prepaystrt.month;
	//alert("prepaystrt.month= " + ppm_month);
	var ppm_year = this.prepaystrt.year;
	//alert("prepaystrt.month= " + ppm_month + "\nprepaystrt.year=" + ppm_year);
	var ppm_freq = this.prepayfreq;
    var towardsPrincipal = new Object();
    var towardsInterest = new Object();
	var additionalPayment = new Array(periods);
	var paymentArray = new Object();
    var col_period = "";
    var col_payment = "";
    var col_interest = "";
    var col_principal = "";
    var year_payments = "";
	var body = "";
	var termpayments = 0;
	var terminterest = 0;
	var termprincipal = 0;
		
    var title = '<TR>'
			 +     '<TD COLSPAN="5" ALIGN="left" bgcolor="#FFCC33" class="infoboxtext">'
			 +        '<span class="style3white"><img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="25" align="absmiddle"/><B>Annualised Mortgage Payments</b></span>'
			 +     '</TD>'
			 +  '</TR>';
				 
	var header = '<TR bgcolor="#eeeeee">'
			 +	   '<TD ALIGN="left" class="infoboxtext">'
			 +        '<span class="style4"><img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="20" align="absmiddle"/>Period</span>'
			 +     '</TD>'
			 +     '<TD ALIGN="right" class="infoboxtext">'
			 +        '<span class="style4">Payments</span>'
			 +     '</TD>'
			 +	   '<TD ALIGN="right" class="infoboxtext">'
			 +        '<span class="style4">Interest</span>'
			 +     '</TD>'
			 +     '<TD ALIGN="right" class="infoboxtext">'
			 +        '<span class="style4">Principal<img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="20" align="absmiddle"/></span>'
			 +     '</TD><td CLASS="style4" bgcolor="#eeeeee">&nbsp;</td>'
			 +   '</TR>'; 

	// set up prepayments
	// if the prepayments start on, before or after the mortgage, return an alert to the user.
	if ((ppm_amount != "") || (ppm_amount != 0)){
	//alert("year="+ year + "\nmonth=" + this.startdate.month + "\nppm_month=" + ppm_month + "\nppm_year=" + ppm_year);
             if (ppm_year < year) {
               	alert("Please enter a Prepayment Start Date that is later than the Loan State Date.");
             	return "";
			 }
			 
			if ((ppm_year == year) && (Number(ppm_month) <= this.startdate.month)){
			 	alert("Please enter a Prepayment Start Date that is later than the Loan State Date.");
             	return "";
			 }
			var tmp = Number(year) + Number(this.period);
			if (ppm_year > tmp) {
				alert("Please enter a Prepayment Start Date that does not exceed the Loan Period.\n");
             	return "";
			}
    }
		

	var a = new Object();
	var b = new Object();
	var c = new Object();
	
	// calculate the number of months without prepayment
	if (month == 12) 
	{
		month = 0;
		year++; beg_year++;
	}

	var tempmonth = month;
	var tmpstart=0;
	
	for (j = 0; j < periods; j++) {
		if ((year == ppm_year) && (tempmonth == ppm_month)) {
			break;
		}
		a[j] = payment;
		c[j] = principal * interest;
		b[j] = a[j] - c[j];
		principal = principal - b[j];
		termpayments += Number(a[j]);
		terminterest += c[j];
		termprincipal += b[j];
		paymentArray[year] = a;
		towardsPrincipal[year] = b;
		towardsInterest[year] = c;
		
		if (++tempmonth > 11) {
			tempmonth = 0;
			a = new Object();
			b = new Object();
			c = new Object();
			year++;
		}
		//alert("temp-month-endloop=  "+tempmonth +"j=" +j);
		
	}
	//set tmpstart to the last position of j
	//the next loop will start at this position
	tmpstart=j;

	// finish with prepayment, if any 
	var last = false;
	var temp_prepay;
	var first;
	if (ppm_month == 11){
		first = true;
	}
	else{
		first = false;
	}
	for (j = tmpstart; j < periods && !(last); j++) {
	    if (principal > payment) {
			if (ppm_freq == "year") {
				if (first || ((j % 12) == ppm_month)){
					//alert("j=" + j + "ppm_month=" + ppm_month);
					temp_prepay = Number(ppm_amount);
					first=false;
				}
				else{
					temp_prepay = 0;
				}
			}
			else{
				temp_prepay = Number(ppm_amount);
			}
			a[j] = payment + temp_prepay;
			c[j] = principal * interest;
			b[j] = a[j] - c[j];
			
			principal = principal - b[j];
			if (principal < 0){
				payment = payment + principal;
				a[j] = a[j] + principal; 
				b[j] = b[j] + principal;
				last = true;
			}
	    } 
		else {
			c[j] = principal * interest;
			a[j] = principal + c[j];
			b[j] = a[j] - c[j];
			principal = 0;
			last = true;
	    }
		termpayments += Number(a[j]);
	    terminterest += c[j];
	    termprincipal += b[j];
	    paymentArray[year] = a;
	    towardsPrincipal[year] = b;
	    towardsInterest[year] = c;
	    if (++tempmonth > 11) {
		a = new Object();
		b = new Object();
		c = new Object();
		year++;
		tempmonth = 0;
	    } 
		
	}
		
		
	year = beg_year;
        var totalInterest = 0;
        var totalPrincipal = 0;
        var year_payments = 0;
		var monthcount = 0;
		var datarows = '';
		var points = Number(this.points);
		if (points){
			year_payments =  this.principal * (points / 100);
			totalInterest = this.principal * (points / 100);
			var had_pts = true;
		}
        for (i in paymentArray) {
		  for (j in paymentArray[i]) {
                totalInterest += Number(towardsInterest[i][j]);
                totalPrincipal += Number(towardsPrincipal[i][j]);
                year_payments += Number(paymentArray[i][j]);
				if (month < 12) month++;
				monthcount++;
           }
		    //alert("loop-month= " + month +"\nmonthcount= "+monthcount);
			if (type == "print"){
				datarows += '<TR bgcolor="#ffffff"><TD align="left" class="infoboxtext">&nbsp;&nbsp;'
				+ 12 + "/" + year + '</TD><TD ALIGN="right" class="infoboxtext">' 
				+ toCurrency(year_payments) 
				+ '</TD><TD ALIGN="right" CLASS="style5">' 
				+ toCurrency(totalInterest)  + '</TD><TD ALIGN="right" class="infoboxtext">' 
				+ toCurrency(totalPrincipal)
				+ '</TD><td class="infoboxtext"  bgcolor="#eeeeee">&nbsp;</td></TR>';
          
			}
			else{
				datarows += '<TR bgcolor="#eeeeee"><TD class="infoboxtext">'
		   		+ '<img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="20" align="absmiddle"/>' 
				+ 12 + "/" + year + '</TD><TD ALIGN="right" class="infoboxtext">' 
				+ toCurrency(year_payments) 
				+ '</TD><TD ALIGN="right" class="infoboxtext">' 
				+ toCurrency(totalInterest)  + '</TD><TD ALIGN="right" class="infoboxtext">' 
				+ toCurrency(totalPrincipal)
				+ '</TD><td class="infoboxtext" bgcolor="#eeeeee">&nbsp;</td></TR>';
          
			}
			
           	year_payments = 0;
           	totalInterest = 0;
           	totalPrincipal = 0;
           	month = 0;
           	year++;
		   	if (had_pts) {
				year_payments = 0;  //reset the payments
				totalInterest = 0;
				had_pts = false;	//reset flag
		  	}
        }

       
   var totals = '<TR bgcolor="#eeeeee"><TD COLSPAN="5"><HR></TD>'
			+ '</TR><TR bgcolor="#eeeeee"><TD class="infoboxtext">'
			+ '<img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="20" align="absmiddle"/>'
			+ ' Totals:</TD><TD ALIGN="right" class="infoboxtext">' + Math.round(termpayments) 
			+ '</TD><TD ALIGN="right" class="infoboxtext">' 
			+ Math.round(terminterest) + '</TD><TD ALIGN="right" class="infoboxtext">' 
			+ Math.round(termprincipal)
			+ '</TD><td class="infoboxtext" bgcolor="#eeeeee">&nbsp;</td></TR><TR bgcolor="#eeeeee"><TD COLSPAN="5">'
			+ '<img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="10" align="absmiddle"/>'
			+ '</TD></TR>';
	var prepaymt_results = this.compareTotals(termpayments, monthcount);
	if (type == 'print')
	{
		var table = '<TABLE align="left" cellpadding="3" cellspacing="0" BORDER="0" class="infoboxtext" width="100%">' 
			+ title + prepaymt_results + header + datarows + totals + '</TABLE>';
	}else{
		var table = '<TABLE align="right" cellpadding="0" cellspacing="0" BORDER="0" class="infoboxtext" width="370" valign="top">' 
			+ title + prepaymt_results + header + datarows + totals + '</TABLE>';
	}
	return (table);

}

function MortgageCompareTotals(reported, mcount) {
	var principal = this.principal;
    var payment = Number(this.mnthlypayment);
    var interest = this.rate / 12 / 100;
  	var periods = this.period * 12;
	var diffamount = 0;
	var diffterm = 0;
	var results;

	diffamount = (payment * periods) - reported;
	//alert( "mcount= " + mcount + "\n" + "payment= " + payment + "\n" + "periods= " + periods + "\n" + "reported= " + reported + "\n" + "diffamount= " + diffamount + "\n");
	if (diffamount > 1) {
		diffterm = periods - mcount;
		results = '<TR bgcolor="#eeeeee">'
				+ '<TD COLSPAN="4" ALIGN="left" class="infoboxtext">'
				+ '<br><img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" align="absmiddle"/>'
				+ 'Prepayments in the amount of ' + toCurrency(this.prepayamt) 
				+ ' will result in a reduction of total<br><img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" align="absmiddle"/>'
				+ 'interest by <FONT COLOR="red">$' + toCurrency(diffamount) 
				+ '</FONT>. The term of the loan will be reduced by ' 
				+ Math.floor(diffterm / 12) + ' years<br><img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" align="absmiddle"/>and ' 
				+ (diffterm % 12) + ' months. <br><br></TD></TR>';
		return (results);
	} 
	else {
		return ('');
	}
} 

function PopulateForm(frm)
{
		// populate form with values contained/calculated by mtgecalc object 
		frm.principal.value = toCurrency(mtgecalc.principal);
		frm.rate.value = mtgecalc.rate;
		frm.mnthlypayment.value = toCurrency(mtgecalc.mnthlypayment);
		frm.period.value = mtgecalc.period;
		frm.points.value = mtgecalc.points;
		frm.start_month.selectedIndex = Number(mtgecalc.startdate.month);
		//BuildMonthDropDown(frm.start_month, mtgecalc.startdate.month);
		frm.start_year.value = mtgecalc.startdate.year;
		
		//initialize prepayment info
		//BuildPrepayDropDown(frm.prepayfreq, mtgecalc.prepayfreq);
		if (mtgecalc.prepayfreq == 'year') frm.prepayfreq.selectedIndex = 1;
		//BuildMonthDropDown(frm.ppm_month, mtgecalc.prepaystrt.month);
		frm.ppm_month.selectedIndex = Number(mtgecalc.prepaystrt.month);
		//alert("start-ppm-month=  "+frm.ppm_month.value);
		frm.prepayamt.value = mtgecalc.prepayamt;
		frm.ppm_year.value = mtgecalc.prepaystrt.year;
}
	
function MortgagePutMtgeInfo(type)
{
	var results_table = "";
		
	if (type == 'mtgform')
	{
		results_table = '<FORM>'
			+ '<TR>'
			+	'<TD ALIGN="center" COLSPAN="2" BGCOLOR="CCCC99">'
			+	  '<INPUT TYPE="button" VALUE="Recalculate" onClick="ShowForm()">'
			+	  '<INPUT TYPE="button" VALUE="PrintResults" onClick="PrintResult()">'
			+	'</TD>'
			+ '</TR>'
			+ '</FORM>';
	}
	else if (type == 'print')
	{
		results_table = '<TABLE BORDER="0" CELLSPACING="1" CELLPADDING="3" bgcolor="#ffcc33" width="100%" valign="top" class="infoboxbold">'
						+ '<TR><TD ALIGN="left" COLSPAN="4" bgcolor="#ffcc33" height="24">'
						+ '<span class="infoboxtext"CALCULATOR RESULTS</span>'
						+ '</TD></TR><TR bgcolor="#ffffff">'
						+ '<TD ALIGN="left" VALIGN="top" CLASS="style5" height="45" nowrap>'
						+ '<b>Proceeds:</b><br>'
						+ '€ ' + toCurrency(this.proceeds) + '<br><br></TD>'
						+ '<TD ALIGN="left" VALIGN="top" CLASS="style5" height="45" nowrap>'
						+ '<b>Monthly Payment:</b><br>'
						+ '€ ' + Math.round(this.mnthlypayment) + '<br><br></TD>'
						+ '<TD ALIGN="left" VALIGN="top" CLASS="style5" height="45" nowrap>'
						+ '<b>Effective Rate:</b><br>'
						+  this.eff_rate  + '%<br><br>'
						+ '</TD></TR></TABLE>';
	} 
	else{
		results_table =	'<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" width="175">'
			+ '<TR>'
			+	'<TD ALIGN="left" COLSPAN="2" bgcolor="#ffcc33">'
			+	  '<span class="infoboxtext"><img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="25"/><B>CALCULATOR RESULTS</B></span>'
			+	'</TD>'
			+ '</TR>'
			+ '<TR bgcolor="#eeeeee">'
			+ 	'<TD ALIGN="left" VALIGN="top" class="infoboxtext"><img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="20" align="absmiddle"/>'
			+	  '<b>Proceeds :</b>'
			+	'<br><img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="25" align="absmiddle"/>€ '
			+	  toCurrency(this.proceeds)
			+	'<img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="20" align="absmiddle"/></TD>'
			+ '</TR>'
			+ '<TR bgcolor="#eeeeee">'
			+	'<TD ALIGN="left" VALIGN="top" class="infoboxtext"><img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="20" align="absmiddle"/>'
			+	  '<b>Monthly Payment :</b>'
			+	'<br><img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="25" align="absmiddle"/>€ '
			+	  toCurrency(this.mnthlypayment)
			+       '<img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="20" align="absmiddle"/></TD>'
			+ '</TR>'
			+ '<TR bgcolor="#eeeeee">'
			+   	'<TD ALIGN="left" VALIGN="top" class="infoboxtext"><img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="20" align="absmiddle"/>'
			+	  '<b>Effective Rate :</b>'
			+	'<br><img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="25" align="absmiddle"/>'
			+	  this.eff_rate  + '%'
			+	'<img border="0" src="http://images.bloomberg.com/mix/1x1.gif" width="10" height="20" align="absmiddle"/></TD>'
			+ '</TR>'
		    +'</TABLE>'
	}
	
	return (results_table);
}

function ShowResult()
{
PopulateForm(document.mortgage);
var body1 = mtgecalc.putMtgeInfo();
var body2 = mtgecalc.showAmortization();
if ((body1 != "") && (body2 != "")){
var tail = '<br><br>';
var all_results = '<table width="100%" border="0"><tr><td valign="top">' 
				+ body1 + '</td><td valign="top">' + body2 + '</td></tr></table>';

	if ((navigator.appName.indexOf("Netscape") != -1)&& (parseInt(navigator.appVersion) == 4)) {
			var reslayer = document.layers['mtgeres2'].document;
			reslayer.open();
			reslayer.write(all_results);
			reslayer.close();
     } 
	 else if ((navigator.appName.indexOf("Microsoft") != -1) || 
	 		  (parseInt(navigator.appVersion) >= 5)){
			document.getElementById("mtgeres").innerHTML = all_results;
    } 
	else {
		alert("This calculator can only be used in Netscape Navigator or Microsoft Internet Explorer, version 4 or greater");
	}
}
else{
	return false;
}
}

function PrintResults()
{
	PopulateForm(document.mortgage);
	var winheight = 400;
	var table1 = "";
	var table2 = "";
	var newwin = window.open('', 'printable', 'height=' + winheight + ',width=610'  + ',toolbar,scrollbars,resizable');
	var AD_RND_X = new Number(Math.floor(9999999999 * Math.random())+1);
	var head = '<html><head><title>Sunseeker Homes - Printer Friendly Page</title>'
				+ '<META http-equiv="Content-Type" content="text/html; charset=UTF-8">'
		+ '<LINK REL="stylesheet" TYPE="text/css" HREF="http://www.sunseekerhomes.com/stylesheet.css">'
				+ '</head>';
	var body = '<body marginwidth="0" marginheight="0" leftmargin="0" topmargin="0" rightmargin="0" alink="#ff0000" vlink="#6600CC" link="#000066" text="#000000" bgcolor="#ffffff">';
	var logo = 	'<table cellpadding="0" cellspacing="0" border="0" width="610" class="infoboxbold">'
				+ '<tr><td align="left" height="47" width="610" background="http://www.simplyspanishmortgages.com/graphics/popupfill.gif">'
				+ '<img src="http://www.simplyspanishmortgages.com/graphics/popuplogo.gif">'
				+ '</td></tr></table>';
	
	var start_main = '<table cellpadding="0" cellspacing="0" border="0" width="610">'
				+ '<tr><td rowspan="4" width="15">'
				+ '<img width="15" src="http://images.bloomberg.com/elements/1x1_transparent_spacer.gif">'
				+ '</td><td align="left" height="35" width="570">'
				+ '<a href="javascript:window.print();"><img border="0" height="9" width="24" alt="Print" src="http://images.bloomberg.com/mix/arrow_printer_icon.gif"></a>'
				+ '<a href="javascript:window.print();" class="infoboxbold">Print</a>'
				+ '</td><td rowspan="4" width="25">'
				+ '<img width="15" src="http://images.bloomberg.com/elements/1x1_transparent_spacer.gif">'
				+ '</td></tr><tr><td><!-- begin, page content -->';	
	table1 = mtgecalc.putMtgeInfo("print");
	table2 = mtgecalc.showAmortization("print");	
	var print_link = '<a href="javascript:window.print()"><img border="0" height="9" width="24" alt="Print" src="http://images.bloomberg.com/mix/arrow_printer_icon.gif"></a>'
					+ '&nbsp; <a href="javascript:window.print()" class="infoboxbold">Print</a>';	
	var end_main = '<!-- end, page content   -->'
					+ '<span class="infoboxtext">&copy;2004 Simply Spanish Mortgages. All rights reserved.</span>'
					+ '</td></tr></table>';
	var ad = '<span class="infoboxtext">Mortgage Calculator Results. Printable Version.</span>';
	
	var tail = '</body></html>';
	
	newwin.document.write(head);
	newwin.document.write(body);
	newwin.document.write(logo);
	newwin.document.write(start_main);
	newwin.document.write('<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="2" width="595"><tr><td>\n');
	newwin.document.write(ad);
	newwin.document.write('</td></tr><tr><td align="left" valign="top" width="595">\n');
	newwin.document.write(table1);
	newwin.document.write('</td></tr><tr><td align="left" valign="top" width="595">\n');
	newwin.document.write(table2);
	newwin.document.write('</td></tr><tr><td align="left" height="35" width="595">\n');
	newwin.document.write(print_link);
	newwin.document.write('</td></tr></table>\n');
	newwin.document.write(end_main);
	newwin.document.write(tail);
	newwin.document.close();
	newwin.focus();

}








