//Copyright © 2002 - 2010 PracticeWEB Ltd
function v_number(number){
	var digits="0123456789.£";
	if (number=="£") {return false;}
	if (number.length==0) {return false;}
	for (var i=0;i<number.length;i++){if (digits.indexOf(number.substring(i,i+1))==-1 && number.substring(i,i+1)!="."){return false;}}
	if (number<0) {return false;}
	return true;
}

function formatCurrency(number){

	var decimalPos;
	var leftPart = number.toString();
	var orgLeftPart = "";
	var digitCount = 0;
	var digitChar = "";
	var decimalPart = "";
	
	decimalPos = leftPart.indexOf(".");
	decimalPart = leftPart.substring(decimalPos);
	leftPart = leftPart.substring(0,decimalPos);
	
	decimalPart = decimalPart.substring(0,3);
	
	orgLeftPart = leftPart;
	leftPart="";
	for (var x=orgLeftPart.length-1;x!=-1;x--) {
	
		digitCount = digitCount + 1;
		digitChar = orgLeftPart.substring(x,x+1);
		if (digitCount==3) {
			digitCount=0;
			digitChar = "," + digitChar;
		}
		leftPart = digitChar + leftPart;
	
	}
	if (leftPart.substring(0,1)==",") {leftPart=leftPart.substring(1);}
	
	return("£" + leftPart + decimalPart);

}

function formatNumber(number){

	var decimalPos;
	var leftPart = number.toString();
	var orgLeftPart = "";
	var digitCount = 0;
	var digitChar = "";
	var decimalPart = "";
	
	decimalPos = leftPart.indexOf(".");
	decimalPart = leftPart.substring(decimalPos);
	leftPart = leftPart.substring(0,decimalPos);
	
	decimalPart = decimalPart.substring(0,3);
	
	orgLeftPart = leftPart;
	leftPart="";
	for (var x=orgLeftPart.length-1;x!=-1;x--) {
	
		digitCount = digitCount + 1;
		digitChar = orgLeftPart.substring(x,x+1);
		if (digitCount==3) {
			digitCount=0;
			digitChar = "," + digitChar;
		}
		leftPart = digitChar + leftPart;
	
	}
	if (leftPart.substring(0,1)==",") {leftPart=leftPart.substring(1);}
	
	return(leftPart + decimalPart);

}

function calculateLoan(){

	//load values from form into variables

	var frm=document.loancalc;
	var p=frm.p.value;
	var apr=frm.apr.value;
	var y=frm.y.value;
	
	//initialise those variables for calculation
	
	var n=0;
	var m=0;
	var t=0;
	var c=0;
	var r=0;
	var i=0;
	
	//validate inputs
	
	var errorMessage="";
	
	if (!v_number(p)) {errorMessage+="Amount of loan,\n";}
	if (!v_number(apr)) {errorMessage+="APR,\n";}
	if (!v_number(y)) {errorMessage+="Period of loan\n";}
	
	if (errorMessage.length!=0) {alert("The following entries are incorrect:\n\n"+errorMessage+"\nPlease correct these entries and\ntry again.");return false;}
	
	if (p.substring(0,1)=="£") {p=p.substring(1);}
	
	apr=apr/100;							//decimal value for apr
	i=12 * (Math.pow(apr+1,1/12)-1);		//nominal rate of interest
	//i=i/100;								//decimal value of nominal rate of interest
	r=i/12;									//monthly nominal rate;
	n=12 * y;								//number of monthly payments
	var q=1/(1+r);							//temp variable for common blocks
	
	m=(p*(q-1)) / (q*((Math.pow(q,n))-1));	//monthly repayment
	
	t=n*m;									//total amount payable
	c=t-p;									//cost of interest
	
	//load text boxes with results
	
	// quick NAN fix by Paul and Gary
	if( apr == 0 )
	{
		alert( "You cannot calculate a loan with 0% APR" );
		frm.n.value=n;
		frm.m.value=formatCurrency(0);
		frm.t.value=formatCurrency(0);
		frm.c.value=formatCurrency(0);
	}
	else
	{
		frm.n.value=n;
		frm.m.value=formatCurrency(m);
		frm.t.value=formatCurrency(t);
		frm.c.value=formatCurrency(c);
	}
	
	
	return false;
}

function decideCalc() {
  var frm=document.aprcalc
  if (frm.n.value.length!=0) {calculateAPR();}
  if (frm.apr.value.length!=0) {calculateNominal();} 
}

function calculateAPR() {
  var frm=document.aprcalc
	var n=frm.n.value
	var errorMessage="";
	var apr=0;
	
	if (!v_number(n)) {errorMessage+="Nominal interest rate,\n";}
	if (errorMessage.length!=0) {alert("The following entries are incorrect:\n\n"+errorMessage+"\nPlease correct these entries and\ntry again.");return false;}
	
	n=n/100;
	apr = (Math.pow((1+(n/12)),12))-1
	apr = 100 * apr;
	
	frm.aprres.value = formatNumber(apr);
	return false;
	
}

function calculateNominal() {
	var frm=document.aprcalc
	var apr=frm.apr.value
	var errorMessage="";
	var n=0;
	
	if (!v_number(apr)) {errorMessage+="Annual percentage rate,\n";}
	if (errorMessage.length!=0) {alert("The following entries are incorrect:\n\n"+errorMessage+"\nPlease correct these entries and\ntry again.");return false;}	
	
	apr=apr/100;
	n=(12*((Math.pow(apr+1,1/12))-1))
	n=n*100;
	frm.nres.value=formatNumber(n);
	return false;
}

