//
// Mortgage calculator
//

// This requires the setCookie()/getCookie() functions.


//
// Format Currency
//


//
// Classic Cookie functions
//

function getCookie(name){
 var cname = name + "=";
 var dc = document.cookie;
 if (dc.length > 0) {
 begin = dc.indexOf(cname);
 if (begin != -1) {
 begin += cname.length;
 end = dc.indexOf(";", begin);
 if (end == -1) end = dc.length;
 return unescape(dc.substring(begin, end));
 }
 }
 return null;
}

function setCookie(name, value, expires, path, domain, secure) {
 document.cookie = name + "=" + escape(value) +
 ((expires == null) ? "" : "; expires=" + expires.toGMTString()) +
 ((path == null) ? "" : "; path=" + path) +
 ((domain == null) ? "" : "; domain=" + domain) +
 ((secure == null) ? "" : "; secure");
 return true;
}

function expireDays(days) {
 var expiration = new Date();
 expiration.setTime(expiration.getTime() + 1000*60*60*24*days);
 return expiration;
}


<!-- Original from http://www7.ewebcity.com/cyanide7 -->
formatCurrency.symbol='$';
formatCurrency.separator = ',';
formatCurrency.suffix='';
function formatCurrency(num) {
	num = num.toString().replace(/[^\d.e+-]/g,'');
	if(isNaN(num)) num = "0";
	cents = Math.floor((num*100+0.5)%100);
	num = Math.floor(num).toString();
	if(cents < 10) cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) {
		num = num.substring(0,num.length-(4*i+3)) +
			formatCurrency.separator +
			num.substring(num.length-(4*i+3));
	}
	num = num.replace(/-,/,'-');	// special case for negative numbers
	return (formatCurrency.symbol + num + '.' + cents);
}
function formatDollars(num) {
	num = num.toString().replace(/[^\d.e+-]/g,'');
	if(isNaN(num)) num = "0";
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) {
		num = num.substring(0,num.length-(4*i+3)) +
			formatCurrency.separator +
			num.substring(num.length-(4*i+3));
	}
	num = num.replace(/-,/,'-');	// special case for negative numbers
	return (formatCurrency.symbol + num);
}

function formatPercent(num) {
	num = num.toString().replace(/[^\d.e+-]/g,'');
	if(isNaN(num)) num = "0";
	return (num + '%');
}

function parseNum(s) {

	// Always return a parsed integer. No NaN!

	if (s) return parseInt("0"+s,10);
	return 0;
}

function stripFormat(val) {
	return val.replace(/[^\d.-]/g,'');
}

//
// Mortgage Calculator class
//

function MortgageCalculator(f) {
	if (typeof f == 'string') this.form = document.forms[f];
	else			  this.form = f;
}
MortgageCalculator.prototype.calculate = function() {
	var f = this.form;

	// Read form values.
	var purchase_price = parseFloat(stripFormat(f.purchase_price.value));
	var down_payment = parseFloat(stripFormat(f.down_payment.value));
	var interest_rate = parseFloat(stripFormat(f.interest_rate.value));
	var n_years = parseFloat(stripFormat(f.n_years.value));

	// Calculate the following:
	var principal = purchase_price - down_payment;
	var n_payments = Math.ceil(n_years * 12);
	var monthly_interest_rate = (interest_rate/100)/12;
	var monthly_payment = Math.round((principal*monthly_interest_rate)/(1-Math.pow((1+monthly_interest_rate),(-1*n_payments)))*100)/100;
	if (isNaN(monthly_payment)) monthly_payment = 0;
	if (monthly_payment < 0) monthly_payment = 0;
	if (monthly_payment == 0) n_payments = 0;

	// Redisplay values.
	f.purchase_price.value = formatDollars(purchase_price);
	f.down_payment.value = formatDollars(down_payment);
	f.interest_rate.value = formatPercent(interest_rate);
	f.n_years.value = n_years;
	f.principal.value = formatDollars(principal);
	f.n_payments.value = n_payments;
	f.monthly_payment.value = formatCurrency(monthly_payment);

	// Save user entries for next time.
	this.save_values();
}
MortgageCalculator.prototype.save_values = function() {
	var f = this.form;
	var s = stripFormat(f.down_payment.value) + ',' + stripFormat(f.interest_rate.value) + ',' + stripFormat(f.n_years.value);
	setCookie('mc',s);
}
MortgageCalculator.prototype.get_saved_values = function() {
	var cookie = getCookie('mc');
	var arr = cookie ? cookie.split(',') : Array();
	return arr;
}
MortgageCalculator.prototype.load_fields = function(asking_price) {
	var f = this.form;

	var arr = this.get_saved_values();
	// temp fix
	var arr = 0;
	if (arr[0] && arr[0].length > 0) f.down_payment.value = formatDollars(arr[0]);
	else if (asking_price)		 f.down_payment.value = formatDollars(asking_price * 0.1);
	if (arr[1] && arr[1].length > 0) f.interest_rate.value = formatPercent(arr[1]);
	if (arr[2] && arr[2].length > 0) f.n_years.value = arr[2];

	if (asking_price) {
		this.form['purchase_price'].value = formatDollars(asking_price);
	}

	this.calculate();
}

