// JavaScript Document

//------------------------------------------------------
//####### iframe auto-dimensionavel #######
//------------------------------------------------------

function adjustFrame(frame) {
  var frmTemp;
  if (document.all) {
    var w = frame.document.body.scrollWidth;
    var h = frame.document.body.scrollHeight;

    if(frame.document.body.scrollWidth > frame.document.body.offsetWidth) {
      document.all[frame.name].height = h;
    }
    else {
      document.all[frame.name].height = h;
      }
    }
  else if (document.getElementById) {
    var w = frame.document.width;
    var h = frame.document.height;

    if(frame.document.body.scrollWidth > frame.document.body.offsetWidth) {
     document.getElementById(frame.name).height = h;
    }
    else {
      document.getElementById(frame.name).height = h;
    }
  }
  return false;
}





//------------------------------------------------------
//####### Valida e Mascara CPF #######
//------------------------------------------------------

// a função principal de validação
function ValidarCPF(obj){ // recebe um objeto
  var Valor = obj.value;
  var tam = Valor.length;
  if (tam > 0){
    if (!(tam==11)){ // validando o tamanho
      alert("Preencha corretamente o campo CPF" ); // tamanho inválido
	  obj.value = ""; //limpa o campo
	  obj.focus(); //foca o objeto
	  return false;
    }
  }
    
  // se for CPF
  if (tam==11){
    if (!ValidaCPF(Valor)){ // chama a função que valida o CPF
      alert("'"+MascaraCPF(Valor)+"' não é um CPF válido!" ); // se quiser mostrar o erro
	  obj.select(); //foca o objeto
	  obj.value = ""; //limpa o campo
      return false;
    }
    //alert("'"+Valor+"' é um CPF válido!" ); // se quiser mostrar que validou        
    obj.value=MascaraCPF(Valor);    // se validou o CPF mascaramos corretamente
    return true;
  }
}
// fim da funcao Validar()

// função que valida CPF
// O algorítimo de validação de CPF é baseado em cálculos
// para o dígito verificador (os dois últimos)
// Não entrarei em detalhes de como funciona
function ValidaCPF(Valor) {
  var c = Valor.substr(0,9);
  var dv = Valor.substr(9,2);
  var d1 = 0;
  for (var i=0; i<9; i++) {
    d1 += c.charAt(i)*(10-i);
  }
  if (d1 == 0) return false;
  d1 = 11 - (d1 % 11);
  if (d1 > 9) d1 = 0;
  if (dv.charAt(0) != d1){
    return false;
  }
  d1 *= 2;
  for (var i = 0; i < 9; i++){
    d1 += c.charAt(i)*(11-i);
  }
  d1 = 11 - (d1 % 11);
  if (d1 > 9) d1 = 0;
  if (dv.charAt(1) != d1){
    return false;
  }
  return true;
}

//função que mascara o CPF
function MascaraCPF(CPF){
  return CPF.substring(0,3)+"."+CPF.substring(3,6)+"."+CPF.substring(6,9)+"-"+CPF.substring(9,11);
}


//------------------------------------------------------
//####### Valida e Mascara CPF e CNPJ #######
//------------------------------------------------------


/*
********************************************************************    
####################################################################
Assunto = Validação de CPF e CNPJ
Autor = Marcos Regis
Data = 24/01/2006
Versão = 1.0
Compatibilidade = Todos os navegadores.
Pode ser usado e distribuído desde que esta linhas sejam mantidas
====------------------------------------------------------------====
Funcionamento = O script recebe como parâmetro um objeto por isso
deve ser chamado da seguinte forma:
Ex.: no evento onBlur de um campo texto
<input name="cpf_cnpj" type="text" size="40" maxlength="18" onBlur="validar(this);">
Ao deixar o campo, o evento é disparado e chama validar() com o 
argumento "this" que representa o próprio objeto com todas as propriedades.
A partir daí a função validar() trata a entrada removendo tudo que
não for caracter numérico e deixando apenas números, portanto
valores escritos só com números ou com separadores como '.' ou mesmo
espaços são aceitos
ex.: 111222333/44, 111.222.333-44, 111 222 333 44 serão tratadoc como 11122233344 (para CPFs)
De certa forma até mesmo valores como 111A222B333C44 será aceito mas
aconselho a usar a função SoNumero() que encotra-se aqui mesmo para
que o campo só aceite caracteres numéricos.
Para usar a função SoNumero() chame-a no evento onKeyPress desta forma onKeyPress="return SoNumero(event);"
Após limpar o valor verificamos seu tamanho que deve ser ou 11 ou 14
Se o tamanho não for aceito a função retorna false e [opcional] mostra uma mensagem de erro.
Sugestões e comentários marcos_regis@hotmail.com
####################################################################
********************************************************************
*/

// a função principal de validação
function validar(obj){ // recebe um objeto
  var Valor = obj.value;
  var tam = Valor.length;
  if (tam > 0){
    if (!(tam==11 || tam==14)){ // validando o tamanho
      alert("Preencha corretamente o campo CPF/CNPJ" ); // tamanho inválido
	  obj.value = ""; //limpa o campo
	  obj.focus(); //foca o objeto
	  return false;
    }
  }
    
  // se for CPF
  if (tam==11){
    if (!validaCPF(Valor)){ // chama a função que valida o CPF
      alert("'"+maskCPF(Valor)+"' não é um CPF válido!" ); // se quiser mostrar o erro
	  obj.select(); //foca o objeto
	  obj.value = ""; //limpa o campo
      return false;
    }
    //alert("'"+Valor+"' é um CPF válido!" ); // se quiser mostrar que validou        
    obj.value=maskCPF(Valor);    // se validou o CPF mascaramos corretamente
    return true;
  }
    
  // se for CNPJ            
  if (tam==14){
    if(!validaCNPJ(Valor)){ // chama a função que valida o CNPJ
      alert("'"+maskCNPJ(Valor)+"' não é um CNPJ válido!" ); // se quiser mostrar o erro
	  obj.value = ""; //limpa o campo
	  obj.focus(); //foca o objeto
      return false;            
    }
    //alert("'"+Valor+"' é um CNPJ válido!" ); // se quiser mostrar que validou                
    obj.value=maskCNPJ(Valor); // se validou o CNPJ mascaramos corretamente
    return true;
  }
}
// fim da funcao validar()

// função que valida CPF
// O algorítimo de validação de CPF é baseado em cálculos
// para o dígito verificador (os dois últimos)
// Não entrarei em detalhes de como funciona
function validaCPF(Valor) {
  var c = Valor.substr(0,9);
  var dv = Valor.substr(9,2);
  var d1 = 0;
  for (var i=0; i<9; i++) {
    d1 += c.charAt(i)*(10-i);
  }
  if (d1 == 0) return false;
  d1 = 11 - (d1 % 11);
  if (d1 > 9) d1 = 0;
  if (dv.charAt(0) != d1){
    return false;
  }
  d1 *= 2;
  for (var i = 0; i < 9; i++){
    d1 += c.charAt(i)*(11-i);
  }
  d1 = 11 - (d1 % 11);
  if (d1 > 9) d1 = 0;
  if (dv.charAt(1) != d1){
    return false;
  }
  return true;
}

// Função que valida CNPJ
// O algorítimo de validação de CNPJ é baseado em cálculos
// para o dígito verificador (os dois últimos)
// Não entrarei em detalhes de como funciona
function validaCNPJ(CNPJ) {
  var a = new Array();
  var b = new Number;

  var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
  for (i=0; i<12; i++){
    a[i] = CNPJ.charAt(i);
    b += a[i] * c[i+1];
  }
  if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
  b = 0;
  for (y=0; y<13; y++) {
    b += (a[y] * c[y]);
  }
  if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
  if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
    return false;
  }
  return true;
}

//função que mascara o CPF
function maskCPF(CPF){
  return CPF.substring(0,3)+"."+CPF.substring(3,6)+"."+CPF.substring(6,9)+"-"+CPF.substring(9,11);
}

//função que mascara o CNPJ
function maskCNPJ(CNPJ){
  return CNPJ.substring(0,2)+"."+CNPJ.substring(2,5)+"."+CNPJ.substring(5,8)+"/"+CNPJ.substring(8,12)+"-"+CNPJ.substring(12,14);    
}





//------------------------------------------------------
//####### Converte para número #######
//------------------------------------------------------

function ToNumber(Campo){// recebe um objeto
  if (Campo!=""){
    var Valor;
    Valor = Campo.value;
    Valor = Valor.replace(".","");// removendo os caracteres não numéricos
    Valor = Valor.replace(".","");// removendo os caracteres não numéricos
    Valor = Valor.replace(".","");// removendo os caracteres não numéricos
    Valor = Valor.replace("/","");// removendo os caracteres não numéricos
    Valor = Valor.replace("-","");// removendo os caracteres não numéricos
    Campo.value = Valor;
  }
}





//------------------------------------------------------
//####### Contador para <textarea> #######
//------------------------------------------------------
function TextCounter(Field, CountField, MaxLimit) {
  if (Field.value.length > MaxLimit)
    Field.value = Field.value.substring(0, MaxLimit);
  else 
    CountField.value = MaxLimit - Field.value.length;
}





//------------------------------------------------------
//####### Funçao que permite apenas teclas numéricas #######
//------------------------------------------------------

// Deve ser chamada no evento onKeyPress desta forma: onkeypress="return SoNumero(event);"
function SoNumero(e) {
  if (navigator.appName == 'Microsoft Internet Explorer') {
    if (event.keyCode != 13 && (event.keyCode < 48 || event.keyCode > 57)) event.returnValue = false;
  }
  else {
    if (document.all) {var evt = event.keyCode;}
    else {var evt = e.charCode;}
    if (evt < 20 || (evt > 47 && evt < 58)) {return true;}
    return false;
  }
}





//------------------------------------------------------
//####### Abre uma nova janela com tamanho definido #######
//------------------------------------------------------

function NewWindow(mypage, myname, w, h, scroll) {
  var winl = (screen.width - w - 7) / 2;
  var wint = (screen.height - h - 55) / 2;
  winprops = 'height='+h+',width='+w+',top='+wint+',left='+winl+',scrollbars='+scroll+',resizable=0'
  win = window.open(mypage, myname, winprops)
  if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
}





//------------------------------------------------------
//####### Mascara e valida DATA >> 99/99/9999 #######
//------------------------------------------------------

//Deve ser chamada no onKeyUp assim: onkeyup="MascaraData(this)" maxlength="10"

function MascaraData(CampoData){ 
  var myData = ''; 
  Data = CampoData.value;
  myData = myData + Data; 

  if (myData.length == 2){ 
    myData = myData + '/'; 
    CampoData.value = myData; 
  } 

  if (myData.length == 5){ 
    myData = myData + '/'; 
    CampoData.value = myData; 
  } 

  if (myData.length == 10)
    VerificaData(CampoData);
}

function VerificaData(CampoData) { 
  dia = (CampoData.value.substring(0,2)); 
  mes = (CampoData.value.substring(3,5)); 
  ano = (CampoData.value.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 (CampoData.value == "") { 
    situacao = "falsa"; 
  } 
    
  if (situacao == "falsa") { 
    Data = CampoData.value; 
    alert(Data+" é uma data inválida!"); 
    CampoData.focus(); 
  }
}


//------------------------------------------------------
//####### Mascara e valida HORA >> 00:00:00 #######
//------------------------------------------------------

//Deve ser chamada no onKeyUp assim: onkeyup="MascaraHora(this)" maxlength="8"

function MascaraHora(CampoHora){ 
  var myHora = ''; 
  Hora = CampoHora.value;
  myHora = myHora + Hora; 

  if (myHora.length == 2) {
    myHora = myHora + ':';
    CampoHora.value = myHora; 
  } 

  if (myHora.length == 5) {
    myHora = myHora + ':'; 
    CampoHora.value = myHora; 
  } 
  
  if (myHora.length == 8)
    VerificaHora(CampoHora);
}

function VerificaHora(CampoHora) { 
  Hora = (CampoHora.value.substring(0,2)); 
  Minuto = (CampoHora.value.substring(3,5)); 
  Segundo = (CampoHora.value.substring(6,8)); 

  situacao = ""; 
  // verifica a Hora é válida
  if (Hora > 24) { 
    situacao = "falsa"; 
  } 

  // verifica se o Minuto é valido 
  if (Minuto > 59) { 
    situacao = "falsa"; 
  } 

  // verifica se o Segundo é valido 
  if (Segundo > 59) { 
    situacao = "falsa"; 
  } 
    
  if (CampoHora.value == "") { 
    situacao = "falsa"; 
  } 
    
  if (situacao == "falsa") { 
    Hora = CampoHora.value; 
    alert(Hora+" é uma hora inválida!"); 
    CampoHora.focus(); 
  }
}


//------------------------------------------------------
//####### Mascara e valida HORA >> 00:00:00 #######
//------------------------------------------------------

//Deve ser chamada no onKeyUp assim: onkeyup="MascaraHoraCurta(this)" maxlength="5"

function MascaraHoraCurta(CampoHora){ 
  var myHora = ''; 
  Hora = CampoHora.value;
  myHora = myHora + Hora; 

  if (myHora.length == 2) {
    myHora = myHora + ':';
    CampoHora.value = myHora; 
  } 

  if (myHora.length == 5) {
    VerificaHora(CampoHora);
	} 
}

function VerificaHoraCurta(CampoHora) { 
  Hora = (CampoHora.value.substring(0,2)); 
  Minuto = (CampoHora.value.substring(3,5)); 

  situacao = ""; 
  // verifica a Hora é válida
  if (Hora > 24) { 
    situacao = "falsa"; 
  } 

  // verifica se o Minuto é valido 
  if (Minuto > 59) { 
    situacao = "falsa"; 
  } 

  if (CampoHora.value == "") { 
    situacao = "falsa"; 
  } 
    
  if (situacao == "falsa") { 
    Hora = CampoHora.value; 
    alert(Hora+" é uma hora inválida!"); 
    CampoHora.focus(); 
  }
}

//------------------------------------------------------
//####### Mascara e valida DATA/HORA >> 99/99/9999 00:00:00 #######
//------------------------------------------------------

function MascaraDataHora(evento,objeto){
  if (navigator.appName == 'Microsoft Internet Explorer')
    if (event.keyCode != 13 && (event.keyCode < 48 || event.keyCode > 57))
	  event.returnValue = false;
  else {
    if (document.all)
	  var evt = event.keyCode;
    else
	  var evt = objeto.charCode;
    if (evt < 20 || (evt > 47 && evt < 58))
	  return true;
    return false;
  }

  var keypress=(window.event)?event.keyCode:evento.which;
  campo = eval (objeto);
  if (campo.value == '00/00/0000 00:00:00')
    campo.value=""

  caracteres = '0123456789';
  separacao1 = '/';
  separacao2 = ' ';
  separacao3 = ':';
  conjunto1 = 2;
  conjunto2 = 5;
  conjunto3 = 10;
  conjunto4 = 13;
  conjunto5 = 16;
  if ((caracteres.search(String.fromCharCode (keypress))!=-1) && campo.value.length < (19)) {
    if (campo.value.length == conjunto1 )
	campo.value = campo.value + separacao1;
	else if (campo.value.length == conjunto2)
	campo.value = campo.value + separacao1;
	else if (campo.value.length == conjunto3)
	campo.value = campo.value + separacao2;
	else if (campo.value.length == conjunto4)
	campo.value = campo.value + separacao3;
	else if (campo.value.length == conjunto5)
	campo.value = campo.value + separacao3;
  }
  else
	event.returnValue = false;
}





//------------------------------------------------------
//####### Mascara e valida CEP >> 99999-000 #######
//------------------------------------------------------

//Deve ser chamada no onKeyUp assim: onkeyup="MascaraCEP(this)" maxlength="9"

function MascaraCEP(campo) {
  qtdcaracteres = (campo.value).length;
  if(qtdcaracteres == 5)
    campo.value = campo.value + "-";
} 





//------------------------------------------------------
//####### Mascara Moeda >> 1.000.000,00 #######
//------------------------------------------------------

// Author: Arnaldo Machado Filho, Phycisist (USP-1978), wewill@ig.com.br
function MascaraMoeda(cur,len) {
  n='__0123456789';
  d=cur.value;
  l=d.length;
  r='';
  if (l > 0) {
    z=d.substr(0,l-1);
    s='';
    a=2;
    for (i=0; i < l; i++) {
      c=d.charAt(i);
      if (n.indexOf(c) > a) {
        a=1;
        s+=c;
      }
    }
    l=s.length;
    t=len-1;
    if (l > t) {
      l=t;
      s=s.substr(0,t);
    }
    if (l > 2) {
      r=s.substr(0,l-2)+','+s.substr(l-2,2);
    }
    else {
      if (l == 2) {
        r='0,'+s;
      }
      else {
        if (l == 1) {
          r='0,0'+s;
        }
      }
    }
    if (r == '') {
      r='0,00';
    }
    else {
      l=r.length;
      if (l > 6)  {
        j=l%3;
        w=r.substr(0,j);
        wa=r.substr(j,l-j-6);
        wb=r.substr(l-6,6);
        if (j > 0) {
          w+='.';
        }
        k=(l-j)/3-2;
        for (i=0; i < k; i++) {
          w+=wa.substr(i*3,3)+'.';
        }
        r=w+wb;
      }
    }
  }
  if (r.length <= len) {
    cur.value=r;
  }
  else {
    cur.value=z;
  }
  //return 'ok';
}





//------------------------------------------------------
//####### Mascara Fone COM DDD >> (99) 9999-9999 #######
//------------------------------------------------------

//Deve ser chamada no onKeyUp assim: onkeyup="MascaraFoneCompleto(this)" maxlength="14"

function MascaraFoneCompleto(campo){
  QtdeChar = (campo.value).length;
  if(QtdeChar == 1)
    campo.value = "(" + campo.value;
  if(QtdeChar == 3)
    campo.value = campo.value + ") ";
  if(QtdeChar == 9)
    campo.value = campo.value + "-";
}

function VerFone(campo){
  Valor = campo.value;
  if (Valor == "(" ){
    campo.value = "";
  }
}






//------------------------------------------------------
//####### Mascara Fone SEM DDD >> 9999-9999 #######
//------------------------------------------------------

//Deve ser chamada no onKeyUp assim: onkeyup="MascaraFone(this)" maxlength="9"

function MascaraFone(campo) {
  qtdcaracteres = (campo.value).length;
  if(qtdcaracteres == 4)
    campo.value = campo.value + "-";
} 


