var old_importe  = 0;
var old_plazos   = 0;
var old_meses    = 0;
var old_tipo     = 0;
var old_cuota    = 0;
var decim_moneda = 0;

function redondea(numero) {
  var x;
  x = Math.pow(10,decim_moneda);
  return Math.round(numero * x) / x;
}

function es_numero(numero) {
  return true;
}

function ha_cambiado() {
  return true;
}

function almacena() {
  return;
}

function calcular_cuota()
{
  if (ha_cambiado() == 0) {
    return;
  }

  importe    = parseFloat(document.forms[0].importe.value);
  plazos     = parseInt(document.forms[0].plazos.value);
  tipo_anual = parseFloat(document.forms[0].tipo.value);
  meses      = parseInt(document.forms[0].meses.options[document.forms[0].meses.selectedIndex].value);
  base       = 365;

  if (isNaN(importe) || isNaN(plazos) || isNaN(tipo_anual) || importe * plazos * tipo_anual == 0) {
    alert("Para calcular la cuota debe rellenar los campos de 'Importe', 'Plazos' y 'Tipo nominal'.");
    return;
  }
  if (tipo_anual > 20.0) {
    alert("El 'Tipo nominal' es superior al 20% y no se puede utilizar para un préstamo hipotecario.");
    return;
  }
  plazos_en_meses = plazos * meses;
  tipo_mensual = 365 / base * tipo_anual / 1200.0;
  x = 1.0 + tipo_mensual;
  y = 1.0 / Math.pow(x, plazos_en_meses);
  cuota = importe * tipo_mensual / ( 1.0 - y );
  document.forms[0].cuota.value = redondea(cuota);
  almacena();
}

function calcular_importe()
{
  if (ha_cambiado() == 0) {
    return;
  }

  cuota      = parseFloat(document.forms[0].cuota.value);
  plazos     = parseInt(document.forms[0].plazos.value);
  tipo_anual = parseFloat(document.forms[0].tipo.value);
  meses      = parseInt(document.forms[0].meses.options[document.forms[0].meses.selectedIndex].value);
  base       = 365;

  if (isNaN(cuota) || isNaN(plazos) || isNaN(tipo_anual) || cuota * plazos * tipo_anual == 0) {
    alert("Para calcular el importe debe rellenar los campos de 'Cuota mensual', 'Plazos' y 'Tipo nominal'.");
    return;
  }
  if (tipo_anual > 20.0) {
	alert("El 'Tipo nominal' es superior al 20% y no se puede utilizar para un préstamo hipotecario.");
	return;
  }
  plazos_en_meses = plazos * meses;
  tipo_mensual = 365 / base * tipo_anual / 1200.0;
  x = 1.0 + tipo_mensual;
  y = 1.0 / Math.pow(x, plazos_en_meses);
  importe = cuota * ( 1.0 - y ) / tipo_mensual;
  document.forms[0].importe.value = redondea(importe);
  almacena();
}

function calcular_plazos()
{
  if (ha_cambiado() == 0) {
    return;
  }

  importe    = parseFloat(document.forms[0].importe.value);
  cuota      = parseFloat(document.forms[0].cuota.value);
  tipo_anual = parseFloat(document.forms[0].tipo.value);
  base       = 365;

  if (isNaN(importe) || isNaN(cuota) || isNaN(tipo_anual) || importe * cuota * tipo_anual == 0) {
    alert("Para calcular los plazos debe rellenar los campos de 'Importe', 'Cuota mensual' y 'Tipo nominal'.");
    return;
  }
  if (tipo_anual > 20.0) {
    alert("El 'Tipo nominal' es superior al 20% y no se puede utilizar para un préstamo hipotecario.");
    return;
  }
  tipo_mensual = 365 / base * tipo_anual / 1200.0;
  if (cuota <= importe * tipo_mensual) {
    alert("Es imposible una hipoteca con estos valores");
    return;
  }
  plazos_en_meses = Math.round((Math.log(cuota) - Math.log(cuota - importe * tipo_mensual)) / Math.log(tipo_mensual + 1.0));
  document.forms[0].plazos.value = plazos_en_meses;
  document.forms[0].meses.options[1].selected = true;
  almacena();
}

function calcular_tipo()
{
  if (ha_cambiado() == 0) {
    return;
  }

  importe    = parseFloat(document.forms[0].importe.value);
  cuota      = parseFloat(document.forms[0].cuota.value);
  plazos     = parseInt(document.forms[0].plazos.value);
  meses      = parseInt(document.forms[0].meses.options[document.forms[0].meses.selectedIndex].value);
  base       = 365;

  if (isNaN(importe) || isNaN(cuota) || isNaN(plazos) || importe * cuota * plazos == 0) {
     alert("Para calcular el tipo debe rellenar los campos de 'Importe', 'Cuota mensual' y 'Plazos'.");
     return;
  }

  plazos_en_meses = plazos * meses;
  tipo_mensual_aprox = 365 / base * 20.0 / 1200.0;
  inc_tipo = 10.0 / 1200.0;
  x = 1.0 + tipo_mensual_aprox;
  y = 1.0 / Math.pow(x, plazos_en_meses);
  cuota_aprox = redondea(importe * tipo_mensual_aprox / ( 1.0 - y ));
  while (cuota_aprox != cuota) {
    if (cuota_aprox > cuota) {
      tipo_mensual_aprox = tipo_mensual_aprox - inc_tipo;
    } else {
      tipo_mensual_aprox = tipo_mensual_aprox + inc_tipo;
    }
    if ( tipo_mensual_aprox > 365 / base * 20.0 / 1200.0 ) {
       alert("El 'Tipo nominal' es superior al 20% y no se puede utilizar para un préstamo hipotecario.");
      almacena();
      return;
    }
    inc_tipo = inc_tipo / 2.0;
    x = 1.0 + tipo_mensual_aprox;
    y = 1.0 / Math.pow(x, plazos_en_meses);
    cuota_aprox = redondea(importe * tipo_mensual_aprox / (1.0 - y ));
  }
  tipo_mensual = tipo_mensual_aprox * 1200.0 * base / 365;
  document.forms[0].tipo.value = redondea(tipo_mensual * 100.0) / 100.0;
  almacena();
}
