/////////////////////////////////////////////////////////////////
// FileName : mortgagecalc.js
// Description : Mortgage Calculator code for a listing
/////////////////////////////////////////////////////////////////

String.prototype.isUSCurrency = function() {
	return /^\$?(\d{1,3},?(?:\d{3},?)*(?:\d{3})?(?:\.\d{0,3})?|(?:\d{1,3})(?:\.\d{0,3})?|(?:\.\d{1,3})?)$/.test(this); 
};
String.prototype.parseUSCurrency = function () {
	return this.isUSCurrency() ? parseFloat(this.replace(/\,|\$/g, '')) : Number.NaN;
};
Number.prototype.formatUSCurrency = function() {
	var n = this, c = 2, d = ".", t = ",", s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
	return '$' + s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}

// initialize the page level events
$(document).ready(function() {
	
	if ( ($('#listingDetails').length > 0) &&  ($('#mortgageCalc').length > 0) ) {
		
		var priceString = $('#priceValue').text();
		var taxString = $('#taxesValue').text();

		var tax = 0;		
		if (taxString) {
			tax = taxString.parseUSCurrency();
			if (isNaN(tax)) { tax = 0; }
		}
		
		if (priceString) {
			var price = priceString.parseUSCurrency();
			if (!isNaN(price)) {
				var down = price * .05;
				var insure = price * .0035;
		
				$('#mortgageCalcAskingPrice').val(price.formatUSCurrency());
				$('#mortgageCalcDownPayment').val(down.formatUSCurrency());
				$('#mortgageCalcTaxes').val(tax.formatUSCurrency());
				$('#mortgageCalcInsurance').val(insure.formatUSCurrency());
				
				calculateMortgage();
			}
		}
		
		$('#mortgageCalcUpdateButton').click(function () {
			calculateMortgage();
		});
	}
});

function calculateMortgage() {
	var price = $('#mortgageCalcAskingPrice').val().parseUSCurrency();
	var down = $('#mortgageCalcDownPayment').val().parseUSCurrency();
	var tax = $('#mortgageCalcTaxes').val().parseUSCurrency();
	var insure = $('#mortgageCalcInsurance').val().parseUSCurrency();
	
	if ( isNaN(price) ) { price = $('#priceValue').text().parseUSCurrency(); }
	if ( isNaN(tax) ) { tax = 0; }
	if ( isNaN(down) ) { down = 0; }
	if ( isNaN(insure) ) { insure = 0; }
	
	$('#mortgageCalcAskingPrice').val(price.formatUSCurrency());
	$('#mortgageCalcDownPayment').val(down.formatUSCurrency());
	$('#mortgageCalcTaxes').val(tax.formatUSCurrency());
	$('#mortgageCalcInsurance').val(insure.formatUSCurrency());
	
	var rate = $('#mortgageCalcInterestRate').val();
	var term = $('#mortgageCalcTerm').val();
	
	var extra = 0;
	
	var principle = price - down;
	var intRate = (rate/100) / 12;
  	var months = term * 12;
	
	var result = Math.floor((principle * intRate) / (1 - Math.pow(1 + intRate,( -1 * months))) * 100) / 100;
	
	extra = extra + insure;
	extra = extra + tax;

	extra = Math.floor(extra / 12);

	result = result + extra;

    $('#mortgageCalcResults').text(result.formatUSCurrency());
}


