var creditfacilityfee = 0;
var completionfee = 0;
var setflatrate = 5.25;

function calculateGoWithoutForm() {
	var fincal = document.fincal;
	
	//if (Number(fincal.cashprice.value) - (Number(fincal.partexchange.value) - Number(fincal.cashdeposit.value)) < 200)
	if (Number(jQuery('input:text[name=cashprice]').val()) - (Number(jQuery('input:text[name=partexchange]').val()) - Number(jQuery('input:text[name=cashdeposit]').val())) < 200)
	{
		alert("You cannot borrow less than &pound;200!");
	} else {
		var amountofloan = Number(jQuery('input:text[name=cashprice]').val()) - Number(jQuery('input:text[name=cashdeposit]').val()) - Number(jQuery('input:text[name=partexchange]').val());
		var flatrate = setflatrate/100;
		var term = Number(jQuery('select#term option:selected').val());
		var deposit = Number(jQuery('input:text[name=cashdeposit]').val()); 
		var partex = Number(jQuery('input:text[name=partexchange]').val());
		var totalcreditamount = amountofloan + creditfacilityfee;
		var interestcharge = totalcreditamount*flatrate*(term/12);
		var totalamountpayable = interestcharge + totalcreditamount;
		var monthlypayment = totalamountpayable/term;
		var finalmonthlypayment = monthlypayment + completionfee;
		
		//fincal.creditfacilityfee.value = formatCurrency(creditfacilityfee);
		jQuery('input:text[name=creditfacilityfee]').val(formatCurrency(creditfacilityfee));

		//fincal.amountofloan.value = formatCurrency(amountofloan);
		jQuery('input:text[name=amountofloan]').val(formatCurrency(amountofloan));
		//fincal.totalcreditamount.value = formatCurrency(totalcreditamount);
		jQuery('input:text[name=totalcreditamount]').val(formatCurrency(totalcreditamount));
		//fincal.installment.value = formatCurrency(monthlypayment);
		jQuery('input:text[name=installment]').val(formatCurrency(monthlypayment));
		//fincal.installmentfinal.value = formatCurrency(finalmonthlypayment);
		jQuery('input:text[name=installmentfinal]').val(formatCurrency(finalmonthlypayment));
	
		//fincal.APR.value = getAPR(totalcreditamount, monthlypayment, term) + "%";
		//jQuery('input:text[name=APR]').val(getAPR(totalcreditamount, monthlypayment, term) + "%");
		jQuery('input:text[name=APR]').val("9.9%");
		//fincal.totalpayable.value = formatCurrency(totalamountpayable + deposit + partex);
		jQuery('input:text[name=totalpayable]').val(formatCurrency(totalamountpayable + deposit + partex));
		document.getElementById('termtext').innerHTML = term - 1 + " monthly installments of"
	}
}
function roundNumber(num, dec) {
	var truedec;
	truedec = Math.pow(10,dec);
	var result = Math.round(num*truedec)/truedec;
	return result;
}

function setFormDefaultValues() {
	//document.fincal.creditfacilityfee.value = formatCurrency(creditfacilityfee);
	jQuery('input:text[name=creditfacilityfee').val(formatCurrency(creditfacilityfee));
}

function formatCurrency(num)
{
	var amount;
	amount = Math.round(num*100)/100;
	var i = parseFloat(amount);
	if(isNaN(i)) { i = 0.00; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	s = minus + s;
	// add comma
	var delimiter = ",";
	var a = s.split('.',2)
	var d = a[1];
	var i = parseInt(a[0]);
	if(isNaN(i)) { return ''; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	var n = new String(i);
	var a = [];
	while(n.length > 3)
	{
		var nn = n.substr(n.length-3);
		a.unshift(nn);
		n = n.substr(0,n.length-3);
	}
	if(n.length > 0) { a.unshift(n); }
	n = a.join(delimiter);
	if(d.length < 1) { s = n; }
	else { s = n + '.' + d; }
	s = minus + s;
	return s;
}

function getAPR(totalamountpayable1, monthlypayment1, term1) {
	var APR;
	// Do iterative search with increment of 1
	APR = searchAPR(totalamountpayable1, monthlypayment1, term1, 1, 0);
	// Do iterative search with increment of -0.1
	APR = searchAPR(totalamountpayable1, monthlypayment1, term1, -0.1, APR);
	// Do iterative search with increment of 0.1
	APR = searchAPR(totalamountpayable1, monthlypayment1, term1, 0.1, APR);
	// Do iterative search with increment of -0.01 Just in case
	APR = searchAPR(totalamountpayable1, monthlypayment1, term1, -0.01, APR);
	// Do iterative search with increment of 0.01 Just in case
	APR = searchAPR(totalamountpayable1, monthlypayment1, term1, 0.01, APR);
	
	// Round to x decimal places
	APR = roundNumber(APR, 2);
	
	if (APR == Math.round(APR)) {
		APR = APR - 0.1;
	}
	return APR;
}

function searchAPR(totalamountpayable2, monthlypayment2, term2, Inc, Start ) {
	var oldAPR, APR;
	var oldDiff, diff;
	var TotalWithThisAPR;
	
	APR = Start;
	
	totalwiththisapr = calculateAPRTotal(monthlypayment2, term2, APR );
	diff = Math.abs(totalwiththisapr - totalamountpayable2);
	
	oldAPR = APR;
	olddiff = diff + 1;
	
	while (olddiff > diff) {
		oldAPR = APR;
		olddiff = diff;
		APR = APR + Inc;
		totalwiththisapr = calculateAPRTotal(monthlypayment2, term2, APR );
		diff = Math.abs(totalwiththisapr - totalamountpayable2);
	}
	return APR - Inc;  // return the last but one we found.
}

function calculateAPRTotal(monthlypayment3, term3, APR ) {
	var sum;
	sum = 0;
	for ( i = 1; i <= term3; i++ ) {
		sum = sum + monthlypayment3 / (Math.pow( (1 + (APR / 100)), i / 12 ));
	}
	sum = sum + creditfacilityfee + completionfee / (Math.pow( (1 + (APR / 100) ), term3 / 12 ));
	return sum;
}
