/**
 * @file
 * A file to throw all of our JS that needs to be used globally across other scripts.
 *
 *  Global.js.
 */

var tabKeyPressed = false;
var shiftKeyPressed = false;
var shiftTabKeyPressed = false;
var enterKeyPressed = false;
var lastSelectedElement = null;
const FOCUSABLE = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]';

(function ($) {

  $(function () {

    /**
     * Override the eventResponse on ajax.js when an ajax error occurs.
     */
    Drupal.ajax.prototype.customKoodoAjaxError = Drupal.ajax.prototype.error;
    Drupal.ajax.prototype.error = function (response, uri) {
      var msg = Drupal.ajaxError(response, uri);
      console.log(msg);
    };

    function Global_Events() {

      var self = this;

      // Bind the proper functions to events.
      self._init = function () {

        $(window).bind('keydown keyup', function (event) {
          self._set_event_variables_keypress(event);
        });

        $(window).bind('click', function (event) {
          self._set_event_variables_click(event);
        });

        delete self.init;
      };

      // When a user presses or unpresses a key make sure that we set the proper variables.
      self._set_event_variables_keypress = function (event) {
        var code = event.which;
        var TAB = 9;
        var ENTER = 13;
        var SHIFT = 16;

        // If the user fires keyup that means the key is no longer pressed. Set to false.
        var value = event.type === 'keydown';

        switch (code) {
          case TAB:
            tabKeyPressed = value;
            break;

          case SHIFT:
            shiftKeyPressed = value;
            break;

          case ENTER:
            enterKeyPressed = value;
            break;

          // If a different key is pressed we don't want any of the accessibility stuff being fired.
          default:
            tabKeyPressed = false;
        }

        shiftTabKeyPressed = tabKeyPressed && shiftKeyPressed;
      };

      // When a user clicks, make sure the other events are set to false.
      self._set_event_variables_click = function () {
        tabKeyPressed = false;
        shiftKeyPressed = false;
        enterKeyPressed = false;
        shiftTabKeyPressed = false;
      };

      self._init();
    }

    var globalEvents = new Global_Events();
  });

})(jQuery);
