(function($) {

function trackLinkClick(action, $element) {
  var linkText = $.trim($element.text());
  var linkURL = $element.attr('href');
  var label = linkText + '|' + linkURL;

  ga(
    'send',
    'event',
    'SM Technical Documentation', // Event Category
    action, // Event Action
    label // Event Label
  );
}

function linkTrackingEventHandler(action) {
  return function() {
    trackLinkClick(action, $(this));
  };
};

function catchBrokenFragmentLinks() {
  var fragment = window.location.hash;
  var $target = $(fragment);
  if(!$target.get(0)) {
    ga(
      'send',
      'event',
      'Broken fragment ID', // Event Category
      'pageview', // Event Action
      window.location.pathname + fragment // Event Label
    );
  }
}

$(document).on('ready', function() {
  if (typeof ga === 'undefined') {
    return;
  }

  $('.technical-documentation a').on('click', linkTrackingEventHandler('inTextClick'));
  $('.header a').on('click', linkTrackingEventHandler('topNavigationClick'));
  $('.toc a').on('click', linkTrackingEventHandler('tableOfContentsNavigationClick'));
  catchBrokenFragmentLinks();

  // Borrowed from:
  // https://github.com/alphagov/govuk_frontend_toolkit/blob/master/javascripts/govuk/analytics/analytics.js
  window.stripPIIFromString = function (string) {
    var EMAIL_PATTERN = /[^\s=/?&]+(?:@|%40)[^\s=/?&]+/g
    var POSTCODE_PATTERN = /[A-PR-UWYZ][A-HJ-Z]?[0-9][0-9A-HJKMNPR-Y]?(?:[\s+]|%20)*[0-9][ABD-HJLNPQ-Z]{2}/gi
    var DATE_PATTERN = /\d{4}(-?)\d{2}(-?)\d{2}/g
    var stripped = string.replace(EMAIL_PATTERN, '[email]')
    .replace(DATE_PATTERN, '[date]')
    .replace(POSTCODE_PATTERN, '[postcode]');
    return stripped
  }
});

})(jQuery);