// JavaScript Document - Biblioteca de funções
//
// função                         descrição
// ------------------------------ -------------------------------------------------------------------------------------------------------------------------------------
// teste_javascript() ........... validação para saber se o javascript está habilitado no navegador antes da execução da página
// encripta(txt) ................ encripta o texto 'txt' retornando o valor obtido
// decripta(txt) ................ decripta o texto 'txt' encriptado anteriormente pela função 'encripta' 
// verifica_email(txt) .......... verifica se 'txt' é um email do tipo aa@bb.ccc
// verifica_data(data) .......... verifica se 'data' está no formato DD/MM/AAAA e é entre 1900 e o ano atual
// verifica_data_formato(data) .. verifica se 'data' está no formato DD/MM/AAAA
// validRequired(txt,msg) ....... verifica se o campo 'msg' foi preenchido ou não
// allDigits(str) ............... verifica se todos os caracteres da string 'str' são números
// inValidCharSet(str,charset) .. verifica se todos os caracteres da string 'str' estão no conjunto 'charset'
// verifica_cgc(pcgc) ........... verifica se o cgc digitado é válido
// verifica_cpf(pcpf) ........... verifica se o cpf digitado é válido
// valida_usuario(usr) .......... verifica se o usuário foi preenchido e não contém caracteres diferentes de números, letras e espaços
// valida_senha(pwd) ............ verifica se a senha foi preenchida e não contém caracteres diferentes de números, letras e espaços
// retornar() ................... volta à página anterior 

// validação para saber se o javascript está habilitado no navegador antes da execução da página
function teste_javascript()
{
	document.getElementById("teste_javascript").style.height = 0;
	document.getElementById("teste_javascript").style.visibility = "hidden";
}

// encripta o texto 'txt' retornando o valor obtido
function encripta(txt)
{
	var txt1 = new String(txt);
	var nJ = txt1.length;
	var txt2 = "";
	var txt3 = "";
	var txt4 = "";
	
	for( nI=0; nI<nJ; nI++ )
	{
		txt4 = Math.random();
		txt4 = txt4 * 10;
		txt4 = Math.floor( txt4 );
		txt2 += txt4;
		
		txt3 = String( "00>>0" + txt1.charCodeAt(nI));
		nK = txt3.length;
		txt2 += txt3.substr(nK-3,3);
		
		txt4 = Math.random();
		txt4 = txt4 * 10;
		txt4 = Math.floor( txt4 );
		txt2 += txt4;
	}
	
	return txt2;
}

// decripta o texto 'txt' encriptado anteriormente pela função 'encripta' 
function decripta(txt)
{
	var txt1 = new String(txt);
	var nJ = txt1.length;
	
	var txt2 = "";
	var txt3 = "";
	
	for( nI=0; nI<nJ; nI=nI+5)
	{
		txt3 = txt1.substr(nI,5);
		txt3 = txt3.substr(1,3);
		txt3 = String.fromCharCode(txt3);
		txt2 += txt3;
	}
	
	return txt2;
}

// verifica se 'txt' é um email do tipo aa@bb.ccc
function verifica_email(txt)
{
	parte1 = txt.indexOf("@");
    parte2 = txt.indexOf(".");
	parte3 = txt.length;
    if (!(parte1 >= 3 && parte2 >= 1 && parte3 >= 9)) 
	{
    	alert ("O endereço eletrônico informado não é válido!");
        return false;
    } else { return true; }
}

// verifica se 'data' está no formato DD/MM/AAAA e é entre 1900 e o ano atual
function verifica_data(data)
{
	hoje = new Date();
    anoAtual = hoje.getFullYear();
	barras = data.split("/");
	if (barras.length == 3)
	{
		dia = barras[0];
		mes = barras[1];
		ano = barras[2];
		resultado = (!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4) && (ano <= anoAtual && ano >= 1900));
		if (!resultado) 
		{
			alert("Formato de data invalido!");
			return false;
	    } else { return true; }
	} 
	else 
	{
		alert("Formato de data invalido!");
		return false;
	}
}

// verifica se 'data' está no formato DD/MM/AAAA
function verifica_data_formato(data)
{
	barras = data.split("/");
	if (barras.length == 3)
	{
		dia = barras[0];
		mes = barras[1];
		ano = barras[2];
		resultado = (!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4));
		if (!resultado) 
		{
			alert("Formato de data invalido!");
			return false;
	    } else { return true; }
	} 
	else 
	{
		alert("Formato de data invalido!");
		return false;
	}
}

// verifica se o campo 'msg' foi preenchido ou não
function validRequired(txt,msg)
{
	var result = true;
	
	if (txt == "")
	{
		alert('O campo "' + msg +'" é obrigatório.');
		result = false;
	}
	
	return result;
}

// verifica se todos os caracteres da string 'str' são números
function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

// verifica se todos os caracteres da string 'str' estão no conjunto 'charset'
function inValidCharSet(str,charset)
{
	var result = true;

	// Note: doesn't use regular expressions to avoid early Mac browser bugs	
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}
	
	return result;
}

// verifica se o cgc digitado é válido
function verifica_cgc(pcgc)
{
	// verifica o tamanho
	if (pcgc.length != 14) 
	{
		sim = false;
		alert("Tamanho inválido de CNPJ");
	}
	else {sim=true;}

	// verifica se é número
	if (sim)
	{
		sim = (allDigits(pcgc));
		if (!sim) { alert("Favor digitar apenas números para o CNPJ"); }
	}

	// se for número continua
	if (sim)
	{
    	m2 = 2;
	    soma1 = 0;
    	soma2 = 0;
	    for (i=11;i>=0;i--)
    	{
			val = eval(pcgc.charAt(i));
		    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; }

		if ((d1==pcgc.charAt(12)) && (d2==pcgc.charAt(13)))
	    {
			return true;
		}
		else
		{
			alert("CNPJ inválido!");
			return false;
		}
	}
}

// verifica se o cpf digitado é válido
function verifica_cpf(pcpf)
{

	if (pcpf.length != 11) 
	{
		sim=false;
		alert("Tamanho inválido de CPF");
	}
	else {sim=true;}

	// verifica se é número
	if (sim)
	{
		sim = (allDigits(pcpf));
		if (!sim) { alert("Favor digitar apenas números para o CPF"); }
	}

	if (sim)  // valida o primeiro digito
  	{

   		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; }
   			}
   		}
  	}

  	if (!sim) { alert("CPF inválido!"); }
	
	return sim;
}

// verifica se o usuário foi preenchido e não contém caracteres diferentes de números, letras e espaços
function valida_usuario(usr)
{
	if (validRequired( usr, "usuário" ))
	{
		if (!inValidCharSet( usr, "0123456789 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ))
		{
			alert( "Campo 'usuário' contém caracteres inválidos! Favor utilizar somente letras, números e espaços!" );
			return "erro";
		}
		else
		{
			return encripta( usr );
		}
	}
	else
	{
		return "erro";
	}
}

// verifica se a senha foi preenchida e não contém caracteres diferentes de números, letras e espaços
function valida_senha(pwd)
{
	if (validRequired( pwd, "senha" ))
	{
		if (!inValidCharSet( pwd, "0123456789 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ))
		{
			alert( "Campo 'senha' contém caracteres inválidos! Favor utilizar somente letras, números e espaços!" );
			return "erro";
		}
		else
		{
			return encripta( pwd );
		}
	}
	else
	{
		return "erro";
	}
}

