(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)