function complain(txtMessage, objFocus) {
  alert(txtMessage);
  objFocus.select();
}
function trimString (str) {
  return str.replace(/^\s+/, '').replace(/\s+$/, '');
}
function bValidaDinheiro(str) {
  str.value = trimString(str.value);
  if (!str.value) return true; //aceita valor nulo
  var erCurrency = /^\d{0,6}\.?\d{0,2}$/;
  //testa sintaxe
  return (erCurrency.test(str.value));
}
function bValidaDataHora(str) {
  str.value = trimString(str.value);
  if (!str.value) return true; //aceita valor nulo
  var erDataHora = /^((0?[1-9])|([1-2]\d)|(3[0-1]))(\/|\-)((0?[1-9])|(1[0-2]))(\/|\-)(((20)|(19))?\d\d)(\s+(([0-1]?\d)|(2[0-3])):([0-5]?\d)(:([0-5]?\d))?)?$/;
  //testa sintaxe
  if (erDataHora.test(str.value)) {
    var arr = str.value.split(/\/|\-|\s/);
    var intCeiling;
    //dependendo do mês, número de dias pode ser diferente
    if (arr[1]==1||arr[1]==3||arr[1]==5||arr[1]==7||arr[1]==8||arr[1]==10||arr[1]==12)
      intCeiling = 31;
    else
      if (arr[1]==4||arr[1]==6||arr[1]==9||arr[1]==11)
        intCeiling = 30;
      else {
        if ((arr[2]%4==0) && !((arr[2]%100==0) || (arr[2]%400==0)))
          intCeiling = 29;  //ano bissexto
        else
          intCeiling = 28;
         }

    if (arr[0] > intCeiling) return false;    
    else return true;  
  }
  else return false;
}
function bDataHoraMaior(dAntes, dDepois) { 
//responde se dDepois vem depois de dAntes (assume que elas já estão validadas dd-mm-yyyy hh:mm:ss)
  if (!dDepois) return true;  //se data de depois for null (pra sempre), data sempre é válida
  if (!dAntes) dAntes = '<%=now%>';

  var arrAntes = dAntes.split(/\/|\-|\s|:/);
  var arrDepois = dDepois.split(/\/|\-|\s|:/);
  //ajusta ano para 4 dígitos
  if (arrAntes[2].length == 2)
    arrAntes[2] = '20' + arrAntes[2];
  if (arrDepois[2].length == 2)
    arrDepois[2] = '20' + arrDepois[2];

  //preenche horário se estiver faltando
  for (var i=0; i<=5; i++) {
    if (arrAntes[i] == null) arrAntes[i] = 0;
    if (arrDepois[i] == null) arrDepois[i] = 0;
    arrAntes[i] = parseInt(arrAntes[i],10); 
    arrDepois[i] = parseInt(arrDepois[i],10);
  }

  //compara ano, depois mês, depois dia
  if (arrAntes[2] < arrDepois[2])
    return true
  else
    if (arrAntes[2] > arrDepois[2])
      return false
    else //ano é =
      if (arrAntes[1] < arrDepois[1])
        return true
      else
        if (arrAntes[1] > arrDepois[1])
          return false
        else //mês é =
          if (arrAntes[0] < arrDepois[0])
            return true
          else
            if (arrAntes[0] > arrDepois[0])
              return false
            else //dia é =
              if (arrAntes[3] < arrDepois[3])
                return true
              else
                if (arrAntes[3] > arrDepois[3])
                  return false
                else //hora é =
                  if (arrAntes[4] < arrDepois[4])
                    return true
                  else
                    if (arrAntes[4] > arrDepois[4])
                      return false
                    else //minuto é =
                      if (arrAntes[5] < arrDepois[5])
                        return true
                      else return false;
}
//strField é o prefixo dos campos de data/hora
function bValidaDataMulti(objForm, strField) {

  var intDia = objForm.elements[strField+'Dia'].value;
  var intMes = objForm.elements[strField+'Mes'].value;
  var intAno = objForm.elements[strField+'Ano'].value;
  var intHora = objForm.elements[strField+'Hora'].value;
  var intMinuto = objForm.elements[strField+'Minuto'].value;
  var intSegundo = objForm.elements[strField+'Segundo'].value;
  
  //verifica preenchimento
  if (!(intDia || intMes || intAno || intHora || intMinuto || intSegundo))
  return true;  //nenhum preenchido
  if (!(intDia && intMes && intAno))
  return false; //data incompleta
  if ((intHora || intMinuto) && !(intHora && intMinuto))
  return false; //hora incompleta
  
  //verifica sintaxe
  var erDia = /^(0?[1-9])|([1-2]\d)|(3[0-1])$/;
  var erMes = /^(0?[1-9])|(1[0-2])$/;
  var erAno = /^(20)[0-9]\d$/;
  var erHora = /^([0-1]?\d)|(2[0-3])$/;
  var erMinuto = /^[0-5]?\d$/;
  var erSegundo = /^[0-5]?\d$/;
  
  if (!erDia.test(intDia)) return false;
  if (!erMes.test(intMes)) return false; 
  if (!erAno.test(intAno)) return false; 
  if (!erHora.test(intHora)) return false; 
  if (!erMinuto.test(intMinuto)) return false; 
  if (!erSegundo.test(intSegundo)) return false; 
  
  //valida dia (dependendo do mês, número de dias pode ser diferente)
  var intCeiling;
  if (intMes==1||intMes==3||intMes==5||intMes==7||intMes==8||intMes==10||intMes==12)
    intCeiling = 31;
  else
    if (intMes==4||intMes==6||intMes==9||intMes==11)
      intCeiling = 30;
    else {
      if ((intAno%4==0) && !((intAno%100==0) || (intAno%400==0)))
        intCeiling = 29;  //ano bissexto
      else
        intCeiling = 28;
       }

  if (intDia > intCeiling) return false;    
  
  //copia data e hora para o campo escondido
  objForm.elements[strField].value = intDia+'/'+intMes+'/'+intAno+'/'+intHora+'/'+intMinuto+'/'+intSegundo;
  
  return true;
}
function bValidaSoNumeros(str) {
  str.value = trimString(str.value);
  var erSoNumeros = /^\d*$/;
  
  return erSoNumeros.test(str);
}
function bValidaEmail(str) {
  if (!str.value) return true; //aceita valor nulo
  str.value = trimString(str.value);
  var erEmail = /^\w+((\-\w+)|(\.\w+))*@\w+((\-\w+)|(\.\w+))+$/;

  return erEmail.test(str.value);
}

