// function for the loan/lease calculator

var residual_percent = new Object();
residual_percent['24'] = new Object();
residual_percent['24']['high'] = 63;
residual_percent['24']['average'] = 56;
residual_percent['24']['below'] = 44;
residual_percent['24']['poor'] = 38;

residual_percent['36'] = new Object();
residual_percent['36']['high'] = 55;
residual_percent['36']['average'] = 48;
residual_percent['36']['below'] = 37;
residual_percent['36']['poor'] = 31;

residual_percent['48'] = new Object();
residual_percent['48']['high'] = 49;
residual_percent['48']['average'] = 41;
residual_percent['48']['below'] = 31;
residual_percent['48']['poor'] = 25;

residual_percent['60'] = new Object();
residual_percent['60']['high'] = 42;
residual_percent['60']['average'] = 36;
residual_percent['60']['below'] = 26;
residual_percent['60']['poor'] = 20;

residual_percent['72'] = new Object();
residual_percent['72']['high'] = 36;
residual_percent['72']['average'] = 30;
residual_percent['72']['below'] = 20;
residual_percent['72']['poor'] = 15;

residual_percent['84'] = new Object();
residual_percent['84']['high'] = 30;
residual_percent['84']['average'] = 24;
residual_percent['84']['below'] = 18;
residual_percent['84']['poor'] = 13;

function recalculate() {
	var price = parseFloat(document.lease_loan_calc.price.value);
	var tax = parseFloat(document.lease_loan_calc.tax.value)/100;
	var dmv_fee = 350;
	var loan_downpayment = parseFloat(document.lease_loan_calc.downpayment.value);
	var n = document.lease_loan_calc.term.selectedIndex;
	var loan_term = parseFloat(document.lease_loan_calc.term[n].value);
	var loan_apr = parseFloat(document.lease_loan_calc.apr.value)/100;

	var tax_payment = price*tax;
	var total_due = loan_downpayment + dmv_fee;
	var total_cost = price - loan_downpayment + dmv_fee + tax_payment;
	var i = loan_apr/12;
	var y = Math.pow(1+i,loan_term);
	var monthly_payment = (total_cost*y*i)/(y-1);

	if (i == 0) {
		monthly_payment = total_cost/loan_term;
	}

	var formated_payment = round(monthly_payment).toFixed(2);

	var total_interest = monthly_payment*loan_term - total_cost;

	if (check(price) && check(tax) && check(dmv_fee) && check(loan_downpayment) && check(loan_term) && check(loan_apr)) {
		document.lease_loan_calc.loan_amnt_due.value = round(total_due);
		document.lease_loan_calc.loan_total_interest.value = round(total_interest);
		document.lease_loan_calc.loan_payment.value = formated_payment;
	} else {
		document.lease_loan_calc.loan_amnt_due.value = '';
		document.lease_loan_calc.loan_total_interest.value = '';
		document.lease_loan_calc.loan_payment.value = '';
	}

	if (document.getElementById('estimated_payment')) {
		document.getElementById('estimated_payment').innerHTML = '$'+formated_payment;
	}

	var lease_reduction = parseFloat(document.lease_loan_calc.downpayment.value);
	var lease_deposit = parseFloat(document.lease_loan_calc.lease_deposit.value);
	n = document.lease_loan_calc.term.selectedIndex;
	var lease_term = parseFloat(document.lease_loan_calc.term[n].value);
	var lease_apr = parseFloat(document.lease_loan_calc.apr.value)/100;
	var residual_rating = document.lease_loan_calc.residual_rating.value;
	var lease_residual = price * residual_percent[lease_term][residual_rating]/100;
	//n = document.lease_loan_calc.lease_mileage.selectedIndex;
	//var lease_mileage = parseFloat(document.lease_loan_calc.lease_mileage[n].value);

	var monthly_finance = lease_apr/24*(price + lease_residual);
	var monthly_depreciation = (price - lease_residual)/lease_term;
	total_due = lease_reduction + lease_deposit + dmv_fee;
	monthly_payment = monthly_finance + monthly_depreciation + tax*(monthly_finance + monthly_depreciation) - (lease_reduction/lease_term);

	if (check(price) && check(lease_deposit) && check(dmv_fee) && check(lease_reduction) && check(lease_residual) && check(lease_term) && check(lease_apr)) {
		document.lease_loan_calc.lease_amnt_due.value = round(total_due);
		document.lease_loan_calc.lease_payment.value = round(monthly_payment);
	} else {
		document.lease_loan_calc.lease_amnt_due.value = '';
		document.lease_loan_calc.lease_payment.value = '';
	}
}

function check(x) {
	return (!isNaN(x) && (x != Number.POSITIVE_INFINITY) && (x != Number.NEGATIVE_INFINITY));
}

function round(x) {
	return Math.round(x*100)/100;
}
