<!--

function update_number(input)

{

  var temp;



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

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

  else

    input.value = "0.00";

}



function binomial(a, n)

{

  var i;

  var sum, pow, term, cof;



  if(n < 0)

    return 1.0 / binomial(a, -n);



  sum = 1.0;

  pow = n;

  term = 1;

  cof = 1.0

  for(i = 1; i < 10; i++) {

    cof = cof * pow / i;

    pow = pow - 1.0;

    term = term * a;

    sum = sum + cof * term;

  }



  return sum;

}



function error(P, I, N, Y, M)

{

  var value;



  value = P - M * (1.0 - binomial(I / Y, -N)) / (I / Y);

  return value;

}



function compute_loan(form)

{

  var P, I, N, Y, M;



  if((form.rate.value.length == 0) ||

     (form.num.value.length == 0) ||

     (form.num_annum.value.length == 0) ||

     (form.amount.value.length == 0))

    form.loan.value = "0.00";

  else {

    I = eval(form.rate.value) / 100.0;

    N = eval(form.num.value);

    Y = eval(form.num_annum.value);

    M = eval(form.amount.value);



    if(Y == 0.0)

      P = 0.0;

    else

      P = M * (1.0 - binomial(I / Y, -N)) / (I / Y);

    form.loan.value = "" + P;

  }

}



function compute_rate(form)

{

  var P, I, N, Y, M;



  if((form.loan.value.length == 0) ||

     (form.num.value.length == 0) ||

     (form.num_annum.value.length == 0) ||

     (form.amount.value.length == 0))

    form.rate.value = "0.00";

  else {

    P = eval(form.loan.value);

    N = eval(form.num.value);

    Y = eval(form.num_annum.value);

    M = eval(form.amount.value);



    if(Y == 0) 

      I = 0.0;

    else {

      var low, high, mid, err_mid;

      var count;



      low  = 0.001;

      high = 10.0;



      count = 0;

      while(count < 30) {

        count = count + 1;

        mid = (high + low) / 2.0;

        err_mid = error(P, mid, N, Y, M);

        if(err_mid == 0.0)

          break;

        if(err_mid < 0.0) {

          low = mid;

          continue;

        }

        if(0.0 < err_mid) {

          high = mid;

          continue;

        }

      }

      I = mid * 100.0;

    }



    form.rate.value = "" + I;

  }

}



function compute_num(form)

{

  var P, I, N, Y, M;



  if((form.loan.value.length == 0) ||

     (form.rate.value.length == 0) ||

     (form.num_annum.value.length == 0) ||

     (form.amount.value.length == 0))

    form.num.value = "0.00";

  else {

    P = eval(form.loan.value);

    I = eval(form.rate.value) / 100.0;

    Y = eval(form.num_annum.value);

    M = eval(form.amount.value);



    if(Y == 0) 

      I = 0.0;

    else {

      var low, high, mid, err_mid;

      var count;



      low  = 0;

      high = 1024;



      count = 0;

      while(count < 10) {

        count = count + 1;

        mid = (high + low) / 2.0;

        err_mid = error(P, I, mid, Y, M);

        if(err_mid == 0.0)

          break;

        if(0.0 < err_mid) {

          low = mid;

          continue;

        }

        if(err_mid < 0.0) {

          high = mid;

          continue;

        }

      }

      N = mid;

    }



    form.num.value = "" + N;

  }

}



function compute_numann(form)

{

  var P, I, N, Y, M;



  if((form.loan.value.length == 0) ||

     (form.rate.value.length == 0) ||

     (form.num.value.length == 0) ||

     (form.amount.value.length == 0))

    form.num_annum.value = "0.00";

  else {

    P = eval(form.loan.value);

    I = eval(form.rate.value) / 100.0;

    N = eval(form.num.value);

    M = eval(form.amount.value);



    var low, high, mid, err_mid;

    var count;



    low  = 0;

    high = 1024;



    count = 0;

    while(count < 10) {

      count = count + 1;

      mid = (high + low) / 2.0;

      err_mid = error(P, I, N, mid, M);

      if(err_mid == 0.0)

        break;

      if(0.0 < err_mid) {

        low = mid;

        continue;

      }

      if(err_mid < 0.0) {

        high = mid;

        continue;

      }

    }

    Y = mid;



    form.num_annum.value = "" + Y;

  }

}



function compute_amount(form)

{

  var P, I, N, Y, M;



  if((form.loan.value.length == 0) ||

     (form.rate.value.length == 0) ||

     (form.num.value.length == 0) ||

     (form.num_annum.value.length == 0))

    form.amount.value = "0.00";

  else {

    P = eval(form.loan.value);

    I = eval(form.rate.value) / 100.0;

    N = eval(form.num.value);

    Y = eval(form.num_annum.value);



    if(Y == 0.0)

      M = 0.0;

    else

      M = P * I / Y / (1.0 - binomial(I / Y, -N));

    form.amount.value = "" + M;

  }

}



function validate_calculate(form)

{

	var c;

	c=0;

	if((form.loan.value.length != 0) && (form.loan.value != 0.0))

		c++;

	else

		form.loan.value = 0.0;

	if((form.rate.value.length != 0) && (form.rate.value != 0.0))

		c++;

	else

		form.rate.value = 0.0;

	if((form.num.value.length != 0) && (form.num.value != 0.0))

		c++;

	else

		form.num.value = 0.0;

	if((form.num_annum.value.length != 0) && (form.num_annum.value != 0.0))

		c++;

	else

		form.num_annum.value = 0.0;

	if((form.amount.value.length != 0) && (form.amount.value != 0.0))

		c++;

	else

		form.amount.value = 0.0;

	if(c==5)

		compute_amount(form);		

	else {

		if(c!=4)

			alert("You must fill in four out of the five possible values");

	else {

		if(form.loan.value == 0)

			compute_loan(form);

		if(form.rate.value == 0)

			compute_rate(form);

		if(form.num.value == 0)

			compute_num(form);

		if(form.num_annum.value == 0)

			compute_numann(form);

		if(form.amount.value == 0)

			compute_amount(form);

		

		} 

	}

}

//-->