//forms functions
//usar com prototype.js
//@version: 1.2
//@date: 22/11/2007
//@author: ralo (exceto isCpf() e isCnpj())


function TurnDivErro(div_erro, msg){
  Element.removeClassName(div_erro, 'valor_ok');
  Element.addClassName(div_erro, 'valor_erro');
  el_msg=(document.getElementsByClassName('msg_erro', div_erro))[0];
  el_msg.innerHTML=msg;
}

function TurnDivOk(div_ok){
  Element.removeClassName(div_ok, 'valor_erro');
  Element.addClassName(div_ok, 'valor_ok');
  el_msg=(document.getElementsByClassName('msg_erro', div_ok))[0];
  el_msg.innerHTML="";
}

function isNotNull(string_value){
  if(string_value.match(/^\s*$/)){
    return(false);
  }else{
    return(true);
  }
}
function isEmail(string_value){
  if(string_value.match(/^.+@.+\..{2,3}$/)){
    return(true);
  }else{
    return(false);
  }
}
function isNumeric(string_value){
  if(string_value.match(/\D/)){
    return(false);
  }else{
    return(true);
  }
}

function isDate(dia, mes, ano){
  if((ano>=1000)&&(ano<10000)){
    if(((mes=='01')||(mes=='03')||(mes=='05')||(mes=='07')||(mes=='08')||(mes=='10')||(mes=='12'))&&(dia.match(/^(0[1-9]|[1-2][0-9]|3[0-1])$/))){
      return true;
    }else if(((mes=='04')||(mes=='06')||(mes=='09')||(mes=='07')||(mes=='08')||(mes=='11'))&&(dia.match(/^(0[1-9]|[1-2][0-9]|30)$/))){
      return true;
    }else if((mes=='02')&&(dia.match(/^(0[1-9]|1[0-9]|2[0-8])$/))){
      return true;
    }else if((mes=='02')&&(dia=='29')&&((ano%400==0)||((ano%4==0)&&(ano%100!=0)))){
      return true;
    }else{
      return false;
    }
  }else{
    return false;
  }
}

function isCpf(cpf){
  var numeros, digitos, soma, i, resultado, digitos_iguais;
  digitos_iguais = 1;
  if (cpf.length < 11) return false;
  for (i = 0; i < cpf.length - 1; i++){
    if (cpf.charAt(i) != cpf.charAt(i + 1)){
      digitos_iguais = 0;
      break;
    }
  }
  if (!digitos_iguais){
    numeros = cpf.substring(0,9);
    digitos = cpf.substring(9);
    soma = 0;
    for (i = 10; i > 1; i--){
      soma += numeros.charAt(10 - i) * i;        
    }
    resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
    if (resultado != digitos.charAt(0)) return false;
    numeros = cpf.substring(0,10);
    soma = 0;
    for (i = 11; i > 1; i--){
      soma += numeros.charAt(11 - i) * i;    
    }
    resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
    if (resultado != digitos.charAt(1)) return false;
    return true;
  }else return false;
}

function isCnpj(cnpj){
  var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais;
  digitos_iguais = 1;
  if (cnpj.length < 14 && cnpj.length < 15) return false;
  for (i = 0; i < cnpj.length - 1; i++)
    if (cnpj.charAt(i) != cnpj.charAt(i + 1)){
      digitos_iguais = 0;
      break;
    }
  if (!digitos_iguais){
    tamanho = cnpj.length - 2
    numeros = cnpj.substring(0,tamanho);
    digitos = cnpj.substring(tamanho);
    soma = 0;
    pos = tamanho - 7;
    for (i = tamanho; i >= 1; i--) {
      soma += numeros.charAt(tamanho - i) * pos--;
      if (pos < 2) pos = 9;
    }
    resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
    if (resultado != digitos.charAt(0)) return false;
    tamanho = tamanho + 1;
    numeros = cnpj.substring(0,tamanho);
    soma = 0;
    pos = tamanho - 7;
    for (i = tamanho; i >= 1; i--){
      soma += numeros.charAt(tamanho - i) * pos--;
      if (pos < 2) pos = 9;
    }
    resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
    if (resultado != digitos.charAt(1))  return false;
    return true;
  }else return false;
}

function substNumeric(el_input){
  el_input.value=($F(el_input)).replace(/\D/g, ''); 
}

function subsCep(evt){
  el_input=Event.element(evt);
  var cep_corrigido=($F(el_input)).replace(/\D/g, '');
  if(cep_corrigido.length==7){
    cep_corrigido='0'+cep_corrigido;
  }else if(cep_corrigido.length==5){
    cep_corrigido=cep_corrigido+'000';
  }else if(cep_corrigido.length==4){
    cep_corrigido='0'+cep_corrigido+'000';
  }
  el_input.value=cep_corrigido;
}

function subsDate(el_input){
  var valor=$F(el_input);
  valor=valor.replace('-','/'); //substitui - para /
  valor=valor.replace(/(\/+)$/,'/'); //substitui // para /
  valor=valor.replace(/[^0-9\/]+/,''); //apaga nao numero e nao /
  valor=valor.replace(/^(\/)$/,'');
  if(valor.match(/^(\d{2})$/)){
    valor=valor+'/';
  }
  if(valor.match(/^(\d{1,2}\/\d{2})$/)){
    valor=valor+'/';
  }
  el_input.value=valor;
}

function checkNotNull(el_input){
  el_div=el_input.parentNode;
  if(isNotNull($F(el_input))){
    TurnDivOk(el_div);
    return true;
  }else{
    TurnDivErro(el_div, 'Preencha o campo');
    return false;
  }
}

//cpf
function checkCpf(el_input){
  el_div=el_input.parentNode;
  if(isCpf($F(el_input))){
    TurnDivOk(el_div);
    return true;
  }else{
    TurnDivErro(el_div, 'CPF inválido');
    return false;
  }
}
function checkCnpj(el_input){
  el_div=el_input.parentNode;
  if(isCnpj($F(el_input))){
    TurnDivOk(el_div);
    return true;
  }else{
    TurnDivErro(el_div, 'CNPJ inválido');
    return false;
  }
}
function checkCpfOrCnpj(el_input){
  el_div=el_input.parentNode;
  if((isCpf($F(el_input)))||(isCnpj($F(el_input)))){
    TurnDivOk(el_div);
    return true;
  }else{
    TurnDivErro(el_div, 'CFP ou CNPJ inválido');
    return false;
  }
}
//somente números
function checkNumeric(el_input){
  el_div=el_input.parentNode;
  if(isNumeric($F(el_input))){
    TurnDivOk(el_div);
    return true;
  }else{
    TurnDivErro(el_div, 'Somente números');
    return false;
  }
}

//somente email
function checkEmail(el_input){
  el_div=el_input.parentNode;
  if(isEmail($F(el_input))){
    TurnDivOk(el_div);
    return true;
  }else{
    TurnDivErro(el_div, 'E-mail inválido');
    return false;
  }
}


function checkDate(el_input){
  subsDate(el_input);
  valor=$F(el_input);
  el_div=el_input.parentNode;
  var valor_exp=valor.split('/');
  if(valor_exp[0]){
    valor_dia=valor_exp[0];
    if(valor_dia.match(/^(\d)$/)){
      valor_dia='0'+valor_dia;
    }
  }else{
    valor_dia='00';
  }
  if(valor_exp[1]){
    valor_mes=valor_exp[1];
    if(valor_mes.match(/^(\d)$/)){
      valor_mes='0'+valor_mes;
    }
  }else{
    valor_mes='00';
  }
  if(valor_exp[2]){
    valor_ano=valor_exp[2];
    if(valor_ano.match(/^(\d)$/)){
      valor_ano='000'+valor_ano;
    }else if(valor_ano.match(/^(\d{2})$/)){
      valor_ano='00'+valor_ano;
    }else if(valor_ano.match(/^(\d{3})$/)){
      valor_ano='0'+valor_ano;
    }
  }else{
    valor_ano='0000';
  }

  el_input.value=valor_dia+'/'+valor_mes+'/'+valor_ano;
  
  if (isDate(valor_dia, valor_mes, valor_ano)){
      TurnDivOk(el_div);
      return true;
  }else{
      TurnDivErro(el_div, 'Data inválida');
      return false;
  }
}

function checkNullorDate(el_input){
  valor=$F(el_input);
  el_div=el_input.parentNode;
  if((valor=='')||(valor=='00/00/0000')){
    TurnDivOk(el_div);
    return(1);
  }else{
    return (checkDate(el_input));
  }
};

function checkNullorEmail(el_input){
  valor=$F(el_input);
  el_div=el_input.parentNode;
  if(valor==''){
    TurnDivOk(el_div);
    return(1);
  }else{
    return (checkEmail(el_input));
  }
}

function checkNullorNumeric(el_input){
  valor=$F(el_input);
  el_div=el_input.parentNode;
  if(valor==''){
    TurnDivOk(el_div);
    return(1);
  }else{
    return (checkNumeric(el_input));
  }
}

function set_select(elemento, valor){
  ls_option=elemento.getElementsByTagName('option');
  var i;
  var sucesso=0;
  for(i=0; i<ls_option.length; i++){
    if (ls_option[i].value==valor){
      ls_option[i].selected=true;
      sucesso=1;
    }else{
      ls_option[i].selected=false;
    }
  }
  return (sucesso);
}

function is_checked(elem_cbx){
  if(elem_cbx.checked){
    if(elem_cbx.value){
      return(elem_cbx.value);
    }else{
      return(true);
    }
  }else{
    return(false);
  }
}

function rand(n){
  return (Math.floor(Math.random()*n+1));
}