/*********************** Arquivo JS ******************/
//formata data para evento de objetos html
function formataData(obj,formato){
    var data = obj.value;
    if(data=="")return false;
    if(data.indexOf("/")==-1){
    //analisa os formatos
    	if(formato=="mm/yyyy"){
    		if(data.length!=6){
    			alert('A <DATA> não se encontra no formato válido mm/yyyy');
    			obj.focus();
    			return false;
    		}else{
    			data = data.slice(0,2)+"/"+data.slice(2,6);
    		}
    	}else if(formato=="dd/mm/yyyy"){
    		if(data.length!=8){
		 	alert('A <DATA> não se encontra no formato válido dd/mm/yyyy');
		 	obj.focus();
		 	return false;
		}else{
			data=data.slice(0,2)+"/"+data.slice(2,4)+"/"+data.slice(4,8);
    		}
    	}
    }
    // verifica se o valor da data está válido
    if(validarData(data,formato)){
        obj.value=data;
        return true;
    }else{
    	if(formato=="dd/mm/yyyy")
    		alert('A <DATA> não está válida ou não está no formato dd/mm/aaaa');
    	else if(formato=="mm/yyyy")
    		alert('A <DATA> não se encontra no formato válido mm/yyyy');
    	obj.focus();
    	return false;
    }
}
//funcao para validar data
function validarData(d,formato) {
    //selecione expressão regular pelo formato
    if(formato=="mm/yyyy"){
        e = new RegExp("^[0-9]{1,2}\/([0-9]{2}|[0-9]{4})$");
        if (!e.test(d))
        return false;
        m = parseInt(d.split("/")[0], 10); // mes
    	a = parseInt(d.split("/")[1], 10); // ano
    }else if(formato=="dd/mm/yyyy"){
    	e = new RegExp("^[0-9]{1,2}\/[0-9]{1,2}\/([0-9]{2}|[0-9]{4})$");
    	if (!e.test(d))
        return false;
    	//converte o texto em inteiro para outras verificacoes
	j = parseInt(d.split("/")[0], 10); // dia
	m = parseInt(d.split("/")[1], 10); // mes
	a = parseInt(d.split("/")[2], 10); // ano
    }
    // se o ano esta composto de apenas 2 numeros verifica e completa os demais digitos
    if (a < 1000) {
        if (a < 89)a+=2000;
        else a+=1900;
    }
    // definicao do mes de fevereiro
    if (a%4 == 0 && a%100 !=0 || a%400 == 0) fev = 29;
    else fev = 28;
    // Número de dias por mes
    nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);
    // retorna true ou false e testa de acordo com o formato
    if(formato=="mm/yyyy")
    	return ( m >= 1 && m <=12 );//verifica mes
    else if(formato=="dd/mm/yyyy")
    	return ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] );//verifica dia e mes
}
/**** funçãoo para varificar se a string é número ****/
function eNumeroStr(valor) {
  var numeros = "0123456789";
  if (valor == "")
    return false;
  for(var i=0;i<=valor.length-1;i++){
    if (valor.substr(i,1) != numeros.substr(numeros.indexOf(valor.substr(i,1)),1)){
      return false;
    }
  }
  return true;
}
/** funcao para so permitir entrda de numero **/
function soEntraNumero(evt) {
	evt = (evt) ? evt : window.event
	var charCode = (evt.which) ? evt.which : evt.keyCode
	if (charCode > 31 && (charCode < 48 || charCode > 57)) {
		return false
	}
	return true
}

/**** funcao para varificar campos de texto e objetos select-one com valor default igual a [SELECIONE]****/
function checarPorBrancos(){
	for (var i = 0; i < arguments.length; i += 2){
	if (arguments[i].value=="" || arguments[i].value=="[SELECIONE]"){
   	     		alert("Campo " + arguments[i+1] + " tem preenchimento obrigatório.");
		  		arguments[i].focus();
		  		return false;
      }  
	}	
	return true;
}
//funcao para validar data de varios campos
function validarDatas(){
	for (var i = 0; i < arguments.length; i += 2){
	if (!eData(arguments[i].value) || arguments[i].value==""){
   	     		alert("Campo " + arguments[i+1] + " tem preenchimento obrigatorio.");
		  		arguments[i].focus();
		  		return false;
      }  
	}	
	return true;
}

/**** funcao para deixar o texto maiusculo ****/
function formataParaMaiusculo(src){
   src.value = src.value.toUpperCase();
}

/**** funcao para formatacao de cpf de string ###.###.###-## para ########### ****/
function transfereCPF(cpfStr){
	var cpf;
	cpf =  cpfStr.value.substring(0,3);
	cpf += cpfStr.value.substring(4,7);
	cpf += cpfStr.value.substring(8,11);
	cpf += cpfStr.value.substring(12,14);
	return cpf;
}
/*** funcao para so permitir entrada de numeros e letras ***/
function eNumeroOuLetra(campo){
	var regex = /^[0-9a-zA-Z]*$/;
	if(!regex.test(campo.value)){
	   alert('O Campo só aceita números e letras');
	   campo.focus();
	   return false;
	}
}

/**** funcao para validar data ****/
function eData(valor) {
  if(valor!=""){
  	s_dia = valor.substr(0,2);
  	s_mes = valor.substr(3,2);
  	s_ano = valor.substr(8,4);
  }else return false;
  meses = new Array(12);
  meses[0] = 31;meses[1] = 28;meses[2] = 31;
  meses[3] = 30;meses[4] = 31;meses[5] = 30;
  meses[6] = 31;meses[7] = 31;meses[8] = 30;
  meses[9] = 31;meses[10] = 30;meses[11] = 31;
  if (!(valor.length == 10))
    return false;
  if (!eNumeroStr(s_dia) || !eNumeroStr(s_mes) || !eNumeroStr(s_ano))
    return false;
  else {
    dia = parseInt(s_dia,10);    
    mes = parseInt(s_mes,10);    
    ano = parseInt(s_ano,10);    
    if (ano % 4 == 0)   
      meses[1] = 29;

    if ((mes > 12 || dia <= 0 || mes <= 0 || ano < 0) || (dia > meses[mes-1]))
      return false;
    else 
      return true;
  }
}

/*** funcao para validacao de cpf ****/
function validaCPF(src) {
	var cpfRegex = /^\d{3}\.\d{3}\.\d{3}\-\d{2}$/;
	if (!cpfRegex.test(src.value)){
		alert('Numero de CPF invalido pois nao obedece ao formato ###.###.###-##');
		src.focus();
		return false;
	}
	//formata o cpf para numero
	cpf = transfereCPF(src);	
	if (cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || 
		cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || 
		cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || 
		cpf == "99999999999"){
		
		alert("Numero de CPF invalido!");
		src.focus();
		return false; 
	}
	//calcula o cpf
	var a = [];
	var b = new Number;
	var c = 11;
	for (i=0; i<11; i++){
		a[i] = cpf.charAt(i);
		if (i < 9) b += (a[i] * --c);
	}
	if ((x = b % 11) < 2) { a[9] = 0 } else { a[9] = 11-x }
	b = 0;
	c = 11;
	for (y=0; y<10; y++) b += (a[y] * c--); 
	if ((x = b % 11) < 2) { 
		a[10] = 0; 
	}else { 
		a[10] = 11-x; 
	}
	if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10])){
		alert('Digito verificador com problema');
		src.focus();
		return false;
	}
	return true;
}
//funcao para capturar o objeto xmlhttprequest do browser
function getXMLHttp(){
	var xmlhttp=null;
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");//para i.e.
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");//para i.e.
		} catch (E) {
			xmlhttp = null;
		}
	}
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  		xmlhttp = new XMLHttpRequest();//padrao
	}
	return xmlhttp;
}
//função para usar AJAX e reflexao de metodo
function processaAjax(minhaFuncao,url){
  var xmlhttp = getXMLHttp();
  xmlhttp.open("POST", url,true);
  xmlhttp.onreadystatechange=function() {
   if (xmlhttp.readyState==4) {
     //função usada para internet explorer
     if(verificaBrowser()=="ie")
     	xmlhttp.responseXML.loadXML(xmlhttp.responseText);
     funcao = eval(minhaFuncao);
   }
  }
  xmlhttp.send(null);
}
//função para popular combo
function montaCombo(ajaxResponse,id,compls,labelStatus){
 var data = ajaxResponse.getElementsByTagName("option");
 var htmlText="<select "+compls+" >";
 htmlText=htmlText+"<option value='[SELECIONE]'>[Selecione uma opção]</option>";
 if(data==null || data.length==0){
 	alert('Nenhum registro encontrado');
 	document.getElementById(labelStatus).innerHTML="";
 }else{
 	for(i=0;i<data.length;i++){
      		var value = data[i].getElementsByTagName("value").item(0);
      		var option = data[i].getElementsByTagName("desc").item(0);
      		htmlText=htmlText+"<option value='"+value.firstChild.data+"'>"+option.firstChild.data+"</option>";
    	}
    	document.getElementById(id).disabled=false;
 }
 htmlText=htmlText+"</select>";
 document.getElementById(id).innerHTML=htmlText;
 document.getElementById(labelStatus).innerHTML="";
}
//funcao para abrir div dentro da pagina html
function showDetails(divID)
{     
   var status = document.getElementById(divID).style.display;
   if(status=="none"){
   	document.getElementById(divID).style.display = "block";
   }else if(status=="block"){
    document.getElementById(divID).style.display = "none";
   }
   
}
// funcao usada para copiar dados entre os dois JSP's o escondido e o principal
function copia(argTexto,argValor,local,frame){
      framePrincipal = frame;
      var selecaoPrincipal = local;
      var oOption = framePrincipal.createElement("OPTION");
      oOption.text = argTexto;
      oOption.value = argValor;
      selecaoPrincipal.options[selecaoPrincipal.length] = oOption;
}
function transfereCombos(src1,src2,frame){
      selectEscondido=src1;
      selectPrincipal=src2;
      selectPrincipal.length=0;
      var contador=0;
      while (contador < selectEscondido.length){
        copia(selectEscondido.options[contador].text,selectEscondido.options[contador].value,selectPrincipal,frame);
        contador++;
      }
      if (contador == 0){
        copia("[Selecione uma opcao]","[SELECIONE]",selectPrincipal,frame);
      }
      return contador;
}
//remover todos os elementos do select menos o selecionado
function zerarCombo(obj)
{
  obj.options[0].selected=true;	
  for (var i = obj.length - 1; i>=0; i--) {
    if (!obj.options[i].selected) {
      	obj.remove(i);
    }
  }
}
//selecionar um item do combo
function selecionarItemCombo(obj,valor)
{
  for (var i = 0;i<=obj.length;i++) {
    if (obj.options[i].value==valor) {
      	obj.options[i].selected=true;
      	i=obj.length;
    }
  }
}
//funcao para marcar radio
function marcaRadio(radio,num){
	radio[num].checked='true';
}
//função para mudar o foco dos campos da carteira do beneficiario
function mudaFocoCarteiraBenef(event,campo,campoDepois,tamanho){
  if(soEntraNumero(event)){
  	if(campo.value.length  ==tamanho)  	
  		campoDepois.focus();
  	return true;	
  }return false;		
}
/* função para verificar email */
function checaEmail(emailStr) {
	if (emailStr.length == 0) {
    	return true;
    }
    var emailPat=/^(.+)@(.+)$/;
    var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
    var validChars="\[^\\s" + specialChars + "\]";
    var quotedUser="(\"[^\"]*\")";
    var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
    var atom=validChars + '+';
    var word="(" + atom + "|" + quotedUser + ")";
    var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
    var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
    var matchArray=emailStr.match(emailPat);
    if (matchArray == null) {
    	return false;
    }
    var user=matchArray[1];
    var domain=matchArray[2];
    if (user.match(userPat) == null) {
    	return false;
    }
    var IPArray = domain.match(ipDomainPat);
    if (IPArray != null) {
    	for (var i = 1; i <= 4; i++) {
        	if (IPArray[i] > 255) {
            	return false;
             }
        }
    	return true;
    }
    var domainArray=domain.match(domainPat);
    if (domainArray == null) {
    	return false;
    }
    var atomPat=new RegExp(atom,"g");
    var domArr=domain.match(atomPat);
    var len=domArr.length;
    if ((domArr[domArr.length-1].length < 2) ||
    	(domArr[domArr.length-1].length > 3)) {
        return false;
    }
    if (len < 2) {
    	return false;
    }
    return true;
}
//função para submeter form
function submeteForm(form,url){
	form.action=url;
	form.method="POST";
	form.submit();window.status="";
}
//função para desabilitar campos de um form
function desabilitarForm(form,status,comeco,fim){
  for(var i=comeco;(i<form.length)&&(i<fim+1);i++){
  	form[i].disabled=status;
  }
}
//função para detectar o browser do cliente
function verificaBrowser(){
if (window.showHelp)
	return "ie"; 
if (!window.attachEvent) 
	return "mac";
if (document.createElementNS) 
	return "dom";
if (navigator.userAgent.indexOf("afari")>-1) 
	return "safari";
if (window.opera) 
	return "opera";
}
//função para concatenar valores dos campos do form para gerar uma URL
function montarParametrosURL(form){
  var url = "";
  for(var i=0;i<form.length;i++){
  	url = url+"&"+form[i].name+"="+form[i].value;
  }
  return url;
}
//função utilizada para imprimir pagina html
function imprimir(){
	if (!window.print){
		alert("Seu browser não permite abrir caixa de impressão!")
		return false;
	}
	window.print();
}
//função utilizada para abrir relatorio
function abrirRelatorio(ajaxResponse,barraProgresso,labelStatus,idBotao){
  var resultado = ajaxResponse.getElementsByTagName("resultado")[0];
  if(resultado!=null){
     var valor = resultado.childNodes[0].nodeValue;
     if(valor!="" & valor=="erro"){
       barraProgresso.togglePause();barraProgresso.hideBar();
       if(labelStatus!="")document.getElementById(labelStatus).innerHTML='';
       alert('Ocorreu um < ERRO > durante a geração do relatório');
	if(idBotao!=null && idBotao!="")document.getElementById(idBotao).disabled=false;
       return false;
     }else if(valor!="" & valor=="ok"){
       barraProgresso.togglePause();barraProgresso.hideBar();
       if(labelStatus!="")document.getElementById(labelStatus).innerHTML='';
       window.open('abrir_relatorio.pdf','','left=200,top=150,resizable=yes,height = 450, width = 500');
       if(idBotao!=null && idBotao!="")document.getElementById(idBotao).disabled=false;
	return true;
     }	 
  }else{
     barraProgresso.togglePause();barraProgresso.hideBar();
     if(labelStatus!="")document.getElementById(labelStatus).innerHTML='';
     alert('Ocorreu um < ERRO > durante a geração do relatório'); 
     if(idBotao!=null && idBotao!="")document.getElementById(idBotao).disabled=false;	 
     return false;
  }
}
//função para validar ano
function validarAno(campo){
 var ano = campo.value;
 if(ano!=""){
 	ano = parseInt(ano,10);
 	if(ano<1900 || ano>2999){
 	  alert('O <ANO> não se encontra em formato válido');
 	  campo.focus();
 	}
 		
 }
}
//função para retornar o valor do campo
function getValue(field){
	if(field.type=="text" && field.value != ""){
		return field.value;
	}else if(field.type=="select-one" && field.options[field.selectedIndex].text != "[SELECIONE]" && field.options[field.selectedIndex].text != "[Selecione uma opção]"){
		return field.value;		
	}else if(field.type=="radio" && field.checked){
		return field.value;
	}else if(field.type=="hidden" && field.value != ""){
		return field.value;
	}else if(field.type=="checkbox" && field.checked){
		return field.value;
	}			
} 
//função para saber se um campo possui title
function getTitle(field){
	if(field.title != null && field.title != "")
		return true;
	else
		return false;	
}

function mascaraDataHora(evento,objeto){
	var keypress = (window.event)?event.keyCode:evento.which;
	campo = eval (objeto);
	if (campo.value == '00/00/0000 00:00'){
		campo.value=""
	}
	caracteres = '0123456789';
	separacao1 = '/';
	separacao2 = ' ';
	separacao3 = ':';
	conjunto1 = 2;
	conjunto2 = 5;
	conjunto3 = 10;
	conjunto4 = 13;
	conjunto5 = 16;
	if (keypress == 8) {
		return true;
	}else if ((caracteres.search(String.fromCharCode(keypress))!= -1) && campo.value.length < (16)){
			if (campo.value.length == conjunto1)
				campo.value = campo.value + separacao1;
			else if (campo.value.length == conjunto2)
				campo.value = campo.value + separacao1;
			else if (campo.value.length == conjunto3)
				campo.value = campo.value + separacao2;
			else if (campo.value.length == conjunto4)
				campo.value = campo.value + separacao3;
			else if (campo.value.length == conjunto5)
				campo.value = campo.value + separacao3;
	}
	else {
		return false;
	}	
}
