/**
 * @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)
 */
MSG_COMPRA = 'A utilização deste produto requer o Vex Starter Kit.';

NUM_DIGITOS_CPF  = 11;
NUM_DIGITOS_CNPJ = 14;
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

function formatFields(src, mascara) {
	var campo = src.value.length;
	var saida = mascara.substring(0,1);
	var texto = mascara.substring(campo);
	if(texto.substring(0,1) != saida) {
		src.value += texto.substring(0,1);}
}

function validateEmpty($idField) {
	if (document.INSCRICAO.$idField.value == ' ') {
		return false;
	}else {
		return true; }
}

function returnValidate() {
	
	var validate = false;
	
	if (document.INSCRICAO.nome.value != '') {
		validate = true;
		if (document.INSCRICAO.email.value != '') {
			validate = true;
			if (document.INSCRICAO.cpf.value != '') {
				validate = true;
				if (validateCPF()) {
					validate = true;
					if (document.INSCRICAO.rg.value != '') {
						validate = true;
						if (document.INSCRICAO.residencial.value != '') {
							validate = true;
							if (document.INSCRICAO.celular.value != '') {
								validate = true;
								if (document.INSCRICAO.nascimento.value != '') {
									validate = true;
									if (document.INSCRICAO.logradouro.value != '') {
										validate = true;
										if (document.INSCRICAO.cidade.value != '') {
											validate = true;
											if (document.INSCRICAO.bairro.value != '') {
												validate = true;
												if (document.INSCRICAO.cep.value != '') {
													validate = true;
													if (document.INSCRICAO.uf.value != '') {
														validate = true;
														if (document.INSCRICAO.numero.value != '') {
															validate = true;
															if (document.INSCRICAO.regulamento.checked == true) {
																validate = true;
															} else {
																alert('Você deve Aceitar o Regulamento!');
																document.INSCRICAO.regulamento.focus();
																validate = false;
															}
														} else {
															alert('O Campo Número é Obrigatório!');
															document.INSCRICAO.numero.focus();
															validate = false;
														}
													} else {
														alert('O Campo UF é Obrigatório!');
														document.INSCRICAO.uf.focus();
														validate = false;
													}
												} else {
													alert('O Campo CEP é Obrigatório!');
													document.INSCRICAO.cep.focus();
													validate = false;
												}
											} else {
												alert('O Campo Bairro é Obrigatório!');
												document.INSCRICAO.bairro.focus();
												validate = false;
											}
										} else {
											alert('O Campo Cidade é Obrigatório!');
											document.INSCRICAO.cidade.focus();
											validate = false;
										}
									} else {
										alert('O Campo Logradouro é Obrigatório!');
										document.INSCRICAO.logradouro.focus();
										validate = false;
									}
								} else {
									alert('O Campo Data de Nascimento é Obrigatório!');
									document.INSCRICAO.nascimento.focus();
									validate = false;
								}
							} else {
								alert('O Campo Telefone Celular é Obrigatório!');
								document.INSCRICAO.celular.focus();
								validate = false;
							}
						} else {
							alert('O Campo Telefone Residencial é Obrigatório!');
							document.INSCRICAO.residencial.focus();
							validate = false;
						}
					} else {
						alert('O Campo RG é Obrigatório!');
						document.INSCRICAO.rg.focus();
						validate = false;
					}
				} else {
					alert('O Seu CPF é Inválido!');
					document.INSCRICAO.cpf.focus();
					validate = false;
				}
			} else {
				alert('O Campo CPF é Obrigatório!');
				document.INSCRICAO.cpf.focus();
				validate = false;
			}
		}else {
			alert('O Campo Email é Obrigatório!');
			document.INSCRICAO.email.focus();
			validate = false
		}	
	} else {
		alert('O Campo Nome é Obrigatório!');
		document.INSCRICAO.nome.focus();
		validate = false;
	}
	
	if (validate == true) {
		return true; }
	else {
		return false; }
}


function isEmail(who)
{
	var email=/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
	return(email.test(who));
}

function isData(who)
{
	var data=/^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$/;
	return(data.test(who));
}


function validate_fvc()
{
	if(document.Registro.email.value == "")
	{ 
		alert("O campo Email é obrigatório!");
		document.Registro.email.focus();
		return false;
	} 
	if(!isEmail(document.Registro.email.value))
	{
		alert("O Email informado não é válido!");
		document.Registro.email.focus();			
		return false;
	}
	if(document.Registro.email.value != document.Registro.confemail.value)
	{ 
		alert("Os Emails informados não são iguais!");
		document.Registro.confemail.focus();
		return false;
	} 
	if(document.Registro.senha.value.length < 4)
	{ 
		alert("Informe sua senha com pelo menos 4 caracteres.");
		document.Registro.senha.focus();
		return false;
	} 
	if(document.Registro.senha.value != document.Registro.confsenha.value)
	{ 
		alert("As Senhas informadas não são iguais!");
		document.Registro.confsenha.focus();
		return false;
	} 
	if(document.Registro.nome.value == "")
	{ 
		alert("O campo Nome é obrigatório!");
		document.Registro.nome.focus();
		return false;
	} 
	if(document.Registro.telefone.value == "")
	{ 
		alert("O campo Telefone é obrigatório!");
		document.Registro.telefone.focus();
		return false;
	} 
	if(document.Registro.cpf.value == "")
	{ 
		alert("O campo CPF é obrigatório!");
		document.Registro.cpf.focus();
		return false;
	} 
	if (!isCpfCnpj(document.Registro.cpf.value))
	{
		alert("O CPF informado é inválido!");
		document.Registro.cpf.focus();
		return false;
	} 
	if(document.Registro.rg.value == "")
	{ 
		alert("O campo RG é obrigatório!");
		document.Registro.rg.focus();
		return false;
	} 
	if(document.Registro.nascimento.value == "")
	{ 
		alert("O campo Data de Nascimento é obrigatório!");
		document.Registro.nascimento.focus();
		return false;
	} 
}

function validate_area1()
{
	if(document.area1.email.value == "")
	{ 
		alert("O campo Email é obrigatório!");
		document.area1.email.focus();
		return false;
	} 
	alert(document.area1.senhaatual);
	alert(document.area1.senhaatual.value);
/*	if(document.area1.senha.value != document.area1.senhaatual)
	{ 
		alert("O campo Email é obrigatório!");
		document.area1.email.focus();
		return false;
	} */
}