// javascript 'shim' to trigger the click event of element(s)
// when the space key is pressed.
//
// usage instructions:
// GOVUK.anchorButtons.init();
//
// If you want to customise the shim you can pass in a custom configuration
// object with your own selector for the target elements and addional keyup
// codes if there becomes a need to do so. For example:
// GOVUK.anchorButtons.init({ selector: '[role="button"]' });
(function(global) {
  "use strict";

  var $ = global.jQuery;
  var GOVUK = global.GOVUK || {};

  GOVUK.anchorButtons = {

    // default configuration that can be overridden by passing object as second parameter to module
    config: {
      // the target element(s) to attach the shim event to
      selector: 'a[role="button"]',
      // array of keys to match against upon the keyup event
      keycodes: [
        32 // spacekey
      ],
    },

    // event behaviour (not a typical anonymous function for resuse if needed)
    triggerClickOnTarget: function triggerClickOnTarget(event) {
      var code = event.charCode || event.keyCode;
      // if the keyCode/charCode from this event is in the keycodes array then
      if ($.inArray(code, this.config.keycodes) !== -1) {
        event.preventDefault();
        // trigger the target's click event
        $(event.target).trigger("click");
      }
    },

    // By default this will find all anchors with role attribute set to
    // 'button' and will trigger their click event when the space key (32) is pressed.
    // @method init
    // @param  {Object}   customConfig                object to override default configuration
    //         {String}   customConfig.selector       a selector for the elements to be 'clicked'
    //         {Array}    customConfig.keycodes       an array of javascript keycode values to match against that when pressed will trigger the click
    init: function init(customConfig) {
      // extend the default config with any custom attributes passed in
      this.config = $.extend(this.config, customConfig);
      // if we have found elements then:
      if($(this.config.selector).length > 0) {
        // listen to 'document' for keyup event on the elements and fire the triggerClickOnTarget
        $(document).on('keyup', this.config.selector, this.triggerClickOnTarget.bind(this));
      }
    }

  };

  // hand back to global
  global.GOVUK = GOVUK;

})(window);