aceleradora-TW/nao-me-calo

View on GitHub
app/assets/javascripts/ratings.js

Summary

Maintainability
F
3 days
Test Coverage
$(document).ready(function(){

  var dots = 0;

  $('#phoneEvaluate').mask('(99) 9999-9999');
  $('#dateEvaluate').mask('99/99/9999');
  $('#cpfEvaluate').mask('999.999.999-99');
  $('#submitButton').prop('disabled', true);
  $('[data-toggle="tooltip"]').tooltip();

  errors = {cpfEvaluate: false, rating: true, dateEvaluate: false, description: false};

  if ( $('[type="date"]').prop('type') !== 'date' ) {
    $('[type="date"]').datepicker();
  }

  $('#emailEvaluate').focusout(function(){
    checkMail();
  });

  $('#nameEvaluate').focusout(function(){
    checkName();
  });

  $('#cpfEvaluate').focusout(function(){
    isInvalidCPF();
  });

  $('#cpfEvaluate').keyup(function(){
    reviewCPF();
  });

  $('#dateEvaluate').focusout(function(){
    isInvalidDate();
  });

  $('#dateEvaluate').keyup(function(){
    reviewDate();
  });

  $('#rating_grade').focusout(function(){
    reviewName();
  });

  $('#ratingDescription').focusout(function(){
    isInvalidMessage();
  });

  $('#ratingDescription').keyup(function(){
    countChars($('#ratingDescription'),500,'limitChar');
    hasBadWords($('#ratingDescription'));
  });

  $('#clearButton').click(function(){
    $('.radio-button').removeAttr('checked');
  });

  $('#new_rating').submit(function(){
    $('#submitButton').attr('disabled', true);
    $('#submitButton').val("Aguarde");
    setInterval(function(){
      if(dots < 3){
        $('#submitButton').val($('#submitButton').val() + ".");
        dots++;
      } else {
        $('#submitButton').val("Aguarde");
        dots = 0;
      }
    }, 600);
  })

  function hasBadWords(text){

    var count = 0;
    var textLowerCase = text.val().toLowerCase().split(" ");
    for(var i = 0; i <= badwords.length; i++){
      for(j=0; j <= textLowerCase.length; j++){
        if(textLowerCase[j] === badwords[i]){
          count++;
          break;
        }
      }
    }
    badWordsErrors(count, text);
  }

  function badWordsErrors(count, text){
    var hasError = (count > 1);
    if(hasError){
      errors['description'] = hasError;
      text.addClass('errorBorder');
      $('#descriptionAlertText').removeClass('hidden');
      $('#descriptionAlert').addClass('text-field-error');
      showMessage();
    }
    else {
      errors['description'] = hasError;
      text.removeClass('errorBorder');
      $('#descriptionAlertText').addClass('hidden');
      $('#descriptionAlert').removeClass('text-field-error');
      showMessage();
    }
  }

  function isInvalidMessage(){
    if(errors['description']){
      $('#ratingDescription').addClass('errorBorder');
      $('#descriptionAlertText').removeClass('hidden');
      $('#descriptionAlert').addClass('text-field-error');
      showMessage();
    }
  }

  function showMessage(){
    var checkedRadioButton = !$('.radio-button').is(':checked')
    if (checkedRadioButton){
      $('#radioButtonId').addClass('errorBorder');
    }else{
      $('#radioButtonId').removeClass('errorBorder');
    }
    for(var l in errors){
      if(errors[l] === true){
        $('#submitButton').prop('disabled', true);
        return;
      }
    }
    if(enableButtonTerms()){
      $('#submitButton').prop('disabled', false);
    }
  }
  function reviewCPF(){

    var teste = $('#cpfEvaluate').val().split('.').join('').split('-').join('');
    var erro = CPFTest(teste);
    if(erro) {

      errors['cpfEvaluate'] = true;
      showMessage();
    } else {

      errors['cpfEvaluate'] = false;
      $('#cpfEvaluate').removeClass('error');
      $('#cpfAlertText').addClass('hidden');
      $('#cpfAlert').removeClass('text-field-error');
      showMessage();

    }
  }

  function isInvalidCPF(){
    if(errors['cpfEvaluate']){
      $('#cpfEvaluate').addClass('error');
      $('#cpfAlert').removeClass('hidden');
      $('#cpfAlert').addClass('text-field-error');
      $('#cpfAlertText').removeClass('hidden');
      showMessage();
    }

  }

  function CPFTest(strCPF){
    var sum;
    var rest;
    sum = 0;

    if ( strCPF === '00000000000' || strCPF === '11111111111' || strCPF === '22222222222' || strCPF === '33333333333' || strCPF === '44444444444' || strCPF === '55555555555' || strCPF === '66666666666' || strCPF === '77777777777' || strCPF === '88888888888' || strCPF === '99999999999' || strCPF === '01234567890') return true;

    for (i=1; i<=9; i++) sum = sum + parseInt(strCPF.substring(i-1, i), 10) * (11 - i);
    rest = (sum * 10) % 11;

    if ((rest === 10) || (rest === 11))  rest = 0;
    if (rest !== parseInt(strCPF.substring(9, 10), 10) ) return true;

    sum = 0;
    for (i = 1; i <= 10; i++) sum = sum + parseInt(strCPF.substring(i-1, i), 10) * (12 - i);
    rest = (sum * 10) % 11;

    if ((rest === 10) || (rest === 11))  rest = 0;
    if (rest !== parseInt(strCPF.substring(10, 11), 10 ) ) return true;
    return false;
  }

  function reviewDate(){
    var regExPattern = /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/;
    var ratingDate = $('#dateEvaluate').val();
    var date = new Date();

    var today = date.getDate() + ((date.getMonth()+1) * 30) + (date.getFullYear() * 365);
    ratingDate = parseInt(ratingDate.substring(0,2), 10) + (parseInt(ratingDate.substring(3,5), 10) * 30) + (parseInt(ratingDate.substring(6), 10) * 365);

    if (((today < ratingDate) || (ratingDate <730000)) || $('#dateEvaluate').val() === '__/__/____' || $('#dateEvaluate').val() === '' || !$('#dateEvaluate').val().match(regExPattern)){

      errors['dateEvaluate'] = true;
      showMessage();
    } else {
      $('#dateEvaluate').removeClass('error');
      $('#dateAlertText').addClass('hidden');
      $('#dateAlert').removeClass('text-field-error');
      errors['dateEvaluate'] = false;
      showMessage();
    }
  }

  function isInvalidDate(){
    if(errors['dateEvaluate']){
      $('#dateEvaluate').addClass('error');
      $('#dateAlert').addClass('text-field-error');
      $('#dateAlertText').removeClass('hidden');
      showMessage();
    }

  }

  function isNull(parameter){
    if(parameter.val() === null || parameter.val() === ''){
      return true;
    } else {
      return false;
    }
  }

  function checkName(){
    var nameExp = /^[A-Za-záàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ ]+$/
    if (checking('#nameEvaluate', nameExp)){
      $('#nameEvaluate').removeClass('error');
      $('#nameAlertText').addClass('hidden');
      errors['nameEvaluate'] = false;
      showMessage();
    }else{
      $('#nameEvaluate').addClass('error');
      $('#nameAlertText').removeClass('hidden');
      errors['nameEvaluate'] = true;
      showMessage();
    }
  }

  function checkMail(){
    var emailExp = /^(([^<>()\[\]\\.,;:=/{}+!\s@']+(\.[^<>()\[\]\\.,;:=/{}+!\s@]+)*)|('.+'))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    if(checking('#emailEvaluate', emailExp)){
      $('#emailEvaluate').removeClass('error');
      $('#emailAlertText').addClass('hidden');
      errors['emailEvaluate'] = false;
      showMessage();
    }else{
      $('#emailEvaluate').addClass('error');
      $('#emailAlertText').removeClass('hidden');
      errors['emailEvaluate'] = true;
      showMessage();
    }
  }

  function enableButtonTerms(){
    if(!(isNull($('#cpfEvaluate')) || isNull($('#dateEvaluate')))){
      if($('#terms:checked').length === 1){
        $('#submitButton').prop('disabled', false);
        return true;
      } else {
        $('#submitButton').prop('disabled', true);
        return false;
      }
    }
  }

  $('#terms').change(function(){
    if(!(errors['cpfEvaluate'] || isNull($('#cpfEvaluate')) || errors['rating'] || isNull($('#dateEvaluate')) || errors['dateEvaluate'] || errors['nameEvaluate'] || errors['emailEvaluate'] || errors['description'])){
      enableButtonTerms();    }
    });

    $('.radio-button').click(function(){
      errors['rating'] = false;
      enable = enableButtonTerms();
      show = showMessage();
    });

    function countChars(box, limit, fieldspan){
      var count =  limit  - box.val().length;
      document.getElementById(fieldspan).innerHTML = 'Caracteres restantes: ' + count;
    }

  });

  function checking(inputId, exp){
    var input = $(inputId).val();
    if (input.match(exp) || $(inputId).val() === '' || $(inputId).val() === null) {
      return true
    }
    else {
      return false
    }
  }