document.MaxFractionalPartDigits = 2;
document.aElementosInteger = ['N'];
document.aNumeroElementosInteger = ['I', 'C'];
document.aNumeroElementosDouble = new Array();
document.aElementosDouble = ['R'];

function lTrim(s)
{
  var i = 0;
  var j = 0;

  for (i = 0; i <= s.length - 1; i++)
     if (s.substring(i, i + 1) != ' ')
     {
       j = i;
       break;
     }

  return s.substring(j, s.length);
}

function rTrim(s)
{
  var j = 0;

  for (var i = s.length - 1; i > -1; i--)
    if (s.substring(i, i + 1) != ' ')
    {
      j = i;
      break;
    }

  return s.substring(0, j + 1);
}

function Trim(s)
{
  return lTrim(rTrim(s));
}

function cadenaANumero_formatearPreviaConversion()
{
  var strFuente = Trim(String(this.value));
  var chrCharacter;
  var strParteExponencial = '';
  this.value = '';

  for (var i = 0; i < strFuente.length; i++)
  {
    chrCharacter = strFuente.substring(i, i + 1);

    if (chrCharacter != '.' && chrCharacter != ',')
    {
      this.value = this.value + chrCharacter;
    }
    else if (chrCharacter == ',')
    {
      strParteExponencial = 'e-' + String(strFuente.length - 1 - i);
    }
  }

  this.value = this.value + strParteExponencial;
}

function cadenaANumero(s)
{
  this.value = s;

  this.thFormatBeforeParsing = cadenaANumero_formatearPreviaConversion;
}

function toFloat(s)
{
  var tempNum = new cadenaANumero(s);

  tempNum.thFormatBeforeParsing();
  return parseFloat(tempNum.value);
}

function toInt(s)
{
  var tempNum = new cadenaANumero(s);

  tempNum.thFormatBeforeParsing();
  return parseInt(tempNum.value);
}

function modificarCampos()
{

  R = toFloat(document.Form.R.value); // Tipo de interes anual 
  N = toInt(document.Form.N.value); // Numero de anos
  I = toFloat(document.Form.I.value); // Importe deseado
  C = toFloat(document.Form.C.value); // Cuota mensual
  divisa = document.Form.divisa.options[document.Form.divisa.selectedIndex].value;

  if(isNaN(R) || R<=0) {
    alert('El tipo de interés anual es un campo obligatorio'); // + R); 
  }
  else if(!isNaN(N) && N>0 && !isNaN(I) && I>0) { // calculamos la cuota
    C = I*(R/1200)/(1-Math.pow(1+R/1200,-N*12));
    document.Form.C.value = redondear(C,divisa);
    reformatear(document.Form.C);
  }

  else if(!isNaN(I) && I>0 && !isNaN(C) && C>0) { // calculamos el número de anos

    N = Math.round(Math.log(1-(I*R/(C*1200)))/(-12*Math.log(1+R/1200)));
    document.Form.N.value = N;
    C = I*(R/1200)/(1-Math.pow(1+R/1200,-N*12));
    document.Form.C.value = redondear(C,divisa); 
    reformatear(document.Form.C);
  }

  else if(!isNaN(N) && N>0 && !isNaN(C) && C>0) { // calculamos el importe deseado

    I = C*(1-Math.pow(1+R/1200,-N*12))/(R/1200);
    document.Form.I.value = redondear(I,divisa);
    reformatear(document.Form.I);
  }
  else {
  	alert('El tipo de interés es un campo obligatorio y al menos dos de los tres campos restantes');
  }
}

function cambiarCamposActuales()
{
  var aInterIQ, aInterDQ;

  aInterIQ = document.aNumeroElementosInteger;
  aInterDQ = document.aNumeroElementosDouble;

  document.aNumeroElementosInteger = aInterDQ;
  document.aNumeroElementosDouble = aInterIQ;

  I = toFloat(document.Form.I.value); // Importe deseado
  C = toFloat(document.Form.C.value); // Cuota mensual

  toCurrency = document.Form.divisa.options[document.Form.divisa.selectedIndex].value;

  if(!isNaN(I) && I>0)
  {
    document.Form.I.value = cambiarActual(I,toCurrency);
    reformatear(document.Form.I);
  }

  if(!isNaN(C) && C>0)
  {
    document.Form.C.value = cambiarActual(C,toCurrency);
    reformatear(document.Form.C);
  }

  return true;

}

function cambiarActual(anynum,toCurrency)
{
  var retvalue = '';
  currency = 166.386; // Pesetas/1Euro
  
  if(toCurrency == 'Peseta') {
    retvalue = redondear(anynum*currency, toCurrency);
  }
  else {     
    retvalue = redondear(anynum/currency);
  }

  return retvalue;
}

function redondear(anynum,currency)
{
  var destination = '';
  var chrCharacter = '';

  var source = '';
  if(currency == 'Peseta') {
    source = source + Math.round(anynum);
  }
  else {     
    source = source + Math.round(anynum*100)/100;
  }

  source = String(source);

  for (var i = 0; i < source.length; i++)
  {
    chrCharacter = source.substring(i, i + 1);

    if (chrCharacter == '.')
    {
      destination = destination + ',';
    }
    else
    {
      destination = destination + chrCharacter;
    }
  }

  return destination;
}

function reformatear(obj)
{
  for (var iElementCursor = 0; iElementCursor < document.aElementosInteger.length; iElementCursor++)
  {
    if (document.aElementosInteger[iElementCursor] == obj.name)
    {
      if (!reformatCantidadInteger(obj))
      {
        obj.value = document.LastValueOfElement;
        obj.value = '';
        obj.focus();
      }
    }
  }
  for (var iElementCursor = 0; iElementCursor < document.aNumeroElementosInteger.length; iElementCursor++)
  {
    if (document.aNumeroElementosInteger[iElementCursor] == obj.name)
    {
      if (!reformatCantidadInteger(obj))
      {
        obj.value = document.LastValueOfElement;
        obj.value = '';
        obj.focus();
      }
    }
  }
  for (var iElementCursor = 0; iElementCursor < document.aNumeroElementosDouble.length; iElementCursor++)
  {
    if (document.aNumeroElementosDouble[iElementCursor] == obj.name)
    {
      if (!reformatearCantidadDouble(obj))
      {
        obj.value = document.LastValueOfElement;
        obj.value = '';
        obj.focus();
      }
    }
  }
  for (var iElementCursor = 0; iElementCursor < document.aElementosDouble.length; iElementCursor++)
  {
    if (document.aElementosDouble[iElementCursor] == obj.name)
    {
      if (!reformatearDouble(obj))
      {
        obj.value = document.LastValueOfElement;
        obj.value = '';
        obj.focus();
      }
    }
  }
  return true;
}


function chequearCharForInteger(iKeyCode)
{
  if ((iKeyCode < 48 || iKeyCode > 57) && iKeyCode != 8)
    return false;
  else
    return true;
}

function chequearCharForCantidadInteger(iKeyCode)
{
  if ((iKeyCode < 48 || iKeyCode > 57) && iKeyCode != 8)
    return false;
  else
    return true;
}

function chequearCharForCantidadDouble(iKeyCode)
{
  if ((iKeyCode < 48 || iKeyCode > 57) && iKeyCode != 8 && iKeyCode != 44)
    return false;
  else
    return true;
}

function chequearCharForDouble(iKeyCode)
{
  if ((iKeyCode < 48 || iKeyCode > 57) && iKeyCode != 8 && iKeyCode != 44)
    return false;
  else
    return true;
}

function reformatCantidadInteger(obj)
{
  var sSingleCharacter = "";
  var sPreContent = "";
  var sPostContent = "";
  var poner_punto = 1;

  for (var i = 0; i < obj.value.length; i++)
  {
    if ((sSingleCharacter = obj.value.substr(i, 1)) != ".")
    {
      sPreContent = sPreContent + sSingleCharacter;
    }
  }

  for (var j = sPreContent.length; j > 0; j--, poner_punto++)
  {
    sPostContent = sPreContent.substr(j - 1, 1) + sPostContent;

    if ((poner_punto == 3) && (j != 1))
    {
      poner_punto = 0;
      sPostContent = "." + sPostContent;
    }
  }

  if ((obj.maxLength) && (obj.maxLength < String(sPostContent).length))
  {
    return false;
  }

  obj.value = sPostContent;
  return true;
}

function reformatearCantidadDouble(obj)
{
  var bComma = false;
  var sSingleCharacter = "";
  var sPreIntContent = "";
  var sPreFracContent = "";
  var sPostContent = "";
  var poner_punto = 1;

  for (var i = 0; i < obj.value.length; i++)
  {
    if (!bComma)
    {
      if ((sSingleCharacter = obj.value.substr(i, 1)) != ".")
      {
        if (sSingleCharacter == ",")
        {
          bComma = true;

          if (i < obj.value.length - 1)
          {
            sPreFracContent = obj.value.substr(i + 1, obj.value.length - 1 - i);
          }
        }
        else
        {
          sPreIntContent = sPreIntContent + sSingleCharacter;
        }
      }
    }
    else if (obj.value.substr(i, 1) == ",")
    {
      return false;
    }
  }

  for (var j = sPreIntContent.length; j > 0; j--, poner_punto++)
  {
    sPostContent = sPreIntContent.substr(j - 1, 1) + sPostContent;

    if ((poner_punto == 3) && (j != 1))
    {
      poner_punto = 0;
      sPostContent = "." + sPostContent;
    }
  }

  if (bComma)
  {
    sPostContent = sPostContent + "," + sPreFracContent;
  }

  obj.value = sPostContent;

  return true;
}

function reformatearDouble(obj)
{
  var bComma = false;
  var sSingleCharacter = "";
  var sPreIntContent = "";
  var sPreFracContent = "";
  var sPostContent = "";

  for (var i = 0; i < obj.value.length; i++)
  {
    if (!bComma)
    {
      if ((sSingleCharacter = obj.value.substr(i, 1)) != ".")
      {
        if (sSingleCharacter == ",")
        {
          bComma = true;

          if (i < obj.value.length - 1)
          {
            sPreFracContent = obj.value.substr(i + 1, obj.value.length - 1 - i);
          }
        }
        else
        {
          sPreIntContent = sPreIntContent + sSingleCharacter;
        }
      }
    }
    else if (obj.value.substr(i, 1) == ",")
    {
      return false;
    }
  }

  if (bComma)
  {
    sPostContent = sPreIntContent + "," + sPreFracContent;
  }
  else
  {
    sPostContent = sPreIntContent;
  }

  obj.value = sPostContent;

  return true;
}

function PressEventHandler(e)
{
  var bCheckResult = false;

  document.LastValueOfElement = event.srcElement.value;

  for (var iElementCursor = 0; iElementCursor < document.aElementosInteger.length; iElementCursor++)
  {
    if (document.aElementosInteger[iElementCursor] == event.srcElement.name)
    {
      bCheckResult = chequearCharForInteger(event.keyCode);

      if ((event.srcElement.maxLength) && (event.srcElement.maxLength <= event.srcElement.value.length))
      {
        bCheckResult = false;
      }

      event.returnValue = bCheckResult;
      return bCheckResult;
    }
  }

  for (var iElementCursor = 0; iElementCursor < document.aNumeroElementosInteger.length; iElementCursor++)
  {
    if (document.aNumeroElementosInteger[iElementCursor] == event.srcElement.name)
    {
      bCheckResult = chequearCharForCantidadInteger(event.keyCode);

      if (bCheckResult)
      {
        var strPreviousValue = event.srcElement.value;

        if ((!event.srcElement.maxLength) || (event.srcElement.maxLength > event.srcElement.value.length))
        {
          event.srcElement.value = event.srcElement.value + String.fromCharCode(event.keyCode);
          bCheckResult = reformatCantidadInteger(event.srcElement);
        }

        if (!bCheckResult)
        {
          event.srcElement.value = strPreviousValue;
        }

        event.returnValue = false;
        return false;
      }
      else
      {
        event.returnValue = false;
        return false;
      }
    }
  }

  for (var iElementCursor = 0; iElementCursor < document.aNumeroElementosDouble.length; iElementCursor++)
  {
    if (document.aNumeroElementosDouble[iElementCursor] == event.srcElement.name)
    {
      if (event.srcElement.value.length == 0)
      {
        if (event.keyCode == 44)
        {
          event.returnValue = false;
          return false;
        }
      }
      else if ((event.keyCode == 44) && (event.srcElement.value.indexOf(',') != -1))
      {
        event.returnValue = false;
        return false;
      }
      else if ((event.keyCode >= 48) && (event.keyCode <= 57) && (event.srcElement.value.indexOf(',') != -1))
      {
        var sFracPart = '';

        if (event.srcElement.value.indexOf(',') != event.srcElement.value.length - 1)
        {
          sFracPart = event.srcElement.value.substring(event.srcElement.value.indexOf(',') + 1);
        }

        if (sFracPart.length >= document.MaxFractionalPartDigits)
        {
          event.returnValue = false;
          return false;
        }
      }

      bCheckResult = chequearCharForCantidadDouble(event.keyCode);

      if (bCheckResult)
      {
        var strPreviousValue = event.srcElement.value;

        if ((!event.srcElement.maxLength) || (event.srcElement.maxLength > event.srcElement.value.length))
        {
          event.srcElement.value = event.srcElement.value + String.fromCharCode(event.keyCode);
          bCheckResult = reformatearCantidadDouble(event.srcElement);
        }

        if (!bCheckResult)
        {
          event.srcElement.value = strPreviousValue;
        }

        event.returnValue = false;
        return false;
      }
      else
      {
        event.returnValue = false;
        return false;
      }
    }
  }

  for (var iElementCursor = 0; iElementCursor < document.aElementosDouble.length; iElementCursor++)
  {
    if (document.aElementosDouble[iElementCursor] == event.srcElement.name)
    {
      if (event.srcElement.value.length == 0)
      {
        if (event.keyCode == 44)
        {
          event.returnValue = false;
          return false;
        }
      }
      else if ((event.keyCode == 44) && (event.srcElement.value.indexOf(',') != -1))
      {
        event.returnValue = false;
        return false;
      }
      else if ((event.keyCode >= 48) && (event.keyCode <= 57) && (event.srcElement.value.indexOf(',') != -1))
      {
        var sFracPart = '';

        if (event.srcElement.value.indexOf(',') != event.srcElement.value.length - 1)
        {
          sFracPart = event.srcElement.value.substring(event.srcElement.value.indexOf(',') + 1);
        }

        if (sFracPart.length >= document.MaxFractionalPartDigits)
        {
          event.returnValue = false;
          return false;
        }
      }

      bCheckResult = chequearCharForDouble(event.keyCode);

      if (bCheckResult)
      {
        var strPreviousValue = event.srcElement.value;

        if ((!event.srcElement.maxLength) || (event.srcElement.maxLength > event.srcElement.value.length))
        {
          event.srcElement.value = event.srcElement.value + String.fromCharCode(event.keyCode);
          bCheckResult = reformatearDouble(event.srcElement);
        }

        if (!bCheckResult)
        {
          event.srcElement.value = strPreviousValue;
        }

        event.returnValue = false;
        return false;
      }
      else
      {
        event.returnValue = false;
        return false;
      }
    }
  }

  event.returnValue = true;
  return true;
}

document.onkeypress = PressEventHandler;