function calculateMortgage() {
	$(document).ready(function() {
		var duty = 0;
		var income = $("input#incomeMortgage").val();
		if (income == 0) duty = 0;
		else if (income <= 10000) duty = 4;
		else duty = ((((income - 10000)/200)*0.8) + 4);
		$("input#calculationMortgage").val('$' + dollarFormat(duty));
	});
}

function calculateDuty() {
	$(document).ready(function() {
		var duty = 0;
		var income = $("input#incomeDuty").val();
		if (income <= 25000) duty = 0.014 * income;
		else if  (income < 130000) duty = (0.024 * (income - 25000)) + 350;
		else if  (income < 440000) duty = (0.05 * (income - 130000)) + 2870;
		else if  (income < 550000) duty = (0.06 * (income - 440000)) + 18370;
		else if  (income < 960000) duty = (0.06 * (income - 550000)) + 28070;
		else duty = 0.055 * income;
		$("input#calculationDuty").val('$' + dollarFormat(duty));
	});
}

function calculateLoan() {
	$(document).ready(function() {
		var amount = $("input#amount").val();
		var period = $("select#period").val();
		var interest = $("input#interest").val();
		if (amount && period && interest) {
			var rate = interest/1200;
			var base = 1;
			var mbase = (1+rate);
			for (var i=0; i< (period*12); i++) base = (base*mbase);
			var calculation = Math.floor(100 * amount * rate / (1-(1/base))) / 100;
		}
		calculation = (calculation) ? calculation : 0;
		$("input#calculationLoan").val('$' + dollarFormat(calculation));
	});
}
function calculateBorrow() {
	$(document).ready(function() {
		var monthlyDisposableIncome = getMonthlyDisposableIncome();
		var minimumSurplusRequirement = getMinimumSurplusRequirement();
		var interest = parseFloat($("input#interestBorrow").val());
		var numberOfMonths = parseInt($("select#periodLoan").val())*12;
		var rental = parseFloat($("input#rental").val());
		var surplus = getPresentValue((interest/100 + 0.02)/12,numberOfMonths,monthlyDisposableIncome - minimumSurplusRequirement + 0.75*(rental)/12);
		var dsr = getPresentValue((interest/100 + 0.02)/12,numberOfMonths,getGrossMonthlyIncome()*0.35 - getYearlyFinancialCommitments() + 0.75*(rental)/12);
		var res = Math.floor(surplus);	
		if (res > 500000){
			//calculate full value loan
			//calculate loan based on increased min surplus
			var bigLoanMinSurplus = minimumSurplusRequirement + minSurplusOver500k(surplus);
			var bigLoanSurplus = getPresentValue((interest/100 + 0.02)/12,numberOfMonths,monthlyDisposableIncome - bigLoanMinSurplus + 0.75*(rental)/12);
			res = calcBigLoanValue( surplus, bigLoanSurplus );
		}
		if (monthlyDisposableIncome < 1 || !monthlyDisposableIncome || rental < 1 || !rental || numberOfMonths < 1 || !numberOfMonths || interest < 1 || !interest) $("input#calculationBorrow").val('$0.00');
		if (res > 0) $("input#calculationBorrow").val('$' + formatResult(res));
		else if (res < 0) $("input#calculationBorrow").val('Insufficient total annual income to get the loan.');
	});
}
function dollarFormat(inputString) {
	var ret = parseInt(inputString * 100) / 100;
	var ret = ret +""
	var n1 = ret.length - 3;
	var n2 = ret.length - 2;
	if (ret.charAt(n1) != '.' && ret.charAt(n2) != '.') ret = ret + '.00';
	else if (ret.charAt(n2) == '.')  ret = ret + '0';
	return ret;

}
function formatResult(inputString){
	var ret = "";
	var neg = false;
	if (inputString < 0) {
		inputString = -inputString;
		neg = true;
	}
	var inputS = "" + inputString;
	var three = inputS.length % 3;
	for (var ind = 0; ind < inputS.length;ind++) {
		if (ind != 0 && ind % 3 == three)  ret = ret + "," + inputS.charAt(ind);
		else ret = ret + inputS.charAt(ind);
	}
	return neg ? ("-" + ret) : ret;
}

function calcBigLoanValue(valA, valB) {
	if ((valA > 500000) && (valB < 500000)) return 500000;
	else if ((valA > 750000) && (valB < 750000)) return 750000;
	else if ((valA > 1000000) && (valB < 1000000)) return 1000000;
	else if ((valA > 1500000) && (valB < 1500000)) return 1500000;
	else if ((valA > 2000000) && (valB < 2000000)) return 2000000;
	return Math.floor(valB);
}


function minSurplusOver500k(val) {
	if (val > 1500000) return 1500;
	else if (val > 1000000) return 1000;
	else if (val > 750000) return 750;
	else if (val > 500000) return 500;
	return 0;
}

function getGrossMonthlyIncome() {
	return (parseFloat($("input#income1").val()) + parseFloat($("input#income2").val()))/12;
}


function getPresentValue(rate,months,payment) {
	return payment*((1 - Math.pow(1/(1 + rate),months))/rate)
}


function getMinimumSurplusRequirement(){
	var ret = 0;
	var numDeps = parseInt($("select#dependants").val());
	if(parseInt($("select#applicants").val()) == "1"){
		if (numDeps == "0") ret = 1000;
		else if(numDeps == "1") ret = 1200;
		else if(numDeps == "2") ret = 1400;
		else if(numDeps == "3") ret = 1600;
		else if(numDeps == "4") ret = 1800;
		else if(numDeps == "5") ret = 2000;
		else if(numDeps == "6") ret = 2200;
		else if(numDeps == "7") ret = 2400;
		else if(numDeps == "8") ret = 2600;
		else if(numDeps == "9") ret = 2800;
		else ret = 3000;
	}
	else {
		if(numDeps == "0") ret = 1250;
		else if(numDeps == "1") ret = 1450;
		else if(numDeps == "2") ret = 1650;
		else if(numDeps == "3") ret = 1850;
		else if(numDeps == "4") ret = 2050;
		else if(numDeps == "5") ret = 2250;
		else if(numDeps == "6") ret = 2450;
		else if(numDeps == "7") ret = 2650;
		else if(numDeps == "8") ret = 2850;
		else if(numDeps == "9") ret = 3050;
		else ret = 3250;
	}
	return ret;
}

function getMonthlyDisposableIncome() {
		//calc tax liability for app1
		var income_App1 = parseInt($("input#income1").val());
		var tax_App1 = getTaxLiability(income_App1);
		var netIncome_App1 = income_App1 - tax_App1;
	
		//calc tax liability for app2
		if ($("input#income2").val() != "") {
			var income_App2 = parseInt($("input#income2").val());
			var tax_App2 = getTaxLiability(income_App2);
			var netIncome_App2 = income_App2 - tax_App2;

		}
		else var netIncome_App2 = "";

		//Total Nett Income for both combined
		var netIncome = netIncome_App1 + netIncome_App2;
		return (netIncome - getYearlyFinancialCommitments())/12;
}
function getTaxLiability(income){   
	//calculates tax and Medicare levy on taxable income
	//returns TAX and MEDICARE liability for a full year
	var medicare = 0.015;
	var taxBracket = getTaxBracket(income);
	var remainingIncome = income - taxBracket;
	var taxOnBracket = getTaxOnBracket(income);
	var rateOnAdditional = getRateOnAdditional(taxBracket);
	var taxOnAdditional = remainingIncome * rateOnAdditional;
	var totalTax = taxOnAdditional + taxOnBracket;
	var totalTaxLiability = totalTax + (income * medicare);
	return totalTaxLiability;
}

function getTaxBracket(inc){
	var ret;
	if (inc < 6000) ret = 0;
	else if(inc < 20000) ret = 6000;
	else if(inc < 50000) ret = 20000;
	else if(inc < 60000) ret = 50000;
	else ret = 60001;
	return ret;
}
function getTaxOnBracket(inc){
	var ret = 0;
	if (inc > 60000) ret = 15580;
	else ret = getBracketTax(inc);
	return ret;
}

function getBracketTax(inc){
	var ret = 0;
	if (inc < 20000) ret = 0;
	else if(inc < 50000) ret = 2380;
	else if(inc < 60000) ret = 11380;
	else ret = 15580;
	return ret;
}

function getRateOnAdditional(bracket){
	var ret = 0;
	if (bracket < 6000) ret = 0;
	else if (bracket < 20000) ret = 0.17;
	else if (bracket < 50000) ret = 0.3;
	else if (bracket < 60000) ret = 0.42;
	else ret = 0.47;
	return ret;
}


function getYearlyFinancialCommitments() {
	var carLoan1 = ($("input#carLoan1").val()) ? parseInt($("input#carLoan1").val()): 0;
	var carLoan2 = ($("input#carLoan2").val()) ? parseInt($("input#carLoan2").val()): 0;
	var ccLoan1 = ($("input#ccLoan1").val()) ? parseInt($("input#ccLoan1").val()): 0;
	var ccLoan2 = ($("input#ccLoan2").val()) ? parseInt($("input#ccLoan2").val()): 0;
	var otherLoan1 = ($("input#otherLoan1").val()) ? parseInt($("input#otherLoan1").val()): 0;
	var otherLoan2 = ($("input#otherLoan2").val()) ? parseInt($("input#otherLoan2").val()): 0;
	return 12 * (carLoan1 +  carLoan2 + ccLoan1 +  ccLoan2 + otherLoan1 + otherLoan2);
}

function init() {
	$("#loan").removeClass('on');
	$("#borrow").removeClass('on');
	$("#duty").removeClass('on');
	$("#mortgage-duty").removeClass('on');
	$(".loan").removeClass('selected');
	$(".borrow").removeClass('selected');
	$(".duty").removeClass('selected');
	$(".mortgage-duty").removeClass('selected');
}

	$(document).ready(function() {
		$(".loan").click(function () { 
			init();
			$("#loan").addClass('on');
			$(".loan").addClass('selected');
			return false;
		});
		$(".borrow").click(function () { 
			init();
			$("#borrow").addClass('on');
			$(".borrow").addClass('selected');
			return false;
		});
		$(".duty").click(function () { 
			init();
			$("#duty").addClass('on');
			$(".duty").addClass('selected');
			return false;
		});
		$(".mortgage-duty").click(function () { 
			init();
			$("#mortgage-duty").addClass('on');
			$(".mortgage-duty").addClass('selected');
			return false;
		});
		$("input#amount").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#interest").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#interestBorrow").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#income1").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#income2").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#incomeDuty").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#incomeMortgage").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#rental").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#carLoan1").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#carLoan2").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#ccLoan1").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#ccLoan2").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#otherLoan1").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
		$("input#otherLoan2").keyup(function () { 
    		this.value = this.value.replace(/[^0-9\.]/g,'');
		});
	});

