function EhBissexto(a){if(a<=30)d='20'+a;if(a>30)d='19'+a;if(a>=1900)d=a;var d1 = new Date(d,0,1);var d2 = new Date(d,11,31);if((Math.floor(Date.parse(d2)/8.64e7)-Math.floor(Date.parse(d1)/8.64e7))+1==366)return true;return false}
function EhNumeroInteiro(t){for(x=0;x<t.length;x++)if(isNaN(t.substr(x,1)))return false;if(t.length<1)return false;return true}
function EhDoTamanho(t,m){if(t.length>m)return false;return true}
function EhNumeroDecimal(t){var ponto=0;if(t.length<1)return false;for(x=0;x<t.length;x++)if(isNaN(t.substr(x,1))&&(t.substr(x,1)!=','))return false;for(x=0;x<t.length;x++)if(t.substr(x,1)==',')ponto++;if(ponto>1)return false;return true}
function EhData(t){var m =	new Array(1,2,3,4,5,6,7,8,9,10,11,12);
var n =	new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var d = t.split('/');
if(d.length<3)return false;
for(i=0;i<d.length;i++)if(!EhNumeroInteiro(d[i]))return false;
if ((d[0]>31)||(d[1]>12)||(d[0].length>2)||(d[1].length>2)||(d[2].length<2)||(d[2].length==3)||(d[2].length>4))return false
if (EhBissexto(d[2]))n[1]=29;
for(i=0;i<m.length;i++)if ((m[i]==d[1])&&(d[0]>n[i]))return false;
return true}

function EhHora(t){
var h=t.split(':')
if (h.length>3) return false
if (h.length<2) return false
for(i=0;i<h.length;i++)if (!EhNumeroInteiro(h[i]))return false

if (h.length>0)
if (h[0]>23) return false
if (h.length>1)
if (h[1]>60) return false
if (h.length>2)
if (h[2]>60) return false
return true
}

function vData(cara){
if (cara.value=='') return true
var dh = cara.value.split(' ')
if (dh.legth>2){
alert('Você deve especificar um valor de data válido!')
cara.value=''
cara.focus()
return false
}

if (dh.length==2)
if ((!EhData(dh[0]))||(!EhHora(dh[1]))){
alert('Você deve especificar um valor de data válido!')
cara.value=''
cara.focus()
return false
}

if (dh.length==1)
if (!EhData(dh[0])){
alert('Você deve especificar um valor de data válido!')
cara.value=''
cara.focus()
return false
}


return true
}
function vInt(cara){
if (cara.value=='') return true
if (!EhNumeroInteiro(cara.value)){
alert('Esse campo aceita somente valores numéricos!')
cara.value=''
cara.focus()
return false
}
return true
}
function vDec(cara){
if (cara.value=='') return true
cara.value=cara.value.replace('.',',')
if (!EhNumeroDecimal(cara.value)){
alert('Esse campo aceita somente valores numéricos!')
cara.value=''
cara.focus()
return false
}
return true
}

function vCPFCNPJ(cara){
if (cara.value=='') return true
if (!ConfereCIC(cara)){
alert("O CPF ou CNPJ NÃO É válido!");
//alert('Esse número de CPF é inválido!')
cara.value=''
cara.focus()
return false
}
return true
}
function vCNPJ(cara){
if (cara.value=='') return true
if (!ConfereCIC(cara)){
alert("O CNPJ NÃO É válido!");
//alert('Esse número de CPF é inválido!')
cara.value=''
cara.focus()
return false
}
return true
}function vCPF(cara){
if (cara.value=='') return true
if (!ConfereCIC(cara)){
alert("O CPF digitado NÃO é válido!");
//alert('Esse número de CPF é inválido!')
cara.value=''
cara.focus()
return false
}
return true
}

function Valida(cara){
for (i=0;i<cara.length;i++)
if ((Requeridos[cara[i].name])&&((cara[i].value=='')||(cara[i].value==null))){
//alert(cara[i].name)
return false
}
return true
}
var aviso='Há campos obrigatórios não preenchidos!'


function DigitoCPFCNPJ(numCIC) {
var numDois = numCIC.substring(numCIC.length-2, numCIC.length);
var novoCIC = numCIC.substring(0, numCIC.length-2);
switch (numCIC.length){
 case 11 :
  numLim = 11;
  break;
 case 14 :
  numLim = 9;
  break;
 default : return false;
}
var numSoma = 0;
var Fator = 1;
for (var i=novoCIC.length-1; i>=0 ; i--) {
 Fator = Fator + 1;
 if (Fator > numLim) {
  Fator = 2;
 }
 numSoma = numSoma + (Fator * Number(novoCIC.substring(i, i+1)));
}
numSoma = numSoma/11;
var numResto = Math.round( 11 * (numSoma - Math.floor(numSoma)));
   if (numResto > 1) {
 numResto = 11 - numResto;
   }
   else {
 numResto = 0;
   }
   //-- Primeiro dígito calculado.  Fará parte do novo cálculo.
   
   var numDigito = String(numResto);
   novoCIC = novoCIC.concat(numResto);
   //--
numSoma = 0;
Fator = 1;
for (var i=novoCIC.length-1; i>=0 ; i--) {
 Fator = Fator + 1;
 if (Fator > numLim) {
  Fator = 2;
 }
 numSoma = numSoma + (Fator * Number(novoCIC.substring(i, i+1)));
}
numSoma = numSoma/11;
numResto = numResto = Math.round( 11 * (numSoma - Math.floor(numSoma)));
   if (numResto > 1) {
 numResto = 11 - numResto;
   }
   else {
 numResto = 0;
   }
//-- Segundo dígito calculado.
numDigito = numDigito.concat(numResto);
if (numDigito == numDois) {
 return true;
}
else {
 return false;
}
}
//--< Fim da Função >--

//-- Retorna uma string apenas com os números da string enviada
function ApenasNum(strParm) {
strParm = String(strParm);
var chrPrt = "0";
var strRet = "";
var j=0;
for (var i=0; i < strParm.length; i++) {
 chrPrt = strParm.substring(i, i+1);
 if ( chrPrt.match(/\d/) ) {
  if (j==0) {
   strRet = chrPrt;
   j=1;
  }
  else {
   strRet = strRet.concat(chrPrt);
  }
 }
}
return strRet;
}
//--< Fim da Função >--

//-- Somente aceita os caracteres válidos para CPF e CNPJ.
function PreencheCIC(objCIC) {
var chrP = objCIC.value.substring(objCIC.value.length-1, objCIC.value.length);

if ( !chrP.match(/[0-9]/) && !chrP.match(/[\/.-]/) ) {
 objCIC.value = objCIC.value.substring(0, objCIC.value.length-1);
 return false;
}
return true;
}
//--< Fim da Função >--

function FormataCIC (numCIC) {
numCIC = String(numCIC);
switch (numCIC.length){
case 11 :
 return numCIC.substring(0,3) + "." + numCIC.substring(3,6) + "." + numCIC.substring(6,9) + "-" + numCIC.substring(9,11);
case 14 :
 return numCIC.substring(0,2) + "." + numCIC.substring(2,5) + "." + numCIC.substring(5,8) + "/" + numCIC.substring(8,12) + "-" + numCIC.substring(12,14);
default : 
 alert("Tamanho incorreto do CPF ou CNPJ!");
 return "";
}
}

//-- Remove os sinais, deixando apenas os números e reconstroi o CPF ou CNPJ, verificando a validade
//-- Recebe como parâmetros o número do CPF ou CNPJ, com ou sem sinais e o atualiza com sinais é validado.
function ConfereCIC(objCIC) {
//if (objCIC.value == null) {
// alert("Preenchimento obrigatório do CPF ou CNPJ");
// return false;
//}
var strCPFPat  = /^\d{3}\.\d{3}\.\d{3}-\d{2}$/;
var strCNPJPat = /^\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}$/;

numCPFCNPJ = ApenasNum(objCIC.value);

if (!DigitoCPFCNPJ(numCPFCNPJ)) {
 //alert("O CPF ou CNPJ NÃO É válido!");
 return false;
}
return true

objCIC.value = FormataCIC(numCPFCNPJ);

if (objCIC.value.match(strCNPJPat)) {
 return true;
}
else if (objCIC.value.match(strCPFPat)) {
 return true;
}
else {
// alert("O CPF ou CNPJ NÃO É válido!");
 return false;
}
}
//Fim da Função para Cálculo do Digito do CPF/CNPJ
