function ponEuros(origenPtas, destinoEuros) {
	if (origenPtas==null || origenPtas.value.length==0) {
		origenPtas.value = 0;
		destinoEuros.value = 0;
	}
	else {
		destinoEuros.value = Math.round((origenPtas.value / 166.386)*100) / 100;
	}
}
function ponPtas(origenEuros, destinoPtas) {
	if (origenEuros==null || origenEuros.value.length==0) {
		origenEuros.value = 0;
		destinoPtas.value = 0;
	}
	else {
		destinoPtas.value = Math.round(origenEuros.value * 166.386);
	}
}

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 = Math.round(M);
	form.cantidadEuros.value = Math.round((M / 166.386)*100) / 100;
  }
}