﻿// JavaScript Document
var inputStr = "";
var invalidNumber = 0;
var errorNumber = "";
var checkZero = 0;
var numtemp = "";
var prnttemp = "";
var P = 0;
var p = 0;
var I = 0;
var II = 0;
var N = 0;
var n = 0;
var blank = "                         ";
var pfinal = "";

function loanCalc(form) 
{	// obtener el formulario de entrada y determinar si es válido
  var Ptemp = form.amtLoan.value;
  var itemp = form.intRate.value;
  var ntemp = form.years.value;
  inputStr = Ptemp;
  errorNumber = "Importe del préstamo";
  validNumber();
  Ptemp = inputStr;
  inputStr = itemp;
  errorNumber = "Tipo de Interés Anual";
  validNumber();
  itemp = inputStr;
  inputStr = ntemp;
  errorNumber = "Plazo";
  validNumber();
  ntemp = inputStr;

// Entrada inválida, poner en blanco la cuota mensual
  if (invalidNumber == 1) 
  {
    form.payment.value = "";
  }
// Entrada válida, calcula cuota
  else 
  {
    P = parseFloat(Ptemp);
    II = parseFloat(itemp);
    I = II / 100 / 12;
    N = parseFloat(ntemp);
    n = N * 12;
    if (n == 0) 
    {
      standardOutput(P);
      form.payment.value = numtemp;
    }
    else 
    {
      if (I == 0) 
      {
        p = P/n;
        standardOutput(p);
        form.payment.value = numtemp;
      }
      else 
      {
        p = -((-P * I * Math.pow((1 + I),n)) / (Math.pow((1 + I),n) - 1));
        standardOutput(p);
        pfinal = numtemp;
        form.payment.value = pfinal;
        if (form.amortTable[1].checked) 
        {
          makeTable();
        }
      }
    }
  }
}

// Construir la tabla de amortización
function makeTable() 
{
  standardOutput(P);
  var PP = numtemp;
  inputStr = document.calc.year1.value;
  errorNumber = "First Payment";
  validNumber();
  var year = parseFloat(inputStr);
  var month = document.calc.month1.selectedIndex;
  var firstMonth = month;
  var curMonth = "";
  var prntMonth = "";
  var balance = P;
  var prntBal = ""
  var prinPaid = 0;
  var prntPrin = ""
  var intPaid = 0;
  var prntInt = "";
  var accumInt = 0;

// Crear la ventana
  var dataWin = window.open("","dataWin","menubar,scrollbars,resizable,width=630,height=350");
  if (dataWin != null) 
  {
	var data = "";
        data += '<HTML><HEAD><TITLE>Cuadro de amortización</TITLE><link rel="stylesheet" href="../calculadora.css"></HEAD>';
	data += '<BODY  top="20">';
	data += '<h2 align="right">Cuadro de amortización informativo</h2><br>';
	data += '<br>' + PP + ' al ' + II + '% para ' + N + ' años<BR><br>';
	data += '<table width="100%" border="0" cellspacing="0" cellpadding="2" class="generalcontent"><tr><td class="tabledata">Cuota mensual: ' + pfinal;
	data += '</td></tr></table><br><br><p class="tabledata">Puede tardar unos segundos en construir un cuadro de amortización.</P>';
	dataWin.document.write(data);
	data = "";
	data += '<table width="590" border="0" cellspacing="0" cellpadding="0" align="center" class="tabledata">';
	data += '<TR><TD ALIGN=center>MES</TD>';
	data += '<TD ALIGN=center>PRINCIPAL PAGADO</TD>';
	data += '<TD ALIGN=center>INTERESES PAGADOS</TD>';
	data += '<TD ALIGN=center>CAPITAL PENDIENTE</TD></TR>';
	data += '<TR><TD ALIGN=center>' + year + '</TD>';
	data += '<TD></TD><TD></TD><TD></TD></TR>';
	
	for (i = 0; i < n; i++) 
	{
	      curMonth = document.calc.month1.options[month].text;
	      prntMonth = curMonth + blank;
	      prntMonth = prntMonth.substring(0,12);
	      intPaid = balance * I;
	      prntValue(intPaid,22);
	      prntInt = prnttemp;
	      accumInt += intPaid;
	      prinPaid = p - intPaid;
	      prntValue(prinPaid,22);
	      prntPrin = prnttemp;
	      balance -= prinPaid;
	      prntValue(balance,23);
	      prntBal = prnttemp;
	      data += '<TR><TD ALIGN=center bgcolor="#D2D6E8">' + prntMonth + '</TD>';
	      data += '<TD ALIGN=center bgcolor="#C1C1E0">' + prntPrin + '</TD>';
	      data += '<TD ALIGN=center bgcolor="#D2D6E8">' + prntInt + '</TD>';
	      data += '<TD  ALIGN=center bgcolor="#C1C1E0">' + prntBal + '</TD></TR>';
	      if (month != 11) 
	      {
		 month++;
	      }
	      else 
	      {
	        month = 0;
	        year++;
	        if ((firstMonth != 0) || (i != n-1)) 
	        {
			data += '<TR><TD ALIGN=center>' + year + '</TD><TD></TD><TD></TD><TD></TD></TR>';
		 }
	      }
    	}
  }

  standardOutput(accumInt);
  prntAccumInt = numtemp;
  standardOutput(P+accumInt);
  var Total = numtemp;

  data += '<tr><td height="20" COLSPAN=4 ><HR SIZE="2" color="#059d84"></td></tr>'
  data += '<TR><TD ALIGN=center VALIGN=middle>TOTALES</TD>';
  data += '<TD ALIGN=center bgcolor="#D2D6E8">CAPITAL PAGADO:<BR>' + PP + '</TD>';
  data += '<TD ALIGN=center bgcolor="#C1C1E0">INTERESES PAGADOS:<BR>' + prntAccumInt + '</TD>';
  data += '<TD ALIGN=center bgcolor="#D2D6E8">CAPITAL PENDIENTE:<BR>' + Total + '</TD>';
  data += '</TR></TABLE><P><CENTER>';
  data += '<a href="#" onclick="javascript:window.close()" class="tabledata">Cerrar ventana</a>';
  data += '</CENTER></BODY>';

// escribir el HTML en la nueva ventana

  dataWin.document.write(data);
  dataWin.document.close() // Cerrarla;

}




// format for printing

function prntValue(value,len) {

  standardOutput(value);

  prnttemp = numtemp + blank;

  prnttemp = prnttemp.substring(0,len);

}



// add dollar sign and commas

function standardOutput(num) {

  num = Math.round(num * 100) / 100;

  num += "";

  cpl = num.indexOf(".");

  if (cpl == -1) {

    cpl = num.length;

    numtemp = ".00";

  }

  else {

    numtemp = num.substring(cpl,num.length) + "00";

    numtemp = numtemp.substring(0,3);

  }

  while (cpl > 3) {

  numtemp = " " + num.substring(cpl-3,cpl) + numtemp;

    cpl -= 3;

  }

  numtemp = num.substring(0,cpl) + numtemp  + " € "

}



function validNumber() {

  var oneChar = "";

  var decimalFlag = 0;

  checkZero = 0;



  for (var i = 0; i < inputStr.length; i++) {

    oneChar = inputStr.charAt(i);



// check for 0 1 2 3 4 5 6 7 8 9 , . $ % € or if not, alert user of error

    if ((oneChar < "0" || oneChar > "9") && (oneChar != ",") && (oneChar != ".") && (oneChar != "$") && (oneChar != "€") && (oneChar != "%")) {

      numberAlert();

      continue;

    }



// check for dollar and euro signs, commas or percent signs and eliminate

    if ((oneChar == "$") || (oneChar == "€") || (oneChar == ",") || (oneChar == "%")) {

      inputStr = inputStr.substring(0,i) + inputStr.substring((i + 1),inputStr.length);

      i--;

    continue;

    }



// check for decimal points and determine if valid or if not, alert user of error

    if (oneChar == ".") {

      if ((inputStr.length == 1) || (decimalFlag == 1)) {

        numberAlert();

      }

      else {

        decimalFlag = 1;

      }

    continue;

    }

  }

  if (inputStr == "") {

    inputStr = "0";

  }

}



function numberAlert() {

  //var msg = "An invalid number was entered.\nPlease reenter " + errorNumber + ".\nPress control R (command R for Macintosh),\nand then the Calculate button.";
  var msg = "Ha introducido un número no válido.\nPor favor introdúzcalo de nuevo " + errorNumber + ".\nPulse control R (command R para Macintosh),\ny después pulse el botón de Calcular.";

  alert(msg);

  invalidNumber = 1;

  checkZero = 1;

  i = inputStr.length;

}

