function validateCalc() {
	//alert("1");
	var forminvalid = false;
	var formtext = "";
	//formtext = 'Error! Please include the following details:\n\n';
	if (document.getElementById('repayment').value == "") {
		formtext = formtext + 'Please enter an amount which you can afford to pay either weekly, fortnightly, or monthly.';
		forminvalid = true;
	}
	if (forminvalid == true)
	{
		alert(formtext);
		return false;
	}
	else
	{
		calcFinanceAmount(
		document.getElementById('repayment').value,
		document.getElementById('rate').value,
		document.getElementById('term').options[document.getElementById('term').selectedIndex].value,
		document.getElementById('termother').value,
		document.getElementById('frequency').options[document.getElementById('frequency').selectedIndex].value,
		document.getElementById('deposit').value
		);
	}
}

// ++ ---------------------------------------------------------------------- ++ //
// ++ ---------------------------------------------------------------------- ++ //

// Reverse a string.
function reverse(string)
{
		for (var text = '',i = string.length-1; i > -1; i = i - 1)
				text += string.charAt(i);
		return text;
}

// Self explanatory.
function round(number,X) {
	X = (!X ? 2 : X);
	return Math.round(number * Math.pow(10,X)) / Math.pow(10,X);
}

// Format number to units of 1000.
function boxformatNumber(number)
{
	var whole, dec;
	var temp = new Array(2);
	temp[0] = ""; temp[1] = "";

	// Remove integer and decimal component.
	number = number.toString();
	temp = number.split('.');
	whole = temp[0];
	dec = temp[1];
	
	if(whole.length > 3) {
		var newnumber = '';
		number = reverse(whole);
		for (var i = 0;i < number.length;i++) {
			if (i > 0 && (i % 3) == 0)
				newnumber += ',';
				newnumber += number.charAt(i);
			}
		whole = reverse(newnumber);
	}
	
	if((dec) && (dec.length < 2)){
			dec = dec + "0";
	}
	
	number = (dec) ? (whole + "." + dec) : (whole);
	
}

// Format number to units of 1000.
function formatNumber(number)
{
	number = boxformatNumber(number);
	number = "$" + number;
	return number;
}


// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Determine monthly repayment based on frequency and payment amount (adjustment).
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function getMonthlyPayment(frequency, payment)
{

	var adjustedPayment = 0;
	(frequency.toString() == "28") && (adjustedPayment = payment);
	(frequency.toString() == "14") && (adjustedPayment = ((payment * 26) / 12));
	(frequency.toString() == "7") && (adjustedPayment = ((payment * 52) / 12));

	// The default is 'Monthly'.
	return adjustedPayment;
}


// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// How much can I borrow?
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function calcFinanceAmount(repayment,rate,term,termother,frequency,deposit)
{
	
	//alert(repayment + "," + rate + "," + term + "," + termother + "," + frequency + "," + deposit);
	
	var top, middle, bottom, last;
	var payment, adjustedPayment;
	var residual = 0;
	var amount = 0;
	
	// Initialise our variables.
	((rate == 0) || (rate == "")) && (rate = INTERESTRATE);
	(deposit == "") && (deposit = 0);
	
	// Get the term	
	term = (termother > 0) ? (termother) : (term);
	
	if(repayment <= 0) { alert("Invalid value for Repayment. Please re-enter your Repayment."); return false; }
	if(rate <= 0) { alert("Invalid value for Rate. Please re-enter the Interest Rate."); return false; }
	if(deposit < 0) { alert("Invalid value for Deposit. Please re-enter your Deposit."); return false; }
	if(!term) { alert("Please select or enter a Term."); return false; }
	
	// Adjust repayments to ensure monthly.
	adjustedPayment = getMonthlyPayment(frequency, repayment);
	
	top = 1000000;
	bottom = 0;
	middle = 0;

	do {
		last = middle;
		middle = bottom + ((top - bottom) / 2);
		payment = calcFinanceRepayment(middle, residual, rate, term, 1);
		(payment > adjustedPayment) ? (top = middle) : (bottom = middle);
		if((Math.abs(middle - last) < .01) || (payment == adjustedPayment)) {
			break;
		}

	} while(1);

	// Factor in the deposit.
	amount = round(middle) + eval(deposit);
	roundedAmount = Math.round(amount);
	
	// Set Min & Max Amounts
	minAmount = roundedAmount - 2000;
	maxAmount = roundedAmount + 2000;
	
	//alert(roundedAmount + "," + maxAmount);
		
	document.location.href = "http://www.madillsuzuki.com.au/used_cars.php?page=stocklist&groupid=299&gclid=&stype=ALL&retailfrom=&retailto=" + maxAmount + "&frequency=" +  frequency + "&repayments=" + repayment + "&term=" + term + "&rate=" + rate + "";
	
	return true;
	
}


// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Calculate the repayments given the amount, residual, rate, term and frequency (monthly by default).
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function calcFinanceRepayment(amount, residual, rate, term, frequency)
{
	var r;
	var A;
	var T;
	var repayment;

	if((rate <= 0) || (term == 0) || (frequency == 0)){
		return 0;
	}

	r = rate * frequency / 1200;
	T = term;
	if((Math.pow((1 + r), T) -1) > 0) {
		repayment = r * (amount * Math.pow((1 + r), T)) / (Math.pow((1 + r), T) - 1);
		}
		return repayment;
}
