// 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, clientno, stockDomain, groupid)
{
	
	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);
	
	//document.forms['calc'].amount.value = amount;
	document.getElementById('amount').innerHTML = amount;
	document.getElementById('amountRow').style.display = 'block';
	document.getElementById('carSection').style.display = 'block';
	
	// Set Min & Max Amounts
	minAmount = roundedAmount - 0000;
	maxAmount = roundedAmount + 0000;
	
	$used = "http://"+ stockDomain +"/stocklist.php?groupid="+groupid+"&retailfrom=&retailto=" + maxAmount +"&stype=CARU,DEMONSTRATORS";	
	
	// Set link
	document.getElementById('test').href = $used;

	// Determine the term of the loan in years/months;
	years = Math.floor(term / 12);
	months = Math.round(term - (12 * years));
	
	return true;
}

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Calculate the repayments given the amount, residual, rate, term and frequency (monthly by default).
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function calcFinanceRepayment(amount, residual, rate, term, frequency, usedCars, demoCars)
{
	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;
}