// by cwelle and jemtallon 2005
// based on a demo by Netscape Communications, Inc.
function checkNumber(input, min, max, msg) {
	msg = msg + " field has invalid data: " + input.value;
	
	var str = input.value;
	for (var i = 0; i < str.length; i++) {
		var ch = str.substring(i, i + 1)
		if ((ch < "0" || "9" < ch) && ch != '.') {
			alert(msg);
			return false;
		}
	}

	var numExp = /^\d$/; // digit expression
	var opExp = /^\D$/; // non digit expression
	
	var num = 0 + str
	if (num < min || max < num) {
		alert(msg + " not in range [" + min + " ... " + max + "]");
		return false;
	}

	input.value = str;
	return true;
}

function computeField(input,form) {
	if (input.value != null && input.value.length != 0) {
		input.value = "" + eval(input.value);
		//alert(form);
		if (form == "mp") {
			computeMonthlyPayment(input.form);
		} else {
			computeAffordability(input.form);
		}
    }
}

function computeMonthlyPayment(form) {
	if ((form.payments.value == null || form.payments.value.length == 0) || (form.interest.value == null || form.interest.value.length == 0) || (form.principal.value == null || form.principal.value.length == 0)) {
		return;
	}

	if (!checkNumber(form.payments, 1, 120, "Loan term (in months)") || !checkNumber(form.interest, .001, 99, "Interest rate") || !checkNumber(form.principal, 100, 10000000, "Vehicle Price")) {
		form.payment.value = "Invalid";
		return;
	}

	var i = form.interest.value;
	if (i > 1.0) {
		i = i / 100.0;
		// displays the coversion of a percent value to a decimal ( 5% = 0.05 )
		// form.interest.value = i;
	}
	i /= 12;

	var pow = 1;
	for (var j = 0; j < form.payments.value; j++) {
		pow = pow * (1 + i);
        form.payment.value = (form.principal.value * pow * i) / (pow - 1);        
	}
	// round the monthly payment
	form.payment.value = Math.round(form.payment.value*100)/100;
}

function computeAffordability(form) {
	if ((form.payments.value == null || form.payments.value.length == 0) || (form.interest.value == null || form.interest.value.length == 0) || (form.monthlypayments.value == null || form.monthlypayments.value.length == 0)) {
		return;
	}

	if (!checkNumber(form.payments, 1, 120, "Loan term (in months)") || !checkNumber(form.interest, .001, 99, "Interest") || !checkNumber(form.monthlypayments, 100, 1000000, "The highest monthly payment") || !checkNumber(form.tradein, 0, 100000, "Trade in value") || !checkNumber(form.downpayment, 0, 100000, "Downpayment")) {
		form.loan.value = "Invalid";
		form.principal.value = "Invalid";
		return;
	}

	var i = form.interest.value;
	if (i > 1.0) {
		i = i / 100.0;
		// displays the coversion of a percent value to a decimal ( 5% = 0.05 )
		// form.interest.value = i;
	}
	i /= 12;

	var pow = 1;
	var y = form.monthlypayments.value;

	for (var j = 0; j < form.payments.value; j++) {
		pow = pow * (1 + i);
        y = form.monthlypayments.value / (( pow * i) / (pow - 1));
        form.principal.value = y;
        p = y + eval(form.downpayment.value) + eval(form.tradein.value);
        form.loan.value = p;
	}
	form.loan.value = Math.round(y*100)/100;
	form.principal.value = Math.round(p*100)/100;
}

/*
function clearForm(form) {
	form.payments.value = "";
	form.interest.value = "";
	form.principal.value = "";
}
*/