var iexplorer = (navigator.appName.indexOf("Microsoft") >= 0)	? true : false;

//alert(iexplorer+ " // " +navigator.appName+ "\n" +navigator.appVersion);



/**
 * Verificar entrada de caracter numerico e exeções
 * Hugo Rogério - 15/10/2008
 */  
function geralVerificaNumero(campo,chars_validos, evento)
{
	var obj = campo.value;
	tam = parseInt(obj.length,10);
	var charPermitidos = "0123456789";
	
	if(chars_validos){charPermitidos = charPermitidos+chars_validos+"";}

	if (iexplorer) //Internet Explorer
	{
  	if((charPermitidos.indexOf(String.fromCharCode(window.event.keyCode)) == -1) && (window.event.keyCode != 13))
    {
  		window.event.returnValue = false;
  		return false;
  	}
  }
  else //outros browsers
  {
    if ((charPermitidos.indexOf(String.fromCharCode(evento.which)) == -1) 
      && (evento.which != 13) && (evento.which != 0) && (evento.which != 8))
    {
      return false;
    }
  }
  
	return true;
}















function validaEmail(campo)
{
	var invalid;
	invalid = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;

	if(invalid.test(campo.value) == false)
  {
		//campo.style.color = "red";
		alert("Endereço de E-mail inválido!");
		campo.focus();
		return (false);
  }
  return(true);
}


function verificaNumero(campo,chars_validos)
{
	var obj = campo.value;
	tam = parseInt(obj.length,10);
	var ST_VCDigitos = "0123456789";
	
	if(chars_validos){ST_VCDigitos = ST_VCDigitos+chars_validos+"";}

	if (iexplorer) //Internet Explorer
	{	
  	if((ST_VCDigitos.indexOf(String.fromCharCode(window.event.keyCode)) == -1) && (window.event.keyCode != 13))
    {
  		BO_INumeroInteiro         = false;
  		window.event.returnValue  = false;
  		return false;
  	}
	}
	else
	{
    //alert(window.event.which + " // ");
    
    //alert(" // ")
    
  }
  return true;
}

// Hugo Rogério - P21 Informática - 26/032008
// Função para preencher campo com zeros a esquerda //onKeyPress
/*
function preecherZeroEsquerda(parObj, parTamanho)
{
  //parObj, parTamanho
  //parObj, parTamanho
  //alert(verificaNumero(parObj));
  if(verificaNumero(parObj))
  {
    //alert(parObj.name.length);
    alert(parObj.name);
  }
  else
  {
    ;
  }
  //alert(parObj.name+ " // " +parTamanho);
  //alert();
}*/


function RetiraEspaco(valorcampo)
{
	x = valorcampo;
	while (x.substring(0,1) == ' '){
	  x = x.substring(1);
	}
	while (x.substring(x.length-1,x.length) == ' '){
	  x = x.substring(0,x.length-1);
	}
	//document.formulario[nomecampo].value = x;
	return x;
}

function RValidarInteiro(campo,texto,tamanho,chars_validos)
{
  strDigitos    = "0123456789" +chars_validos;
  bolDigitosOK  = true;
  
  //verificando digitos
  if(campo.value.length>0)
  {
    for(var i=0;i<campo.value.length;i++)
    {
      if(strDigitos.indexOf(campo.value.substr(i,1))<0)
      {
        bolDigitosOK = false;
        break;
      }
      else
      {
        bolDigitosOK = true;
      }
    }
  }
  
  if(!bolDigitosOK)
  {
    alert('Preencha este campo somente com números');
	  campo.focus();
	  return false;
  }
	else
  {
		if(tamanho!='')
    {
      if(tamanho<=1){st_num = "número";}else{st_num = "números";}
      if(campo.value.length < tamanho)
      {
        alert("Especifique melhor o campo " +texto+ ".\nEntre com no mínimo " +tamanho+ " " +st_num+ ".");
        campo.focus();
        return false;
      }
		}
  }
	return true;
}

function RValidarTexto(campo,texto,tamanho,maximo)
{
	bo_valido = true;
	campo.value = RetiraEspaco(campo.value)
	if(campo.value.indexOf("'")!=-1){alert("O campo possui um caractere inválido ( ' )!"); campo.focus(); return false;}
	if(campo.value==""&&campo.name.substring(0,5)!='item_')
  {
	//if(campo.value==""){
	  alert('Preencha o campo '+texto+'.');
	  campo.focus();
	  bo_valido = false;
	}
	else
  {
	  if(campo.value.length > maximo)
    {
	    if(maximo)
      {
	    	alert("Entre com no máximo "+maximo+ " caracteres no campo "+texto+".\nQuantidade digitada : "+campo.value.length);
		    campo.focus();
		    bo_valido = false;
		  }
	  }
	  if(campo.value.length < tamanho)
    {
	    alert("Especifique melhor o campo "+texto+".\nEntre com no mínimo "+tamanho+" caracteres.");
	    campo.focus();
	    bo_valido = false;
	  }
	}
	return bo_valido;
}

//Campo requerido de CPF
function RValidarCPF(ST_CPF,ST_VCCampo) {
  var BO_ValidarCPF = true;
  var IN_VCx = 0;
  var ST_VCDigitos = "0123456789";
  
  ST_CPF = replace(ST_CPF,'.','');
  ST_CPF = replace(ST_CPF,'-','');
  
  
  
  ST_CPFAUX = "";
  for ( IN_VCx = 0 ; IN_VCx < ST_CPF.length ; IN_VCx++) {
    if( ST_VCDigitos.indexOf(ST_CPF.charAt(IN_VCx)) != -1 ) {
      ST_CPFAUX = ST_CPFAUX + ST_CPF.charAt(IN_VCx);
    }
  }

  ST_CPF = ST_CPFAUX;

  if( ST_CPF == "" ) BO_ValidarCPF = false;
  for ( IN_VCx = 0 ; IN_VCx < ST_CPF.length ; IN_VCx++) {
    if( ST_VCDigitos.indexOf(ST_CPF.charAt(IN_VCx)) == -1 ) {
      BO_ValidarCPF = false;
      break;
    }
  }
  if( BO_ValidarCPF ) { BO_ValidarCPF = ChecaCPF(ST_CPF); }
  if( !BO_ValidarCPF ) alert('"'+ST_VCCampo+'" inválido.');
  return BO_ValidarCPF;
}

// Hugo Rogério - 19/07/05
// Função para validação de CPF
function validaCPF(campo)
{
  var i; 
  
  s = campo; 
  s = s.replace('-','');
  s = s.replace('.','');
  s = s.replace('.','');
  
  if(s=='00000000000'||s=='11111111111'||s=='22222222222'||s=='33333333333'||s=='44444444444'||s=='55555555555'||s=='66666666666'||s=='77777777777'||s=='99999999999')
  {
    return false;
	}
	
  var c = s.substr(0,9); 
  var dv = s.substr(9,2); 
  var d1 = 0; 
  for (i = 0; i < 9; i++) 
  { 
      d1 += c.charAt(i)*(10-i); 
  } 
      if (d1 == 0){ 
          //alert("CPF Invalido") 
          return false; 
      } 
  d1 = 11 - (d1 % 11); 
  if (d1 > 9) d1 = 0; 
  if (dv.charAt(0) != d1) 
  { 
      //alert("CPF Invalido") 
      return false; 
  } 

  d1 *= 2; 
  for (i = 0; i < 9; i++) 
  { 
      d1 += c.charAt(i)*(11-i); 
  } 
  d1 = 11 - (d1 % 11); 
  if (d1 > 9) d1 = 0; 
  if (dv.charAt(1) != d1) 
  { 
      //alert("CPF Invalido") 
      return false; 
  }
  return true;
}



//Verifica se o argumento é um CPF válido
function ChecaCPF (ST_CKCPF) {
	var ST_CPF = ST_CKCPF;
	var ST_NewCPF = "";
	
	
	if(ST_CPF.value=='00000000000'||ST_CPF.value=='11111111111'||ST_CPF.value=='22222222222'||ST_CPF.value=='33333333333'||ST_CPF.value=='44444444444'||ST_CPF.value=='55555555555'||ST_CPF.value=='66666666666'||ST_CPF.value=='77777777777'||ST_CPF.value=='99999999999'){
	return false;
	}
	
	//Verifica tamanho do CPF
	if (ST_CPF.value == '1122334455'){
	return true;
	}
	if (ST_CPF.length!=11) {
	return false;
	}
	//Calcula os dígitos verificadores
	//Guarda os 09 primeiros digitos
	var IN_DVCPF = ST_CPF.substring(0,9);
	var IN_s1 = 0
	for (IN_i=1;IN_i<=9;IN_i++) IN_s1 = IN_s1 + (ValChar(IN_DVCPF.charAt(IN_i-1))*(11-IN_i))
	IN_r1 = IN_s1 % 11
	if (IN_r1<2) IN_dv1=0
	else IN_dv1 = 11 - IN_r1
	var IN_s2 = IN_dv1*2
	for (i=1;i<=9;i++) IN_s2 = IN_s2 + (ValChar(IN_DVCPF.charAt(i-1))*(12-i))
	IN_r2 = IN_s2 % 11
	if (IN_r2<2) IN_dv2=0
	else IN_dv2 = 11 - IN_r2
	var IN_DV = ""
	IN_DV = IN_DV + IN_dv1 + IN_dv2
	var IN_NewDV = ST_CPF.substring(9,11)
	if (IN_NewDV==IN_DV) return true
	else {
	return false
	}
}



//Campo requerido de CNPJ
function RValidarCNPJ(ST_CNPJ,ST_VCCampo) {
  var BO_ValidarCNPJ = true;
  var IN_VCx = 0;
  var ST_VCDigitos = "0123456789";
  ST_CNPJ = ST_CNPJ.replace(".","");
  ST_CNPJ = ST_CNPJ.replace(".","");
  ST_CNPJ = ST_CNPJ.replace("-","");
  ST_CNPJ = ST_CNPJ.replace("/","");
  
  if( ST_CNPJ == "" ) BO_ValidarCNPJ = false;
  for ( IN_VCx = 0 ; IN_VCx < ST_CNPJ.length ; IN_VCx++) {
    if( ST_VCDigitos.indexOf(ST_CNPJ.charAt(IN_VCx)) == -1 ) {
      BO_ValidarCNPJ = false;
      break;
    }
  }
  if( BO_ValidarCNPJ ) {
    BO_ValidarCNPJ = ChecaCGC(ST_CNPJ);
    if( !BO_ValidarCNPJ ) BO_ValidarCNPJ = ChecaCGC8(ST_CNPJ);
  }
  if(ST_CNPJ.length == 0){ alert('O campo "'+ST_VCCampo+'" é obrigatório.'); return BO_ValidarCNPJ; }
  if( !BO_ValidarCNPJ ) alert('"'+ST_VCCampo+'" inválido.');
  return BO_ValidarCNPJ;
}

//Verifica CGC
function ChecaCGC8 (ST_CKCGC) {
  var ST_CGC = ST_CKCGC;
  //Verifica tamanho do CGC
  if (ST_CGC.length!=8) {
    return false;
  }
  //verifica se todos os caracteres são numéricos
  var BO_Numerico = false;
  var ST_Digitos = "0123456789";
  for (IN_i=0; IN_i<ST_CGC.length ; IN_i++) { //>
    BO_Numerico = false;
    for (IN_j=0;IN_j<ST_Digitos.length;IN_j++) { //>
      if (ST_CGC.charAt(IN_i) == ST_Digitos.charAt(IN_j)) {
        BO_Numerico = true;
        break;
      }
    }
    if (!BO_Numerico) {
      return false;
    }
  }
  //Calcula os dígitos verificadores
  var IN_s1 = 0;
  IN_aux = 0;
  IN_soma = 0
  for (IN_i=1;IN_i<=8;IN_i++) {
    //alert("i="+IN_i+" - char(IN_i-1)="+ST_CGC.charAt(IN_i-1));
    IN_aux = (ValChar(ST_CGC.charAt(IN_i-1)))*((IN_i % 2)+1);
    //alert ("IN_aux="+IN_aux);
    if (IN_aux>9) IN_aux = IN_aux-9;
    //alert ("IN_aux="+IN_aux);
    IN_soma = IN_soma + IN_aux;
  }
  IN_r1 = IN_soma % 10;
  //alert("IN_soma="+IN_soma+" - resto="+IN_r1);
  if (IN_r1==0) return (true)
  else {
    return (false);
  }
}

//Retorna o valor correspondente ao caractere
function ValChar(ST_ch) {
  if (ST_ch=="0") return 0
    else if (ST_ch=="1") return 1
    else if (ST_ch=="2") return 2
    else if (ST_ch=="3") return 3
    else if (ST_ch=="4") return 4
    else if (ST_ch=="5") return 5
    else if (ST_ch=="6") return 6
    else if (ST_ch=="7") return 7
    else if (ST_ch=="8") return 8
    else if (ST_ch=="9") return 9
  else return 10
}


//Verifica se o argumento é um CGC válido
function ChecaCGC (ST_CKCGC) {
  var ST_CGC = ST_CKCGC;
  //Verifica tamanho do CGC
  if (ST_CGC.length!=14) {
    return false;
  }
  //Calcula os dígitos verificadores
  //Guarda os 12 primeiros digitos
  var IN_DVCGC = ST_CGC.substring(0,12);
  //calcula o primeiro digito verificador
  var IN_s1 = 0;
  for (IN_i=1;IN_i<=4;IN_i++) IN_s1 = IN_s1 + (ValChar(IN_DVCGC.charAt(IN_i-1))*(6-IN_i));
  for (IN_i=5;IN_i<=12;IN_i++) IN_s1 = IN_s1 + (ValChar(IN_DVCGC.charAt(IN_i-1))*(14-IN_i));
  IN_r1 = IN_s1 % 11;
  if (IN_r1<2) IN_dv1=0;
  else IN_dv1 = 11 - IN_r1;
  //calcula o segundo digito verificador
  var IN_s2 = IN_dv1*2;
  for (IN_i=1;IN_i<=5;IN_i++) IN_s2 = IN_s2 + (ValChar(IN_DVCGC.charAt(IN_i-1))*(7-IN_i));
  for (IN_i=6;IN_i<=12;IN_i++) IN_s2 = IN_s2 + (ValChar(IN_DVCGC.charAt(IN_i-1))*(15-IN_i));
  IN_r2 = IN_s2 % 11;
  if (IN_r2<2) IN_dv2=0;
  else IN_dv2 = 11 - IN_r2;
  //junta os digitos verificadores
  var IN_DV = "";
  IN_DV = IN_DV + IN_dv1 + IN_dv2;
  //guarda os digitos verificadores do CGC digitado (últimas duas posições no string)
  var IN_NewDV = ST_CGC.substring(12,14)
  if (IN_NewDV==IN_DV) { //se o DV calculado for igual ao digitado, retorna true
    return true
  }
  else {
    return false
  }
}


function validarData(objData)
{
  var valordata = objData.value;
  var strdia = valordata.substring(0,2);
  var strmes = valordata.substring(3,5);
  var strano = valordata.substring(6,10);
  var dia = parseInt(strdia,10);
  var mes = parseInt(strmes,10);
  var ano = parseInt(strano,10);
  var anobissexto;
  var bo_valido = true;
  var anoatual = new Date();
  
  if (iexplorer)
  {
    anoatual = anoatual.getYear() + 1;
  }
  else
  {
    anoatual = anoatual.getYear();
    anoatual = parseInt(anoatual);
    anoatual = anoatual + 1901;
  }
  
	if(valordata.length != 10){bo_valido = false;}
	if(isNaN(dia) || isNaN(mes) || isNaN(ano)){bo_valido = false;}
  if((strdia.length != 2) || (strmes.length != 2) || (strano.length!=4)){bo_valido = false;}
	if((dia > 31) || (dia == 0) || (mes > 12) || (mes == 0)){bo_valido = false;}
	if((ano > anoatual) || (ano <= 1900)){bo_valido = false;}
  
	if(ano%4 == 0)
			anobissexto = 1;
	else
			anobissexto = 0;
	
	if(((mes == 2) && (dia > (28 + parseInt(anobissexto,10)))) || (mes == 4 || mes == 6 || mes == 9 || mes == 11) && (dia > 30))
  {
		bo_valido = false;
	}
  
	if(!bo_valido)
  {
	  alert("Data inválida!");
	  objData.focus();
	  return false;
	}
  else
  {
	  return true;
	}
}

function validarCampoSenha(campo){
	objForm = campo.form;
	campo2 = objForm['aux_'+campo.name];
	campo2.value = RetiraEspaco(campo2.value);
	if(!RValidarTexto(campo2,'','0',campo2.getAttribute("maxlength"))) { return false; campo2.focus(); }
	if(campo.value!=campo2.value){
		alert('A confirmação da senha não confere!');
		campo2.focus();
		return false;
	}
	return true;
}


//Validação geral - Verifica o preenchimento dos campos obrigatórios
function verificaPreenchimento(obj_form){
  bo_valido = true;
  var campos_n_obrig = "";
  if(obj_form.campos_n_obrig){campos_n_obrig = obj_form.campos_n_obrig.value;}
  arrCampos_n_obrig = campos_n_obrig.split(',');
  for(i=0;i<=obj_form.elements.length-1;i++){
    campo = obj_form.elements[i];
	//alert(campo.type);
	if((campo.name.substring(0,3)=='sql'||campo.name.substring(0,4)=='nnn_'||campo.name.substring(0,5)=='item_')&&(campo.type!='hidden')){
       fldNewName = campo.name.substring(8,campo.name.length);
       
       bo_obrig = findInArray(arrCampos_n_obrig,fldNewName)
       
       //if((campos_n_obrig.indexOf(fldNewName)==-1)||campo.value!=''){
       if((!bo_obrig)||campo.value!=''){
		  campo.value = RetiraEspaco(campo.value);
		  //alert(campo.name+" - "+campo.getAttribute("maxlength"));
	      campo_nomeAlert = campo.getAttribute("nomecampoAlert");
	      //alert(campo.type);
	      inMaxLength = campo.getAttribute("maxlength")
	      if(inMaxLength==null){ inMaxLength = ""; }
	      if(campo_nomeAlert==null){ campo_nomeAlert = ""; }else{ campo_nomeAlert = '"'+campo_nomeAlert+'"'; }
	      
	      bo_valido =  RValidarTexto(campo,campo_nomeAlert,'0',inMaxLength);
		  if(campo.value.indexOf("'")!=-1){alert("O campo possui um caractere inválido ( ' )!");bo_valido=false;}
		  
		  if(!bo_valido) return false;
		  
		  if(campo.type=='password') if(!validarCampoSenha(campo)){ return false };
		  
		  strVcad = campo.getAttribute('vcad');
		  if(strVcad!=null){
			campoVcad = obj_form["vcad_"+campo.name];
			csFld = campo.getAttribute('csFld');
			if(campoVcad.value!='true'){
				if(csFld=='cpf'){
					if(!verificaCPF(campo)){ return false; }
					campoVcad.value=='true';
				}
				
				verificaCadastrado(campo);
				return false;
			}
		  }
		  


		//Validar tipo de campo

		objElem = campo;
		
		fldNome = fldNewName;
		fldValor = campo.value;
		fldTipo = campo.type;
		csTipo = campo.name.substring(4,7).toLowerCase();
		
		if(fldNome.toLowerCase().substring(0,3)=='sql'&&fldTipo!='hidden'){
			switch (csTipo){
				case 'str':
					if(!RValidarTexto(campo,campo_nomeAlert,'','')){ return false; }
					break;
				case 'dat':
					//alert(fldNome);
					//alert(ValidarData(objElem));
					if(!ValidarData(objElem)){ return false; }
					break;
				case 'ole':
					if(fldValor!='') bo_ole = true;
									
					encTypeForm(objForm, '1');
					montaFormQueryString(objForm);
					//alert(strQueryString);
					strCampoOleNome = fldNome.substring(8,fldNome.length);
					//alert('blob');
					//alert(ValidarData(objElem));
					//if(fldValor!=""){ if(!ValidarData(objElem)){ } }
					break;
				default:
			}
		}
		
		if(!bo_valido){campo.focus(); break; return false;}
		
	   }
	}
  }
  return bo_valido;
}
