// JavaScript Document
function mascara_data(data,campo){ 
  var mydata = ''; 
  mydata = mydata + data; 
  
  if (mydata.length == 2){ 
	  mydata = mydata + '/'; 
	  document.getElementById(campo).value = mydata; 
  } 
  if (mydata.length == 5){ 
	  mydata = mydata + '/'; 
	  document.getElementById(campo).value = mydata; 
  } 
} 

function mascara_data_nascimento(data,campo){ 
  var mydata = ''; 
  mydata = mydata + data; 
  
  if (mydata.length == 2){ 
	  mydata = mydata + '/'; 
	  document.getElementById(campo).value = mydata; 
  } 
} 

function verifica_data (campo, valor) { 

	dia = valor.substring(0,2); 
	mes = valor.substring(3,5); 
	ano = valor.substring(6,10); 
		
	situacao = ""; 
	// verifica o dia valido para cada mes 
	if ((dia < 01)||(dia < 01 || dia > 30) && (  mes == 04 || mes == 06 || mes == 09 || mes == 11 ) || dia > 31) { 
		situacao = "falsa"; 
	} 
	
	// verifica se o mes e valido 
	if (mes < 01 || mes > 12 ) { 
		situacao = "falsa"; 
	} 
	
	// verifica se e ano bissexto 
	if (mes == 2 && ( dia < 01 || dia > 29 || ( dia > 28 && (parseInt(ano / 4) != ano / 4)))) { 
		situacao = "falsa"; 
	} 
	
	if (valor == "") { 
		situacao = "falsa"; 
	} 
	
	if (situacao == "falsa") { 
		alert("A data é invalida!");
		document.getElementById(campo).focus();		
		return false;
	} 

	return true;
} 

function limpa_string(S){
	// Deixa so' os digitos no numero
	var Digitos = "0123456789";
	var temp = "";
	var digito = "";

	for (var i=0; i<S.length; i++)	{
		digito = S.charAt(i);
		if (Digitos.indexOf(digito)>=0)	{
			temp=temp+digito	}
	} //for

	return temp
}


function mascara(tipo, valor, campo) {
	$tipo = tipo;
	if ($tipo == "CNPJ") {
		mascara_cnpj(valor,campo);	
	} else {
		mascara_cpf(valor,campo);			
	}
}

function mascara_cnpj(cnpj,campo){ 
  var mycnpj = ''; 
  mycnpj = mycnpj + cnpj; 
  
  if (mycnpj.length == 2){ 
	  mycnpj = mycnpj + '.'; 
	  document.getElementById(campo).value = mycnpj; 
  } 
  
  if (mycnpj.length == 6){ 
	  mycnpj = mycnpj + '.'; 
	  document.getElementById(campo).value = mycnpj; 
  } 

  if (mycnpj.length == 10){ 
	  mycnpj = mycnpj + '/'; 
	  document.getElementById(campo).value = mycnpj; 
  } 

  if (mycnpj.length == 15){ 
	  mycnpj = mycnpj + '-'; 
	  document.getElementById(campo).value = mycnpj; 
  } 

} 


function mascara_cpf(cpf,campo){ 
  var mycpf = ''; 
  mycpf = mycpf + cpf; 
  
  if (mycpf.length == 3){ 
	  mycpf= mycpf + '.'; 
	  document.getElementById(campo).value = mycpf; 
  } 
  
  if (mycpf.length == 7){ 
	  mycpf = mycpf + '.'; 
	  document.getElementById(campo).value = mycpf; 
  } 

  if (mycpf.length == 11){ 
	  mycpf = mycpf + '-'; 
	  document.getElementById(campo).value = mycpf; 
  } 
} 

function limpa_valores() {
	document.getElementById('logradouro').value="";
	document.getElementById('numero').value="";
	document.getElementById('bairro').value="";
	document.getElementById('cidade').value="";
	document.getElementById('cep').value="";
	document.getElementById('referencia').value="";	
}


function Tecla(e)
{
    if (document.all) // Internet Explorer
        var tecla = event.keyCode;
    else if(document.layers) // Nestcape
        var tecla = e.which;
    if (tecla > 47 && tecla < 58) // numeros de 0 a 9
        return true;
    else
        {
            if (tecla != 8) // backspace
                event.keyCode = 0;
            //return false;
            else
                return true;
        }
}

// Validar CPF/CNPJ
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; 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 janela(url) {
 var pagina = url;
 open (pagina, "janela", "status=no, Scrollbars=yes, Resizable=no, Menubar=no, Location=no, Directories=no, Toolbar=no, Titlebar=no, width=480, height=350")
}

var reDecimalEn = /^[+-]?((\d+|\d{1,3}(\,\d{3})+)(\.\d*)?|\.\d+)$/;
var reDecimal = reDecimalEn;
eval("reDecimal = reDecimalEn");

// Formata o campo valor
function formataValor(campo) {
	campo.value = filtraCampo(campo);
	vr = campo.value;
	tam = vr.length;

	if ( tam <= 2 ){ 
 		campo.value = vr ; }
 	if ( (tam > 2) && (tam <= 5) ){
 		campo.value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam ) ; }
 	if ( (tam >= 6) && (tam <= 8) ){
 		campo.value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
 	if ( (tam >= 9) && (tam <= 11) ){
 		campo.value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' +  vr.substr( tam - 2, tam ) ; }
 	if ( (tam >= 12) && (tam <= 14) ){
 		campo.value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' +  vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
 	if ( (tam >= 15) && (tam <= 18) ){
 		campo.value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' +  vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ;}
 		
}
// limpa todos os caracteres especiais do campo solicitado
function filtraCampo(campo){
	var s = "";
	var cp = "";
	vr = campo.value;
	tam = vr.length;
	for (i = 0; i < tam ; i++) {  
		if (vr.substring(i,i + 1) != "/" && vr.substring(i,i + 1) != "-" && vr.substring(i,i + 1) != "."  && vr.substring(i,i + 1) != "," ){
		 	s = s + vr.substring(i,i + 1);}
	}
	campo.value = s;
	return cp = campo.value
}


function textCounter(field, countfield, maxlimit) {
	if (field.value.length > maxlimit) {
		field.value = field.value.substring(0, maxlimit);
	} else {
	countfield.value = maxlimit - field.value.length;}
}


