// (c) 2006 conscious.co.uk
function calcloan() {
// calculates the Loan values from a form

   
   var formnames = new Array("loanamount", "apramount", "loanperiod");
   var formdisplayednames = new Array("Loan Amount", "APR", "Loan Period");
   var formvals = new Array();
   var outnames = new Array("nomonthlyrepayments", "monthlyloanrepayments", "totalpayments", "totalinterest");
   var outvals = new Array();


   // get form values   
   for (i=0; i<formnames.length; i++)
      for (j=0,m=document.loanform.elements.length;j<m;j++)
         if (document.loanform.elements[j].name == formnames[i])
            formvals[formnames[i]] = document.loanform.elements[j].value;

   // Error checking
   var isvalidnum = true;
   for (j=0; j<formnames.length; j++) {
      formvals[formnames[j]] = formvals[formnames[j]].replace("£", "");
      if (formvals[formnames[j]] == "") formvals[formnames[j]] = "0";
      for (i=0; i<formvals[formnames[j]].length; i++) {
         if ((formvals[formnames[j]].charAt(i) != "0")
         && (formvals[formnames[j]].charAt(i) != ".")
         && (!parseFloat(formvals[formnames[j]].charAt(i)))) {
            isvalidnum = false;
            alert("Please enter a valid number in the "+formdisplayednames[j]+" field");
            break;

      }
   }
   }
   if (isvalidnum) {
   // Calculations
      for (i=0; i<formvals.length; i++) formvals[formnames[i]] = parseFloat(formvals[formnames[i]]);

      
	formvals['apramount'] = formvals['apramount']/100;  // on a separate line for effective rounding
	var monthlynomrate=12*(Math.pow(formvals['apramount']+1,1/12)-1);  // calculates the estimated APR using a reversal of the formula APR = (1+r/M)^M - 1 where M in this case refers to 12 months, ie a year, and r is the nominal interest rate
	monthlynomrate = monthlynomrate/12;  // calculates nominal rate per month rather than per year by dividing by 12 (months)
	outvals['nomonthlyrepayments']=12 * formvals['loanperiod'];  //total number of payments, ie number of months multiplied by number of years								
	var tempval=1/(1+monthlynomrate);								
	outvals['monthlyloanrepayments']=(formvals['loanamount']*(tempval-1)) / (tempval*((Math.pow(tempval,outvals['nomonthlyrepayments']))-1));  	// monthly repayments calculated from the loan amount over the number of payments, taking into account the nominal rate of interest over that period	
	outvals['totalpayments']=outvals['nomonthlyrepayments']*outvals['monthlyloanrepayments']; // total payments are monthly payments multiplied by the total number of payments
	outvals['totalinterest']=outvals['totalpayments']-formvals['loanamount'];  // interest is the difference between the total amount paid and the starting loan amount	
        for (i=0; i<outnames.length; i++) if (!parseFloat(outvals[outnames[i]])) outvals[outnames[i]] = 0;
        // display with 2 decimal places         
        for (i=0; i<outnames.length; i++) if (outnames[i] != "nomonthlyrepayments") outvals[outnames[i]] = poundsandpence(outvals[outnames[i]], false, true);	

   // output values
   for (i=0; i<outnames.length; i++)
      for (j=0,m=document.loanform.elements.length;j<m;j++)
         if (document.loanform.elements[j].name == outnames[i])
            document.loanform.elements[j].value = outvals[outnames[i]];

   }
}

function calcapr() {
// Calculate APR value from a given nominal interest
   for (j=0,m=document.interesttoaprform.elements.length;j<m;j++)
      if (document.interesttoaprform.elements[j].name == 'nriamount')
         var interestfigure = document.interesttoaprform.elements[j].value;


   // Error checking
   var isvalidnum = true;
   interestfigure=interestfigure.replace("£", "");
      if (interestfigure == "") interestfigure = "0";
   for (i=0; i<interestfigure.length; i++) {
      if ((interestfigure.charAt(i) != "0")
      && (interestfigure.charAt(i) != ".")
      && (!parseFloat(interestfigure.charAt(i)))) {
         isvalidnum = false;
         alert("Please enter a valid number in the 'Nominal Rate of Interest' field");
         break;

      }
   }
   if (isvalidnum) {
        interestfigure = parseFloat(interestfigure);
      	var aprout = (Math.pow((1+(interestfigure/1200)),12))-1;  // calculates the estimated APR using the formula APR = (1+r/M)^M - 1 where M in this case refers to 12 months, ie a year, and r is the nominal interest rate
	aprout = poundsandpence((100 * aprout), false, true);
	
   for (j=0,m=document.interesttoaprform.elements.length;j<m;j++)
      if (document.interesttoaprform.elements[j].name == 'apramount')
         document.interesttoaprform.elements[j].value = aprout;	
   }
}

function calcinterest() {
// Calculate nominal interest value from a given APR
   for (j=0,m=document.aprtointerestform.elements.length;j<m;j++)
      if (document.aprtointerestform.elements[j].name == 'apramount')
         var aprfigure = document.aprtointerestform.elements[j].value;


   // Error checking
   var isvalidnum = true;
   aprfigure=aprfigure.replace("£", "");
      if (aprfigure == "") aprfigure = "0";
   for (i=0; i<aprfigure.length; i++) {
      if ((aprfigure.charAt(i) != "0")
      && (aprfigure.charAt(i) != ".")
      && (!parseFloat(aprfigure.charAt(i)))) {
         isvalidnum = false;
         alert("Please enter a valid number in the 'APR' field");
         break;

      }
   }
   if (isvalidnum) {
         aprfigure = parseFloat(aprfigure);
	var nriout=(12*((Math.pow((aprfigure/100)+1,1/12))-1))   // calculates the estimated APR using a reversal of the formula APR = (1+r/M)^M - 1 where M in this case refers to 12 months, ie a year, and r is the nominal interest rate   	
	nriout = poundsandpence((100 * nriout), false, true);
	
   for (j=0,m=document.aprtointerestform.elements.length;j<m;j++)
      if (document.aprtointerestform.elements[j].name == 'nriamount')
         document.aprtointerestform.elements[j].value = nriout;	
   }
}

function poundsandpence(numnotrounded, returnasfloat, isthousands) {
// makes number conform to pounds and 2 decimal (pence) digits, with options of commas denoting thousands
var decbit = (numnotrounded.toString()).split(".");

if (!decbit[1]) var decpart = "00";
else if ((decbit[1].length) == 1) var decpart = decbit[1]+"0";
else if ((decbit[1].length) == 2) var decpart = decbit[1];
else {
// Varies to get right result - check
//   var tempbit = (Math.round((decbit[0]+decbit[1].substring(0,2))+"."+(decbit[1].substring(2)))).toString();
//   var decpart = tempbit.substring((tempbit.length-2));
//   decbit[0] = tempbit.substring(0, (tempbit.length-2));
   var decpart = (decbit[1].substring(0, 2));

}

if ((!returnasfloat) && (isthousands) && (decbit[0].length > 3)) {  // add commas for thousands if appropriate
   var afterthousands = "";
   for (tocommas = 0; tocommas < (decbit[0].length / 3); tocommas++) afterthousands = ","+decbit[0].substring((decbit[0].length-((tocommas+1)*3)), (decbit[0].length-(tocommas*3)))+afterthousands;
   afterthousands = afterthousands.substring(1);

}
else afterthousands = decbit[0];

var wholebit = afterthousands+"."+decpart;

if (!returnasfloat) return wholebit;
else return parseFloat(wholebit);
}
