/**************************
Todas s funções chamadas por eventos em objetos criados automaticamente, possuem o parametro
evento, que é um ponteiro para uma função que talvez não exista. Por isto a função contida no
parametro "evento" só deve ser chamada no final de cada função, pois se não existir o nome de
função especificado, ocorrerá um erro de script.
O nome será criado automáticamente da seguinte forma NomeDoObjeto + NomeDoEvento:
ex:
Texto1click(self) , Texto1gotfocus(self), Texto1lostfocus(self), Texto1keypress(self, keycode)
Estes nomes de funções podem ser chamados logo após a criação automática do formulário.

NuNuNO
2005 
**************************/
function NadaFaz(nada, mesmo){}

function OnLoadForms()
{
	
	//Executa a função do usuario mais próxima
	try
	{
		eval("LoadForm()");
	}catch (e){NadaFaz();};
	
	//Executa a lista de funções ExecutaDepois
	 try
	 {
		if(ExecutaDepois)
		{
			Depois();
		}
	}catch (e){NadaFaz();};
}
function EntrouNoCampo(obj, evento, CorDiferente)	
{
	if (!CorDiferente)
	{
		//obj.style.background = "#FFFF99";
		obj.className="sel_" + obj.className;
	}
	else
	{
		obj.style.background = CorDiferente;
	}
	evento(obj);	 
	
} 

function SaiuDoCampo(obj, evento, pulaevento, CorDiferente)
{
	if (!CorDiferente)
	{
		//obj.style.background = "#CCCCFF";	 
		obj.className=obj.className.substring(4);
	}
	else
	{
		obj.style.background = CorDiferente;
	}
	
	if(!pulaevento)
	{
		evento(obj);
		
	}
}  

function SaiuDoCampoRef(obj, ref, evento, CorDiferente)
{
	 //Funções normais de perda de foco	(evitando usar o evento)
	 SaiuDoCampo(obj,0,true, CorDiferente); 
	 
	 //Descobre o objeto pelo ID
	 var objref = document.getElementById(ref);
	 	 	 
	 //Chama uma função que é criada dinamicamente...
	 objref.value = ProcuraReferencia(obj.value, ref);
	 
	 //Tira o 'undefined' quando nehuma opção é selecionada
	 if(objref.value=='undefined')
	 {
	     objref.value="";
	 }
	 
	 //Agora sim, usa o evento	 
	 evento(obj);
	 
}

function ClicouNoCampo(obj, evento)
{
	
	evento(obj);
	
}

function DigitouNoBotao(obj)
{
	//Muda o foco com o ENTER...
	if(event.keyCode == 13)	//ENTER
	{
	   
	   event.keyCode = 9; //9=TAB, 16=SHIFT
	   
	}  
	
	event.returnValue=true;
	
}

function DigitouNoCampoLivre(obj, evento)
{
	//alert(event.keyCode);
	//Muda o foco com o ENTER...
	if(event.keyCode == 13)	//ENTER
	{
	   event.keyCode = 9; //TAB
	}

	var usuario = evento(obj, event);
	event.returnValue=usuario;
}

var apague= 65536;
function DigitouNoCampoLivreTA(obj, evento)
{
		
	var usuario = evento(obj, event);
	event.returnValue=usuario;
	
}


function DigitouNoCampoNumero(obj, evento)
{
	//Muda o foco com o ENTER...
	if(event.keyCode == 13)	//ENTER
	{
	   event.keyCode = 9; //TAB
	}
	//Só redireciona para evento do usuario se for uma tecla válida
	if (event.keyCode >=48 && event.keyCode <=57 || (event.keyCode >=96 && event.keyCode <=105) )
	{
		var usuario = evento(obj, event);
		event.returnValue=usuario;
	}
	else
	{
	    //Testa se é ima tecla comum de navegação
	   if(event.keyCode == 46 || event.keyCode == 8 ||event.keyCode == 39 ||event.keyCode == 37 ||event.keyCode == 38 ||event.keyCode == 40 || event.keyCode == 32 ||event.keyCode == 9 || event.keyCode == 16 || event.keyCode == 17 || event.keyCode == 36 ||event.keyCode == 35 )
	   {
	   	   event.returnValue = true;
	   }
	   else
	   {
	   	   event.returnValue = false;
	   }
	}
}

function DigitouNoCampoNumeroLivre(obj, evento)
{
	//Muda o foco com o ENTER...
	if(event.keyCode == 13)	//ENTER
	{
	   event.keyCode = 9; //TAB
	}
	//Só redireciona para evento do usuario se for uma tecla válida
	if ( (event.keyCode >=48 && event.keyCode <=57) || (event.keyCode >=96 && event.keyCode <=105) || event.keyCode == 188 || event.keyCode == 190 || event.keyCode == 189 || event.keyCode == 193 )
	{
		var usuario = evento(obj, event);
		event.returnValue=usuario;
	}
	else
	{
	    //Testa se é ima tecla comum de navegação
	   if(event.keyCode == 46 || event.keyCode == 8 ||event.keyCode == 39 ||event.keyCode == 37 ||event.keyCode == 38 ||event.keyCode == 40 || event.keyCode == 32 ||event.keyCode == 9 || event.keyCode == 16 || event.keyCode == 17 || event.keyCode == 36 ||event.keyCode == 35 )
	   {
	   	   event.returnValue = true;
	   }
	   else
	   {
	   	   event.returnValue = false;
	   }
	}
}


function DigitouNoCampoFlutuante(obj, evento)
{
	//alert(event.keyCode);
	//Muda o foco com o ENTER...
	if(event.keyCode == 13)	//ENTER
	{
	   event.keyCode = 9; //TAB
	}
	//Só redireciona para evento do usuario se for uma tecla válida
	if ((event.keyCode >=48 && event.keyCode <=57) || (event.keyCode >=96 && event.keyCode <=105) || event.keyCode == 188 || event.keyCode == 190 || event.keyCode == 194)
	{
		var usuario = evento(obj, event);
		event.returnValue=usuario;
		
	}
	else
	{
	    //Testa se é ima tecla comum de navegação
	   if(event.keyCode == 46 || event.keyCode == 8 ||event.keyCode == 39 ||event.keyCode == 37 ||event.keyCode == 38 ||event.keyCode == 40 || event.keyCode == 32 ||event.keyCode == 9 || event.keyCode == 16 || event.keyCode == 17 || event.keyCode == 36 ||event.keyCode == 35 )
	   {
	   	   event.returnValue = true;
	   }
	   else
	   {
	   	   event.returnValue = false;
	   }
	}
}


function DigitouNoCampoData(obj, evento)
{
	//Muda o foco com o ENTER...
	if(event.keyCode == 13)	//ENTER
	{
	   event.keyCode = 9; //TAB
	}
	
	//Só redireciona para evento do usuario se for uma tecla válida
	if ((event.keyCode >=48 && event.keyCode <=57) || (event.keyCode >=96 && event.keyCode <=105) || event.keyCode == 189 || event.keyCode == 193 || event.keyCode == 111)
	{
		var usuario = evento(obj, event);
		event.returnValue=usuario;
	}
	else
	{
	   //Testa se é ima tecla comum de navegação
	   if(event.keyCode == 46 || event.keyCode == 8 ||event.keyCode == 39 ||event.keyCode == 37 ||event.keyCode == 38 ||event.keyCode == 40 || event.keyCode == 32 ||event.keyCode == 9 || event.keyCode == 16 || event.keyCode == 17 || event.keyCode == 36 ||event.keyCode == 35 )
	   {
	   	   event.returnValue = true;
	   }
	   else
	   {
	   	   event.returnValue = false;
	   }
	}
}			



function PassouMouse(obj)
{
	obj.style.color = "000099";
}
function TirouMouse(obj)
{
	obj.style.color = "000000";
}  

function PassouMouse2(obj)
{
	obj.style.color = "#000099";
	obj.style.background = "#FFCC00";
}
function TirouMouse2(obj, cor)
{
	if(!cor)
	{
		cor="#FFFFF0";
	}
	obj.style.color = "#000000";
	obj.style.background = cor;
} 

function PassouMouseClass(obj)
{

	if(obj.className.substring(0,4)!="mou_" && obj.className.substring(0,4)!="sel_")
		obj.className="mou_" + obj.className;
}
function TirouMouseClass(obj, cor)
{
 	if(obj.className.substring(0,4)=="mou_")
		obj.className=obj.className.substring(4);
} 

/*
function AbreLinkXML(obj,cForm, cTabela, cCampo, cValor, cModo)
{
	var tabela = document.getElementById("Tabela");
	var campo = document.getElementById("Campo");
	var valor = document.getElementById("Valor"); 
	var modo = document.getElementById("Modo"); 
	
	tabela.value = cTabela;
	campo.value  = cCampo;
	valor.value = cValor; 
	modo.value = cModo
	
	var form = document.getElementById("Form1");
	form.submit();
	
}
*/
function AbreLinkLST1(obj, cLink, cTabela, cCampo, cValor, cModo, cParametros)
{
	//alert(cParametros);
	window.status="MyCreci";
	window.status="#AbreLink:"+cLink + "+" + cTabela + "+" + cCampo + "+" +  cValor + "+" + cModo + "+" + cParametros;
	window.status="MyCreci";	
}

//Função utilizada para as variaveis que contem referencis...
//Abre uma caixa de dialogo, e altera o valor dos campos!!!
//MUUUUITO SHOW DE BOLA!!!
function Referencia(quemChamou, outroObj,FormDialogo,TamanhoDaForm,Seleciona,Filtro)
{
	var Retorno = window.showModalDialog(FormDialogo + "&Seleciona="+Seleciona+"&Filtro="+Filtro , "", "dialogWidth: 570px; dialogHeight:" + TamanhoDaForm + "px;");
	
	var obj2 = document.getElementById(outroObj);
	
	//Como o formulário retorna dois valores separados por --> , é necessário separar os valores
	var retobj = Retorno.substring(0,Retorno.indexOf(" --> "));
	
	var retquemchamou =	Retorno.substring(Retorno.indexOf(" --> ")+5);
	
	
	quemChamou.value = 	retquemchamou;
	
	obj2.value = retobj;
	
	
} 

//Função chata que testa a validação automática (gerada dinamicamente tb) e depois manda salvar...
//SUPER SHOW DE BOLAAAAA !!!
function Salvar(obj, Valida, IdForm)
{
	if( SalvarAntesDoAutomatico(obj,IdForm) )
	{
		//Testa as permissões especiais para processos...
		var especial = document.getElementById("PermissaoEspecial");
		if(especial)
		{
		    //Permissão por departamento está prevista, mas ainda não funcional
			var departamento = document.getElementById("DepartamentoEspecial").value;
			var regaltera = document.getElementById("RegionalEspecial").value;
			var regcria = document.getElementById("regional");
			
			if(regcria)
			{
				if(regaltera!="00")
				{
				   if(regaltera != regcria.value)
				   {
				   	   alert("Você está tentando apagar um processo sob responsabilidade de outra delegacia regional. Esta alteração não é permitida, se você encontrou algum erro neste processo e deseja corriji-lo, entre em contato com a delegacia regional responsável.");
					   return false;
				   } 
				}
			}
		}
		
		if (Valida)
		{
			//A função de validar só retorn erros quando se trabalha com arrays...
			try
			{
				var Result = ValidaParaSalvar();
			}catch(e){};
			
			var ignorante = document.getElementById("ignorarerros");
			
			if (Result>=16)
			{
				//Um erro grave ocorreu, não pode ser ignorado...
				if ( ignorante )
				{
				 	ignorante.style.visibility="hidden";
				}
				
				alert("ATENÇÃO!!! As alterações solicitadas irão gerar duplicações na base de dados. Os dados marcados em vermelho estão incorretos, impossíbilitanto a gravação normal do registro. Corriga os erros e clique novamente em Salvar."); 
				return false;
			}
			if (Result==3)
			{
				//Um erro grave ocorreu, não pode ser ignorado...
				if ( ignorante )
				{
				 	ignorante.style.visibility="hidden";
				}
				
				alert("ATENÇÃO!!! Os dados marcados em vermelho estão incorretos, impossíbilitanto a gravação normal do registro. Corriga os erros e clique novamente em Salvar."); 
				return false;
			}
			
			if (Result==1 )
			{
				alert("ATENÇÃO! Os dados marcados em vermelho estão incorretos, impossíbilitanto a gravação normal do registro. Corriga os erros e clique novamente em Salvar.");
				
				if ( ignorante )
				{
				 	ignorante.style.visibility="visible"; 
									
				}
				
				return false;
			}
			
			
		}
		
		var form = document.getElementById(IdForm);
		
		
		if(form.Modo.value=="edita")
		{
			form.Modo.value="salva";
		}
		else
		{
 			form.Modo.value="salvanovo";
		}
		
		
//		alert(form.Modo.value + IdForm);
		form.submit();
		
		SalvarDepoisDoAutomatico(obj,IdForm);
		
	}
}

//Conteudo do botão especial EDITAR
function Editar(obj,IdForm)
{
	
	if(EditarAntesDoAutomatico(obj,IdForm) )
	{
		
		//Testa as permissões especiais para processos...
		var especial = document.getElementById("PermissaoEspecial");
		if(especial)
		{
		    //Permissão por departamento está prevista, mas ainda não funcional
			var departamento = document.getElementById("DepartamentoEspecial").value;
			var regaltera = document.getElementById("RegionalEspecial").value;
			var regcria = document.getElementById("regional");
			
			if(regcria)
			{
				if(regaltera!="00")
				{
				   if(regaltera != regcria.value)
				   {
				   	   alert("Você está tentando apagar um processo sob responsabilidade de outra delegacia regional. Esta alteração não é permitida, se você encontrou algum erro neste processo e deseja corriji-lo, entre em contato com a delegacia regional responsável.");
					   return false;
				   } 
				}
			}
		} 
		
		var form = document.getElementById(IdForm);
		
		
		form.Modo.value="edita";
		
		form.submit();
		
		EditarDepoisDoAutomatico(obj,IdForm);
		
	}
}

function Novo(obj,IdForm)
{
	
	if(NovoAntesDoAutomatico(obj,IdForm) )
	{
		var form = document.getElementById(IdForm);
		form.Modo.value="novo";
		
		form.submit();
		
		NovoDepoisDoAutomatico(obj,IdForm);
		
	}
}

//Modelo da função que irá validar os dados
function validadados(ObjId,TipoValida)
{
	var Importante=0;
	var Erro=0;	 
	var tmp=new String;	
	var campo=new String;
	var tabela=new String;
	var modo=document.getElementById("Modo").value;
	
	obj = document.getElementById(ObjId);
	
	//Efeito especial
	obj.className="TextoCampoeditaErro";
	
	//Testes de unicidade são feitos apenas para novos registros...
	if( (TipoValida.indexOf("U")> -1) && (modo=="novo") ) //Unico
	{
		//Valor do campo a ser testado
		tmp = obj.value;
		campo = obj.name;
		tabela = document.getElementById("Tabela").value;
		
		//Abre a janela modal que irá testar unicidade do campo. A janela testa e fecha automáticamente.
		var Retorno = window.showModalDialog("TestaUnico.php?Tabela="+tabela+"&Campo="+campo+"&Valor="+tmp, "", "dialogWidth: 570px; dialogHeight: 200px;");
		
		if (Retorno=="False"  )
		{
			Erro=16;
		}
	}	
	
	if( TipoValida.indexOf("V")> -1  ) //Vazio
	{
		tmp = obj.value;
		if (tmp.length==0)
		{
			Erro=1;
		}
	}
	
	//Os testes abaixo só serão realizados quando o campo não está vazio (no caso da opção de validação @)
	var PodeValidar=1;
	if( TipoValida.indexOf("@")> -1  )
	{
		if(obj.value.length==0)
		{
			PodeValidar=0;
		}
		
	}
	
	
	if(PodeValidar==1)
	{
		if( TipoValida.indexOf("C")> -1  ) //CPF
		{
			var r1=false;
			var r2=false;
			var x;
			
			tmp = obj.value;
			
			//Precisa fazer dentro de um for... aiiii...
			for(x=1;x<5;x++)
			{
				tmp = tmp.replace("/",""); 
				tmp = tmp.replace("-","");
				tmp = tmp.replace(".","");
			}
			
			r1 = TestaCpf(tmp);
			r2 = TestaCgc(tmp);	
			
			if (!(r1 || r2))
			{
				Erro=1;
			}
			
		}
		
		if(TipoValida.indexOf("D")> -1 )
		{
		  //Uma data não pode ser em branco e deve conter um valor válido
	        tmp = obj.value;
			if (tmp.length==0)
			{
				if(! (TipoValida.indexOf("N")> -1) ) //Permite datas em branco...
				{
					Erro=1;	
					
				}
			}
			else
			{
				if (testaData(tmp)==false)
				{
				   Erro=1;
				}
				else if(TipoValida.indexOf("F")> -1 ) //Testa se a data tem um valor FUTURO
				{
					var d = new Date(); //Pega a dta atual
					var dd = tmp.slice(0,2)
					var mm = tmp.slice(3,5)
					var yyyy = tmp.slice(6,10)
					var d2 = new Date(mm+"/"+dd+"/"+yyyy);
					
					if (d<d2)
					{
					   Erro=1;
					}  
			       
					
				}
				
			}
			
			
		}
	}
	if(TipoValida.indexOf("*")> -1 )
	{
		Importante = 2;
	}
	
	
	if(Erro==0)
	{
		obj.className="TextoCampoedita";
		Importante=0;
	}
	return Erro + Importante;
}


function testaData(a)
{
	//var a=document.frm1.data01.value
	var chk    = 0;
	var maxDay = 0;
	
	var dd = a.slice(0,2)
	var mm = a.slice(3,5)
	var yyyy = a.slice(6,10)
	
	maxDay = max_day(mm, yyyy);  
	
	if((dd <= 0) || (dd > maxDay))
		{ chk = 1;}
	else if((mm <= 0) || (mm > 12))
		{ chk = 1;}
	else if((yyyy <= 0))
		{ chk = 1;} 
	
	if(chk == 1)
	{ 
		return false;
	}
	else
	{ 
		return true;
	}
}

function max_day(mn, yr)
{
   var mDay;
	if((mn == 4) || (mn == 6) || (mn == 9) || (mn == 11))
	{ 
		mDay = 30;
	}
	else if(mn == 2)
	{
		mDay = isLeapYear(yr) ? 29 : 28;    
	}
	else
	{
		mDay = 31;
	}
	return mDay; 

}

function isLeapYear(yr)
{
	if (yr % 2 == 0) 
		return true;
	return false;
}
			 

function TestaCgc(pcgc)
 {
       // verifica o tamanho
 if (pcgc.length != 14)
{
  sim=false;
 
}
 else {sim=true}

  if (sim )  // verifica se e numero
  {
  for (i=0;((i<=(pcgc.length-1))&& sim); i++)
  {
   val = pcgc.charAt(i)
       // alert (val)
   if
((val!="9")&&(val!="0")&&(val!="1")&&(val!="2")&&(val!="3")&&(val!="4") &&
(val!="5")&&(val!="6")&&(val!="7")&&(val!="8")) {sim=false}
   }
   if (sim)  // se for numero continua
   {
    m2 = 2
    soma1 = 0
    soma2 = 0
    for (i=11;i>=0;i--)
    {
     val = eval(pcgc.charAt(i))
       // alert ("Valor do Val: "+val)
     m1 = m2
  if (m2<9) { m2 = m2+1}
  else {m2 = 2}
  soma1 = soma1 + (val * m1)
  soma2 = soma2 + (val * m2)
    }  // fim do for de soma

  soma1 = soma1 % 11
  if (soma1 < 2) {  d1 = 0}
   else { d1 = 11- soma1}

     soma2 = (soma2 + (2 * d1)) % 11
  if (soma2 < 2) { d2 = 0}
   else { d2 = 11- soma2}
        // alert (d1)
       // alert (d2)
    if ((d1==pcgc.charAt(12)) && (d2==pcgc.charAt(13)))
   { return true; }
   else return false;
   }
 }

 }


 function TestaCpf(pcpf)
 {

 if (pcpf.length != 11) {sim=false}
 else {sim=true}

  if (sim )  // valida o primeiro digito
  {
  for (i=0;((i<=(pcpf.length-1))&& sim); i++)
  {
   val = pcpf.charAt(i)
   if

 ((val!="9")&&(val!="0")&&(val!="1")&&(val!="2")&&(val!="3")&&(val!="4")

 &&    (val!="5")&&(val!="6")&&(val!="7")&&(val!="8")) {sim=false}
   }

   if (sim)
  {
    soma = 0
    for (i=0;i<=8;i++)
    {
     val = eval(pcpf.charAt(i))
     soma = soma + (val*(i+1))
    }

    resto = soma % 11
    if (resto>9) dig = resto -10
    else  dig = resto
    if (dig != eval(pcpf.charAt(9))) { sim=false }
   else   // valida o segundo digito
    {

     soma = 0
    for (i=0;i<=7;i++)
     {
     val = eval(pcpf.charAt(i+1))
      soma = soma + (val*(i+1))
    }

     soma = soma + (dig * 9)
     resto = soma % 11
     if (resto>9) dig = resto -10
     else  dig = resto
   if (dig != eval(pcpf.charAt(10))) { sim = false }
    else sim = true
   }
   }
  }

  return sim;
 }

function Cancelar(obj,IdForm)
{
	
	if(CancelarAntesDoAutomatico(obj,IdForm) )
	{
		var form = document.getElementById(IdForm);
		try
		{
		    var acao = document.getElementById("acao");
			acao.value="";	
		}catch (e){};
		
		if(form.Modo.value == "novo")
		{
			form.Modo.value="";
			
		}
		else
		{
			form.Modo.value="mostra";
		}

		form.submit();
		
		CancelarDepoisDoAutomatico(obj,IdForm);
		
	}
}

//Normalmente quando o formulário não tem paremetros de busca, será aberto a tela de pesquisa
//Por tanto, a função retornar normalmente é utilizada com o botão localizar.
function Retornar(obj,IdForm)
{
	
	if(RetornarAntesDoAutomatico(obj,IdForm) )
	{
		var form = document.getElementById(IdForm);
		
		form.Modo.value="";
		

		form.submit();
		
		RetornarDepoisDoAutomatico(obj,IdForm);
		
	}
}					  

function Apagar(obj,IdForm)
{
	//Testa as permissões especiais para processos...
	var especial = document.getElementById("PermissaoEspecial");
	if(especial)
	{
	    //Permissão por departamento está prevista, mas ainda não funcional
		var departamento = document.getElementById("DepartamentoEspecial").value;
		var regaltera = document.getElementById("RegionalEspecial").value;
		var regcria = document.getElementById("regional");
		
		if(regcria)
		{
			if(regaltera!="00")
			{
			   if(regaltera != regcria.value)
			   {
			   	   alert("Você está tentando apagar um processo sob responsabilidade de outra delegacia regional. Esta alteração não é permitida, se você encontrou algum erro neste processo e deseja corriji-lo, entre em contato com a delegacia regional responsável.");
				   return false;
			   } 
			}
		}
	} 
		
	
	var form=document.getElementById(IdForm);
	var tabela=form.Tabela.value;
	var campo=form.Campo.value;
	var valor=form.Valor.value;
	
	if(ApagarAntesDoAutomatico(obj) )
	{
		var Retorno = window.showModalDialog("ApagaRegistro.php?Tabela="+tabela+"&Campo="+campo+"&Valor="+valor, "", "dialogWidth: 570px; dialogHeight: 200px;");
		
		//Se o Apagar depois do automatico retornar false, não atualiza a tela...
		if( ApagarDepoisDoAutomatico(obj,IdForm) )
		{
			form.Modo.value="mostra";
			form.submit();
		}
		
	}
}

function hideme(obj)
{
	obj.style.visibility="hidden";
}