////
// Módulo con las funciones de validación de formularios javascript
////

// Función: Valida un campo de texto
// Parametros:
//   Input     : Objeto del formulario a validar
//   Length    : Longitud del campo
//   Operation : Operación a realizar: '>' | '!='
//   Required  : Marca booleana que indica si el campo es obligatorio o no

function isValidateText(Input, Length, Operation, Required)
{
  if (Required && (Input.value.length == 0))
  {
    return (false);
  }

  if (!Required && (Input.value.length == 0))
  {
    return (true);
  }

  switch (Operation) {
    case '>':
      if (Input.value.length > Length)
      {
	return (false);
      }
      break;

    case '!=':
      if (Input.value.length != Length)
      {
	return (false);
      }
      break;

    default:
      return (false);
      break;
  }

  return (true);
}

// Función: Valida un campo numérico
// Parametros:
//   Input     : Objeto del formulario a validar
//   Num       : Número para usar en las operaciones
//   Operation : Operación a realizar: '>' | '<'
//   Required  : Marca booleana que indica si el campo es obligatorio o no

function isValidateNum(Input, Num, Operation, Required)
{
  if (Required && (Input.value.length == 0))
  {
    return (false);
  }

  if (!Required && (Input.value.length == 0))
  {
    return (true);
  }

  if (isNaN(Input.value))
  {
    return (false);
  }

  switch (Operation) {
    case '>':
      if (Input.value > Num)
      {
	return (false);
      }
      break;

    case '<':
      if (Input.value < Num)
      {
	return (false);
      }
      break;

    default:
      return (false);
      break;
  }

  return (true);
}

// Función: Valida un CIF
// Uso:
//   La letra de CIF debe estar al final del número del CIF
// Parametros:
//   Input     : Objeto del formulario a validar
//   Required  : Marca booleana que indica si el campo es obligatorio o no

function isValidateCIF (Input, Required)
{
  if (Required && (Input.value.length == 0))
  {
    return (false);
  }

  if (!Required && (Input.value.length == 0))
  {
    return (true);
  }

  var Control = Input.value.substr((Input.value.length - 1),1);

  if ((Control == 'a') || (Control == 'A'))
    Control = 1;

  else if ((Control == 'b') || (Control == 'B'))
    Control = 2;

  else if ((Control == 'c') || (Control == 'C'))
    Control = 3;

  else if ((Control == 'd') || (Control == 'D'))
    Control = 4;

  else if ((Control == 'e') || (Control == 'E'))
    Control = 5;

  else if ((Control == 'f') || (Control == 'F'))
    Control = 6;

  else if ((Control == 'g') || (Control == 'G'))
    Control = 7;

  else if ((Control == 'h') || (Control == 'H'))
    Control = 8;

  else if ((Control == 'i') || (Control == 'I'))
    Control = 9;

  else if ((Control == 'j') || (Control == 'J'))
    Control = 0;

  var NumeroCif = Input.value.substr(1, (Input.value.length - 2));

  var num2 = NumeroCif.substr(1,1);
  var num4 = NumeroCif.substr(3,1);
  var num6 = NumeroCif.substr(5,1);

  var SumaNumPares = parseInt(num2) + parseInt(num4) + parseInt(num6);

  var num1 = NumeroCif.substr(0,1);
  var num3 = NumeroCif.substr(2,1);
  var num5 = NumeroCif.substr(4,1);
  var num7 = NumeroCif.substr(6,1);

  num1 *= 2;
  num3 *= 2;
  num5 *= 2;
  num7 *= 2;

  if (num1 > 9)
    num1 = parseInt(Math.floor(num1 / 10)) + parseInt(num1 % 10);

  if (num3 > 9)
    num3 = parseInt(Math.floor(num3 / 10)) + parseInt(num3 % 10);

  if (num5 > 9)
    num5 = parseInt(Math.floor(num5 / 10)) + parseInt(num5 % 10);

  if (num7 > 9)
    num7 = parseInt(Math.floor(num7 / 10)) + parseInt(num7 % 10);

  var SumaAcum = parseInt(num1) + parseInt(num3) + parseInt(num5) + parseInt(num7);

  var SumaTotal = parseInt(SumaNumPares) + parseInt(SumaAcum);

  var NumFinal = 10 - parseInt(SumaTotal % 10);
  NumFinal %= 10;

  if (Control != NumFinal)
  {
    return(false);
  }

  return(true);
}

// Función: Valida un NIF
// Uso:
//   La letra de NIF debe estar al final del número del NIF
// Parametros:
//   Input     : Objeto del formulario a validar
//   Required  : Marca booleana que indica si el campo es obligatorio o no

function isValidateNIF (Input, Required)
{
  if (Required && (Input.value.length == 0))
  {
    return (false);
  }

  if (!Required && (Input.value.length == 0))
  {
    return (true);
  }

  var NumeroDNI = parseInt(Input.value);
  var LetraDNI = Input.value.substr((Input.value.length - 1),1).toUpperCase();

  if (isNaN(NumeroDNI))
  {
    return(false);
  }

  var Tabla = new Array(23);

  Tabla[0] = "T"; Tabla[1] = "R"; Tabla[2] = "W"; Tabla[3] = "A"; Tabla[4] = "G"; Tabla[5] = "M";
  Tabla[6] = "Y"; Tabla[7] = "F"; Tabla[8] = "P"; Tabla[9] = "D"; Tabla[10] = "X"; Tabla[11] = "B";
  Tabla[12] = "N"; Tabla[13] = "J"; Tabla[14] = "Z"; Tabla[15] = "S"; Tabla[16] = "Q"; Tabla[17] = "V";
  Tabla[18] = "H"; Tabla[19] = "L"; Tabla[20] = "C"; Tabla[21] = "K"; Tabla[22] = "E"; Tabla[23] = "T";

  var Clave = NumeroDNI = NumeroDNI % 23;

  if (LetraDNI != Tabla[Clave])
  {
    return(false);
  }

  return(true);
}

// Función: Valida una fecha
// Parametros:
//   Input         : Objeto del formulario a validar
//   SeparatorChar : Carácter separador de Fechas ('/', '-', ...)
//   Required      : Marca booleana que indica si el campo es obligatorio o no

function isValidateDate (Input, SeparatorChar, Required)
{
  var checkstr = "0123456789";
  var Datevalue = "";
  var DateTemp = "";
  var seperator = SeparatorChar;
  var day;
  var month;
  var year;
  var leap = 0;
  var err = 0;
  var i;

  if (Required && (Input.value.length == 0))
  {
    return (false);
  }

  err = 0;
  DateValue = Input.value;

  for (i = 0; i < DateValue.length; i++)
  {
    if (checkstr.indexOf(DateValue.substr(i,1)) >= 0)
    {
      DateTemp = DateTemp + DateValue.substr(i,1);
    }
  }

  DateValue = DateTemp;

  if (DateValue.length == 6)
  {
    DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2);
  }

  if (DateValue.length != 8)
  {
    err = 19;
  }

  year = DateValue.substr(4,4);

  if (year == 0)
  {
    err = 20;
  }

  month = DateValue.substr(2,2);

  if ((month < 1) || (month > 12))
  {
     err = 21;
  }

  day = DateValue.substr(0,2);
  if (day < 1)
  {
    err = 22;
  }

  if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0))
  {
    leap = 1;
  }

  if ((month == 2) && (leap == 1) && (day > 29))
  {
    err = 23;
  }

  if ((month == 2) && (leap != 1) && (day > 28))
  {
    err = 24;
  }

  if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12")))
  {
    err = 25;
  }

  if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11")))
  {
    err = 26;
  }

  if ((day == 0) && (month == 0) && (year == 00))
  {
    err = 0;
    day = "";
    month = "";
    year = "";
    seperator = "";
  }

  if (err != 0)
  {
    return (false);
  }

  Input.value = day + seperator + month + seperator + year;
  return (true);
}

// Función: Valida un email
// Parametros:
//   Input     : Objeto del formulario a validar
//   MaxLength : Máxima longitud del campo
//   Required  : Marca booleana que indica si el campo es obligatorio o no

function isValidateEmail (Input, MaxLength, Required)
{
  if (Required && (Input.value.length == 0))
  {
    return (false);
  }

  else if (Input.value.length > MaxLength)
  {
    return (false);
  }

  else if ((Input.value != '') && ((Input.value.indexOf('@',0) == -1) || (Input.value.indexOf('.',0) == -1)))
  {
    return (false);
  }

  return (true);
}
