// Generated by CoffeeScript 2.7.0
(function() {
  var barWidth, bootstrapClasses, displayEntropyBar, displayEntropyBarMsg;

  bootstrapClasses = new Map([["Err", "bg-danger"], ["0", "bg-danger"], ["1", "bg-warning"], ["2", "bg-info"], ["3", "bg-primary"], ["4", "bg-success"]]);

  barWidth = new Map([["Err", "0"], ["0", "20"], ["1", "40"], ["2", "60"], ["3", "80"], ["4", "100"]]);

  // display entropy bar with correct level
  displayEntropyBar = function(level) {
    // Remove all classes from progressbar and restore default progress-bar class
    $("#entropybar div").removeClass();
    $("#entropybar div").addClass('progress-bar');
    // set width
    $("#entropybar div").width(barWidth.get(level) + '%');
    // set color
    $("#entropybar div").addClass(bootstrapClasses.get(level));
    // display percentage width inside the bar
    return $("#entropybar div").html(barWidth.get(level) + '%');
  };

  // display custom message if any, else remove hide div block
  displayEntropyBarMsg = function(msg) {
    $("#entropybar-msg").html(msg);
    if (msg.length === 0) {
      return $("#entropybar-msg").addClass("entropyHidden");
    } else {
      return $("#entropybar-msg").removeClass("entropyHidden");
    }
  };

  $(document).on('checkpassword', function(event, context) {
    var entropyrequired, entropyrequiredlevel, evType, newpasswordVal, password, setResult;
    password = context.password;
    evType = context.evType;
    setResult = context.setResult;
    // if checkEntropy is enabled
    if ($('#ppolicy-checkentropy-feedback').length > 0) {
      newpasswordVal = $("#newpassword").val();
      entropyrequired = $("span[trspan='checkentropyLabel']").attr("data-checkentropy_required");
      entropyrequiredlevel = $("span[trspan='checkentropyLabel']").attr("data-checkentropy_required_level");
      if (newpasswordVal.length === 0) {
        // restore default empty bar
        displayEntropyBar("Err");
        displayEntropyBarMsg("");
        setResult('ppolicy-checkentropy-feedback', "unknown");
      }
      if (newpasswordVal.length > 0) {
        // send a request to checkentropy endpoint
        return $.ajax({
          dataType: "json",
          url: "/checkentropy",
          method: "POST",
          data: {
            "password": btoa(newpasswordVal)
          },
          context: document.body,
          success: function(data) {
            var level, msg;
            level = data.level;
            msg = data.message;
            if (level !== void 0) {
              if (parseInt(level) >= 0 && parseInt(level) <= 4) {
                // display entropy bar with correct level
                displayEntropyBar(level);
                displayEntropyBarMsg(msg);
                // set a warning if level < required level and prevent form validation
                if (entropyrequired === "1" && entropyrequiredlevel.length > 0) {
                  if (parseInt(level) >= parseInt(entropyrequiredlevel)) {
                    setResult('ppolicy-checkentropy-feedback', "good");
                  } else {
                    setResult('ppolicy-checkentropy-feedback', "bad");
                  }
                }
                // entropy criteria is set to ok if entropy check is not required
                if (entropyrequired !== "1") {
                  return setResult('ppolicy-checkentropy-feedback', "good");
                }
              } else if (parseInt(level) === -1) {
                // error when computing entropy: display entropy bar with error level
                displayEntropyBar(level);
                displayEntropyBarMsg(msg);
                return setResult('ppolicy-checkentropy-feedback', "bad");
              } else {
                // unexpected error: display entropy bar with error level
                displayEntropyBar(level);
                displayEntropyBarMsg(msg);
                return setResult('ppolicy-checkentropy-feedback', "unknown");
              }
            }
          },
          error: function(j, status, err) {
            var res;
            if (err) {
              console.log('checkentropy: frontend error: ', err);
            }
            if (j) {
              res = JSON.parse(j.responseText);
            }
            if (res && res.error) {
              return console.log('checkentropy: returned error: ', res);
            }
          }
        });
      }
    }
  });

}).call(this);
