window.ftrMask = function (context) {

  context = context || $('body');

  let mask_date = context.find('.mask-date');
  if(mask_date.length){
    mask_date.mask('00/00/0000');
  }

  let mask_time = context.find('.mask-time');
  if(mask_time.length){
    mask_time.mask('00:00:00');
  }

  let mask_date_time = context.find('.mask-date-time');
  if(mask_date_time.length){
    mask_date_time.mask('00/00/0000 00:00:00');
  }

  let mask_cep = context.find('.mask-cep');
  if(mask_cep.length){
    mask_cep.mask('00000-000');
  }

  let mask_quantity = context.find('.mask-quantity');
  if(mask_quantity.length){
    mask_quantity.mask('AAAA', {
      translation: {
        A: { pattern: /[0-9]/, recursive: true },
      },
    });
  }

  var SPMaskBehavior = function(val) {
      return val.replace(/\D/g, '').length === 11 ? '(00) 00000-0000' : '(00) 0000-00009';
    },
    spOptions = {
      onKeyPress: function(val, e, field, options) {
        field.mask(SPMaskBehavior.apply({}, arguments), options);
      },
    };

  context.find('.mask-celular').mask(SPMaskBehavior, spOptions);
  context.find('.mask-phone').mask('(00) 0000-0000');
  context.find('.mask-mixed').mask('AAA 000-S0S');
  context.find('.mask-cpf').mask('000.000.000-00', { reverse: true });
  context.find('.mask-cnpj').mask('00.000.000/0000-00', { reverse: true });
  context.find('.mask-money').mask('000.000.000.000.000,00', { reverse: true });
  context.find('.mask-money2').mask('#.##0,00', { reverse: true });
  context.find('.mask-percent').mask('##0,00%', { reverse: true });
  context.find('.mask-alpha-no-spaces').mask('A', {
    translation: {
      A: { pattern: /[\w@\-.+]/, recursive: true },
    },
  });

  context.find('.mask-text').mask('A', {
    translation: {
      A: { pattern: /[A-Za-z\s]/, recursive: true },
    },
  });

  context.find('.mask-number').mask('A', {
    translation: {
      A: { pattern: /[0-9\,\.]/, recursive: true },
    },
  });

  context.find('.mask-int').mask('A', {
    translation: {
      A: { pattern: /[0-9]/, recursive: true },
    },
  });
}

$(document).ready(ftrMask());
