//altera mensagens padrões
$.validator.messages["required"] = "preencha o campo";
$.validator.messages["digits"] = "somente dígitos";
$.validator.messages["email"] = "e-mail inválido";

//adiciona métodos
$.validator.addMethod(
  "checked",
  function(value, element){
    var inp_name=($(element).attr('name'));
    if($('input[name="'+inp_name+'"]:checked').length){
      return true;
    }else{
      return false;
    }
  },
  "Escolha uma opção"
);

$.validator.addMethod(
  "dateBR",
  function(value, element){
    if((value=='')||(value=='__/__/____')){
      return true;
    }else{
      var val_exp=value.split('/');
      if(val_exp.length==3){
        var ano=val_exp[2];
        var mes=val_exp[1];
        var dia=val_exp[0];
        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;
        }
      }else{
        return false;
      }    
    }
  },
  "data inválida"
);

$.validator.addMethod(
  "HoraMin",
  function(value, element){
    if((value=='')||(value=='__:__')){
      return true;
    }else{    
      var val_exp=value.split(':');
      if(val_exp.length==2){
        var min=val_exp[1];
        var hora=val_exp[0];
        if((min.match(/^[0-5][0-9]$/))&&(hora.match(/^(0[0-9]|1[0-9]|2[0-3])$/))){
          return true;
        }else{
          return false;
        }
      }else{
        return false;
      }
    }
  },
  "horário inválido"
);

$.validator.addMethod(
  "cpf",
  function(value, element){
    if(value==''){
      return true;
    }else{
      var cpf=value;
      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;
    }
  },
  "CPF inválido"
);

$.validator.addMethod(
  "cnpj",
  function(value, element){
    if(value==''){
      return true;
    }else{
      var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais;
      digitos_iguais = 1;
      if (cnpj.length!=14) 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;
    }
  },
  "CNPJ inválido"
);

$.validator.addMethod( //to do: verificar simbolos considerando letras acentuadas 
  "min2words",
  function(value, element){
    if(value==''){
      return true;
    }else{
      if(value.match(/(\S)+(\s)+(\S)+/g)) return true;
      else return false;
    }
  },
  "mínimo de 2 palavras"
); 