function verifica_data(data, sMessage) {
  if (sMessage == undefined || sMessage == null) {
    sMessage = '';
  }

  var mydata = '';
  mydata = data.value.replace(' ', '');
  tam = mydata.length;

  situacao = "";

  if (tam == 7) {
    dia = "01";
    mes = (data.value.substring(0,2));
    ano = (data.value.substring(3,7));
  } else {
    if (tam < 8) { situacao = "falsa"; }
    dia = (data.value.substring(0,2));
    mes = (data.value.substring(3,5));
    ano = (data.value.substring(6,10));
  }

  // verifica o dia valido para cada mes
  if ((dia < 1) || (dia < 1 || dia > 30) && (mes == 4 || mes == 6 || mes == 9 || mes == 11 ) || dia > 31) {
    if (dia > 30) { // Supoe q o usuario quer digitar o ultimo dia do mes
      if (mes == 4 || mes == 6 || mes == 9 || mes == 11 ) {
        dia = 30;
      } else {
        dia = 31;
      }
      data.value = dia + '/' + mes + '/' + ano;
      verifica_data(data, sMessage);
      return;
    }
    situacao = "falsa";
  }

  // verifica se o mes e valido
  if (mes < 1 || mes > 12 ) {
    if (mes > 12) { // Se mes maior q 12, setar pra 12 ou setar pra 01
      mes = '12';
    } else {
      mes = '01';
    }
    if (tam == 7) {
      data.value = mes + '/' + ano;
    } else {
      data.value = dia + '/' + mes + '/' + ano;
    }
    verifica_data(data, sMessage);
    return;
//      situacao = "falsa";
  }

  // verifica se e ano bissexto
  if (mes == 2 && ( dia < 1 || dia > 29 || (dia > 28 && (parseInt(ano / 4) != ano / 4)))) {
    if (parseInt(ano / 4) != ano / 4) {// Forcando a data a ser valida
      dia = 28;
    } else {
      dia = 29;
    }
    if (tam == 7) {
      data.value = mes + '/' + ano;
    } else {
      data.value = dia + '/' + mes + '/' + ano;
    }
    verifica_data(data, sMessage);
    return;

//      situacao = "falsa";
  }

  if (data.value == "") {
    situacao = "falsa";
  }

  if (situacao == "falsa") {
    if (sMessage != '') {
      alert(sMessage);
    } else {
      alert("Data inválida!");
    }
    data.focus();
    data.select();
  }
}


// Datas em formato dd/mm/aaaa
// Para utilizá-las, devem ser associadas com os seguintes eventos:
//   onKeyDown="trataDataBS(this, event)"
//   onKeyPress="validaTeclaData(this, event)"
//   onKeyUp="mascara_data(this, event)"
//   onBlur="completa_ano(this)"
function trataDataBS(campo, event) {
  var tecla;
  var BACKSPACE = 8;

  if(navigator.appName.indexOf("Netscape")!= -1)
    tecla = event.which;
  else
    tecla = event.keyCode;

  if ((tecla == BACKSPACE) && ((campo.value.slice(-1) == '/') || (campo.value.slice(-1) == '-')))
    campo.value = campo.value.slice(0, -1);
}

function validaTeclaData(campo, event) {
  var ENTER = 13;
  var BACKSPACE = 8;
  var key;
  var tecla;

  CheckTAB=true;
  if(navigator.appName.indexOf("Netscape")!= -1)
    tecla= event.which;
  else
    tecla= event.keyCode;

  key = String.fromCharCode(tecla);

  // COMENTADO - Rodrigo - 29/07/2003
  if (tecla == ENTER) {
    campo.blur();
    window.setTimeout("document." + campo.form.name + ".submit()", 500);
    return false;
  }

  if (tecla == BACKSPACE) {
    if ((campo.value.slice(-1) == '/') || (campo.value.slice(-1) == '-'))
      campo.value = campo.value.slice(0, -1);
    return true;
  }

  if ((tecla == 0) || isNum(key))
    return true;

  return false;
}

function mascara_data(dataField, event) {
  var data = dataField.value;
  var mydata = '';
  var tecla;

  CheckTAB=true;
  if(navigator.appName.indexOf("Netscape")!= -1)
    tecla = event.which;
  else
    tecla = event.keyCode;
  if ((tecla == 9) || (tecla == 16))
    return true;

  data = data.replace(/[^0-9]/g, "");
  if (data.length > 0) {
    mydata = data.slice(0, 2);
    if (data.length > 1) {
      mydata = mydata + '/';
      if (data.length > 2) {
        mydata = mydata + data.slice(2, 4);
        if (data.length > 3) {
          mydata = mydata + '/';
          if (data.length > 4) {
            mydata = mydata + data.slice(4, 8);
          }
        }
      }
    }
  }
  dataField.value = mydata;
}

function completa_ano(dataField) {
  var data = dataField.value;
  var mydata = '';

  mydata = mydata + data;
  diames = (dataField.value.substring(0,6));

  if (mydata.length == 8) {
    ano = (dataField.value.substring(6,8));
    if (ano > 20) {
      dataField.value = diames + "19" + ano;
    } else {
      dataField.value = diames + "20" + ano;
    }
  } else if (mydata.length == 6) {
    ano = (dataField.value.substring(6,8));
    Today = new Date();
    dataField.value = diames + Today.getFullYear();
  }

  if (mydata.length != 0) {
    verifica_data(dataField);
  }
}

function isNum( caractere ) {
  var strValidos = "0123456789";
  if (strValidos.indexOf(caractere) == -1)
    return false;
  return true;
}
