// JavaScript Document
function autoTab(input,len, e) {
	var isNN = (navigator.appName.indexOf("Netscape")!=-1);	
	var keyCode = (isNN) ? e.which : e.keyCode; 
	var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
	if(input.value.length >= len && !containsElement(filter,keyCode)) {
		input.value = input.value.slice(0, len);
		input.form[(getIndex(input)+1) % input.form.length].focus();
		}
	function containsElement(arr, ele) {
		var found = false, index = 0;
		while(!found && index < arr.length)
			if(arr[index] == ele)
			found = true;
			else
			index++;
			return found;
	}
	function getIndex(input) {
		var index = -1, i = 0, found = false;
		while (i < input.form.length && index == -1)
			if (input.form[i] == input)index = i;
			else i++;
			return index;
		}
	return true;
}
function somente_numeros(){
if (event.keyCode < 48 || event.keyCode > 57) event.returnValue = false;
}

function popup(url,name,w,h,s,r){	
	window.open(url,name,"height="+h+",width="+w+",toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars="+s+",resizable="+r)
}
function checkEmail(obj){
	var EmailText=obj.value;
	if ((EmailText.search(/;/i) == -1) &&
	    (EmailText.search(/,/i) == -1) &&
	    (EmailText.indexOf("..") == -1) &&
	    (EmailText.indexOf(".@") == -1) &&
	    (EmailText.indexOf("@.") == -1) &&
	    (EmailText.search(/ /i) == -1) &&
	    (EmailText.search(/"/i) == -1) &&
	    (EmailText.search(/'/i) == -1) &&
	    (EmailText.indexOf("^") == -1) &&
	    (EmailText.search(/`/i) == -1) &&
	    (EmailText.search(/~/i) == -1) &&
	    (EmailText.search(/ç/i) == -1) &&
	    (EmailText.length != 0) &&
	    (EmailText.search(/@/i) >= 1) &&
	    (EmailText.substr(0,1) != ".") && /*Não pode começar com ponto*/
		(EmailText.substr(0,1) != "@") && /*Não pode começar com arroba*/
	    (EmailText.substr(EmailText.length-1) != ".") && /*Não pode terminar com ponto*/
		(EmailText.substr(EmailText.length-1) != "@") && /*Não pode terminar com arroba*/
	    (EmailText.indexOf("hotmail.com.br") == -1) &&
	    (EmailText.indexOf("@aol.com.br") == -1))
		return true;
	else if (EmailText.indexOf("hotmail.com.br") >= 0)
		{
		alert("Atenção: O E-mail HOTMAIL não termina com .BR\nEle será automaticamente corrigido");
		obj.value = EmailText.replace("hotmail.com.br", "hotmail.com");
		obj.focus();
		return false;
		}
	else if (EmailText.indexOf("aol.com.br") >= 0)
		{
		alert("Atenção: O E-mail AOL não termina com .BR\nEle será automaticamente corrigido");
		obj.value = EmailText.replace("aol.com.br", "aol.com");
		obj.focus();
		return false;
		}
	else if (EmailText.indexOf(" ") >= 0)
		{
		alert("Atenção: O E-mail não deve conter espaços em branco\nEle será automaticamente corrigido");
		while(EmailText.indexOf(" ") >= 0)
			EmailText= EmailText.replace(" ", "");
		obj.value = EmailText
		obj.focus();
		return false;
		}
	else
	    {
		alert("Formato do endereço de E-mail Incorreto!");
		obj.select();
		obj.focus();
		return false; 
	    }
}

function checkForm(form)
	{
	if (form.action[0].checked)
		return checkEmail(form.email);
	else
		return checkEmail(form.email) && checkPassword(form.senha) ;	
	}

function checkPassword(PasswordTextObjetc)
{
	/**** OG 01/30/2000 - password length changed to 4 */
    if (PasswordTextObjetc.value.length < 4) {
		alert("A Senha deve ter mais de 4 caracteres");
		PasswordTextObjetc.select();
		PasswordTextObjetc.focus();
		return false;
	}	
}



/**
 * @author Márcio d'Ávila
 * @version 1.02, 2004-2007
 * http://www.mhavila.com.br/topicos/web/cpf_cnpj.html
 *
 * Licenciado sob os termos da licença Creative Commons,
 * Atribuição - Compartilhamento pela mesma licença 2.5:
 * http://creativecommons.org/licenses/by-sa/2.5/br/
 *
 * 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; algUnico && i<NUM_DIGITOS_CPF; i++)
	{
		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(obj_pCnpj)
{
	var pCnpj=obj_pCnpj.value;
	var base = pCnpj.substring(0, pCnpj.length-2);
	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; algUnico && i<NUM_DGT_CNPJ_BASE; i++)
	{
		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 valida_senha(obj) {
	var senha=obj.value;
	if (senha!='')
		{
		if (senha.length < 4 | senha.length > 15)
			{
			alert('A Senha deve conter no mínimo 4 e no máximo 15 caracteres!');
			obj.focus();
			obj.select();
			return false;
			}
		if (!/^[0-9a-zA-Z\-\_]{0,250}$/.test(senha))
			{
			alert('A Senha possui caracteres inválidos!');
			obj.focus();
			obj.select();
			return false;
			}
		var i; 
     	var num = 0, carac = 0;
     	for (i = 0; i < senha.length; i++)
			{
			var c = senha.charAt(i);
		    // ha um numero
			if (((c >= "0") && (c <= "9")))
 				{
				num++;
				}
			if (((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")))
 				{
				carac++;
				}
			}
		if (num < 2 || carac == 0)
			{
			alert("A Senha deve conter letras e números (mínimo 2 números)!"); 
      		obj.focus();
      		obj.select();	
			return false;		
		    }
		s = senha;
		hoje = new Date();
	 	ano = hoje.getYear();
		for (f=-2; f<=2; f++)
			{
			n = s.indexOf(ano + f,0)
			if (n > -1)
				{
				alert('Não é permitido colocar o ano como senha!');
				obj.focus();
				obj.select();
			    return false;
				}
			else
				{
				return true;
				}
			 }
		}
	else
		{
		alert('A senha é obrigatória!');
		obj.focus();
		return false;
		}
}  
