/* AUTHOR: RUSSEL COLE */
/* CREATION DATE: 12/19/00 */
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 compareIRRs()
{
with (document.form)
{

if (parseInt(IRR.value*100) > parseInt(IRR2.value*100))
{
compared.src="images/lesser.gif"
compared.alt="Option 2 is best"
}
if (parseInt(IRR.value*100) < parseInt(IRR2.value*100))
{
compared.src="images/greater.gif"
compared.alt="Option 1 is best"
}
if (parseInt(IRR.value*100) == parseInt(IRR2.value*100))
{
compared.src="images/equal.gif"
compared.alt="Equal"
}
if (parseInt(APR.value*100) > parseInt(APR2.value*100))
{
compared2.src="images/lesser.gif"
compared2.alt="Option 2 is best"
}
if (parseInt(APR.value*100) < parseInt(APR2.value*100))
{
compared2.src="images/greater.gif"
compared2.alt="Option 1 is best"
}
if (parseInt(APR.value*100) == parseInt(APR2.value*100))
{
compared2.src="images/equal.gif"
compared2.alt="Equal"
}
}// end with
}

function calculateIRR()
{
with (document.form)
{
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
if (valuation_chk.checked==true)
   total_initial_costs=total_initial_costs+parseFloat(VV(valuation_fee.value))
if (application_chk.checked==true)
   total_initial_costs=total_initial_costs+parseFloat(VV(application_fee.value))
if (mortgage_chk.checked==true)
   total_initial_costs=total_initial_costs+parseFloat(VV(mortgage_indemnity.value))
if (legal_chk.checked==true)
   total_initial_costs=total_initial_costs+parseFloat(VV(legal_fees.value))
if (other_chk.checked==true)
   total_initial_costs=total_initial_costs+parseFloat(VV(other_mortgage_costs.value))
initial_advance.value=total_initial_costs+parseFloat(VV(loan_required.value))   
tot_initial_costs=parseFloat(VV(valuation_fee.value))+parseFloat(VV(application_fee.value))+parseFloat(VV(mortgage_indemnity.value))+parseFloat(VV(legal_fees.value))+parseFloat(VV(other_mortgage_costs.value))
total_refunds=parseFloat(VV(cashback.value))+parseFloat(VV(other_refunds.value))
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
   {
   if (repayment_or_mixed.value=="M" || repayment_or_mixed.value=="m")
   {
   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_advance.value=total_initial_costs+parseFloat(VV(loan_required.value))
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*parseFloat(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*parseFloat(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)
compareIRRs()

} // with ends
}



function calculateIRR2()
{
with (document.form)
{
initial_mortgage_payment2.value=validateValue(initial_mortgage_payment2.value)
mortgage_payment_2nd_period2.value=validateValue(mortgage_payment_2nd_period2.value)
total_mortgage_over_6yrs2.value=validateValue(total_mortgage_over_6yrs2.value)
insurance2.value=validateValue(insurance2.value)

mortgage_life_months=parseFloat(mortgage_life_years2.value)*12
initial_period=Math.min(mortgage_life_months,parseFloat(changing_after2.value))
final_period=mortgage_life_months-initial_period
total_initial_costs=0
if (valuation_chk2.checked==true)
   total_initial_costs=total_initial_costs+parseFloat(VV(valuation_fee2.value))
if (application_chk2.checked==true)
   total_initial_costs=total_initial_costs+parseFloat(VV(application_fee2.value))
if (mortgage_chk2.checked==true)
   total_initial_costs=total_initial_costs+parseFloat(VV(mortgage_indemnity2.value))
if (legal_chk2.checked==true)
   total_initial_costs=total_initial_costs+parseFloat(VV(legal_fees2.value))
if (other_chk2.checked==true)
   total_initial_costs=total_initial_costs+parseFloat(VV(other_mortgage_costs2.value))
initial_advance2.value=total_initial_costs+parseFloat(VV(loan_required2.value))   
tot_initial_costs=parseFloat(VV(valuation_fee2.value))+parseFloat(VV(application_fee2.value))+parseFloat(VV(mortgage_indemnity2.value))+parseFloat(VV(legal_fees2.value))+parseFloat(VV(other_mortgage_costs2.value))
total_refunds=parseFloat(VV(cashback2.value))+parseFloat(VV(other_refunds2.value))
effective_net_loan=parseFloat(validateValue(initial_advance2.value))-(tot_initial_costs-total_refunds)

// if clause begins
if (repayment_or_mixed2.value=="R" || repayment_or_mixed2.value=="r")
   {
   endowment_part_throughout=0
   }
else
   {
   if (repayment_or_mixed2.value=="M" || repayment_or_mixed2.value=="m")
   {
   endowment_part_throughout=0
   }
   else
   {
   endowment_part_throughout=initial_advance2.value
   }
}
// if clause ends  
repayment_part_period_1=parseFloat(initial_advance2.value)-endowment_part_throughout
firstpart=1+(parseFloat(initial_nominal_interest_rate2.value)/(100*rests_per_year2.value))
secondpart=Math.pow(firstpart,(-1*parseFloat(full_term_years2.value)*rests_per_year2.value))
initial_repayments=rests_per_year2.value*(1/12)*(repayment_part_period_1*parseFloat(initial_nominal_interest_rate2.value)/(100*rests_per_year2.value))/(1-secondpart)
initial_repayments=initial_repayments+(parseFloat(initial_nominal_interest_rate2.value)*endowment_part_throughout/1200)
periods2target=final_period*rests_per_year2.value/12
firstpart=1+parseFloat(initial_nominal_interest_rate2.value)/(rests_per_year2.value*100)
firstpart=Math.pow(firstpart,(initial_period*rests_per_year2.value/12))
secondpart=initial_advance2.value*firstpart
thirdpart=(initial_repayments*1200/parseFloat(initial_nominal_interest_rate2.value))*(firstpart-1)
loan_end_period1=secondpart-thirdpart
repayment_part_period_2=loan_end_period1-endowment_part_throughout
period2payments=rests_per_year2.value*(1/12)
period2payments=period2payments*(repayment_part_period_2*parseFloat(new_interest_rate2.value)/(100*rests_per_year2.value))
firstpart=1+parseFloat(new_interest_rate2.value)/(100*rests_per_year2.value)
secondpart=-1*Math.max(1,(parseFloat(full_term_years2.value)-initial_period/12))*rests_per_year2.value
thirdpart=1-Math.pow(firstpart,secondpart)
period2payments=period2payments/(thirdpart)+parseFloat(new_interest_rate2.value)*(endowment_part_throughout/1200)
// Add text entries for monthly repayments & IRR

initial_mortgage_payment2.value=Math.round(initial_repayments*100)/100
mortgage_payment_2nd_period2.value=period2payments
total_mortgage_over_6yrs2.value=initial_repayments*parseFloat(changing_after2.value)+period2payments*(parseFloat(mortgage_life_years2.value)*12-parseFloat(changing_after2.value))

//
rate_per_period_2=parseFloat(new_interest_rate2.value)/(rests_per_year2.value*100)

firstpart=Math.pow((1+rate_per_period_2),periods2target)*loan_end_period1
secondpart=period2payments*12/rests_per_year2.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_redemption2.value))+loan_end_period_2*parseFloat(redemption_as_months2.value)*parseFloat(new_interest_rate2.value)/1200+loan_end_period_2*parseFloat(redemption_as_prcnt2.value)%100)

iteration_of_IRR[0]=((parseFloat(initial_nominal_interest_rate2.value)*initial_period)+(parseFloat(new_interest_rate2.value)*final_period))/(1200*mortgage_life_months)
iteration_of_IRR[0]=iteration_of_IRR[0]-(effective_net_loan-parseFloat(initial_advance2.value))/(mortgage_life_months*initial_advance2.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(insurance2.value))
	secondpart=(Math.pow(iteration_of_IRR[i]+1,initial_period)-1)/iteration_of_IRR[i]
	thirdpart=(period2payments+parseFloat(insurance2.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
IRR2.value=Math.round(iteration_of_IRR[7]*10000)/100

mortgage_term_months=parseFloat(full_term_years2.value)*12
final_period_2=mortgage_term_months-initial_period
periods_to_target=final_period_2*rests_per_year2.value/12
loan_end_of_last=Math.pow((1+rate_per_period_2),periods_to_target)*loan_end_period1-period2payments*12/rests_per_year2.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_redemption2.value))+loan_end_of_last*parseFloat(redemption_as_months2.value)*parseFloat(new_interest_rate2.value)/1200+loan_end_of_last*parseFloat(redemption_as_prcnt2.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(insurance2.value))
	secondpart=(Math.pow(iteration_of_APR[i]+1,initial_period)-1)/iteration_of_APR[i]
	thirdpart=(period2payments+parseFloat(insurance2.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
APR2.value=Math.round(iteration_of_APR[7]*10000)/100

initial_advance2.value=dec2(initial_advance2.value)
initial_mortgage_payment2.value=dec2(initial_mortgage_payment2.value)
mortgage_payment_2nd_period2.value=dec2(mortgage_payment_2nd_period2.value)
total_mortgage_over_6yrs2.value=dec2(total_mortgage_over_6yrs2.value)
insurance2.value=dec2(insurance2.value)
compareIRRs()

} // with ends
}
