$(document).ready(function() {
		
	String.prototype.count = function(arg) {
		var cnt = 0;
		for (var i = 0; i < this.length; i += 1)
			if (this[i] == arg) cnt += 1;
		return cnt;
	}

	$('.calculator').keypress(function(e) {
		var key = e.charCode ? e.charCode : e.keyCode;
		if (!(key>=48 && key<=57 || (key==46 || key==190) && !$(this).val().count('.') || key==8 || key==9)) {
			e.preventDefault();
		}
	});
	
	$('.calculator').focusout(function() {
		var input = parseFloat($(this).val());
		if (isNaN(input) || input<0.0) {
			$(this).val($(this).attr('alt'));
		}
		else if ($(this).attr('id') == 'repayment_term') {
			$(this).val(input.toFixed(0));
			$(this).attr('alt',input.toFixed(0));
		}
		else {
			$(this).val(input.toFixed(2));
			$(this).attr('alt',input.toFixed(2));
			
			var property_price = null;
			var deposit_amount = null;
			var deposit_percentage = null;
			var loan_amount = null;
			
			if ($(this).attr('id') == 'property_price') {
				if ($('#deposit_amount').val() && input < $('#deposit_amount').val()) $('#deposit_amount').val(input);
				property_price = input;
				if ($('#deposit_amount').val()) {
					deposit_amount = parseFloat($('#deposit_amount').val());
					deposit_percentage = (deposit_amount * 100) / property_price;
					loan_amount = input - deposit_amount;
				}
				else if ($('#loan_amount').val()) {
					loan_amount = parseFloat($('#loan_amount').val());
					deposit_amount = input - loan_amount;
					deposit_percentage = (deposit_amount * 100) / property_price;
				}
				else if ($('#deposit_percentage').val()) {
					deposit_percentage = parseFloat($('#deposit_percentage').val());
					deposit_amount = (property_price * deposit_percentage) / 100;
					loan_amount = property_price - deposit_amount;
				}
			}
			else if ($(this).attr('id') == 'deposit_amount') {
				if ($('#property_price').val() && input > $('#property_price').val()) $('#property_price').val(input);
				deposit_amount = input;
				if ($('#property_price').val()) {
					property_price = parseFloat($('#property_price').val());
					deposit_percentage = (deposit_amount * 100) / property_price;
					loan_amount = property_price - deposit_amount;
				}
				else if ($('#loan_amount').val()) {
					loan_amount = parseFloat($('#loan_amount').val());
					property_price = deposit_amount + loan_amount;
					deposit_percentage = (deposit_amount * 100) / property_price;
				}
				else if ($('#deposit_percentage').val()) {
					deposit_percentage = parseFloat($('#deposit_percentage').val());
					property_price = (deposit_amount * 100) / deposit_percentage;
					loan_amount = property_price - deposit_amount;
				}
			}
			else if ($(this).attr('id') == 'deposit_percentage') {
				if (input > 100) input = 100;
				deposit_percentage = input;
				if ($('#property_price').val()) {
					property_price = parseFloat($('#property_price').val());
					deposit_amount = (property_price * deposit_percentage) / 100;
					loan_amount = property_price - deposit_amount;
				}
				else if ($('#loan_amount').val()) {
					loan_amount = parseFloat($('#loan_amount').val());
					property_price = (loan_amount * 100) / (100 - deposit_percentage);
					deposit_amount = property_price - loan_amount;
				}
				else if ($('#deposit_amount').val()) {
					deposit_amount = parseFloat($('#deposit_amount').val());
					property_price = (deposit_amount * 100) / deposit_percentage;
					loan_amount = property_price - deposit_amount;
				}
			}
			else if ($(this).attr('id') == 'loan_amount') {
				if ($('#property_price').val() && input > $('#property_price').val()) $('#property_price').val(input);
				loan_amount = input;
				if ($('#property_price').val()) {
					property_price = parseFloat($('#property_price').val());
					deposit_amount = property_price - loan_amount;
					deposit_percentage = (deposit_amount * 100) / property_price;
				}
				else if ($('#deposit_amount').val()) {
					deposit_amount = parseFloat($('#deposit_amount').val());
					property_price = deposit_amount + loan_amount;
					deposit_percentage = (deposit_amount * 100) / property_price;
				}
				else if ($('#deposit_percentage').val()) {
					deposit_percentage = parseFloat($('#deposit_percentage').val());
					property_price = (loan_amount * 100) / (100 - deposit_percentage);
					deposit_amount = property_price - loan_amount;
				}
			}
			$('#property_price').val(property_price.toFixed(2));
			$('#property_price').attr('alt',property_price.toFixed(2));
			$('#deposit_amount').val(deposit_amount.toFixed(2));
			$('#deposit_amount').attr('alt',deposit_amount.toFixed(2));
			$('#deposit_percentage').val(deposit_percentage.toFixed(2));
			$('#deposit_percentage').attr('alt',deposit_percentage.toFixed(2));
			$('#loan_amount').val(loan_amount.toFixed(2));
			$('#loan_amount').attr('alt',loan_amount.toFixed(2));
		}
	});
	
	$('#calculate').click(function() {
		var property_price = parseFloat($('#property_price').val());
		var deposit_amount = parseFloat($('#deposit_amount').val());
		var deposit_percentage = parseFloat($('#deposit_percentage').val());
		var loan_amount = parseFloat($('#loan_amount').val());
		var repayment_term = parseInt($('#repayment_term').val(),10);
		var interest_rate = parseFloat($('#interest_rate').val());
		var mortgage_type = $('#mortgage_type').val();
		
		var error = '';
		if (isNaN(property_price) || property_price<1) error += '   -  Property price *\n';
		if (isNaN(deposit_amount) || deposit_amount<1) error += '   -  Deposit amount *\n';
		if (isNaN(deposit_percentage) || deposit_percentage<1) error += '   -  Deposit percentage *\n';
		if (isNaN(loan_amount) || loan_amount<1) error += '   -  Loan amount *\n';
		
		var errors = error.count('*');
		if (errors > 2) var end = '\n* '+(errors-2)+' of '+(errors)+' fields are required';
		else {var end = ' '; error = '';}
		
		if (isNaN(repayment_term) || repayment_term<1) error += '   -  Repayment term\n';
		if (isNaN(interest_rate) || interest_rate<1) error += '   -  Interest rate\n';
		
		if (!error) {
			var i = (interest_rate / 100) / 12;
			var n = 12 * repayment_term;
			var r = Math.pow(1+i,n);
			
			var repayment = ((i * r) / ( r - 1)) * loan_amount;
			var monthly_cost = (mortgage_type == 'Repayment') ? repayment : (((loan_amount * interest_rate/100) * repayment_term) / n);
			
			$('#monthly_cost').val(monthly_cost.toFixed(2));
		}
		else alert('Please enter the following details:\n\n'+error+end);
	});
	
});
