/*
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	+++++++++++++++++++++++++++  Expressões Regulares
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
var	stringCode		=	/[a-zA-Z0-9]{1,}/;																			// Valida STRING > 2 char
var	numberCode		=	/[0-9]{1,}/;																				// Valida NÚMERO > 1 char
var	cepCode			=	/\d{5}-\d{3}/;																				// Valida CEP formato 90460-040
var	emailCode		=	/^[\w-]+(\.[\w-]+)*@(([\w-]{2,63}\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;			// Valida EMAIL
var	dateCode		=	/^((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}$/;	// Valida DATA tipo dd/mm/aaaa
var	timeCode		=	/^([0-1]\d|2[0-3]):[0-5]\d$/;																// Valida HORA tipo hh:mm (24h)
var reSpecialChars	=	/(^([A-Za-z0-9_.-\/:]){1,300})+$/;		
/*
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	+++++++++++++++++++++++++++  Mascaras e formatadores
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
function mask(o,f)
{
    v_obj=o;
    v_fun=f;
    setTimeout("execMask()",1);
}
function execMask()
{
    v_obj.value=v_fun(v_obj.value);
}
/* onkeypress="mask(this,maskOnlyNro);"  */
function maskOnlyNro(v)
{
    return v.replace(/\D/g,"");
}
/* onkeypress="mask(this,maskCNPJ);"  */
function maskCNPJ(v)
{
    document.getElementById(v_obj.name).maxLength = 18;		//Define o tamanho máx de digitos
	v=v.replace(/\D/g,"");									//Remove tudo o que não é dígito
    v=v.replace(/^(\d{2})(\d)/,"$1.$2");					//Coloca ponto entre o segundo e o terceiro dígitos
    v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3");		//Coloca ponto entre o quinto e o sexto dígitos
    v=v.replace(/\.(\d{3})(\d)/,".$1/$2");					//Coloca uma barra entre o oitavo e o nono dígitos
    v=v.replace(/(\d{4})(\d)/,"$1-$2");						//Coloca um hífen depois do bloco de quatro dígitos
    return v;
}
/* onkeypress="mask(this,maskCPF);"  */
function maskCPF(v)
{
    document.getElementById(v_obj.name).maxLength = 14;		//Define o tamanho máx de digitos
    v=v.replace(/\D/g,"");									//Remove tudo o que não é dígito
    v=v.replace(/(\d{3})(\d)/,"$1.$2");						//Coloca um ponto entre o terceiro e o quarto dígitos
    v=v.replace(/(\d{3})(\d)/,"$1.$2");						//Coloca um ponto entre o terceiro e o quarto dígitos
															//de novo (para o segundo bloco de números)
    v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2");				//Coloca um hífen entre o terceiro e o quarto dígitos
    return v;
}
/* onkeypress="mask(this,maskPhone);"  */
function maskPhone(v)
{
    document.getElementById(v_obj.name).maxLength = 9;		//Define o tamanho máx de digitos
    v=v.replace(/\D/g,"");									//Remove tudo o que não é dígito
    v=v.replace(/^(\d{4})(\d)/,"$1.$2");					//Coloca ponto entre o quarto e o quinto dígito
    return v;
}
/* onkeypress="mask(this,maskCurrency);"  */
function maskCurrency(v)
{
    document.getElementById(v_obj.name).maxLength = 18;		//Define o tamanho máx de digitos
	v=v.replace(/\D/g,"");									//permite digitar apenas números
//	v=v.replace(/[0-9]{15}/,"exedeu o limite");				//limita pra máximo 999.999.999.999,99
	v=v.replace(/(\d{1})(\d{11})$/,"$1.$2");				//coloca ponto antes dos últimos 11 digitos
	v=v.replace(/(\d{1})(\d{8})$/,"$1.$2");					//coloca ponto antes dos últimos 8 digitos
	v=v.replace(/(\d{1})(\d{5})$/,"$1.$2");					//coloca ponto antes dos últimos 5 digitos
	v=v.replace(/(\d{1})(\d{1,2})$/,"$1,$2");				//coloca virgula antes dos últimos 2 digitos
    return v
}
/* onkeypress="mask(this,maskDate);"  */
function maskDate(v)
{
    document.getElementById(v_obj.name).maxLength = 10;		//Define o tamanho máx de digitos
	v=v.replace(/\D/g,"");									//Remove tudo o que não é dígito
	v=v.replace(/(\d{2})(\d)/,"$1/$2");						//Coloca barra entre o segundo e o terceiro digito
	v=v.replace(/(\d{2})(\d)/,"$1/$2");						//Coloca barra entre o quinto e o sexto digito
	return v
}
/* onkeypress="mask(this,maskCEP);"  */
function maskCEP(v)
{
    document.getElementById(v_obj.name).maxLength = 9;		//Define o tamanho máx de digitos
    v=v.replace(/D/g,"");									//Remove tudo o que não é dígito
    v=v.replace(/^(\d{5})(\d)/,"$1-$2");					//Coloca hifem entro o quinto e o sexto digito
    return v
}
/* onkeypress="mask(this,maskTime);"  */
function maskTime(v)
{
    document.getElementById(v_obj.name).maxLength = 5;		//Define o tamanho máx de digitos
    v=v.replace(/D/g,"");									//Remove tudo o que não é dígito
    v=v.replace(/^(\d{2})(\d)/,"$1:$2");					//Coloca os dois pontos entre o segundo e o terceiro digito
    return v
}
/* onkeypress="mask(this,getEnter);"  */
function getEnter(e,f)
{
	if(window.event)
		key=window.event.keyCode;
	else if(e)
		key=e.which;
	if(key==13)
		mask(e,f);
}
/*
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	+++++++++++++++++++++++++++  Pula Field
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
function DFchangeField(o,e,d)
{
	if(window.event)
		key=window.event.keyCode;
	else if(e)
		key=e.which;
	else 
		return true;
	if(key==9||key==2||key==16)
		return false;
	if(d<=2&&o.value.length==o.maxLength)
	{
		for(var i=0;i<o.form.length;i++)
		{
			if(o.form[i]==o&&o.form[i+1])
			{
				o.form[i+1].focus();
				break;
			}
		}
		}
	if(d>1&&o.value.length==0&&key==8)
	{
		for(var i=0;i<o.form.length;i++)
		{
			if(o.form[i]==o&&o.form[i-1])
			{
				o.form[i-1].focus();
				o.form[i-1].value=o.form[i-1].value;break;
			}
		}
	}
}
/*
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	+++++++++++++++++++++++++++  CNPJ / CPF
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
var NUM_DIGITOS_CPF  = 11;
var NUM_DIGITOS_CNPJ = 14;
var NUM_DGT_CNPJ_BASE = 8;
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;

	if (numero != base + ordem + digitos) return false;

	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;

	if (ordem == "0000") return false;
	return (base == "00000000"
		|| parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000");
}
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);
}
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;
}
function unformatNumber(pNum)
{
	return String(pNum).replace(/\D/g, "").replace(/^0+/, "");
}
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.prototype.trim = function()
{
	return this.replace(/^\s*/, "").replace(/\s*$/, "");
}
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;
}
/*
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/