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);

    P = Math.floor(P*100) / 100;
    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;
    }

    I = Math.floor(I*100) / 100;
    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;
    }

    N = Math.floor(N*100) / 100;
    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;
    Y = Math.floor(Y*100) / 100;
    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));
      M = Math.floor(M*100) / 100;
    form.amount.value = "" + M;
  }
}

