
function floor(number)
{
  return Math.floor(number*Math.pow(10,2))/Math.pow(10,2);
}

function calcMonthlyRepayments(YR, LA, IR) {
  var mi = IR / 1200;
  var base = 1;
  var mbase = 1 + mi;
  for (i=0; i<YR * 12; i++) {
    base = base * mbase
  }
  var PI = floor(LA * mi / ( 1 - (1/base)));
  if (isNaN(PI)) {
    return 'error';
  } else {
    return PI
  }

}

function calcMonthlyRepaymentsInterestOnly(LA, IR) {
  var IO = floor(eval((LA*(IR*.01))/12));
  if (isNaN(IO)) {
    return 'error';
  } else {
    return IO
  }
}

function do_calcrepayments(f) {
	PI_monthly = calcMonthlyRepayments(f.YR.value, f.LA.value, f.IR.value);
	IO_monthly = calcMonthlyRepaymentsInterestOnly(f.LA.value, f.IR.value);
	PI_weekly = (PI_monthly * 12) / 52;
	IO_weekly = (IO_monthly * 12) / 52;
	PI_fortnightly = (PI_monthly * 12) / 26;
	IO_fortnightly = (IO_monthly * 12) / 26;
	
	f.PI.value = PI_monthly;
	f.IO.value = IO_monthly;
	f.PI_w.value = floor(PI_weekly);
	f.IO_w.value = floor(IO_weekly);
	f.PI_fn.value = floor(PI_fortnightly);
	f.IO_fn.value = floor(IO_fortnightly);
}

function calcTotalAmountToBorrow(payments,term,rate){
	if (isNaN(payments)){
		return 'error';
	}
	if (isNaN(rate)){
		return 'error';
	}
	if (isNaN(term)){
		return 'error';
	}
	var mi = rate / 1200;
  var base = 1;
  var mbase = 1 + mi;
	
  for (i=0; i<term * 12; i++)
  {
    base = base * mbase
  }
	result = floor(payments * ( ( 1 - (1/base))/mi));
	if (isNaN(result)) {
		return 'error';
	} else {
		return result;
	}
}
//function to format numbers to 2 decimal places
function format(num)
{
num = Math.round(num*100)/100
        return num;
}

//validate form input
function validatecalc(LA,IR,LP,EP,EPF,RPF,F)
{
	if ((LA=="") || (LA < 1) || (isNaN(LA))) {   
		alert("You must enter a Loan Amount")
	} else {
		if ((IR < 1) || (IR > 50) || (isNaN(IR))) {   
			alert("You must enter an Interest Rate between 1 and 50")
		} else {
			if ((LP < 1) || (LP > 30) || (isNaN(LP))) {   
				alert("You must enter an Loan Period value between 1 and 30 years")
			} else {
				docalc(LA, IR, LP, EP, EPF, RPF,F);
			}
		}
	}
}
//declare xtra variables
function docalc(LA, IR, LP, EP, EPF, RPF,F)
{
     LoanAmount= LA;
     LoanPeriod= LP;
     AnnualIntrate = IR/100;
     MonthIntrate = IR/(12*100);
     FortIntrate = IR/(26*100);
     WeekIntrate = IR/(52*100);
     NumPaymentsMonth=LoanPeriod*12;
     NumPaymentsFort=LoanPeriod*26;
     NumPaymentsWeek=LoanPeriod*52;
		 
     ExtraRepay= EP;
	
//run function dependant on the repayment frequency form value
	
	if (RPF[RPF.selectedIndex].value == "Monthly")
		advcalcmonth(LA, IR, LP, EP, EPF, RPF, F);
	else 
	{
	if (RPF[RPF.selectedIndex].value == "Fortnightly")
		advcalcfort(LA, IR, LP, EP, EPF, RPF, F);
	else 
	if (RPF[RPF.selectedIndex].value == "Weekly")
		advcalcweek(LA, IR, LP, EP, EPF, RPF, F);
	}

}


//calculate results for monthly repayments
function advcalcmonth(LA, IR, LP, EP, EPF, RPF, F)
{
	if (EPF[EPF.selectedIndex].value == "Monthly")
		var ExtraRepay = EP;
	else 
	{
	if (EPF[EPF.selectedIndex].value == "Fortnightly")
		var ExtraRepay = EP * 2;
	else 
		var ExtraRepay = EP * 4;
	}
	
	MonthPayment=LoanAmount * (MonthIntrate / (1 - Math.pow((1+MonthIntrate),-(NumPaymentsMonth))));
	Repay=MonthPayment;
	
	TotalRepay=Number(ExtraRepay)+Number(Repay);
	
	ExtraLoanPaymentPeriod=(Math.log(TotalRepay/(TotalRepay-(LoanAmount*MonthIntrate))))/Math.log(1+MonthIntrate);

	
	years = Math.floor((ExtraLoanPaymentPeriod)/12);
	months = Math.round(((ExtraLoanPaymentPeriod/12) - Math.floor(ExtraLoanPaymentPeriod/12))*12);


	if (months == 12)
	{SY=(years+1) + ' years '+ ' 0 months'
	}
	else   
 {   SY=(years) + ' years '+ months + ' months'}
	
	F.yearssaved.value = SY;
	RepayTotal = (MonthPayment*12*LoanPeriod);
	InterestPaid = (RepayTotal-LoanAmount);

	ExtraTotal = TotalRepay*ExtraLoanPaymentPeriod;

	ExtraInterestPaid = (ExtraTotal-LoanAmount);
	
	InterestSaving = InterestPaid - ExtraInterestPaid;
	
	F.interestsaved.value = format(InterestSaving); 
	//alert(InterestSaving);
	//document.xtra.InterestSaving.value=format(InterestSaving); 
	}

	

function advcalcfort(LA, IR, LP, EP, EPF, RPF, F)
{
	if (EPF[EPF.selectedIndex].value == "Monthly")
		var ExtraRepay = EP*12/52;
	else 
	{
	if (EPF[EPF.selectedIndex].value == "Fortnightly")
		var ExtraRepay = EP;
	else 
		var ExtraRepay = EP * 2;
	}
	
	FortPayment=LoanAmount * (FortIntrate / (1 - Math.pow((1+FortIntrate),-(NumPaymentsFort))));
	Repay=FortPayment;
	
	TotalRepay=Number(ExtraRepay)+Number(Repay);
	
	ExtraLoanPaymentPeriod=(Math.log(TotalRepay/(TotalRepay-(LoanAmount*FortIntrate))))/Math.log(1+FortIntrate);
	F.yearssaved.value=Math.round(ExtraLoanPaymentPeriod/26);
	
	years = Math.floor((ExtraLoanPaymentPeriod)/26);
	months = Math.round(((ExtraLoanPaymentPeriod/26) - Math.floor(ExtraLoanPaymentPeriod/26))*12);
	if (months == 12)
	{F.yearssaved.value=(years+1) + ' years '+ ' 0 months'
	}
	else   
{   F.yearssaved.value=(years) + ' years '+ months + ' months'}
	
	RepayTotal = (FortPayment*26*LoanPeriod);
	InterestPaid = (RepayTotal-LoanAmount);

	ExtraTotal = (TotalRepay*ExtraLoanPaymentPeriod);
	ExtraInterestPaid = (ExtraTotal-LoanAmount);
	
	InterestSaving = InterestPaid - ExtraInterestPaid
	F.interestsaved.value=format(InterestSaving);
	}

	
function advcalcweek(LA, IR, LP, EP, EPF, RPF, F)
{
	if (EPF[EPF.selectedIndex].value == "Monthly")
		var ExtraRepay = EP*12/52;
	else 
	{
	if (EPF[EPF.selectedIndex].value == "Fortnightly")
		var ExtraRepay = EP*12/26;
	else 
		var ExtraRepay = EP;
	}
	
	var WeekPayment=LoanAmount * (WeekIntrate / (1 - Math.pow((1+WeekIntrate),-(NumPaymentsWeek))));
	var Repay=WeekPayment;
	
	var TotalRepay=Number(ExtraRepay)+Number(Repay);
	
	var ExtraLoanPaymentPeriod=(Math.log(TotalRepay/(TotalRepay-(LoanAmount*WeekIntrate))))/Math.log(1+WeekIntrate);
	years = Math.floor((ExtraLoanPaymentPeriod)/52);
	months = Math.round(((ExtraLoanPaymentPeriod/52) - Math.floor(ExtraLoanPaymentPeriod/52))*12);
	if (months == 12)
	{F.yearssaved.value=(years+1) + ' years '+ ' 0 months'
	}
	else   
{   F.yearssaved.value=(years) + ' years '+ months + ' months'}
	
	var RepayTotal = (WeekPayment*52*LoanPeriod);
	var InterestPaid = (RepayTotal-LoanAmount);

	var ExtraTotal = (TotalRepay*ExtraLoanPaymentPeriod);
	var ExtraInterestPaid = (ExtraTotal-LoanAmount);
	
	var InterestSaving = InterestPaid - ExtraInterestPaid
	F.interestsaved.value=format(InterestSaving);
	}