/* função destinada a verificar se o campos está vázio, retorna true caso esteja
   vázio */
function isEmpty(str) {
  var size   = str.length;
  var newStr = '';

  for (var pos=0; pos < size; pos++) {
    if (str.substring(pos, (pos + 1)) != '') {
      newStr = newStr + str.substring(pos, (pos + 1));
    }
  }

  if (newStr.length > 0)
    return false;
  else
    return true;
}

/* função destináda a validar o campo apenas para caracteres alpha, retorna true
   caso tenha apenas caracteres alpha */
function isAlpha(str) {
  var alpha = /^[a-zA-ZáéíóúâêîôûãõàèìòùçÁÉÍÓÚÂÊÎÔÛÃÕÀÈÌÒÙÇ]+$/;
  return alpha.test(str);
}

/* função destinada a validar o campo apenas para caracteres numericos, retorna
   true caso tenha apenas números */
function isNum(str) {
  var num = /^\d+$/;
  return num.test(str);
}

/* função destinada a validar o formato de e-mail, retorna true caso o formato
   esteja correto */
function isEmail(str) {
  var email = /^[\w-]+(\.[\w-]+)*@(([a-zA-Z\d][a-zA-Z\d-]{0,61}[a-zA-Z\d]\.)+[a-zA-Z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
  return email.test(str);
}

/* função destinada a validar o formato de data, retorna true caso o formato
   esteja correto */
function isDate(str) {
  var date = /^((0?[1-9]|[12]\d)\/(0?[1-9]|1[0-2])|30\/(0?[13-9]|[1-2])|31\/(0?[13578]|1[02]))\/(19|20)?\d{2}$/;
  return date.test(str);
}

/* função destinada a validar o formato de moeda, retorna true caso o formato
   esteja correto */
function isCurrency(str) {
  var currency = /^\d{1,3}(\.\d{3})*\,\d{2}$/;
  return currency.test(str);
}

/* função destinada a validar o formato de telefone, retorna true caso o formato
   esteja correto */
function isPhone(str) {
  var phone = /^\(?\d{2}\)?\d{4}.\d{4}$/;
  return phone.test(str);
}

function valida_form(tform) {
  for (var inc=0; inc < tform.length; inc++) {
    var campo = tform.elements[inc];
    var rel   = document.getElementById(campo.id).getAttribute('rel');
        rel   = rel.split(',');

    /* se o campo é de preenchimento obrigatório retorna falso */
    if (rel[0] == 'required' && isEmpty(campo.value)) {
      alert('campo de preenchimento obrigatório!!!');
      campo.focus();
      return false;
    }

    /* se o campo está preenchido verifica se o formato passado esta correto */
    if (!(isEmpty(campo.value))) {
      /* para campos que aceitam apenas caracteres de texto */
      if (rel[1] == 'alpha' && !(isAlpha(campo.value))) {
        alert('o campo deve conter apenas caracteres de texto!!!');
        campo.focus();
        return false;
      }

      /* para campos que aceitam apenas caracteres numéricos */
      if (rel[1] == 'number' && !(isNum(campo.value))) {
        alert('O campo deve conter apenas caracteres numéricos!!!');
        campo.focus();
        return false;
      }

      /* para campos de email */
      if (rel[1] == 'email' && !(isEmail(campo.value))) {
        alert('o formato de e-mail está inválido!!!');
        campo.focus();
        return false;
      }

      /* para campos de data */
      if (rel[1] == 'date' && !(isDate(campo.value))) {
        alert('o formato da data está inválido!!!');
        campo.focus();
        return false;
      }

      /* para campos de moeda */
      if (rel[1] == 'currency' && !(isCurrency(campo.value))) {
        alert('o formato da moeda está inválido!!!');
        campo.focus();
        return false;
      }

      /* para campos de telefone */
      if (rel[1] == 'phone' && !(isPhone(campo.value))) {
        alert('o campo de telefone está inválido!!!');
        campo.focus();
        return false;
      }
    }
  }

  return true;
}
