var focusControl;
var erroEmFoco;

function IE() {
  return (navigator.appName.indexOf('Microsoft') != -1);
}

function emBranco(valor) {
  valor = valor.replace(/^\s+|\s+$/g,"");
  return (valor == "");
}

function decimalValido(valor) {
  var regraDecimal = /^[+-]?((\d+|\d{1,3}(\.\d{3})+)(\,\d*)?|\,\d+)$/;
  return (regraDecimal.test(valor));
}

function inteiroValido(valor) {
  var regraInteiro = /^[+-]?(\d+|\d{1,3}(\.\d{3})+)$/;
  return (regraInteiro.test(valor));
}

function emailValido(valor) {
  var regraEmail = /^[\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 (regraEmail.test(valor));
}

function comboSelecionado(valor) {
  return (valor > 0);
}

function addFocusControl(c) {
  if (focusControl == null) focusControl = c;
}

function setFocusControl() {
  if (focusControl != null) {
    try {
      focusControl.focus();
    } catch(err) {
    }
  }
  if (erroEmFoco != "") alert(erroEmFoco);
  focusControl = null;
}

function anyChecked(radio) {
  var c = false;
  var i = 0;
  while ((!c) && (i < radio.length)) {
    c = radio[i].checked;
    i++;
  }
  return c;
}

function limpaErros() {
  focusControl = null;
  erroEmFoco = "";
  e = document.getElementById('erros');
  if (e.innerHTML != "") e.innerHTML = "";
}

function addErro(erro) {
  e = document.getElementById('erros');
  if (emBranco(e.innerHTML)) {
    e.innerHTML  = "<table id='tbErros' width='100%'>" +
                   "<tr><td colspan='2' class='Titulo_Campo_Form'>Antes de efetuar a gravação deste formulário, observe as seguintes regras:</td></tr>" +
                   "<tr><td width='10px'>&nbsp;</td>" +
                   "    <td class='Mensagem_Erro'><li>" + erro + "</li></td></tr>" +
                   "</table>";
    erroEmFoco = erro;
  } else {
    var linha = AddLinhaTabelaPreOffset('tbErros', 0);
    linha.insertCell(0).appendChild(document.createTextNode("\u00a0"));
    var cel1 = linha.insertCell(1);
    cel1.className = "Mensagem_Erro";
    cel1.innerHTML = "<li>" + erro + "</li>";
  }
}

function validaCampoRequerido (campo, rotulo) {
    if ((!campo) || (emBranco(campo.value))) {
	addErro('O preenchimento do campo ' + rotulo + ' é obrigatório.');
	if (campo) addFocusControl(campo);
	return false;
    } else {
	return true;
    }
}

function validaTexto(campo, rotulo) {
    if (validaCampoRequerido(campo, rotulo))
	return true;
    else
	return false;
}

function validaCombo(campo, rotulo) {
    if ((!campo) || (campo.value <= 0)) {
	addErro('A seleção do campo ' + rotulo + ' é obrigatória.');
	if (campo) addFocusControl(campo);
	return false;
    } else {
	return true;
    }
}

function validaInteiro(campo, rotulo) {
    var resposta = true;
    if (!validaCampoRequerido(campo, rotulo)) {
	resposta = false;
    } else {
	if (!inteiroValido(campo.value)) {
	  addErro('O valor de ' + rotulo + ' deve ser um número inteiro válido.');
	  resposta = false;
	  addFocusControl(campo);
	}
    }
    return resposta;
}

function validaDecimal(campo, rotulo) {
    var resposta = true;
    if (!validaCampoRequerido(campo, rotulo)) {
	resposta = false;
    } else {
	if (!decimalValido(campo.value)) {
	  addErro('O valor de ' + rotulo + ' deve ser um número decimal válido.');
	  addFocusControl(campo);
	  resposta = false;
	}
    }
    return resposta;
}

function validaAno(campo, rotulo) {
    var resposta = true;
    if ((campo.value < 1900) || (campo.value > 2999)) {
	addErro('O valor de ' + rotulo + ' deve ser um ano entre 1900 e 2999.');
	resposta = false;
	addFocusControl(campo);
	resposta = false;
    }
    return resposta;
}

function bloqueiaCaracteres(input, evnt, limite) {
    if ((evnt.keyCode != 8) && (input.value.length >= limite)) return false;

    if (IE()){   
        if (evnt.keyCode < 48 || evnt.keyCode > 57){   
            return false;
        }   
    } else {
        if ((evnt.charCode < 48 || evnt.charCode > 57) && evnt.keyCode == 0){   
            return false;  
        }   
    }
    return true;
}

function encaixaSeparadorAntes(input, posicao, separador) {
    valor = input.value;
    if (valor.length >= posicao) {
        if (valor.substr(posicao-1, 1) != separador) {
            if (posicao > 1) input.value = valor.substr(0, posicao-2);
            input.value = separador + input.value + valor.substr(posicao, valor.length);
        }
    }
}

function encaixaSeparadorDepois(input, posicao, separador) {
    valor = input.value;
    if (valor.length >= posicao) {
        if (valor.substr(posicao, 1) != separador) {
            input.value = valor.substr(0, posicao);
            input.value = input.value + separador + valor.substr(posicao, valor.length);
        }
    }
}

function aplicaMascaraData(input, evnt) { 
  if (evnt.keyCode != 8) { // <TAB>
    encaixaSeparadorDepois(input, 2, '/');
    encaixaSeparadorDepois(input, 5, '/');
  }
}

function aplicaMascaraHora(input, evnt){   
  if (evnt.keyCode != 8) { // <TAB>
    encaixaSeparadorDepois(input, 2, ':');
  }
}

function aplicaMascaraCEP(input, evnt) {
  if (evnt.keyCode != 8) { // <TAB>
    encaixaSeparadorDepois(input, 5, '-');
  }
}

function aplicaMascaraCPF(input, evnt) {
  if (evnt.keyCode != 8) { // <TAB>
    encaixaSeparadorDepois(input,  3, '.');
    encaixaSeparadorDepois(input,  7, '.');
    encaixaSeparadorDepois(input, 11, '-');
  }
}

function aplicaMascaraCNPJ(input, evnt) {
  if (evnt.keyCode != 8) { // <TAB>
    encaixaSeparadorDepois(input,  2, '.');
    encaixaSeparadorDepois(input,  6, '.');
    encaixaSeparadorDepois(input, 10, '/');
    encaixaSeparadorDepois(input, 15, '-');
  }
}

function aplicaMascaraTelefone(input, evnt) {
  if (evnt.keyCode != 8) { // <TAB>
    encaixaSeparadorAntes(input, 1, '(');
    encaixaSeparadorDepois(input, 3, ')');
    encaixaSeparadorDepois(input, 4, ' ');
    encaixaSeparadorDepois(input, 9, '-');
  }
}
