//#**************************************************************************
// Função  : function zeroesq(valor,tamanho)
// Objetivo  : acrescenta Zeros a esquerda de uma string
// Parametro : Valor : String , Tamanho: Tamanho final da string
// Exemplo   : zeroesq("10",3) retorna 010
//#**************************************************************************
function zeroesq(valor,tamanho)
{var campo = ''
campo  = valor+'*'
campo  = campo.substr(0,campo.length - 1)
limite = tamanho - campo.length
zero   = ''
for ( i = 0; i < limite; i++ )
{zero = zero + '0'
}
return zero+campo
}

//#**************************************************************************
//Função	 : function zerodir(valor,tamanho)
// Objetivo  : acrescenta Zeros a direita de uma string
// Parametro : Valor : String , Tamanho: Tamanho final da string
// Exemplo   : zerodir('10',3) retorna 100
//#**************************************************************************
function zerodir(valor,tamanho)
{
	var campo = '';
	campo  = valor+'*';
	campo  = campo.substr(0,campo.length - 1);
	limite = tamanho - campo.length;
	zero   = '';
	for ( i = 0; i < limite; i++ )
	{
		zero =  '0'+zero;
	}
	return campo+zero;
}

//#**************************************************************************
//Função	 : function verdata()
// Objetivo  : Verifica se uma data é valida
// Parametro :
// Exemplo   : verdata()
//#**************************************************************************
function verdata(val)
{
  var valor = document.all[val.controltovalidate].value;
  //Verifica se a data foi digitada corretamente
  if (valor.length == 0)
  {
	return true;
  }
  if ((valor.length>10))
  {
	return false;
  }
  else
  {
    //Busca na string o dia mes e o ano
    var dia=valor.substring(0,2)
    var mes=valor.substring(3,5)
    var ano=valor.substring(6,10)
    var datadigitada=zeroesq(dia,2)+'/'+zeroesq(mes,2)+'/'+zeroesq(ano,4);
    //Verifica se o mês é válido
    if (isNaN(mes)==false)
    {
      mes=mes-1
    }
    //Converte para o formato UTC
    var data=new Date(ano,mes,dia)
    //Verifica se a data é válida
    if(isNaN(data))
    {
		return false;
		//event.srcElement.value=''
    }
    else
    //Converte para a data digitada
    {
      dia=data.getDate()
      mes=data.getMonth()+1
      ano=data.getFullYear()
      if (datadigitada!=zeroesq(dia,2)+'/'+zeroesq(mes,2)+'/'+zeroesq(ano,4))
      {
		return false;
      }
      else
	valor.value=zeroesq(dia,2)+'/'+zeroesq(mes,2)+'/'+zeroesq(ano,4)
    }
  }
  return true;
}

//#**************************************************************************
//Função	 : function maskdata()
// Objetivo  : Acrescenta máscara de data a medida que esta é digitada
// Parametro :
// Exemplo   : verdata()
//#**************************************************************************
function maskdata()
{
  //Verifica se caracter digitado é válido
  if (((event.keyCode>46)&&(event.keyCode<58))|(event.keyCode==13))
  {
    //Verifica se tem que colocar a barra e onde tem
    switch(event.srcElement.value.length)
    {
      case 2:
	if (event.keyCode!=47)
	{
	  event.srcElement.value=event.srcElement.value+'/'
	}
	break
      case 5:
	if (event.keyCode!=47)
	{
	  event.srcElement.value=event.srcElement.value+'/'
	}
	break
      }
  }
  else
  {
    event.keyCode = 0
  }
}

//#**************************************************************************
// Data      : 08/12/2003
// Objetivo  :  convert data no formato utc (usado para comparar duas datas)
// Parametro : Data : Data a ser transformada
// Exemplo   : convertdata(31/1/2001) retorna 63196576281600000
//#**************************************************************************
function convertdata(data){
var data1  = data
var posfim = data1.indexOf('/',3)
var posini = data1.indexOf('/')
var pos    = posfim - posini - 1
//convert data
ano = data1.substr((posfim + 1),4)
mes = zeroesq(data1.substr((posini + 1),pos),2)
dia = zeroesq(data1.substr(0,posini),2)
return Date.UTC(ano + mes + dia)
}

//#**************************************************************************
// Função	 : entranum(decimais)
// Objetivo  : Verifica se é um numero válido
// Parametro : Decimais - Número de caracteres aceitos após a virgula
//#**************************************************************************
function entranum(decimais)
{
   var dec ='';
   dec=zerodir(dec,decimais);
	if (decimais>0)
		dec='0,'+dec;
	else
		dec='0';
	if (event.srcElement.value==dec)
		event.srcElement.value='';
}

//#**************************************************************************
// Função	 : function DigitaData()
// Objetivo  : Aplica máscara na digitação de datas.
// Exemplo   : DigitaData()
//#**************************************************************************
function DigitaData()
{
	//Verifica se caracter digitado é válido
	if (!(((event.keyCode>46)&&(event.keyCode<58))|(event.keyCode==13)|(event.keyCode==44)|(event.keyCode==46)))
		event.returnValue = false;
}
//#**************************************************************************
// Função	 : function masknum()
// Objetivo  : Aplica máscara na digitação de números.
// Exemplo   : masknum()
//#**************************************************************************
function masknum()
{
	//Verifica se caracter digitado é válido
	if (!(((event.keyCode>47)&&(event.keyCode<58))|(event.keyCode==13)|(event.keyCode==44)|(event.keyCode==46)))
		event.returnValue = false;
}

//#**************************************************************************
// Função	 : function masknumdecimal()
// Objetivo  : Aplica máscara na digitação de números decimais.
//             OBS.: Trata se pode colocar valor negativo e o separador decimal.
// Exemplo   : masknumdecimal()
//#**************************************************************************
function masknumdecimal(separador,negativo,numDecimais)
{         
	// Verifica se caracter digitado não é válido
	if (!(((event.keyCode>47)&&(event.keyCode<58))|(event.keyCode==13) |
	    ((String.fromCharCode(event.keyCode)==separador) && (event.srcElement.value.toString().indexOf(separador)==-1) && (numDecimais!=0)) |
	    ((event.keyCode==45)&&(negativo)&&(event.srcElement.value.toString().length==0)) ))
    {
		event.returnValue = false;
	}
	// Senão, 
	// caracter válido: verificar casas decimais
	else
	{
	    event.returnValue = verdecimal(separador,numDecimais);
	}
	
	
}

//#**************************************************************************
// Função	 : verdecimal(decimais)
// Objetivo  : Verifica se é um numero válido
// Parametro : Decimais - Número de caracteres aceitos após a virgula
//#**************************************************************************
function verdecimal(separador,decimais)
{
    // Se já entrou com o separador de decimais e o número de casas decimais é limitado
	if ((event.srcElement.value.indexOf(separador)!=-1) && (decimais!=-1))
	{
	    // Verificar se já esta no limite de casas decimais
		var tamanho = event.srcElement.value.length;
		tamanho = tamanho - (event.srcElement.value.indexOf(separador))
		tamanho = decimais - tamanho
		if (tamanho < 0)
		    return false;
	}
	
	return true;
}

//#**************************************************************************
// Função	 : function vernum(decimais)
// Objetivo  : Verifica se é um numero válido
// Parametro : Decimais - Número de caracteres aceitos após a virgula
// Exemplo   : vernum(Decimais)
//#**************************************************************************
function vernum(separador,decimais,mensagem)
{
	
	var numero = event.srcElement.value
	
	//Caso não tenha sido preenchido, ignoramos...
	if (numero.length == 0) return;
	
	numero=numero.replace(',', '#')
	numero=numero.replace('.', '')
	numero=numero.replace('#', '.')
	numero=numero.replace(separador, '')
	
	if (isNaN(numero)) event.srcElement.value = '';

	var dec ='';

	if (event.srcElement.value.indexOf(separador) == -1)
	{

	    dec = zeroesq(dec, decimais);
		if (decimais > 0) event.srcElement.value = event.srcElement.value + separador + dec;

	} else {

		if(event.srcElement.value.indexOf(separador) == 0)
		    event.srcElement.value= '0' + event.srcElement.value
	
		var tamanho = event.srcElement.value.length;
		tamanho = tamanho - (event.srcElement.value.indexOf(separador) + 1)
		tamanho = decimais - tamanho
		tamanho= event.srcElement.value.length + tamanho
		event.srcElement.value = zerodir(event.srcElement.value, tamanho)
	}
}

//#**************************************************************************
// Função	 : function entranum(decimais)
// Objetivo  : Verifica se é um numero válido
// Parametro : Decimais - Número de caracteres aceitos após a virgula
// Exemplo   : Vernum(Decimais)
//#**************************************************************************
function entranum(decimais)
{
	var dec ='';
	dec=zerodir(dec,decimais);
	if (decimais>0)
	dec='0,'+dec;
	else
	dec='0';
	if (event.srcElement.value==dec)
	event.srcElement.value='';
}

function entracod()
{
	if (eval(event.srcElement.value)==0)
		event.srcElement.value='';
}

function vercod(tamanho)
{
	if (isNaN(event.srcElement.value))
	{
		event.srcElement.value='0'
		alert('Numero Invalido');
	}
	event.srcElement.value=zeroesq(event.srcElement.value,tamanho)
}

//#**************************************************************************
// Função	 : validaCep()
// Objetivo  : Verifica se é o Cep é válido
//#**************************************************************************
function validaCep(mensagem)
{
	//verifica se o valor tem o hífen
	if (event.srcElement.value.indexOf("-") == -1)
	{
		alert(mensagem);
		return false;
	}

	var strvalor;
	strvalor = event.srcElement.value;
	strvalor = strvalor.replace(/-/g, "");

	if (isNaN(strvalor))
	{
		alert(mensagem);
		return false;
	}
}


//#**************************************************************************
// Função	 : FormataCep(campo,teclapres)
// Objetivo  : Verifica se é o Cep é válido
// Parametro : teclapres - tecla a ser pressionada.
// Exemplo   : FormataCep(this,event)
//#**************************************************************************
function FormataCep(campo,teclapres)
{
	var tecla = teclapres.keyCode;
	vr = campo.value;
	vr = vr.replace('-', '');
	tam = vr.length + 1;
	if (tecla != 9 && tecla != 8)
	{
		if (tam > 5)
		{
			campo.value = vr.substr(0, 5) + '-' + vr.substr(5, 3);
		}
	}
}

//#**************************************************************************
// Função	 : validaCpf()
// Objetivo  : Verifica se é o CPF é válido
// Parametro : val - tecla a ser pressionada.
// Exemplo   : validateCpf()
//#**************************************************************************
function validaCpf(val)
{
	var valor = document.all[val.controltovalidate].value;
	return isCpf(valor);
}

//#**************************************************************************
// Função	 : FormataCPF(Campo, teclapres)
// Objetivo  : Faz a máscara do CPF.
// Parametro : val - tecla a ser pressionada.
// Exemplo   : FormataCPF(this,event)
//#**************************************************************************
function FormataCPF(Campo, teclapres){
	if (!(((event.keyCode>47)&&(event.keyCode<58))|(event.keyCode==13)|(event.keyCode==44)|(event.keyCode==46)))
		event.returnValue = false;
	var tecla = teclapres.keyCode;
	var vr = new String(Campo.value);
	vr = vr.replace(/[-\.]/g, "");
	tam = vr.length + 1;
	if (tecla != 9 && tecla != 8){
	if (tam > 3 && tam < 7)
	Campo.value = vr.substr(0, 3) + '.' + vr.substr(3, tam);
	if (tam >= 7 && tam <10)
	Campo.value = vr.substr(0,3) + '.' + vr.substr(3,3) + '.' + vr.substr(6,tam-6);
	if (tam >= 10 && tam < 12)
	Campo.value = vr.substr(0,3) + '.' + vr.substr(3,3) + '.' + vr.substr(6,3) + '-' + vr.substr(9,tam-9);
	}
}
//#**************************************************************************
// Função	 : FormataCNPJ(Campo, teclapres)
// Objetivo  : Faz a máscara do CPF.
// Parametro : val - tecla a ser pressionada.
// Exemplo   : FormataCNPJ(this, event)
//#**************************************************************************
function FormataCNPJ(Campo, teclapres){
	var tecla = teclapres.keyCode;
	var vr = new String(Campo.value);
	vr = vr.replace(/[-\.\/]/g, "");
	tam = vr.length + 1 ;
	if (tecla != 9 && tecla != 8){
	if (tam > 2 && tam < 6)
	Campo.value = vr.substr(0, 2) + '.' + vr.substr(2, tam);
	if (tam >= 6 && tam < 9)
	Campo.value = vr.substr(0,2) + '.' + vr.substr(2,3) + '.' + vr.substr(5,tam-5);
	if (tam >= 9 && tam < 13)
		Campo.value = vr.substr(0,2) + '.' + vr.substr(2,3) + '.' + vr.substr(5,3) + '/' + vr.substr(8,tam-8);
	if (tam >= 13 && tam < 15)
	Campo.value = vr.substr(0,2) + '.' + vr.substr(2,3) + '.' + vr.substr(5,3) + '/' + vr.substr(8,4)+ '-' + vr.substr(12,tam-12);
	}
}

//#**************************************************************************
// Função	 : ValidaCNPJ(tammax,teclapres)
//#**************************************************************************
function validaCnpj(val)
{
	var valor = document.all[val.controltovalidate].value;
	return isCnpj(valor);
}

function validaCpfCnpj(val)
{
	var valor = document.all[val.controltovalidate].value;
	return isCpfCnpj(valor);
}

//
// @author Márcio d'Ávila
// @version 1.0, 2004

var NUM_DIGITOS_CNPJ = 14;
var NUM_DIGITOS_CPF  = 11;

//
// 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 dif = pSize - this.length;
	var s = this;
	if (dif > 0)
	{
		for (; dif!=0; dif--) s = pCharPad + s;
	}
	return (s);
} //String.lpad



// 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.

function unformatNumber(pNum)
{
	var reSimbolos = /\D/g;
	var reZeroEsq = /^0+/;
	var numero = pNum.replace(reSimbolos, "");
	return (numero.replace(reZeroEsq, ""));
} //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).

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-base pBase de
// CNPJ (12 dígitos) ou CPF (9 dígitos) fornecido. pIsCnpj é booleano e
// informa se o número-base fornecido é CNPJ (default = false).
// @param String pBase
// 	String do número-base (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).
//
function dvCpfCnpj(pBase, pIsCnpj)
{
	if (pIsCnpj==null) pIsCnpj = false;
	var i, j, k, soma, dv;
	var cicloPeso = pIsCnpj? 8: NUM_DIGITOS_CPF;
	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;
	var calculado = formatCpfCnpj(pBase, 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 pCnpj fornecida é um CNPJ válido.
// Qualquer formatação que não seja algarismos é desconsiderada.
// @param String pCnpj
// 	String fornecida para ser testada.

function isCnpj(pCnpj)
{
	if (pCnpj.length == 0)
	{
		return true;
	}
	var numero = formatCpfCnpj(pCnpj, false, true);
	var base = numero.substring(0, 8);
	var ordem = numero.substring(8, 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<8; 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 pCpf fornecida é um CPF válido.
// Qualquer formatação que não seja algarismos é desconsiderada.
// @param String pCpf
// 	String fornecida para ser testada.

function isCpf(pCpf)
{
	if (pCpf.length == 0)
	{
		return true;
	}
	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


function isCpfCnpj(pCpfCnpj)
{
	var reSimbolos = /\D/g;
	var numero = pCpfCnpj.replace(reSimbolos, "");
	if (numero.length > NUM_DIGITOS_CPF)
		return isCnpj(pCpfCnpj)
	else
		return isCpf(pCpfCnpj);
} //isCpfCnpj
