function checkAllInForm(sForm) {
  var oForm = document.getElementById(sForm);
  var aChecks = oForm.getElementsByTagName('input');

  for (var i = 0; i < aChecks.length; i++) {
    if((aChecks[i].type == 'checkbox') && (aChecks[i].disabled == false)) aChecks[i].checked = true;
  }
}

function checkForm(oForm) {
  var bError = false;
  //Cabecera del mensaje de error
  var sMessage = 'Debe solucionar los siguientes problemas antes de continuar:' + "\n"
  var oForm = arguments[0];

  /***************************************************************************************************/
  /* Tipos de chequeo                                                                                */
  /*                                                                                                 */
  /* andrequired:                                                                                    */
  /*    - los campos [0] y [2] tengo valores cargados                                                */
  /* equals                                                                                          */
  /*    - el valor [0] debe ser igual al [2]                                                         */
  /* fileformat                                                                                      */
  /*    - el nombre de archivo en [0] debe tener la extensión [2]                                    */
  /* greaterthan                                                                                     */
  /*    - el valor [0] debe ser mayor que [2]                                                        */
  /* isinteger                                                                                       */
  /*    - el valor [0] debe ser un entero                                                            */
  /* innumericrange                                                                                  */
  /*    - el valor [0] debe ser mayorigual que [2] y menorigual que [3]                              */
  /* isnumeric                                                                                       */
  /*    - el valor [0] debe ser un valor numérico con o sin decimales                                */
  /* isvalidemail                                                                                    */
  /*    - el valor [0] debe ser una dirección de e-mail válida                                       */
  /* isvalidurl                                                                                      */
  /*    - el valor [0] debe ser una URL válida                                                       */
  /* notequals                                                                                       */
  /*    - el valor [0] debe ser distinto que el valor [2]                                            */
  /* onerequired                                                                                     */
  /*    - al menos uno de los controles (radio o checkbox) con el nombre [0] debe estar seleccionado */
  /* orfileformat                                                                                    */
  /*    - el nombre de archivo [0] debe tener una de las extensiones en [2] (separadas por coma)     */
  /* required                                                                                        */
  /*    - el valor [0] es requerido                                                                  */
  /* requiredifchecked                                                                               */
  /*    - si el elemeto [2] está marcado, entonces el valor [0] es requerido                         */
  /***************************************************************************************************/

  for(var i = 1; i < arguments.length; i++) {
    var sElement = arguments[i];
    var arrElement = sElement.split('|');
    var oElement = document.getElementById(arrElement[0].trim());
    var sAction = arrElement[1].toLowerCase().trim();

    switch (arrElement[1].trim().toLowerCase()) {
      case 'andrequired':
        oAndElement = document.getElementById(arrElement[2].trim());
        if((oElement.value.trim() == '') || (oAndElement.value.trim() == '')) {
          bError = true;
          sMessage += "\n" + '    - ' + arrElement[3].trim();
        }
        break;
      case 'equals':
        var oElementToCompare = document.getElementById(arrElement[2].trim());
        if (oElement.value != oElementToCompare.value) {
          bError = true;
          sMessage += "\n" + '    - ' + arrElement[3].trim();
        }
        break;
      case 'fileformat':
        if (oElement.value != '') {
          if (oElement.value.substr(oElement.value.lastIndexOf('.') + 1).toLowerCase() != arrElement[2].toLowerCase()) {
            bError = true;
            sMessage += "\n" + '    - ' + arrElement[3];
          }
        }
        break;
      case 'greaterthan':
        if (oElement.value != '') {
          if (parseInt(oElement.value) <= parseInt(arrElement[2])) {
            bError = true;
            sMessage += "\n" + '    - ' + arrElement[3];
          }
        }
        break;
      case 'isinteger':
        if (isNaN(oElement.value) || (oElement.value.indexOf('.') >= 0)) {
          bError = true;
          sMessage += "\n" + '    - ' + arrElement[2].trim();
        }
        break;
      case 'isvalidemail':
        var regMail = new RegExp("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$");
        if (oElement.value != '') {
          if (!oElement.value.match(regMail)) {
            bError = true;
            sMessage += "\n" + '    - ' + arrElement[2].trim();
          }
        }
        break;
      case 'isvalidurl':
        var regURL = new RegExp("[A-Za-z0-9-_]+\.[A-Za-z0-9-_%&\?\/.=]+$");
        if(oElement.value != '') {
          if(!oElement.value.match(regURL)) {
            bError = true;
            sMessage += "\n" + '    - ' + arrElement[2].trim();
          }
        }
        break;
      case 'notequals':
        var oElementToCompare = document.getElementById(arrElement[2].trim());
        if (oElement.value == oElementToCompare.value) {
          bError = true;
          sMessage += "\n" + '    - ' + arrElement[3].trim();
        }
        break;
      case 'onerequired':
        var oInputs = document.getElementsByTagName('input');
        var checkError = true;
        for (var j = 0; j < oInputs.length; j++) {
          if(((oInputs[j].type == 'checkbox') && (oInputs[j].name == (arrElement[0] + '[]'))) || ((oInputs[j].type == 'radio') && (oInputs[j].name == arrElement[0]))) {
            if (oInputs[j].checked) {
              checkError = false;
              break;
            }
          }
        }
        if (checkError) {
          bError = true;
          sMessage += "\n" + '    - ' + arrElement[2].trim();
        }
        break;
      case 'orfileformat':
        if (oElement.value != '') {
          var formats = arrElement[2].split(',');
          var formatError = true;
          for(var j = 0; j < formats.length; j++) {
            if (oElement.value.substr(oElement.value.lastIndexOf('.') + 1).toLowerCase() == formats[j].toLowerCase()) {
              formatError = false;
            }
          }
          if (formatError) {
            bError = true;
            sMessage += "\n" + '    - ' + arrElement[3];
          }
        }
        break;
      case 'required':
        if(oElement.value.trim() == '') {
          bError = true;
          sMessage += "\n" + '    - ' + arrElement[2].trim();
        }
        break;
      case 'requiredifchecked':
        var oElementChecked = document.getElementById(arrElement[2]);

        if (oElementChecked.checked) {
          if(oElement.value == '') {
           bError = true;
            sMessage += "\n" + '    - ' + arrElement[3].trim();
          }
        }
        break;
    }
  }

  if (bError) alert(sMessage);
  return !bError;
}

function checkInput(sInput) {
  var oInput = document.getElementById(sInput);

  oInput.checked = true;
}

function selectOption(sSelect, iOption) {
  var oSelect = document.getElementById(sSelect);
  oSelect.options[iOption].selected = true;
}

function submitForm(sForm) {
  var oForm = document.getElementById(sForm);
  oForm.submit();
}

function uncheckAllInForm(sForm) {
  var oForm = document.getElementById(sForm);
  var aChecks = oForm.getElementsByTagName('input');

  for (var i = 0; i < aChecks.length; i++) {
    if((aChecks[i].type == 'checkbox') && (aChecks[i].disabled == false)) aChecks[i].checked = false;
  }
}
