function testadata(pStr){
  barras = pStr.split("/");
  if (barras.length == 3){
    dia = barras[0];
    mes = barras[1];
    ano = barras[2];
    if(!(!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4))){
      return false;
    }else{
	  return true;
	}
  }else{
    return false;
  }
} 

function testaemail(pStr){
  parte1 = pStr.indexOf("@");
  parte2 = pStr.indexOf(".");
  parte3 = pStr.length;
  if (!(parte1 >= 2 && parte2 >= 6 && parte3 >= 9)) {
    return false;
  }else{
    return true;
  }
}

function testanumero(pStr){
  estaok = true;
  for(x=0;x<pStr.length;x++){
    if(!((pStr.charAt(x) >= 0) && (pStr.charAt(x) <= 9))){
	  estaok = false;
	  break;
	}
  }
  return estaok;
}

function testanumerocv(pStr){
  estaok = true;
  for(x=0;x<pStr.length;x++){
    if(!((pStr.charAt(x) >= 0) && (pStr.charAt(x) <= 9))){
	  if(pStr.charAt(x) != ','){
	    if(pStr.charAt(x) != '.'){
	      estaok = false;
		  break;
		}
	  }
	}
  }
  return estaok;
}

function meutrim(str){
  while(str.substr(0,1) == " "){str = str.substr(1);}
  while(str.substr(str.length-1,1) == " "){str = str.substr(0,str.length-1);}
  return str;
}

/*função de teste de formulário
formulario - nome do formulario a ser testado
acao - acão tomada 
	'filtrar' - post de filtro campo ação recebe 10 invariavelmente
	'dados' - post para envio de dados campo ação recebe 15 invariavelmente
	'mensagem' - post para envio de mensagem campo ação recebe 20 invariavelmente
	'gráfico' - post para criação de gráfico campo ação recebe 10 invariavelmente para além de abrir gráfico executar consulta no form
	'cancelar' - post para cancelar envio de dados campo ação recebe 5 invariavelmente
	'cadastrar' - post para cadastrar ação pode receber 1 ou 2 dependendo da situação
	'deletar' - post para deletar campo ação recebe 3 invariavelmente
efetuaon - caso tenha o TEXTAREA modificado para editor de texto este campo deve conter o valor 1, caso contrário sempre 0

ATENÇÃO
para nomear os campos
_ antes do nome indica que é campo obrigatorio
@ antes do nome indica que é um campo de e-mail
/ antes do nome indica que é um campo data
1 antes do nome indica que é campo numeral que aceita apenas valores inteiros
3 antes do nome indica que é campo numeral que aceita decimais
2 antes do nome indica que é um campo inteiro que aceita apenas valores inteiros e que é referente a CFP ou RG, CNPJ ou IE. Para fazer referência a qual tipo o campo "tipo" tem que existir no cadastro quanto tipo for 1 é pessoa Física, quando 2 é jurídica*/
function testaformulario(formulario,acao,efetuaon){
  if(acao == 'filtrar'){
    document.forms[formulario].elements['acao'].value = 10;
  }else if(acao == 'dados'){
    document.forms[formulario].elements['acao'].value = 15;
  }else if(acao == 'mensagem'){
    document.forms[formulario].elements['acao'].value = 20;
  }else if(acao == 'grafico'){
    document.forms[formulario].elements['acao'].value = 10;
	
	if(document.forms[formulario].elements['paggrafico'].value == 'graffinanceiro.php'){//Gráfico vindo do pagar ou do receber
	  abrecomestesdados = document.forms[formulario].elements['paggrafico'].value;
	  abrecomestesdados += '?pessoa='+document.forms[formulario].elements['pessoacon'].value;
	  abrecomestesdados += '&planoconta='+document.forms[formulario].elements['planocontacon'].value;
	  abrecomestesdados += '&criacao='+document.forms[formulario].elements['/datacriacaocon'].value;
	  abrecomestesdados += '&vencimento='+document.forms[formulario].elements['/datavencimentocon'].value;
	  abrecomestesdados += '&liberacao='+document.forms[formulario].elements['/dataliberacaocon'].value;
	  abrecomestesdados += '&grupo='+document.forms[formulario].elements['grupocon'].value;
	  abrecomestesdados += '&fator='+document.forms[formulario].elements['fatorcon'].value;
	}else if(document.forms[formulario].elements['paggrafico'].value == 'grafcaixa.php'){//Gráfico vindo do caixa...
	  abrecomestesdados = document.forms[formulario].elements['paggrafico'].value;
	  abrecomestesdados += '?data='+document.forms[formulario].elements['/datacon'].value;
	  abrecomestesdados += '&conta='+document.forms[formulario].elements['contacon'].value;
	  abrecomestesdados += '&planoconta='+document.forms[formulario].elements['planocontacon'].value;
	  abrecomestesdados += '&documento='+document.forms[formulario].elements['documentocon'].value;
	}else if(document.forms[formulario].elements['paggrafico'].value == 'grafestatistica.php'){//Gráfico vindo das estatisticas...
	  abrecomestesdados = document.forms[formulario].elements['paggrafico'].value;
	  abrecomestesdados += '?pessoacon='+document.forms[formulario].elements['pessoacon'].value;
	  if(document.forms[formulario].elements['mesinicialcon'].value > 0){
	    abrecomestesdados += '&mesinicialcon='+document.forms[formulario].elements['mesinicialcon'].value;
	    abrecomestesdados += '&mesfinalcon='+document.forms[formulario].elements['mesfinalcon'].value;
	  }else{
	    abrecomestesdados += '&mesinicialcon=0';
	    abrecomestesdados += '&mesfinalcon=0';
	  }	  
	  if(document.forms[formulario].elements['datainicialcon'].value != ""){
	    abrecomestesdados += '&datainicialcon='+document.forms[formulario].elements['datainicialcon'].value;
	    abrecomestesdados += '&datafinalcon='+document.forms[formulario].elements['datafinalcon'].value;	  
	  }else{
	    abrecomestesdados += '&datainicialcon=';
	    abrecomestesdados += '&datafinalcon=';	  
	  }
	  if(document.forms[formulario].elements['semana1con'].checked == true){
	    abrecomestesdados += '&semana1con=1';
	  }else{
	    abrecomestesdados += '&semana1con=0';
	  }
	  if(document.forms[formulario].elements['semana2con'].checked == true){
	    abrecomestesdados += '&semana2con=1';
	  }else{
	    abrecomestesdados += '&semana2con=0';
	  }
	  if(document.forms[formulario].elements['semana3con'].checked == true){
	    abrecomestesdados += '&semana3con=1';
	  }else{
	    abrecomestesdados += '&semana3con=0';
	  }
	  if(document.forms[formulario].elements['semana4con'].checked == true){
	    abrecomestesdados += '&semana4con=1';
	  }else{
	    abrecomestesdados += '&semana4con=0';
	  }
	  abrecomestesdados += '&palavrachavecon='+document.forms[formulario].elements['palavrachavecon'].value;
	}else if(document.forms[formulario].elements['paggrafico'].value == 'grafestatisticaref.php'){//Gráfico vindo das estatisticas porém origem referência...
	  abrecomestesdados = document.forms[formulario].elements['paggrafico'].value;
	  abrecomestesdados += '?pessoacon='+document.forms[formulario].elements['pessoacon'].value;
	  if(document.forms[formulario].elements['mesinicialcon'].value > 0){
	    abrecomestesdados += '&mesinicialcon='+document.forms[formulario].elements['mesinicialcon'].value;
	    abrecomestesdados += '&mesfinalcon='+document.forms[formulario].elements['mesfinalcon'].value;
	  }else{
	    abrecomestesdados += '&mesinicialcon=0';
	    abrecomestesdados += '&mesfinalcon=0';
	  }	  
	  if(document.forms[formulario].elements['datainicialcon'].value != ""){
	    abrecomestesdados += '&datainicialcon='+document.forms[formulario].elements['datainicialcon'].value;
	    abrecomestesdados += '&datafinalcon='+document.forms[formulario].elements['datafinalcon'].value;	  
	  }else{
	    abrecomestesdados += '&datainicialcon=';
	    abrecomestesdados += '&datafinalcon=';	  
	  }
	  if(document.forms[formulario].elements['semana1con'].checked == true){
	    abrecomestesdados += '&semana1con=1';
	  }else{
	    abrecomestesdados += '&semana1con=0';
	  }
	  if(document.forms[formulario].elements['semana2con'].checked == true){
	    abrecomestesdados += '&semana2con=1';
	  }else{
	    abrecomestesdados += '&semana2con=0';
	  }
	  if(document.forms[formulario].elements['semana3con'].checked == true){
	    abrecomestesdados += '&semana3con=1';
	  }else{
	    abrecomestesdados += '&semana3con=0';
	  }
	  if(document.forms[formulario].elements['semana4con'].checked == true){
	    abrecomestesdados += '&semana4con=1';
	  }else{
	    abrecomestesdados += '&semana4con=0';
	  }
	  abrecomestesdados += '&origemcon='+document.forms[formulario].elements['origemcon'].value;
	}else if(document.forms[formulario].elements['paggrafico'].value == 'grafestatisticaloc.php'){//Gráfico vindo das estatisticas porém origem local...
	  abrecomestesdados = document.forms[formulario].elements['paggrafico'].value;
	  abrecomestesdados += '?pessoacon='+document.forms[formulario].elements['pessoacon'].value;
	  if(document.forms[formulario].elements['mesinicialcon'].value > 0){
	    abrecomestesdados += '&mesinicialcon='+document.forms[formulario].elements['mesinicialcon'].value;
	    abrecomestesdados += '&mesfinalcon='+document.forms[formulario].elements['mesfinalcon'].value;
	  }else{
	    abrecomestesdados += '&mesinicialcon=0';
	    abrecomestesdados += '&mesfinalcon=0';
	  }	  
	  if(document.forms[formulario].elements['datainicialcon'].value != ""){
	    abrecomestesdados += '&datainicialcon='+document.forms[formulario].elements['datainicialcon'].value;
	    abrecomestesdados += '&datafinalcon='+document.forms[formulario].elements['datafinalcon'].value;	  
	  }else{
	    abrecomestesdados += '&datainicialcon=';
	    abrecomestesdados += '&datafinalcon=';	  
	  }
	  if(document.forms[formulario].elements['semana1con'].checked == true){
	    abrecomestesdados += '&semana1con=1';
	  }else{
	    abrecomestesdados += '&semana1con=0';
	  }
	  if(document.forms[formulario].elements['semana2con'].checked == true){
	    abrecomestesdados += '&semana2con=1';
	  }else{
	    abrecomestesdados += '&semana2con=0';
	  }
	  if(document.forms[formulario].elements['semana3con'].checked == true){
	    abrecomestesdados += '&semana3con=1';
	  }else{
	    abrecomestesdados += '&semana3con=0';
	  }
	  if(document.forms[formulario].elements['semana4con'].checked == true){
	    abrecomestesdados += '&semana4con=1';
	  }else{
	    abrecomestesdados += '&semana4con=0';
	  }
	  abrecomestesdados += '&origemcon='+document.forms[formulario].elements['origemcon'].value;
	}
	var windowNote;
	windowNote = window.open(abrecomestesdados,'imprimir','toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes,copyhistory=no,width=750,height=550');
	windowNote.focus();
	windowNote.document.close();
  }else if((acao != 'deletar') && (acao != 'cancelar')){
    for(i=0;i<document.forms[formulario].length;i++){
      comp = document.forms[formulario].elements[i].name;
	  valor = meutrim(document.forms[formulario].elements[i].value);
	  if(comp.substr(0,1) == "_"){
	    if(document.forms[formulario].elements[i].type == "file"){
		  if(comp.substr(1,1) != "T"){
		    ext = valor.substring(valor.length-3,valor.length).toLowerCase();
  		    if(ext != 'jpg'){
		      if(ext != 'jpeg'){
    	        alert('Você selecionou um arquivo .'+ext+' ; Selecione um arquivo de imagem .JPG.');
    	        return false;
		        break;
			  }
		    }
		  }
		}else if(comp.substr(1,1) == "@"){
	      if(!testaemail(valor)){
		    alert('Digite um e-mail válido.');
		    document.forms[formulario].elements[i].focus();
            return false;
	  	    break;
		  }
	    }else if(comp.substr(1,1) == "1"){
	      if(!testanumero(valor)){
		    alert('Você não digitou um número válido.');
		    document.forms[formulario].elements[i].focus();
            return false;
	  	    break;
		  }
	    }else if(comp.substr(1,1) == "3"){
	      if(!testanumerocv(valor)){
		    alert('Você não digitou um número válido.');
		    document.forms[formulario].elements[i].focus();
            return false;
	  	    break;
		  }
	    }else if(comp.substr(0,1) == "2"){
		  //Verificação da existência do campo "tipo" 1 = CPF e 2 = CNPJ, caso nenhum dos dois. CPF é a saída...
	      if(document.forms[formulario].elements['tipo']){
		    tipo = document.forms[formulario].elements['tipo'].value;
		  }
		  if((tipo != 1) && (tipo != 2)){
		    tipo = 1;
		  }
	      if((comp.search("cpf") > 0) && (tipo == 1)){
	        if(testanumero(valor)){
		      if(!verificarCPF(valor)){
  	            alert('Digite um CPF válido. Ou deixe em branco.');
		        document.forms[formulario].elements[i].focus();
                return false;
	  	        break;
		 	  }
	        }else{
		      alert('Digite apenas números');
		      document.forms[formulario].elements[i].focus();
              return false;
	  	      break;
		    }
		  }else if((comp.search("cnpj") > 0) || ((comp.search("cpf") > 0) && (tipo == 2))){
	        if(testanumero(valor)){
		      if(!verificarCNPJ(valor)){
  	            alert('Digite um CNPJ válido. Ou deixe em branco.');
		        document.forms[formulario].elements[i].focus();
                return false;
	  	        break;
			  }
	        }else{
		      alert('Digite apenas números');
		      document.forms[formulario].elements[i].focus();
              return false;
	  	      break;
		    }
		  }else{
		    alert('ERRO FATAL! Tipo não encontrado para este campo. Informe o desenvolvedor do site.');
		    document.forms[formulario].elements[i].focus();
            return false;
	  	    break;
		  }
        }else if(comp.substr(1,1) == "/"){
	      if(!testadata(valor)){
		    alert('Você não digitou uma data válida.');
		    document.forms[formulario].elements[i].focus();
            return false;
	  	    break;
		  }
	    }else if(valor == ""){
	      comp = comp.substr(1);
		  if(document.forms[formulario].elements[i].type == "select-one"){
		    alert("Erro em: "+comp+". Selecione uma opção.");
		  }else if(document.forms[formulario].elements[i].type == "radio"){
		    alert("Erro em: "+comp+". Marque uma opção.");
		  }else if(document.forms[formulario].elements[i].type == "checkbox"){
		    alert("Erro em: "+comp+". Selecione uma opção.");
		  }else if(document.forms[formulario].elements[i].type == "password"){
		    alert("Erro em: "+comp+". Verifique se a tecla Caps Lock não está ativa.");
		  }else if(document.forms[formulario].elements[i].type == "file"){
		    alert("Erro em: "+comp+". Selecione um arquivo pelo botão 'Procurar'.");
		  }else{
		    alert("Erro em: "+comp+".");
		  }
  	      document.forms[formulario].elements[i].focus();
          return false;
		  break;
	    }
//inicio da não obrigatoriedade, porém se tem valor tem que estar certo...		
	  }else if((valor != "") && (document.forms[formulario].elements[i].type == "file")){
	    if(comp.substr(1,1) != "T"){
		  ext = valor.substring(valor.length-3,valor.length).toLowerCase();
  		  if(ext != 'jpg'){
		    if(ext != 'jpeg'){
    	      alert('Você selecionou um arquivo .'+ext+' ; Selecione um arquivo de imagem .JPG.');
    	      return false;
		      break;
		    }
		  }
		}
	  }else if((valor != "") && (comp.substr(0,1) == "@")){
        if(!testaemail(valor)){
	      alert('Digite um e-mail válido. Ou deixe em branco.');
		  document.forms[formulario].elements[i].focus();
          return false;
	  	  break;
	    }
	  }else if((valor != "") && (comp.substr(0,1) == "1")){
	    if(!testanumero(valor)){
  	      alert('Digite um número válido. Ou deixe em branco');
		  document.forms[formulario].elements[i].focus();
          return false;
	  	  break;
	    }
      }else if((valor != "") && (comp.substr(0,1) == "3")){
	    if(!testanumerocv(valor)){
  	      alert('Digite um número válido. Ou deixe em branco');
		  document.forms[formulario].elements[i].focus();
          return false;
	  	  break;
	    }
      }else if((valor != "") && (comp.substr(0,1) == "2")){
	    //Verificação da existência do campo "tipo" 1 = CPF e 2 = CNPJ, caso nenhum dos dois. CPF é a saída...
	    if(document.forms[formulario].elements['tipo']){
		  tipo = document.forms[formulario].elements['tipo'].value;
		}
		if((tipo != 1) && (tipo != 2)){
		  tipo = 1;
		}
	    if((comp.search("cpf") > 0) && (tipo == 1)){
	      if(testanumero(valor)){
		    if(!verificarCPF(valor)){
  	          alert('Digite um CPF válido. Ou deixe em branco');
		      document.forms[formulario].elements[i].focus();
              return false;
	  	      break;
			}
	      }else{
		    alert('Digite apenas números');
		    document.forms[formulario].elements[i].focus();
            return false;
	  	    break;
		  }
		}else if((comp.search("cnpj") > 0) || ((comp.search("cpf") > 0) && (tipo == 2))){
	      if(testanumero(valor)){
		    if(!verificarCNPJ(valor)){
  	          alert('Digite um CNPJ válido. Ou deixe em branco');
		      document.forms[formulario].elements[i].focus();
              return false;
	  	      break;
			}
	      }else{
		    alert('Digite apenas números');
		    document.forms[formulario].elements[i].focus();
            return false;
	  	    break;
		  }
		}else{
		  alert('ERRO FATAL! Tipo não encontrado para este campo. Informe o desenvolvedor do site.');
		  document.forms[formulario].elements[i].focus();
          return false;
	  	  break;
		}
      }else if((valor != "") && (comp.substr(0,1) == "/")){
	    if(!testadata(valor)){
		  alert('Você não digitou uma data válida.');
		  document.forms[formulario].elements[i].focus();
          return false;
	  	  break;
	    }
      }
    }
    if(document.images['aut']){
      document.forms[formulario].elements['imagem'].value = document.images['aut'].src;
    }
  }
  if(parseInt(document.forms[formulario].elements['acao'].value) == 1){
    //zerado...
	if(acao == "cadastrar"){document.forms[formulario].elements['acao'].value = 1;}
    else if(acao == "cancelar"){document.forms[formulario].elements['acao'].value = 5;}
    else if(acao == "deletar"){
	  if(confirm('Deseja deletar todas as informações do registro selecionado?')){
	    document.forms[formulario].elements['acao'].value = 3;
	  }else{
	    // só poderá entrar aqui se for de consulta... senão vai dar bolo...
	    document.forms[formulario].elements['acao'].value = 10;
	  }
	}
  }else if(parseInt(document.forms[formulario].elements['acao'].value) == 2){
    //não zerado...
	if(acao == "cadastrar"){document.forms[formulario].elements['acao'].value = 2;}
    else if(acao == "cancelar"){document.forms[formulario].elements['acao'].value = 5;}
    else if(acao == "deletar"){
	  if(confirm('Deseja deletar todas as informações do registro selecionado?')){
	    document.forms[formulario].elements['acao'].value = 3;
	  }else{
	    document.forms[formulario].elements['acao'].value = 5;
	  }
	}
  }else if(parseInt(document.forms[formulario].elements['acao'].value) == 0){
    //acão para e-mail's...
	document.forms[formulario].elements['acao'].value = 1;
  }
  if(efetuaon == 1){
    document.forms[formulario].onsubmit();
  }
  document.forms[formulario].submit();
}

function verificarCPF(c){
  //desenvolvido por Roberto Furutani.
  var i; 
  s = c;
  var c = s.substr(0,9); 
  var dv = s.substr(9,2); 
  var d1 = 0; 
  var v = false;
  for (i = 0; i < 9; i++){ 
    d1 += c.charAt(i)*(10-i); 
  } 
  if (d1 == 0){ 
    //CPF Inválido
    v = true; 
    return false; 
  } 
  d1 = 11 - (d1 % 11); 
  if (d1 > 9) d1 = 0; 
  if (dv.charAt(0) != d1){ 
    //CPF Inválido
    v = true;
    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){ 
    //CPF Inválido
    v = true;
    return false; 
  } 
  if (!v){
    //CPF Válido
	return true;
  }
}

/*
  Sript de Thiago Prado, buscado na IMasters, post: http://www.imasters.com.br/artigo.php?cn=2451&cc=78&PHPSESSID=8a47d8929b2a698790d625c85c535634
  Modificações feitas para esta página Tiago Uriartt
*/
function verificarCNPJ(CNPJ) {
  var a = [];
  var b = new Number;
  var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
  for(i=0; i<12; i++){
    a[i] = CNPJ.charAt(i);
    b += a[i] * c[i+1];
  }
  if((x = b % 11) < 2){
    a[12] = 0
  }else{
    a[12] = 11-x
  }
  b = 0;
  for(y=0; y<13; y++){
    b += (a[y] * c[y]);
  }
  if((x = b % 11) < 2){
    a[13] = 0;
  }else{
    a[13] = 11-x;
  }
  if((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
    //erro dígito verificador...
    return false;
  }
  return true;
}

//Para o tratamento das telas de cadastro auxiliar só há uma exigência (por enquanto). O Furmulário deve se chamar "formulario"...
function abreauxiliar(janela,nome){
  win=window.open(janela,nome,"width=780,height=450,menubar=no,toolbar=no,status=no,scrollbars=yes")
  text = "Se nenhuma janela abriu\ntalvez seja porque voce tenha um\nprograma bloqueador de pop-up!\nObservacao » O windows XP service pack 2\nbloqueia pop-ups!";
  if(win == null){
    alert(text);
    return;
  }
  win.moveTo(50,50);
}

/*funções para quando for aberta a tela auxiliar de cadastro...*/
function atualiza(texto,valor,campo){
  document.formulario[campo].options[document.formulario[campo].options.length] = new Option(texto,valor,false,true);
}

function localiza(texto,valor,campo){
  for(i=0;i<document.formulario[campo].options.length;i++){
    if(document.formulario[campo].options[i].value == valor){
	  document.formulario[campo].options[i].text = texto;
	  document.formulario[campo].options[i].selected = true;
	  break;
	}
  }
}

function retira(codigo,campo){
  for(i=0;i<document.formulario[campo].options.length;i++){
    if(document.formulario[campo].options[i].value == codigo){
	  document.formulario[campo].options[i] = null;
	  document.formulario[campo].options[0].selected = true;
	  break;
	}
  }
}

//função que envia a modificação...
function efetuaatualizacao(tipo,texto,valor){  
  switch(tipo){
    case 1:window.opener.atualiza(texto,valor,window.name);break;
	case 2:window.opener.localiza(texto,valor,window.name);break;
	case 3:window.opener.retira(valor,window.name);break;
  }
}
function remove_label(campo){
	var login = campo;	
	if(login.value != null)
	{
		login.value = '';
	}
	
}