/*
lista das funcoes presentes neste arquivo
function validavazio(s)
function valid(s,caracteresvalidos)
function validanumero(s)
function validadata(s)
function limpa(s,caracteresvalidos)
function modulo11(s)
function validacnpj(s)
function vcpo(s,campo,tipo,preenchimento)
function ltrim(s)
function rtrim(s)
function alltrim(s)
function validacpf(s)
function validaemail(s)

*/



function validavazio(s)
//retorna FALSE se o campo estiver vazio
	{
	s2 = new String(alltrim(s))
	if (s2.length == 0) {return false}
	else {return true} 
	}


	
function validmsg(s,caracteresvalidos)
//retorna FALSE se s nao estiver na lista de caracteres validos
	{
	var s2 = new String(s)
	var validos = new String(caracteresvalidos)
	var ok = false
	var resultado = true
	for (i=0;i<=s2.length-1;i++)
		{
		ok = false
		for (j=0;j<=validos.length-1;j++)
			{if (s2.charAt(i) == validos.charAt(j))	{ok = true}}
		if (!ok) {resultado = ok}
		}
	if (!resultado) {alert("Você digitou algum caracter inválido !")}
	return resultado
	}	


	

function valid(s,caracteresvalidos)
//retorna FALSE se s nao estiver na lista de caracteres validos
	{
	var s2 = new String(s)
	var validos = new String(caracteresvalidos)
	var ok = false
	var resultado = true
	for (i=0;i<=s2.length-1;i++)
		{
		ok = false
		for (j=0;j<=validos.length-1;j++)
			{if (s2.charAt(i) == validos.charAt(j))	{ok = true}}
		if (!ok) {resultado = ok}
		}
	return resultado
	}	

function validanumero(s)
//retorna FALSE se s contiver caracteres diferentes de 0123456789,
	{
	return valid(s,"0123456789,.-")
	}
	
function validapasta(s)
//retorna FALSE se s contiver caracteres diferentes de 0123456789,
	{ 
	if (!valid(s,"0123456789-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"))
	{
		alert("O endereço para acesso contém caracteres inválidos.")
		return false
	}
	return true
	}


function validadata(s)
	{
	
	s2 = new String(alltrim(s))
	
	if ((s2.length < 10) && (s2.length > 0)) {return false}
	if (s2.length == 0) {return true}
	if (!valid(s,"0123456789/")) {return false}
	
	dia = new Number(s2.substr(0,2))
	mes = new Number(s2.substr(3,2))
	ano = new Number(s2.substr(6,4))
	
	if (isNaN(dia) || isNaN(mes) ||isNaN(ano)) {return false}
	if (dia > 31) {return false}	
	if ((dia > 29) && (mes == 2)) {return false}
	if ((dia > 30) && (mes == 4 || mes ==6 || mes == 9 || mes == 11)) {return false}

	if (mes > 12) {return false}
	if (ano < 1900 || ano > 2020) {return false}
	
	return true	
	}

function limpa(s,caracteresvalidos)
//elimina da string s todos os caracteres que nao pertencam a lista dos validos
	{
	var s2 = new String(s)
	var validos = new String(caracteresvalidos)
	var ok = false
	var resultado = new String("")
	for (i=0;i<=s2.length-1;i++)
		{
		ok = false
		for (j=0;j<=validos.length-1;j++)
			{if (s2.charAt(i) == validos.charAt(j))	{ok = true}}
		if (ok) {resultado = resultado + s2.charAt(i)}
		}
	return resultado
	
	}

function modulo11(s)
//retorna digito calculado com base no algoritmo modulo 11
	{
	s2 = new String(limpa(s,"0123456789"))
	var multiplicador = 2
	var produto = 0
	var digito = 0
	for (i=s2.length - 1;i >= 0;i--)
		{
		produto = produto + s2.charAt(i) * multiplicador
		if (multiplicador==9) {multiplicador =2}
		else {multiplicador++}
		}
	digito = 11 - (produto % 11)
	if (digito == 10 || digito==11)	{digito = 0}
	return digito
	}

function validacnpj(s)
//dado um cgc completo, retorna false se o cgc for invalido, senao retorna true
	{
	s2 = new String(alltrim(s))
	resultado = true
	if (s2.length == 0) {resultado = false}
	analise1 = s2.substr(0,s2.length-2)
	analise2 = s2.substr(0,s2.length-1)
	dv1 = s2.charAt(s2.length-2,1)
	dv2 = s2.charAt(s2.length-1,1)
	if (modulo11(analise1) != dv1) {resultado = false}
	if (modulo11(analise2) != dv2) {resultado = false}
	if (!resultado) {alert("CPF inválido")}
	return resultado
	}

function vcpo(s,campo,tipo,preenchimento)
//tipos c,n,d (caracter numerico e data). Preenchimento: P preenchido, V vazio

	{
	var mensagem = ""
	var preenchimento2 = new String(preenchimento)
	var tipo2 = new String(tipo)
	
	tipo2 = tipo2.toLowerCase()
	preenchimento2 = preenchimento2.toLowerCase()
	
	if (((preenchimento2 == "p") || (tipo2 == "c")) && !validavazio(s))
		{
		mensagem = "   -campo " + campo + " requer preenchimento" +  unescape("%0A")
		return mensagem
		}

	if ((tipo2 == "n") && (!validanumero(s)))
		{
		mensagem = "   -campo " + campo + " com numero invalido" +  unescape("%0A")
		return mensagem
		}
		
	if ((tipo2 == "d") && (!validadata(s)))
		{
		mensagem = "   -campo " + campo + " com data invalida" +  unescape("%0A")
		return mensagem
		}
		
	if ((tipo2 =="e") && (!validaemail(s)))
		{
		mensagem = "   -campo " + campo + " invalido" +  unescape("%0A")
		return mensagem
		}
	
	return mensagem
	}	

function validacampos(s)
// se a string s nao estiver vazia, retorna false e exibe o conteudo de s
	{
	s2 = new String(s)
	if (s2.length != 0)
		{
		var cabecalho = new String("Foram detectadas as seguintes irregularidades: " + unescape("%0A"))
		var rodape = new String("Corrija por favor")
		s2 = cabecalho + s2  + rodape
		alert(s2)
		return false
		}
	else {return true}
	}	
		
function ltrim(s)
//elimina espacos em branco a esquerda
	{
	s2 = new String(s)
	for (i = 0;s2.charAt(i)==" ";i++){}
	return s2.substr(i,s2.length - i)
	}

function rtrim(s)
//elimina espacos em branco a direita
	{
	s2 = new String(s)
	j = 0
	for (i = s2.length;s2.charAt(i-1)==" ";i--){j++}
	return  s2.substr(0,s2.length - j)
	}
	
function alltrim(s)
//elimina espacos em branco a esquerda e a direita
	{
	return rtrim(ltrim(s))
	}	

function validacpf(s)
//dado um cpf completo, retorna false se o cpf for invalido, senao retorna true
	{
	var s2 = new String(alltrim(s))
	var soma = 0
	var inicio = 2
	var final_ = 10
	var digito = 0
	resultado1 = true
	resultado2 = true
	analise = 	new String(s2.substr(0,s2.length-2))
	dv1 =s2.substr(s2.length - 2,1)
	dv2 =s2.substr(s2.length-1,1)
	for (j = 1;j <= 2; j++)
		{
		soma = 0
		for (i = inicio;i <= final_; i++)
			{soma = soma +  (analise.charAt(i-j-1)*(final_ + 1 + j - i))}
		if (j == 2) {soma = soma + (2 * digito)}
		digito = (soma * 10)%11
		if (digito == 10) {digito = 0}
		if (j == 1) {resultado1 = (digito == dv1)}
		else {resultado2 = (digito == dv2)}
		inicio = 3
		final_ = 11
		}
	if (s2.length == 0) {resultado1 = false}		
	if (!(resultado1 && resultado2)) {alert("CPF inválido")}
	return (resultado1 && resultado2)
	}

function invalid(s,caracteresinvalidos)
//retorna FALSE se s possuir algum caracter da lista de caracteres invalidos
	{
	var s2 = new String(s)
	var validos = new String(caracteresinvalidos)
	var ok = false
	var resultado = true
	for (i=0;i<=s2.length-1;i++)
		{
		ok = false
		for (j=0;j<=validos.length-1;j++)
			{if (s2.charAt(i) != validos.charAt(j))	{ok = true}}
		if (!ok) {resultado = ok}
		}
	return resultado
	}	
	
		
function validaemail(s)
//retorna false se houverem caracteres invalidos no email, se @ estiver na posicao inicial e houver mais de um @
	{
	s2 = new String(alltrim(s))
	criterio1 = valid(s,"0123456789.@-_abcdefghijklmnopqrstuvwxyz, ");
	criterio2 = (s2.indexOf("@",0) > 0);
	criterio3 = (s2.indexOf("@",s2.indexOf("@",0)+1) < s2.indexOf("@",0));
	return (criterio1 && criterio2 && criterio3)
	}
	
function validacnpjoucpf(s)
//verifica o comprimento da string e utiliza a funcao apropriada
	{
	s2 = new String(alltrim(s))
	//alteracao para permitir o uso de email nas lojas em outras linguas
	if (validaemail(s2)) {return true}
	s2 = limpa(s2,"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
	if (s2.length > 11) {return validacnpj(s2.substr(0,14))}
	else {return validacpf(s)}
	}	
			
function filtro(ed)
//limita a entrada de dados de um edit somente a numeros
	{
	ed.value = limpa(ed.value,"0123456789")
	}
	
	
function calculo(form,i,soma,totalgeral)
//efetua os calculos do carrinho de compras
	{
	s = new Number(0)

	s = form[i].value * form[i+1].value
	diferenca = s - form[i+3].value	
	if (valid(s,"0123456789")) {s = s+".00"}
	form[i+3].value = mascara(s,2)

	s = (soma.value *1) + diferenca
	if (valid(s,"0123456789")) {s = s+".00"}
	soma.value = mascara(s,2)

	s = (totalgeral.value *1) + diferenca
	if (valid(s,"0123456789")) {s = s+".00"}
	totalgeral.value = mascara(s,2)
	}
	
function mascara(s,decimais)
	{
	s2 = new String(alltrim(s))
	return s2.substr(0,s2.charAt(".")+decimais-6)
	}
	
function validadepto(s,invalidos)
	{
	s2 = new String(alltrim(s))
	ok2 = invalid(s2,invalidos)
	if (!ok2) {alert("Campo descricao nao admite apostrofe.")}
	return ok2
	}	