//
// Basado en Libro Java al Descubierto
//
//
//........................................
function checkNumber(input, min, max, msg)
{
  msg = " campo " + msg + " tiene dato invalido: " + input.value;
  if (input.value == null || input.value == 0)
  {
    alert(msg);
	return false;
  }
  else
  {
    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;
	  }
    }
    var num = 0 + str;
    if (num<min || max<num)
    {
      alert(msg + " fuera de rango -" + min + ".." + max + "-");
	  return false;
    }
    input.value = str;
    return true;
  }
}
//
//.........................
function computeForm(form)
{
//alert("entre computeForm");
//alert("form.hacer.value= "+form.hacer.value);

  var str = form.hacer.value;
  form.oper1.value = str.substring(2, 3)
  form.oper2.value = str.substring(0, 1)

  var n = form.npagos.value;
  var i = form.interes.value;
  i = i / 100.0;

  var pow = 1;
  for (var j=0; j<form.npagos.value; j++)
    pow = pow * (1 + i);

  if (form.hacer.value == "P/F")
  {
  form.presente.value = form.futuro.value * (1 / pow);
  form.soluci1.value = form.futuro.value;
  form.soluci2.value = form.presente.value;
  }
  if (form.hacer.value == "F/P")
  {
  form.futuro.value = form.presente.value * (pow);
  form.soluci1.value = form.presente.value;
  form.soluci2.value = form.futuro.value;
  }
  
  if (form.hacer.value == "P/A")
  {
  form.presente.value = form.amortizacion.value * ((pow - 1) / (pow * i));
  form.soluci1.value = form.amortizacion.value;
  form.soluci2.value = form.presente.value;
  }
  if (form.hacer.value == "A/P")
  {
  form.amortizacion.value = form.presente.value * ((pow * i) / (pow - 1));
  form.soluci1.value = form.presente.value;
  form.soluci2.value = form.amortizacion.value;
  }

  if (form.hacer.value == "A/F")
  {
  form.amortizacion.value = form.futuro.value * (i / (pow - 1));
  form.soluci1.value = form.futuro.value;
  form.soluci2.value = form.amortizacion.value;
  }
  if (form.hacer.value == "F/A")
  {
  form.futuro.value = form.amortizacion.value * ((pow - 1) / i);
  form.soluci1.value = form.amortizacion.value;
  form.soluci2.value = form.futuro.value;
  }

  if (form.hacer.value == "P/G")
  {
  form.presente.value = form.gradiente.value * ((1 / i) * (((pow - 1) / (i*pow)) - (n/pow)));
  form.soluci1.value = form.gradiente.value;
  form.soluci2.value = form.presente.value;
  }
  if (form.hacer.value == "G/P")
  {
  form.gradiente.value = form.presente.value * (i * (1 / (((pow - 1) / (i*pow)) - (n/pow))));
  form.soluci1.value = form.presente.value;
  form.soluci2.value = form.gradiente.value;
  }

  if (form.hacer.value == "A/G")
  {
  form.amortizacion.value = form.gradiente.value * ((1 / i) - (n / (pow - 1)));
  form.soluci1.value = form.gradiente.value;
  form.soluci2.value = form.amortizacion.value;
  }
  if (form.hacer.value == "G/A")
  {
  form.gradiente.value = form.amortizacion.value * (1/ ((1 / i) - (n / (pow - 1))));
  form.soluci1.value = form.amortizacion.value;
  form.soluci2.value = form.gradiente.value;
  }

  if (form.hacer.value == "F/G")
  {
  form.futuro.value = form.gradiente.value * ((1 / i) * (((pow - 1) / i) - n));
  form.soluci1.value = form.gradiente.value;
  form.soluci2.value = form.futuro.value;
  }
  if (form.hacer.value == "G/F")
  {
  form.gradiente.value = form.futuro.value * (1 /((1 / i) * (((pow - 1) / i) - n)));
  form.soluci1.value = form.futuro.value;
  form.soluci2.value = form.gradiente.value;
  }
}
//
//..........................
function computeField(input)
{
//alert("computeField "+input.name+"= "+input.value);

  if (input.name == "npagos" && (!checkNumber(input, 1, 480, "# de pagos")))
	return;
  if (input.name == "interes" && (!checkNumber(input, 1, 99, "Interés")))
	return;
  if (input.name == "presente" && (!checkNumber(input, 100, 100000000, "Valor Presente")))
    return;
  if (input.name == "amortizacion" && (!checkNumber(input, 100, 10000000, "Valor Presente")))
    return;
  if (input.name == "futuro" && (!checkNumber(input, 100, 100000000, "Valor Presente")))
    return;
  if (input.name == "gradiente" && (!checkNumber(input, 100, 10000000, "Valor Presente")))
    return;
  if (input.value != null && input.value.lenght != 0)
    input.value = "" + eval(input.value);
}
//
//......................
function clearForm(form)
{
  form.npagos.value = "";
  form.interes.value = "";
  form.presente.value = "";
  form.futuro.value = "";
  form.amortizacion.value = "";
  form.gradiente.value = "";
  form.oper1.value = "";
  form.soluci1.value = "";
  form.oper2.value = "";
  form.soluci2.value = "";
}

//
//......................
function rdolinski_vdt_ini()
{
  vdtHTML = "";

  vdtHTML += "<center><font size=+1>Calculadora VDT</font><small><b>   ---Valor del Dinero en el Tiempo---   </b> ( demo versión mejorada hecho en JavaScript y HTML )</small><br>"
+ "<font size=+1>por Ricardo Dolinski Garrido</font><br>"
+ "</center>"

+ "<hr>"

+ "<center>"
+ "<form method=POST>"
+ "<input type='hidden' name='hacer'>"

+ "<table border=4 bgcolor=AAFFAA text=000000>"
+ "<tr><td align='center' colspan=6><small><b>Ingresar Datos</b></small>"
+ "</td></tr>"
+ "<tr>"
+ "<td align='center' colspan=6>"
+ "#Pagos: <input type=text name=npagos size=5 onChange=computeField(this)>"
+ "Interés: <input type=text name=interes size=6 onChange=computeField(this)>"
+ "</td>"
+ "</tr>"
+ "<tr>"
+ "<td></td>"
+ "<td><DIV ALIGN=CENTER>Valor Presente</DIV></td>"
+ "<td><DIV ALIGN=CENTER>Amortización</DIV></td>"
+ "<td><DIV ALIGN=CENTER>Valor Futuro</DIV></td>"
+ "<td><DIV ALIGN=CENTER>Gradiente</DIV></td>"
+ "<td></td>"
+ "</tr>"
+ "<tr>"
+ "<td></td>"
+ "<td align=center><input type=text name=presente size=20 onChange=computeField(this)></td>"
+ "<td align=center><input type=text name=amortizacion size=20 onChange=computeField(this)></td>"
+ "<td align=center><input type=text name=futuro size=20 onChange=computeField(this)></td>"
+ "<td align=center><input type=text name=gradiente size=20 onChange=computeField(this)></td>"
+ "<td align=center></td>"
+ "</tr>"

+ "<tr>"
+ "<td align='center' colspan=3>"

+ "<table border=4 bgcolor=FFFAAA text=000000>"
+ "<tr><td align='center' colspan=3><small><b>Seleccionar Operación</b></small>"
+ "</td></tr>"
+ "<tr>"
+ "<td align='center' colspan=3>"
+ "<input type='button' value='A / P' name='A/P' onClick='javascript: form.hacer.value = this.name; computeForm(this.form)'>"
+ "<input type='button' value='F / P' name='F/P' onClick='javascript: form.hacer.value = this.name; computeForm(this.form)'>"
+ "<input type='button' value='G / P' name='G/P' onClick='javascript: form.hacer.value = this.name; computeForm(this.form)'>"
+ "</td>"
+ "</tr>"
+ "<tr>"
+ "<td align='center' colspan=3>"
+ "<input type='button' value='P / A' name='P/A' onClick='javascript: form.hacer.value = this.name; computeForm(this.form)'>"
+ "<input type='button' value='F / A' name='F/A' onClick='javascript: form.hacer.value = this.name; computeForm(this.form)'>"
+ "<input type='button' value='G / A' name='G/A' onClick='javascript: form.hacer.value = this.name; computeForm(this.form)'>"
+ "</td>"
+ "</tr>"
+ "<tr>"
+ "<td align='center' colspan=3>"
+ "<input type='button' value='P / F' name='P/F' onClick='javascript: form.hacer.value = this.name; computeForm(this.form)'>"
+ "<input type='button' value='A / F' name='A/F' onClick='javascript: form.hacer.value = this.name; computeForm(this.form)'>"
+ "<input type='button' value='G / F' name='G/F' onClick='javascript: form.hacer.value = this.name; computeForm(this.form)'>"
+ "</td>"
+ "</tr>"
+ "<tr>"
+ "<td align='center' colspan=3>"
+ "<input type='button' value='P / G' name='P/G' onClick='javascript: form.hacer.value = this.name; computeForm(this.form)'>"
+ "<input type='button' value='A / G' name='A/G' onClick='javascript: form.hacer.value = this.name; computeForm(this.form)'>"
+ "<input type='button' value='F / G' name='F/G' onClick='javascript: form.hacer.value = this.name; computeForm(this.form)'>"
+ "</td>"
+ "</tr>"
+ "</table>"

+ "</td>"

+ "<td align='center' colspan=3>"
+ "<table border=4 bgcolor=FFFAAA text=000000>"
+ "<tr><td align='center' colspan=3><small><b>Operaciones Aritmeticas</b></small>"
+ "</td></tr>"
+ "<tr>"
+ "<td align='center' colspan=3>"

+ "<table border='2' width='200' cellspacing='0' cellpadding='0' bgcolor='#AABBCC' border=13"
+ "style='border-color:black' onClick='previouskey=event.srcElement.innerText'>"
  + "<tr>"
    + "<td width='100%' bgcolor='#FFFFFF' id='result'"
    + "style='font:bold 16px Verdana;color:black;text-align='right''>0</td>"
  + "</tr>"
  + "<tr>"
    + "<td width='100%' valign='middle' align='center'><table border='0' width='100%'"
    + "cellspacing='0' cellpadding='0' style='font:bold 16px Verdana;color:white'>"
      + "<tr>"
        + "<td width='80%' align='center'><table border='1' width='100%' cellspacing='0'"
        + "cellpadding='0' style='cursor:hand;font:bold 16px Verdana;color:white'"
        + "onMouseover=\"if (event.srcElement.tagName=='TD')event.srcElement.style.color='yellow'\""
        + "onMouseout=\"event.srcElement.style.color='white'\" onselectStart='return false'"
        + "onClick=\"calculate()\" height='82'>"
          + "<tr>"
            + "<td width='25%' align='center' height='17'>7</td>"
            + "<td width='25%' align='center' height='17'>8</td>"
            + "<td width='25%' align='center' height='17'>9</td>"
            + "<td width='25%' align='center' height='17'>/</td>"
          + "</tr>"
          + "<tr>"
            + "<td width='25%' align='center' height='19'>4</td>"
            + "<td width='25%' align='center' height='19'>5</td>"
            + "<td width='25%' align='center' height='19'>6</td>"
            + "<td width='25%' align='center' height='19'>*</td>"
          + "</tr>"
          + "<tr>"
            + "<td width='25%' align='center' height='19'>1</td>"
            + "<td width='25%' align='center' height='19'>2</td>"
            + "<td width='25%' align='center' height='19'>3</td>"
            + "<td width='25%' align='center' height='19'>-</td>"
          + "</tr>"
          + "<tr>"
            + "<td width='25%' align='center' height='19'>0</td>"
            + "<td width='25%' align='center' height='19'"
            + "onClick=\"pn();previouskey=1;event.cancelBubble=true\">+/-</td>"
            + "<td width='25%' align='center' height='19'>.</td>"
            + "<td width='25%' align='center' height='19'>+</td>"
          + "</tr>"
        + "</table>"
        + "</td>"
        + "<td width='20%'><div align='left'><table border='1' width='100%' cellspacing='0'"
        + "cellpadding='0'>"
          + "<tr>"
            + "<td width='100%' style='cursor:hand;font:bold 16px Verdana;color:white;text-align:center'"
            + "onClick=\"result.innerText=0;results=''\">C</td>"
          + "</tr>"
        + "</table>"
        + "</div><div align='left'><table border='1' width='100%' cellspacing='0' cellpadding='0'"
        + "height='61'>"
          + "<tr>"
            + "<td width='100%' style='cursor:hand;font:bold 16px Verdana;color:white;text-align:center'"
            + "onMouseover=\"event.srcElement.style.color='yellow'\""
            + "onMouseout=\"event.srcElement.style.color='white'\" onClick=\"calculateresult()\">=</td>"
          + "</tr>"
        + "</table>"
        + "</div></td>"
      + "</tr>"
    + "</table>"
    + "</td>"
  + "</tr>"
+ "</table>"
+ "</td>"
+ "</tr>"
+ "</table>"

+ "</td>"
+ "</tr>"

+ "<tr>"
+ "<td align='center' colspan=6>"
+ "<table border=4 bgcolor=AAAAAA text=000000>"
+ "<tr><td align='center'>"
+ "<input type=text name=oper1 size=1 DISABLED>"
+ "<input type=text name=soluci1 size=20 DISABLED>"
+ "<small><b> equivale a </b></small>"
+ "<input type=text name=oper2 size=1 DISABLED>"
+ "<input type=text name=soluci2 size=20 DISABLED>"
+ "</td></tr>"
+ "</table>"
+ "<input type='reset' value='Limpiar' onClick=clearForm(this.form)>"
+ "</td>"
+ "</tr>"
+ "</table>"

+ "</form>"
+ "</center>"

  vdtDIV.innerHTML = vdtHTML;

}

