iteration_of_IRR=new Array(8)
iteration_of_APR=new Array(8)
final_capital=new Array(8)
difference=new Array(8)
increment=new Array(8)

function checkNR()
{
alert(document.form.repayment_or_mixed.value);
switch (document.form.repayment_or_mixed.value)
{
 case "r":
 case "R":
 case "n":
 case "N":
 		  	  break;
 default: 
 			  document.form.repayment_or_mixed.value="n"
			  break;
}
}

function calculateIRR()
{
with (document.form)
{
rests_per_year.value=parseInt(VV(rests_per_year.value))
initial_mortgage_payment.value=validateValue(initial_mortgage_payment.value)
mortgage_payment_2nd_period.value=validateValue(mortgage_payment_2nd_period.value)
total_mortgage_over_6yrs.value=validateValue(total_mortgage_over_6yrs.value)
insurance.value=validateValue(insurance.value)
mortgage_life_months=parseFloat(mortgage_life_years.value)*12
initial_period=Math.min(mortgage_life_months,parseFloat(changing_after.value))
final_period=mortgage_life_months-initial_period
total_initial_costs=0

initial_advance.value=total_initial_costs+parseFloat(VV(loan_required.value))
   
tot_initial_costs=0
total_refunds=0
effective_net_loan=parseFloat(initial_advance.value)-(tot_initial_costs-total_refunds)
// if clause begins
if (repayment_or_mixed.value=="R" || repayment_or_mixed.value=="r")
   {
   endowment_part_throughout=0
   }
 else
   {
   endowment_part_throughout=initial_advance.value
   }

// if clause ends  
repayment_part_period_1=parseFloat(initial_advance.value)-endowment_part_throughout
firstpart=1+(parseFloat(initial_nominal_interest_rate.value)/(100*rests_per_year.value))
secondpart=Math.pow(firstpart,(-1*parseFloat(full_term_years.value)*rests_per_year.value))
initial_repayments=rests_per_year.value*(1/12)*(repayment_part_period_1*parseFloat(initial_nominal_interest_rate.value)/(100*rests_per_year.value))/(1-secondpart)
initial_repayments=initial_repayments+(parseFloat(initial_nominal_interest_rate.value)*endowment_part_throughout/1200)
periods2target=final_period*rests_per_year.value/12
firstpart=1+parseFloat(initial_nominal_interest_rate.value)/(rests_per_year.value*100)
firstpart=Math.pow(firstpart,(initial_period*rests_per_year.value/12))
secondpart=initial_advance.value*firstpart
thirdpart=(initial_repayments*1200/parseFloat(initial_nominal_interest_rate.value))*(firstpart-1)
loan_end_period1=secondpart-thirdpart
repayment_part_period_2=loan_end_period1-endowment_part_throughout
period2payments=rests_per_year.value*(1/12)
period2payments=period2payments*(repayment_part_period_2*parseFloat(new_interest_rate.value)/(100*rests_per_year.value))
firstpart=1+parseFloat(new_interest_rate.value)/(100*rests_per_year.value)
secondpart=-1*Math.max(1,(parseFloat(full_term_years.value)-initial_period/12))*rests_per_year.value
thirdpart=1-Math.pow(firstpart,secondpart)
period2payments=period2payments/(thirdpart)+parseFloat(new_interest_rate.value)*(endowment_part_throughout/1200)
// Add text entries for monthly repayments & IRR
initial_mortgage_payment.value=Math.round(initial_repayments*100)/100
mortgage_payment_2nd_period.value=period2payments
total_mortgage_over_6yrs.value=initial_repayments*parseFloat(changing_after.value)+period2payments*(parseFloat(mortgage_life_years.value)*12-parseFloat(changing_after.value))
//
rate_per_period_2=parseFloat(new_interest_rate.value)/(rests_per_year.value*100)

firstpart=Math.pow((1+rate_per_period_2),periods2target)*loan_end_period1
secondpart=period2payments*12/rests_per_year.value*(Math.pow(1+rate_per_period_2,periods2target)-1)/rate_per_period_2
loan_end_period_2=firstpart-secondpart

target_final_capital=loan_end_period_2+(parseFloat(VV(fixed_redemption.value))+loan_end_period_2*VV(redemption_as_months.value)*parseFloat(new_interest_rate.value)/1200+loan_end_period_2*parseFloat(redemption_as_prcnt.value)/100)

iteration_of_IRR[0]=((parseFloat(initial_nominal_interest_rate.value)*initial_period)+(parseFloat(new_interest_rate.value)*final_period))/(1200*mortgage_life_months)
iteration_of_IRR[0]=iteration_of_IRR[0]-(effective_net_loan-parseFloat(initial_advance.value))/(mortgage_life_months*initial_advance.value)

for (i=0;i<7;i++)
{
 	if (i>0)
	{
	    if (i==1)
		{
		 iteration_of_IRR[i]=iteration_of_IRR[i-1]+0.00001
		 }
		 else
		 {
		 iteration_of_IRR[i]=iteration_of_IRR[i-1]+0.00001*(difference[i-1]/increment[i-1])
		 }
	} // end if (i==1)
 	final_capital[i]=Math.pow(iteration_of_IRR[i]+1,mortgage_life_months)*effective_net_loan
	firstpart=Math.pow(iteration_of_IRR[i]+1,final_period)*(initial_repayments+parseFloat(insurance.value))
	secondpart=(Math.pow(iteration_of_IRR[i]+1,initial_period)-1)/iteration_of_IRR[i]
		thirdpart=(period2payments+parseFloat(insurance.value))*(Math.pow(iteration_of_IRR[i]+1,final_period)-1)/iteration_of_IRR[i]
	final_capital[i]=final_capital[i]-firstpart*secondpart-thirdpart
	difference[i]=Math.round(target_final_capital-final_capital[i])
	if (i>0)
	{
	    if (i==1)
		{
		 increment[i]=final_capital[i]-final_capital[i-1]
		}
		else
		{
		  if (difference[i]==0)
		   {
		   		increment[i]=increment[i-1]
		   }
		 else
		   {
		  	     increment[i]=(final_capital[i]-final_capital[i-1])/(iteration_of_IRR[i]-iteration_of_IRR[i-1])/100000
		   }
		 	
		} // end if (i==1)
	} // end if (i>0)
} // end for
iteration_of_IRR[7]=Math.pow((1+iteration_of_IRR[6]),12)-1
IRR.value=Math.round(iteration_of_IRR[7]*10000)/100+"%"


mortgage_term_months=parseFloat(full_term_years.value)*12
final_period_2=mortgage_term_months-initial_period
periods_to_target=final_period_2*rests_per_year.value/12
loan_end_of_last=Math.pow((1+rate_per_period_2),periods_to_target)*loan_end_period1-period2payments*12/rests_per_year.value*(Math.pow((1+rate_per_period_2),periods_to_target)-1)/rate_per_period_2
target_final_capital2=Math.round(loan_end_of_last+(parseFloat(VV(fixed_redemption.value))+loan_end_of_last*VV(redemption_as_months.value)*parseFloat(new_interest_rate.value)/1200+loan_end_of_last*parseFloat(redemption_as_prcnt.value)/100))

// Iteration of APR
iteration_of_APR[0]=iteration_of_IRR[0]
for (i=0;i<7;i++)
{
 	if (i>0)
	{
	    if (i==1)
		{
		 iteration_of_APR[i]=iteration_of_APR[i-1]+0.00001
		 }
		 else
		 {
		    if (i==2)
		    {
		 	  iteration_of_APR[i]=iteration_of_APR[i-1]+0.00001*(difference[0]/increment[1])
		 	}
		    else
			{
			  iteration_of_APR[i]=iteration_of_APR[i-1]+0.00001*(difference[i-1]/increment[i-1])
		    }
		 }
	} // end if (i==1)
 	final_capital[i]=Math.pow(iteration_of_APR[i]+1,mortgage_term_months)*effective_net_loan
	firstpart=Math.pow(iteration_of_APR[i]+1,final_period_2)*(initial_repayments+parseFloat(insurance.value))
	secondpart=(Math.pow(iteration_of_APR[i]+1,initial_period)-1)/iteration_of_APR[i]
	thirdpart=(period2payments+parseFloat(insurance.value))*(Math.pow(iteration_of_APR[i]+1,final_period_2)-1)/iteration_of_APR[i]
	final_capital[i]=final_capital[i]-firstpart*secondpart-thirdpart
	difference[i]=Math.round(target_final_capital2-final_capital[i])
	if (i>0)
	{
	    if (i==1)
		{
		 increment[i]=final_capital[i]-final_capital[i-1]
		}
		else
		{
		  if (difference[i]==0)
		   {
		   		increment[i]=increment[i-1]
		   }
		 else
		   {
		     if (i==2)
		  	     increment[i]=(final_capital[i]-final_capital[i-1])/(iteration_of_APR[i]-iteration_of_APR[i-2])/100000
			 else
			     increment[i]=(final_capital[i]-final_capital[i-1])/(iteration_of_APR[i]-iteration_of_APR[i-1])/100000
		   }
		 	
		} // end if (i==1)
	} // end if (i>0)
} // end for
iteration_of_APR[7]=Math.pow((1+iteration_of_APR[6]),12)-1
APR.value=Math.round(iteration_of_APR[7]*10000)/100+"%"

initial_advance.value=dec2(initial_advance.value)
initial_mortgage_payment.value=dec2(initial_mortgage_payment.value)
mortgage_payment_2nd_period.value=dec2(mortgage_payment_2nd_period.value)
total_mortgage_over_6yrs.value=dec2(total_mortgage_over_6yrs.value)
insurance.value=dec2(insurance.value)
rests_per_year.value=rests_per_year.value+" p.a."
} // with ends
}

