// JavaScript Document

document.write("<form name=\"isn\" id=\"mform\">");

document.write("<fieldset>");

document.write("<legend>Mortgage Details</legend>");

document.write("<label for=\"mortgageAmount\">Mortgage (&pound;)</label>");

document.write("<div><input id=\"mortgageAmount\" type=\"text\" size=\"10\" maxlength=\"6\" name=\"A1\" class=\"input\" /></div><br />");

document.write("<label for=\"interestRate\">Interest rate (%)</label>");

document.write("<div><input id=\"interestRate\" type=\"text\" size=\"10\" maxlength=\"6\" name=\"R1\" class=\"input\" /></div><br />");

document.write("<label for=\"termYears\">Term (years)</label>");

document.write("<div><input id=\"termYears\" type=\"text\" size=\"10\" maxlength=\"3\" name=\"T1\" class=\"input\" /></div><br />");

document.write("<label for=\"addMonthRepay\">Monthly overpayment (&pound;)</label>");

document.write("<div><input id=\"addMonthRepay\" type=\"text\" size=\"10\" maxlength=\"5\" name=\"O1\" class=\"input\" /></div><br />");

document.write("<label>&nbsp;</label><div><input type=\"button\" value=\"Calculate\" onClick=\"computeFormCol1(this.form)\" name=\"button1\" class=\"input submit\" />");

document.write("</fieldset>");

document.write("<fieldset>");

document.write("<legend>Repayment Mortgage</legend>");

document.write("<label for=\"capMonthlyPayIncOver\">Pay monthly (&pound;)</label>");

document.write("<div><input id=\"capMonthlyPayIncOver\" type=\"text\" size=\"10\" maxlength=\"8\" name=\"MR1\" class=\"input\" /></div><br />");

document.write("<label for=\"capInterestSaved\">Interest saved (&pound;)</label>");

document.write("<div><input id=\"capInterestSaved\" type=\"text\" size=\"10\" maxlength=\"8\" name=\"TI2\" class=\"input\" /></div><br />");

document.write("<label>Term reduced by</label>"); 

document.write("<div><input id=\"capYrs\" type=\"text\" size=\"3\" maxlength=\"2\" name=\"Y1\" title=\"years\" /> Yr &amp; ");

document.write("<input id=\"capMonths\" type=\"text\" size=\"3\" maxlength=\"2\" name=\"M1\" title=\"months\" /> Mo");

document.write("</div></fieldset>");

document.write("<fieldset>");

document.write("<legend>Interest Only Mortgage</legend>");

document.write("<label for=\"ioMonthlyPayIncOver\">Pay monthly (&pound;)</label>");

document.write("<div><input id=\"ioMonthlyPayIncOver\" type=\"text\" size=\"10\" maxlength=\"8\" name=\"MR2\" class=\"input\" /></div><br />");

document.write("<label for=\"ioInterestSaved\">Interest saved (&pound;)</label>");

document.write("<div><input id=\"ioInterestSaved\" type=\"text\" size=\"10\" maxlength=\"8\" name=\"IO2\" class=\"input\" /></div><br />");

document.write("<label for=\"projBalance\">End balance (&pound;)</label>");

document.write("<div><input id=\"projBalance\" type=\"text\" size=\"10\" maxlength=\"8\" name=\"IO3\" class=\"input\" /></div><br />");

document.write("<label>Paid off after</label>");

document.write("<div><input id=\"ioYrs\" type=\"text\" size=\"3\" maxlength=\"2\" name=\"Y2\" title=\"years\" /> Yr &amp; ");

document.write("<input id=\"ioMonths\" type=\"text\" size=\"3\" maxlength=\"2\" name=\"IO4\" title=\"months\" /> Mo");

document.write("</div></fieldset>");

document.write("</form>");



// http://www.skipton.co.uk/mortgages/calculators/flexible_mortgage_calculator.asp



//checks that data are valid 

	function checkNumber(input, min, max, msg) {



		msg = msg + " is invalid. ";



//check that entry is a number

		var str = input.value;

		for (var i = 0; i < str.length; i++) {

			var ch = str.substring( i, i + 1)

			if ((ch < "0" || "9" < ch) && ch != '.') {

				alert(msg);

				return false;

			}

		}



//check entry is in a sensible range

		var num = 0 + str

		if (num < min || max < num) {

			alert(msg + " Please enter a value in the range [" + min + ".." + max + "]");

			return false;

		}

		input.value = str;

		return true;

	}



	function computeFieldCol1(input) {

		if (input.value != null && input.value.length != 0)

		{

			input.value = "" + eval(input.value);

		}

		computeFormCol1(input.form);

	}





	function computeFormCol1(form) {

		var A1=form.A1.value;

		var T1=form.T1.value;

		var R1=form.R1.value;



		//making sure that an entry has been made in each field.

		if ((A1 == null || A1.length == 0) ||

			(R1 == null || R1.length == 0) ||

			(T1 == null || T1.length == 0)) 

		{

			return;

		}



// maths et al to be computed

			R1 = R1 / 100;

			var P = 1+ (((A1*R1)/12*12) * (1/(1-(Math.pow(1/(1+R1/12),T1*12)))))/12;

			var REPAY =  poundsPence(P);

			P = 1 + (A1*R1)/12;

			var INT = (A1*R1)/12;

			var N1 = 1 + (A1*1) + (INT - REPAY);

			var INT_STD = INT*12*T1;



// Code for the repayment calculation 



			month2=1;

			TOTINT2=0;

			OVERPAY = 0;	

			N2 = A1;				

			T2 = T1;			



			do {

			var INT2 = (N2*R1)/12;

			TOTINT2 = TOTINT2 + INT2;

			var N2 = (N2*1) + (INT2 - REPAY - OVERPAY);

			T2 = T2 - (1/12);

			month2 = ++month2;

			} while (N2>0);



			month=1;

			TOTINT=0;

			OVERPAY = form.O1.value;	

			N1 = A1;

			TOTMONTHS = T1*12;				

			var Repay_monthly = (1*REPAY + 1*OVERPAY);

			var Capital_Element = (Repay_monthly-(A1*R1*30.4)/365)

			var NET_Monthly = Repay_monthly-((Capital_Element * R1*30.4)/365)

			form.MR1.value = "" + poundsPence(NET_Monthly);

			

			if (OVERPAY > 0) {



			do {

			A1=N1;

			var INT = (A1*R1)/12;

			TOTINT = TOTINT + INT;

			var N1 = (A1*1) + (INT - REPAY - OVERPAY);

			T1 = T1 - (1/12);

			months_remainder = (TOTMONTHS - month) % 12;

			form.M1.value = "" + months_remainder;

			var years = ((TOTMONTHS - month) - months_remainder) / 12

			form.Y1.value = "" + years;	

			month = ++month;

			} while (N1>0);

			form.TI2.value = poundsPence(TOTINT2 - TOTINT);



			} else {



				form.TI2.value = 0;

				form.M1.value =  0;

				form.Y1.value =  0;

}





//***************** INTEREST ONLY CALCULATION **********************************//

	

			month3=0;

			TOTINT3=0;

			OVERPAY3 = form.O1.value;	

			N3 = form.A1.value;				

			T3 = form.T1.value;	

			T4 = form.T1.value;



			int_only = (N3*R1)/12;

			int_only = int_only;

			var intonly_monthly = (1*int_only) + (1*OVERPAY3);

			form.MR2.value = poundsPence(intonly_monthly);



			var N0 = form.A1.value;		

			var INT0 = (N0*R1)/12;

			INT01 = 1 + INT0;

			INT0_ROUNDED = poundsPence(INT01);

			month0 = 0;

			var TOTINT0 = 0;

			var INT0_VAR = (N0*R1)/12;



			do {

				month0 = ++month0;				

				TOTINT0 = TOTINT0 + INT0_VAR;				

				N0 = (1*N0) - (1*INT0_ROUNDED) + (1*INT0_VAR);

				INT0_VAR = (N0*R1)/12; 	

				} while ( (month0<(T3*12)) && (N0>0) );



			if (OVERPAY3 > 0) {

				do {

				month3 = ++month3;

				var INT3 = (N3*R1)/12;

				TOTINT3 = TOTINT3 + INT3;

				var N3 = (N3*1) - (1*intonly_monthly) + (1*INT3) ;

				} while (  (month3<(T3*12)) && (N3>0)   );



				if (N3>0) {

				form.IO2.value =  poundsPence(TOTINT0-TOTINT3);

				form.IO3.value = poundsPence(N3);

				form.IO4.value = "n.a.";

				form.Y2.value = "n.a.";

				} else {

				form.IO2.value =  poundsPence(TOTINT0 - TOTINT3);

				form.IO3.value = 0;

				months_remainder2 = (month3) % 12;

				form.IO4.value = "" + months_remainder2;

				var years2 = (month3 - months_remainder2) / 12

				form.Y2.value = "" + years2;	

				}



			} else {







				form.IO2.value =  0;

				form.IO3.value = 0;

				form.IO4.value = "n.a.";

				form.Y2.value = "n.a.";



			}







}



//**************** END OF INTEREST ONLY CALCULATION ************************//











	function poundsPence( N ) {

		if ((navigator.appName.indexOf('Microsoft')>-1)

			&& (navigator.appVersion.indexOf('3.0')>-1) )

		{

			return N;

		}

		S = new String( N );

		var i = S.indexOf('.');

		if (i != -1) {

			S = S.substr( 0, i );

			if (S.length-i < 0)

				S = S + '0';

		}

		return S;

	}



	//clears form

	function clearFormCol1(form) {

		form.A1.value = "";

		form.T1.value = "";

		form.R1.value = "";

		form.O1.value = "";

		form.Y1.value = "";

		form.Y2.value = "";

		form.M1.value = "";

		form.TI2.value = "";

		form.IO2.value = "";

		form.IO3.value = "";

		form.IO4.value = "";

		form.MR1.value =  "";

		form.MR2.value =  "";

	}