﻿function calculate_repayment()
	{
	document.frmFinanceLand.loanamount.value = ForceNumeric(document.frmFinanceLand.loanamount.value);
	document.frmFinanceLand.loanperiod.value = ForceNumeric(document.frmFinanceLand.loanperiod.value);
	document.frmFinanceLand.interestrate.value = ForceNumeric(document.frmFinanceLand.interestrate.value);
	document.frmFinanceLand.overpayment.value = ForceNumeric(document.frmFinanceLand.overpayment.value);
	var loanamount = document.frmFinanceLand.loanamount.value;
	var interestrate = document.frmFinanceLand.interestrate.value;
	var loanperiod = document.frmFinanceLand.loanperiod.value;
	var over = document.frmFinanceLand.overpayment.value;
	if (interestrate > 0 && loanperiod > 0)
		{
		if (parseFloat(over) < parseFloat(loanamount))
			{
				var I = interestrate / 12;
				var X = 1/(1+I/100);
				var N = loanperiod * 12;
				var L = loanamount;
				var P1 = 0;
				var P2 = loanamount;
				var A1 = (L - P1 * Math.pow(X,N)) * (X - 1)/(Math.pow(X,N+1)-X);
        		var m = (A1+ +over);
  				var Q = ((A1 + +over)) - (L * (I/100));
  				var A2 = (Math.log(m/Q))/(Math.log(1 + (I/100)))/12;
				document.frmFinanceLand.repayment.value = FormatNumber(A1,2);
				document.frmFinanceLand.totalpayment.value = FormatNumber((A1 * 12) * loanperiod,2) ;
				document.frmFinanceLand.term.value = FormatNumber(loanperiod,1);
				document.frmFinanceLand.newrepayment.value = FormatNumber(m);
				document.frmFinanceLand.newtotalpayment.value = FormatNumber((m * 12) * A2,2);
				document.frmFinanceLand.newterm.value = FormatNumber(A2,1);
		
				if (over = 0)
					{

						document.frmFinanceLand.totalsaving.value = FormatNumber(0,2);
						document.frmFinanceLand.years.value = FormatNumber(0,1);;
					}
				else
					{
						//document.frmFinanceLand.totalsaving.value = FormatNumber(document.frmFinanceLand.totalpayment.value - document.frmFinanceLand.newtotalpayment.value,2);
						document.getElementById("totalsaved").innerHTML = FormatNumber(document.frmFinanceLand.totalpayment.value - document.frmFinanceLand.newtotalpayment.value,2);
						//document.frmFinanceLand.years.value = FormatNumber(document.frmFinanceLand.term.value - document.frmFinanceLand.newterm.value,1);	
						document.getElementById("yearssaved").innerHTML = FormatNumber(document.frmFinanceLand.term.value - document.frmFinanceLand.newterm.value,1);	
					}
			}
		else
			{
				document.frmFinanceLand.overpayment.value = "0";
				document.frmFinanceLand.newrepayment.value = "0";
				document.frmFinanceLand.newtotalpayment.value = "0";
				document.frmFinanceLand.newterm.value = "0";
				document.frmFinanceLand.repayment.value = "0";
				document.frmFinanceLand.totalpayment.value = "0";
				document.frmFinanceLand.term.value = "0";
				document.frmFinanceLand.totalsaving.value = "0";
				document.frmFinanceLand.years.value = "0";
			}
		}
	else
		{
		document.frmFinanceLand.repayment.value = "*ERROR*";
		document.frmFinanceLand.interestonly.value = "*ERROR*";
		}
	}

function FormatNumber(Number,Decimals,Separator)
{
 Number += ""          // Force argument to string.
 Decimals += ""        // Force argument to string.
 Separator += ""       // Force argument to string.
 if((Separator == "") || (Separator.length > 1))
  Separator = "."
 if(Number.length == 0)
  Number = "0"
 var OriginalNumber = Number  // Save for number too large.
 var Sign = 1
 var Pad = ""
 var Count = 0
 // If no number passed, force number to 0.
 if(parseFloat(Number)){


  Number = parseFloat(Number)} else {
  Number = 0}
 // If no decimals passed, default decimals to 2.
 if((parseInt(Decimals,10)) || (parseInt(Decimals,10) == 0)){
  Decimals = parseInt(Decimals,10)} else {
  Decimals = 2}
 if(Number < 0)
 {
  Sign = -1         // Remember sign of Number.
  Number *= Sign    // Force absolute value of Number.
 }
 if(Decimals < 0)
  Decimals *= -1    // Force absolute value of Decimals.
 Number = "" + Math.floor(Number * Math.pow(10,Decimals + 1) + 5)
 if((Number.substring(1,2) == '.')||((Number + '')=='NaN'))
  return(OriginalNumber) // Number too large to format as specified.
 if(Number.length < Decimals +1) // Construct pad string.
 {
  for(Count = Number.length; Count <= Decimals; Count++)
   Pad += "0"
 }
 Number = Pad + Number // Pad number as needed.
 if(Decimals == 0){
  Number = Number.substring(0, Number.length -1)} else {
 Number = Number.substring(0,Number.length - Decimals -1) +
          Separator +
          Number.substring(Number.length - Decimals -1,
          Number.length -1)}
 if(Sign == -1)
  Number = "-" + Number  // Set sign of number.
 if(Number.length == 0)
  Number="0"
 return(Number)
}


function ForceNumeric(nValue)
	{
	validChars = "0123456789.";
	newValue="";
	for(k = 0; k < nValue.length; k++)
		{
		thisChar = nValue.charAt(k);
		if(validChars.indexOf(thisChar) != -1) newValue += thisChar;
		}
	return newValue;
	}

