// JavaScript Document

function verificaCNPJ(CNPJ) {
	erro = new String;

	if (CNPJ.length < 18) erro += "E' necessarios preencher corretamente o numero do CNPJ! \n\n";

	if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-"))

	{

		if (erro.length == 0) erro += "E' necessarios preencher corretamente o numero do CNPJ! \n\n";

	}

	//substituir os caracteres que nao sao numeros

	if(document.layers && parseInt(navigator.appVersion) == 4)

	{

		x = CNPJ.substring(0,2);

		x += CNPJ.substring(3,6);

		x += CNPJ.substring(7,10);

		x += CNPJ.substring(11,15);

		x += CNPJ.substring(16,18);

		CNPJ = x;

	} else {

		CNPJ = CNPJ.replace(".","");

		CNPJ = CNPJ.replace(".","");

		CNPJ = CNPJ.replace("-","");

		CNPJ = CNPJ.replace("/","");

	}

	var nonNumbers = /\D/;

	if (nonNumbers.test(CNPJ)) erro += "A verificacao de CNPJ suporta apenas numeros! \n\n";

	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 +="Digito verificador com problema!";

	}

	if (erro.length > 0){

		return false;

	}

	return true;

}



function verificaContato(){

	var form = document.fContato;

	var reEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

	var erro = "";

	

	if(form.cConteudo.value == "") erro = "Informe o conteúdo.\n";

	if(form.cAssunto.value == "") erro = erro+"Informe o assunto.\n";

	if(!reEmail.test(form.cMail.value)) erro = erro+"Informe um e-mail válido.\n";

	if(form.cNome.value == "") erro = erro+"Informe seu nome.";

	

	if(erro == "") {

		form.submit();

	} else {

		alert(erro);

	}

}



function verificaEmail(email){

	var reEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

	if(!reEmail.test(email)) return false;

	return true;

}



function verificaCadastro(){

	var erro = "";

	if(document.getElementById('cEmpresa').value == "") erro += "Informe a Empresa.\n";

	if(!isCnpj(document.getElementById('cCnpj').value)) erro += "CNPJ Inválido.\n";

	if(document.getElementById('cEndereco').value == "") erro += "Informe o Endereco.\n";

	if(document.getElementById('cBairro').value == "") erro += "Informe o Bairro.\n";

	if(document.getElementById('cCidade').value == "") erro += "Informe a Cidade.\n";

	if(document.getElementById('cContato').value == "") erro += "Informe o Contato.\n";

	if(!verificaEmail(document.getElementById('cEmail').value)) erro += "E-Mail Inválido.\n";

	if(document.getElementById('cLogin').value == "") erro += "Informe o Login.\n";

	if(document.getElementById('cSenha').value == "") erro += "Informe a Senha.\n";

	if(document.getElementById('cSenha').value != document.getElementById('cSenhaConfirmacao').value) erro += "Confirmação de senha inválida.\n";

	if(erro == "") {

		return true;

	} else {

		erro="ERRO:\n\n"+erro;

		alert(erro);

		return false;

	}

}





function verificaLogin(){

	var reEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

	var erro = "";

	var login = document.getElementById('login').value;

	var senha = document.getElementById('senha').value;

	var form = document.logar;

	if(document.getElementById('login').value=="") erro = erro+"Informe o Login.\n";

	if(document.getElementById('senha').value=="") erro = erro+"Informe a Senha.\n";

	if(erro == "") {

		form.submit();

	} else {

		alert(erro);

	}

}



function verificaReenvio(){

	var reEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

	var form = document.fReenvio;

	var erro = "";

	if(!reEmail.test(document.getElementById('cMail').value)) erro = erro+"Informe um e-mail válido.\n";

	if(erro == "") {

	  form.submit();

	} else {

		alert(erro);

	}

}



/**

 * @author Márcio d'Ávila

 * @version 1.01, 2004

 *

 * PROTÓTIPOS:

 * método String.lpad(int pSize, char pCharPad)

 * método String.trim()

 *

 * String unformatNumber(String pNum)

 * String formatCpfCnpj(String pCpfCnpj, boolean pUseSepar, boolean pIsCnpj)

 * String dvCpfCnpj(String pEfetivo, boolean pIsCnpj)

 * boolean isCpf(String pCpf)

 * boolean isCnpj(String pCnpj)

 * boolean isCpfCnpj(String pCpfCnpj)

 */





var NUM_DIGITOS_CPF  = 11;

var NUM_DIGITOS_CNPJ = 14;

var NUM_DGT_CNPJ_BASE = 8;





/**

 * Adiciona método lpad() à classe String.

 * Preenche a String à esquerda com o caractere fornecido,

 * até que ela atinja o tamanho especificado.

 */

String.prototype.lpad = function(pSize, pCharPad)

{

	var str = this;

	var dif = pSize - str.length;

	var ch = String(pCharPad).charAt(0);

	for (; dif>0; dif--) str = ch + str;

	return (str);

} //String.lpad





/**

 * Adiciona método trim() à classe String.

 * Elimina brancos no início e fim da String.

 */

String.prototype.trim = function()

{

	return this.replace(/^\s*/, "").replace(/\s*$/, "");

} //String.trim





/**

 * Elimina caracteres de formatação e zeros à esquerda da string

 * de número fornecida.

 * @param String pNum

 *      String de número fornecida para ser desformatada.

 * @return String de número desformatada.

 */

function unformatNumber(pNum)

{

	return String(pNum).replace(/\D/g, "").replace(/^0+/, "");

} //unformatNumber





/**

 * Formata a string fornecida como CNPJ ou CPF, adicionando zeros

 * à esquerda se necessário e caracteres separadores, conforme solicitado.

 * @param String pCpfCnpj

 *      String fornecida para ser formatada.

 * @param boolean pUseSepar

 *      Indica se devem ser usados caracteres separadores (. - /).

 * @param boolean pIsCnpj

 *      Indica se a string fornecida é um CNPJ.

 *      Caso contrário, é CPF. Default = false (CPF).

 * @return String de CPF ou CNPJ devidamente formatada.

 */

function formatCpfCnpj(pCpfCnpj, pUseSepar, pIsCnpj)

{

	if (pIsCnpj==null) pIsCnpj = false;

	if (pUseSepar==null) pUseSepar = true;

	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;

	var numero = unformatNumber(pCpfCnpj);



	numero = numero.lpad(maxDigitos, '0');

	if (!pUseSepar) return numero;



	if (pIsCnpj)

	{

		reCnpj = /(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/;

		numero = numero.replace(reCnpj, "$1.$2.$3/$4-$5");

	}

	else

	{

		reCpf  = /(\d{3})(\d{3})(\d{3})(\d{2})$/;

		numero = numero.replace(reCpf, "$1.$2.$3-$4");

	}

	return numero;

} //formatCpfCnpj





/**

 * Calcula os 2 dígitos verificadores para o número-efetivo pEfetivo de

 * CNPJ (12 dígitos) ou CPF (9 dígitos) fornecido. pIsCnpj é booleano e

 * informa se o número-efetivo fornecido é CNPJ (default = false).

 * @param String pEfetivo

 *      String do número-efetivo (SEM dígitos verificadores) de CNPJ ou CPF.

 * @param boolean pIsCnpj

 *      Indica se a string fornecida é de um CNPJ.

 *      Caso contrário, é CPF. Default = false (CPF).

 * @return String com os dois dígitos verificadores.

 */

function dvCpfCnpj(pEfetivo, pIsCnpj)

{

	if (pIsCnpj==null) pIsCnpj = false;

	var i, j, k, soma, dv;

	var cicloPeso = pIsCnpj? NUM_DGT_CNPJ_BASE: NUM_DIGITOS_CPF;

	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;

	var calculado = formatCpfCnpj(pEfetivo, false, pIsCnpj);

	calculado = calculado.substring(2, maxDigitos);

	var result = "";



	for (j = 1; j <= 2; j++)

	{

		k = 2;

		soma = 0;

		for (i = calculado.length-1; i >= 0; i--)

		{

			soma += (calculado.charAt(i) - '0') * k;

			k = (k-1) % cicloPeso + 2;

		}

		dv = 11 - soma % 11;

		if (dv > 9) dv = 0;

		calculado += dv;

		result += dv

	}



	return result;

} //dvCpfCnpj





/**

 * Testa se a String pCpf fornecida é um CPF válido.

 * Qualquer formatação que não seja algarismos é desconsiderada.

 * @param String pCpf

 *      String fornecida para ser testada.

 * @return <code>true</code> se a String fornecida for um CPF válido.

 */

function isCpf(pCpf)

{

	var numero = formatCpfCnpj(pCpf, false, false);

	var base = numero.substring(0, numero.length - 2);

	var digitos = dvCpfCnpj(base, false);

	var algUnico, i;



	// Valida dígitos verificadores

	if (numero != base + digitos) return false;



	/* Não serão considerados válidos os seguintes CPF:

	 * 000.000.000-00, 111.111.111-11, 222.222.222-22, 333.333.333-33, 444.444.444-44,

	 * 555.555.555-55, 666.666.666-66, 777.777.777-77, 888.888.888-88, 999.999.999-99.

	 */

	algUnico = true;

	for (i=1; i<NUM_DIGITOS_CPF; i++)

	{

		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));

	}

	return (!algUnico);

} //isCpf





/**

 * Testa se a String pCnpj fornecida é um CNPJ válido.

 * Qualquer formatação que não seja algarismos é desconsiderada.

 * @param String pCnpj

 *      String fornecida para ser testada.

 * @return <code>true</code> se a String fornecida for um CNPJ válido.

 */

function isCnpj(pCnpj)

{

	var numero = formatCpfCnpj(pCnpj, false, true);

	var base = numero.substring(0, NUM_DGT_CNPJ_BASE);

	var ordem = numero.substring(NUM_DGT_CNPJ_BASE, 12);

	var digitos = dvCpfCnpj(base + ordem, true);

	var algUnico;



	// Valida dígitos verificadores

	if (numero != base + ordem + digitos) return false;



	/* Não serão considerados válidos os CNPJ com os seguintes números BÁSICOS:

	 * 11.111.111, 22.222.222, 33.333.333, 44.444.444, 55.555.555,

	 * 66.666.666, 77.777.777, 88.888.888, 99.999.999.

	 */

	algUnico = numero.charAt(0) != '0';

	for (i=1; i<NUM_DGT_CNPJ_BASE; i++)

	{

		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));

	}

	if (algUnico) return false;



	/* Não será considerado válido CNPJ com número de ORDEM igual a 0000.

	 * Não será considerado válido CNPJ com número de ORDEM maior do que 0300

	 * e com as três primeiras posições do número BÁSICO com 000 (zeros).

	 * Esta crítica não será feita quando o no BÁSICO do CNPJ for igual a 00.000.000.

	 */

	if (ordem == "0000") return false;

	return (base == "00000000"

		|| parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000");

} //isCnpj





/**

 * Testa se a String pCpfCnpj fornecida é um CPF ou CNPJ válido.

 * Se a String tiver uma quantidade de dígitos igual ou inferior

 * a 11, valida como CPF. Se for maior que 11, valida como CNPJ.

 * Qualquer formatação que não seja algarismos é desconsiderada.

 * @param String pCpfCnpj

 *      String fornecida para ser testada.

 * @return <code>true</code> se a String fornecida for um CPF ou CNPJ válido.

 */

function isCpfCnpj(pCpfCnpj)

{

	var numero = pCpfCnpj.replace(/\D/g, "");

	if (numero.length > NUM_DIGITOS_CPF)

		return isCnpj(pCpfCnpj)

	else

		return isCpf(pCpfCnpj);

} //isCpfCnpj




