{"version":3,"names":[],"mappings":"","sources":["main.bundle.js"],"sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i>> 0;\n\n\t\t\t\tif (typeof callback !== 'function') {\n\t\t\t\t\t\tthrow new TypeError(callback + ' is not a function');\n\t\t\t\t}\n\n\t\t\t\tif (arguments.length > 1) {\n\t\t\t\t\t\tT = thisArg;\n\t\t\t\t}\n\n\t\t\t\tA = new Array(len);\n\n\t\t\t\tk = 0;\n\n\t\t\t\twhile (k < len) {\n\n\t\t\t\t\t\tvar kValue, mappedValue;\n\n\t\t\t\t\t\tif (k in O) {\n\t\t\t\t\t\t\t\tkValue = O[k];\n\t\t\t\t\t\t\t\tmappedValue = callback.call(T, kValue, k, O);\n\n\t\t\t\t\t\t\t\tA[k] = mappedValue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tk++;\n\t\t\t\t}\n\n\t\t\t\treturn A;\n\t\t};\n}\n\n/*********************/\n/* Private Functions */\n/*********************/\nfunction extend(out) {\n\t\tout = out || {};\n\t\tfor (var i = 1; i < arguments.length; i++) {\n\t\t\t\tif (!arguments[i]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (var key in arguments[i]) {\n\t\t\t\t\t\tif (arguments[i].hasOwnProperty(key) && arguments[i][key] !== undefined) {\n\t\t\t\t\t\t\t\tout[key] = arguments[i][key];\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\t\treturn out;\n}\n\nfunction cleanSelector(selector) {\n\t\treturn selector.replace(/\\W/g, '');\n}\n\nfunction matchSelector(elem, selector) {\n\t\tif ($) {\n\t\t\t\treturn $(elem).is(selector);\n\t\t} else if (typeof selector === 'string') {\n\t\t\t\treturn elementMatchesSelector.call(elem, selector);\n\t\t} else if ((typeof selector === 'undefined' ? 'undefined' : _typeof(selector)) === 'object' && selector.length) {\n\t\t\t\treturn selector.indexOf(elem) >= 0;\n\t\t} else if ((typeof selector === 'undefined' ? 'undefined' : _typeof(selector)) === 'object' && selector.nodeType === 1) {\n\t\t\t\treturn elem === selector;\n\t\t}\n\t\treturn false;\n}\n\nfunction generateId() {\n\t\tvar id;\n\t\twhile (true) {\n\t\t\t\tid = ID_POOL_PREFIX + String(++_idPool);\n\t\t\t\tif (!_modals[id]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\t\treturn id;\n}\n\nfunction getModalId(elem) {\n\t\tvar hasClass = false;\n\t\tvar elemClasses = elem && elem.className && elem.className.split(' ') || [];\n\n\t\tfor (var id in _modals) {\n\t\t\t\tvar triggerSelectors = _modals[id].triggerSelectors.map(function (selector) {\n\t\t\t\t\t\treturn selector.substring(1);\n\t\t\t\t});\n\n\t\t\t\tvar dismissSelectors = _modals[id].dismissSelectors.map(function (selector) {\n\t\t\t\t\t\treturn selector.substring(1);\n\t\t\t\t});\n\n\t\t\t\tif (!_modals[id].disable) {\n\t\t\t\t\t\tfor (var i = 0, len = elemClasses.length; i < len; i++) {\n\t\t\t\t\t\t\t\thasClass = triggerSelectors.indexOf(elemClasses[i]) === 0 || dismissSelectors.indexOf(elemClasses[i]) === 0;\n\t\t\t\t\t\t\t\tif (hasClass) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn id;\n\t\t\t\t}\n\t\t}\n}\n\nfunction hideModal(modalId) {\n\t\tvar modal = _modals[modalId];\n\t\tvar modalRoot;\n\n\t\tif (!modal) {\n\t\t\t\treturn;\n\t\t}\n\n\t\tmodalRoot = modal.root;\n\n\t\tmodalRoot.setAttribute('data-modal', 'false');\n\t\tmodalRoot.setAttribute('aria-hidden', 'false');\n\t\tmodal.modalSelector[0].setAttribute('data-visible', 'false');\n\t\tmodal.modalSelector[0].setAttribute('aria-hidden', 'true');\n}\n\nfunction onModalActivatorPress(evt) {\n\n\t\tvar target = this;\n\t\tvar modalId = getModalId(target);\n\t\tvar modal = _modals[modalId];\n\t\tvar modalRoot;\n\t\tvar modalData;\n\n\t\tdocument.getElementById(\"overlay\").style.display = \"block\";\n\n\t\tif (!modal) {\n\t\t\t\treturn;\n\t\t}\n\n\t\tmodalRoot = modal.root;\n\t\tmodalData = modalRoot && modalRoot.getAttribute('data-modal');\n\n\t\tif (modalData && modalData === 'true') {\n\t\t\t\treturn;\n\t\t}\n\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\n\t\tmodalRoot.setAttribute('data-modal', 'true');\n\t\tmodalRoot.setAttribute('aria-hidden', 'true');\n\t\tmodal.modalSelector[0].setAttribute('data-email', target.getAttribute('href'));\n\t\tmodal.modalSelector[0].setAttribute('data-visible', 'true');\n\t\tmodal.modalSelector[0].setAttribute('aria-hidden', 'false');\n}\n\nfunction onModalDismissorPress(evt) {\n\n\t\tdocument.getElementById(\"overlay\").style.display = \"none\";\n\n\t\tvar target = this;\n\t\tvar modalId = getModalId(target);\n\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\n\t\thideModal(modalId);\n}\n\n/****************/\n/* Modal Object */\n/****************/\nvar BoostModal = {\n\t\tinit: function init(config) {\n\t\t\t\tvar options = extend({}, GlobalConfig, config);\n\t\t\t\tvar triggerSelectors = options.triggerSelectors || [];\n\t\t\t\tvar dismissSelectors = options.dismissSelectors || [];\n\n\t\t\t\ttriggerSelectors = triggerSelectors.join(', ');\n\t\t\t\tdismissSelectors = dismissSelectors.join(', ');\n\n\t\t\t\t$(document).on('click', triggerSelectors, onModalActivatorPress);\n\t\t\t\t$(document).on('click', dismissSelectors, onModalDismissorPress);\n\t\t},\n\n\t\tset: function set() {\n\t\t\t\tvar modalId, config;\n\n\t\t\t\tif (_typeof(arguments[0]) === 'object') {\n\t\t\t\t\t\tconfig = arguments[0];\n\t\t\t\t} else if (typeof arguments[0] === 'string' && _typeof(arguments[1]) === 'object') {\n\t\t\t\t\t\tmodalId = arguments[0];\n\t\t\t\t\t\tconfig = arguments[1];\n\t\t\t\t\t\tif (!_modals[modalId]) {\n\t\t\t\t\t\t\t\tthrow new Error('Section \"' + modalId + '\" doesn\\'t exist!');\n\t\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in config) {\n\t\t\t\t\t\tif (GlobalConfig[key] !== undefined) {\n\t\t\t\t\t\t\t\tif (modalId) {\n\t\t\t\t\t\t\t\t\t\t_modals[modalId][key] = config[key];\n\t\t\t\t\t\t\t\t} else if (config[key] !== undefined) {\n\t\t\t\t\t\t\t\t\t\tGlobalConfig[key] = config[key];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (modalId) {\n\t\t\t\t\t\t// remove \"undefined\" items\n\t\t\t\t\t\t_modals[modalId] = extend({}, _modals[modalId]);\n\t\t\t\t}\n\t\t},\n\n\t\tadd: function add() {\n\t\t\t\tvar modalId;\n\t\t\t\tvar config = {};\n\n\t\t\t\tif (_typeof(arguments[0]) === 'object') {\n\t\t\t\t\t\tconfig = arguments[0];\n\t\t\t\t} else if (typeof arguments[0] === 'string' && _typeof(arguments[1]) === 'object') {\n\t\t\t\t\t\tmodalId = arguments[0];\n\t\t\t\t\t\tconfig = arguments[1];\n\t\t\t\t}\n\n\t\t\t\tif (!modalId) {\n\t\t\t\t\t\tmodalId = typeof config.id === 'string' ? config.id : generateId();\n\t\t\t\t}\n\n\t\t\t\tif (_modals[modalId]) {\n\t\t\t\t\t\tthrow new Error('Modal \"' + modalId + '\" already exists!');\n\t\t\t\t}\n\n\t\t\t\t_modals[modalId] = {};\n\n\t\t\t\tModal.set(modalId, config);\n\t\t},\n\n\t\tdestroy: function destroy() {\n\t\t\t\twindow.removeEventListener('keyup', onKeyUp);\n\t\t\t\tModal.clear();\n\t\t\t\t_idPool = 0;\n\t\t\t\t_ready = false;\n\t\t},\n\n\t\tclear: function clear() {\n\t\t\t\t_modals = {};\n\t\t\t\t_modalCount = 0;\n\t\t\t\t_defaultModalId = '';\n\t\t\t\t_lastModalId = '';\n\t\t}\n\n};\n\nwindow.Modal = BoostModal;\n\n/*********************/\n/* jQuery Interface */\n/*********************/\nif ($) {\n\t\t$.Modal = function () {\n\t\t\t\tModal.init();\n\n\t\t\t\tif (arguments.length > 0) {\n\t\t\t\t\t\tif ($.isPlainObject(arguments[0])) {\n\t\t\t\t\t\t\t\treturn Modal.add(arguments[0]);\n\t\t\t\t\t\t} else if ($.type(arguments[0]) === 'string' && $.isFunction(Modal[arguments[0]])) {\n\t\t\t\t\t\t\t\treturn Modal[arguments[0]].apply(Modal, [].slice.call(arguments, 1));\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn $.extend({}, Modal);\n\t\t};\n\n\t\t$.fn.Modal = function () {\n\t\t\t\tvar config;\n\n\t\t\t\tif ($.isPlainObject(arguments[0])) {\n\t\t\t\t\t\tconfig = arguments[0];\n\t\t\t\t} else {\n\t\t\t\t\t\tconfig = {\n\t\t\t\t\t\t\t\tmodalSelector: arguments[0]\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconfig.modalSelector = this;\n\t\t\t\tconfig.root = config.root || document.body;\n\n\t\t\t\tif (config.id) {\n\t\t\t\t\t\tModal.remove(config.id);\n\t\t\t\t}\n\n\t\t\t\tModal.add(config);\n\t\t\t\tModal.init(config);\n\n\t\t\t\treturn this;\n\t\t};\n}\n\n},{}],3:[function(require,module,exports){\n'use strict';\n\n/**\r\n *\r\n * Common behavior that applies accross the site, ex. global navigation, site search \r\n *\r\n */\n\n//Homepage Cube\n\n(function (global, undefined) {\n\n var $cube = $('.js-cube'),\n $cubeNodes = $cube.find('.js-cube-slide'),\n cubeNodesLength = $cubeNodes.length,\n $cubeArrowRight = $cube.find('.js-cube-arrow-right'),\n $cubeArrowLeft = $cube.find('.js-cube-arrow-left'),\n $cubeSearchBox = $cube.find('.searchbox__input'),\n $body = $('body'),\n\n\n //Assuming the index will start at the first slide\n slideIndex = 0,\n slideLength = cubeNodesLength - 1,\n slidePrevIndex = slideLength,\n slideNextIndex = slideIndex + 1,\n isAnimating = false;\n\n //carousel Functionality\n function animatePrev() {\n\n //if cube is animating dont proceeed with next slide until the first is finishied\n if (isAnimating) return;\n\n isAnimating = true;\n\n $cubeNodes.eq(slideIndex).addClass('is-cube-slide-in');\n $cubeNodes.eq(slidePrevIndex).addClass('is-cube-slide-out');\n\n slideNextIndex = slideIndex;\n\n --slideIndex;\n\n //Go back to first slide\n if (slideIndex < 0) {\n slideIndex = slideLength;\n }\n\n //make sure that the next slide is not beyond the length of slides\n slidePrevIndex = slideIndex - 1;\n\n if (slidePrevIndex < 0) {\n slidePrevIndex = slideLength;\n }\n\n $cube.addClass('is-animating-right');\n\n setTimeout(resetClasses, 1000);\n }\n\n function resetClasses() {\n\n $cube.removeClass('is-animating-left is-animating-right');\n\n $cubeNodes.removeClass('is-cube-slide-out is-cube-slide-in is-slide-current');\n $cubeNodes.eq(slideIndex).addClass('is-slide-current');\n\n isAnimating = false;\n }\n\n function animateNext() {\n\n //if cube is animating dont proceeed with next slide until the first is finished animating\n if (isAnimating) return;\n\n isAnimating = true;\n\n $cubeNodes.eq(slideIndex).addClass('is-cube-slide-out');\n $cubeNodes.eq(slideNextIndex).addClass('is-cube-slide-in');\n\n slidePrevIndex = slideIndex;\n\n ++slideIndex;\n\n //Go back to first slide\n if (slideIndex > slideLength) {\n slideIndex = 0;\n slidePrevIndex = slideLength;\n }\n\n slideNextIndex = slideIndex + 1;\n\n //make sure that the next slide is not beyond the length of slides\n if (slideNextIndex > slideLength) {\n slideNextIndex = 0;\n }\n\n $cube.addClass('is-animating-left');\n\n setTimeout(resetClasses, 1000);\n }\n\n $cubeArrowRight.on('click.cubeSlide', function (ev) {\n ev.preventDefault();\n\n animateNext();\n });\n\n $cubeArrowLeft.on('click.cubeSlide', function (ev) {\n ev.preventDefault();\n\n animatePrev();\n });\n\n $cubeSearchBox.on('click.cubeSearchbox', function (ev) {\n ev.preventDefault();\n\n $('.js-site-search-trigger').trigger('click.siteSearch');\n });\n\n //carousel refresh\n var $refreshService = $cubeNodes.eq(0).find('.js-refresh-service'),\n $refreshInsights = $cubeNodes.eq(1).find('.js-refresh-service'),\n $cubeService = $cubeNodes.eq(0),\n $cubeInsights = $cubeNodes.eq(1),\n $cubeInsightsContent = $cubeInsights.find('.js-cube__insights'),\n $cubeArticleNodes = $cubeInsights.find('.cube__insights-block:not(\".cube__insights-block--testimonial\")'),\n $cubeModalArticle = $cubeInsights.find('.js-insights-modal-content'),\n $cubeModalClose = $cubeInsights.find('.js-cube-modal-close'),\n randomNumCache = 1,\n insightsRandomNumCache = 1,\n serviceData,\n ajaxRequestActive = false,\n carouselRefreshActive = false,\n insightsData;\n\n function refreshCarousel() {\n carouselRefreshActive = true;\n\n var $cubeService = $('.cube__service');\n var $current = $cubeService.filter(\":visible\");\n var $next = $current.next().length > 0 ? $current.next() : $cubeService.first();\n\n $next.addClass('cube__service-clone js-cube-service-clone').show();\n $cube.addClass('fadeout-service');\n\n var endAndStartTimer = function () {\n var timer; // variable persisted here\n return function () {\n window.clearTimeout(timer);\n timer = window.setTimeout(function updateContent() {\n $current.hide();\n $next.removeClass('cube__service-clone js-cube-service-clone');\n\n $cube.removeClass('fadeout-service');\n carouselRefreshActive = false;\n }, 1000);\n };\n }();\n\n endAndStartTimer();\n }\n\n $refreshService.on('click', function (ev) {\n ev.preventDefault();\n\n if (!carouselRefreshActive) {\n\n refreshCarousel();\n }\n });\n\n function requestInsightsAjax(contentUrl) {\n ajaxRequestActive = true;\n $cube.addClass('fade-out-slides');\n\n $.ajax({\n url: contentUrl\n }).done(function (insightsData) {\n\n setTimeout(function updateContent() {\n\n $cubeInsightsContent.empty();\n\n //compile template Data\n $cubeInsightsContent.append(insightsData);\n\n $cube.addClass('fade-in-slides');\n\n removeAjaxClasses();\n }, 1200);\n });\n }\n\n function removeAjaxClasses() {\n\n setTimeout(function updateContent() {\n $cube.removeClass('fadeout-service fade-in-slides fade-out-slides fade-in-modal fade-out-modal fade-in-modal--right fade-in-modal--bottom');\n\n ajaxRequestActive = false;\n }, 1000);\n }\n\n $refreshInsights.on('click', function (ev) {\n ev.preventDefault();\n\n var $this = $(this);\n var contentUrl = $this.attr('data-content-url');\n\n if (!ajaxRequestActive && contentUrl) {\n\n requestInsightsAjax(contentUrl);\n }\n });\n\n //Load Images\n function replaceBGImg($node) {\n $node.css('background-image', 'url(\"' + $node.attr('data-img-src') + '\")');\n }\n\n $(window).load(function () {\n //load images after page has finishing loading\n for (var i = 1; i < cubeNodesLength; i++) {\n replaceBGImg($cubeNodes.eq(i));\n }\n });\n\n //Load Articles\n function requestArticleModalAjax(articleUrl, articleIndex) {\n ajaxRequestActive = true;\n\n $.ajax({\n url: articleUrl\n }).done(function (insightsArticleData) {\n\n $cubeModalArticle.empty();\n\n $cube.addClass('fade-in-modal');\n\n switch (articleIndex) {\n case '1':\n $cube.addClass('fade-in-modal--right');\n break;\n case '2':\n $cube.addClass('fade-in-modal--bottom');\n break;\n default:\n break;\n }\n\n //compile template Data\n $cubeModalArticle.append(insightsArticleData);\n\n ajaxRequestActive = false;\n });\n }\n\n if (!window.helperUtils.mobileCheck()) {\n\n $cubeInsightsContent.on('click.cubeArticle', '.cube__insights-block:not(\".cube__insights-block--testimonial\")', function (ev) {\n ev.preventDefault();\n\n var _self = $(this),\n articleUrl = _self.data('content-url'),\n articleIndex = _self.data('index') + '';\n\n requestArticleModalAjax(articleUrl, articleIndex);\n });\n\n $cubeModalClose.on('click.closeModal', function (ev) {\n ev.preventDefault();\n\n $cube.addClass('fade-out-modal');\n\n removeAjaxClasses();\n });\n }\n\n function cubeProportionHandler() {\n var winDimen = window.helperUtils.getDocDimen(),\n desktopRatio = 1.15,\n narrowRatio = 1.2,\n narrowThreshhold = 840,\n mobileWidth = 750,\n ratio = winDimen.width / winDimen.height;\n\n //console.log(winDimen.width, winDimen.height );\n\n if (winDimen.height < narrowThreshhold && winDimen.width > mobileWidth) {\n\n if (ratio < narrowRatio) {\n $cube.addClass('insights-stacked');\n } else {\n $cube.removeClass('insights-stacked');\n }\n\n return false;\n }\n\n if (ratio < desktopRatio) {\n $cube.addClass('insights-stacked');\n } else {\n $cube.removeClass('insights-stacked');\n }\n }\n\n cubeProportionHandler();\n\n var resizeTimer;\n\n $(window).on('resize', function () {\n clearTimeout(resizeTimer);\n\n resizeTimer = setTimeout(cubeProportionHandler, 500);\n });\n})(undefined);\n\n},{}],4:[function(require,module,exports){\n'use strict';\n\ndocument.addEventListener('DOMContentLoaded', function () {\n 'use strict';\n\n document.addEventListener('change', updateLabel);\n\n function updateLabel(evt) {\n var closestLabel,\n selectedOption,\n target = evt.target;\n\n if (target.classList.contains('dropdown')) {\n closestLabel = target.parentNode.querySelector('label .dropdown-label-text');\n selectedOption = target.options[target.options.selectedIndex];\n\n // Calling blur() decreases accessibility, so call it only where needed: IE.\n // Without blur(), the option's text content obscures its styled overlay.\n if ('ActiveXObject' in window) {\n target.blur();\n }\n\n closestLabel.textContent = selectedOption.textContent ? closestLabel.textContent = selectedOption.textContent : closestLabel.getAttribute('data-label');\n }\n }\n});\n\n},{}],5:[function(require,module,exports){\n'use strict';\n\n/************************/\n/* Global Configuration */\n/************************/\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar GlobalConfig = {\n\t\troot: null,\n\t\tmodalSelector: '',\n\t\ttriggerSelectors: [],\n\t\tdismissSelectors: [],\n\t\trootActiveClass: '',\n\t\tmodalActiveClass: 'is-visible',\n\t\tdismissOnFocusLost: true\n};\n\n/********************/\n/* Global Constants */\n/********************/\nvar ID_POOL_PREFIX = 'modal-';\nvar DATA_PREFIX = 'data-modal-';\n\n/*********************/\n/* Private Variables */\n/*********************/\n// jQuery formatted selector to search for focusable items\nvar _focusableElementsString = \"a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]\";\n// store the item that has focus before opening the modal window\nvar _focusedElementBeforeModal;\n\nvar _modals = {};\n\n// var _eventNamespace = 'm-';\nvar _idPool = 0;\n\n/*************/\n/* Polyfills */\n/*************/\nif (!Array.prototype.indexOf) {\n\t\tArray.prototype.indexOf = function (obj, fromIndex) {\n\t\t\t\tif (fromIndex == null) {\n\t\t\t\t\t\tfromIndex = 0;\n\t\t\t\t} else if (fromIndex < 0) {\n\t\t\t\t\t\tfromIndex = Math.max(0, this.length + fromIndex);\n\t\t\t\t}\n\t\t\t\tfor (var i = fromIndex, j = this.length; i < j; i++) {\n\t\t\t\t\t\tif (this[i] === obj) return i;\n\t\t\t\t}\n\t\t\t\treturn -1;\n\t\t};\n}\n\n// Production steps of ECMA-262, Edition 5, 15.4.4.19\n// Reference: http://es5.github.io/#x15.4.4.19\nif (!Array.prototype.map) {\n\n\t\tArray.prototype.map = function (callback, thisArg) {\n\n\t\t\t\tvar T, A, k;\n\n\t\t\t\tif (this == null) {\n\t\t\t\t\t\tthrow new TypeError(' this is null or not defined');\n\t\t\t\t}\n\n\t\t\t\tvar O = Object(this);\n\t\t\t\tvar len = O.length >>> 0;\n\n\t\t\t\tif (typeof callback !== 'function') {\n\t\t\t\t\t\tthrow new TypeError(callback + ' is not a function');\n\t\t\t\t}\n\n\t\t\t\tif (arguments.length > 1) {\n\t\t\t\t\t\tT = thisArg;\n\t\t\t\t}\n\n\t\t\t\tA = new Array(len);\n\n\t\t\t\tk = 0;\n\n\t\t\t\twhile (k < len) {\n\n\t\t\t\t\t\tvar kValue, mappedValue;\n\n\t\t\t\t\t\tif (k in O) {\n\t\t\t\t\t\t\t\tkValue = O[k];\n\t\t\t\t\t\t\t\tmappedValue = callback.call(T, kValue, k, O);\n\n\t\t\t\t\t\t\t\tA[k] = mappedValue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tk++;\n\t\t\t\t}\n\n\t\t\t\treturn A;\n\t\t};\n}\n\n/*********************/\n/* Private Functions */\n/*********************/\nfunction extend(out) {\n\t\tout = out || {};\n\t\tfor (var i = 1; i < arguments.length; i++) {\n\t\t\t\tif (!arguments[i]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (var key in arguments[i]) {\n\t\t\t\t\t\tif (arguments[i].hasOwnProperty(key) && arguments[i][key] !== undefined) {\n\t\t\t\t\t\t\t\tout[key] = arguments[i][key];\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\t\treturn out;\n}\n\nfunction cleanSelector(selector) {\n\t\treturn selector.replace(/\\W/g, '');\n}\n\nfunction matchSelector(elem, selector) {\n\t\tif ($) {\n\t\t\t\treturn $(elem).is(selector);\n\t\t} else if (typeof selector === 'string') {\n\t\t\t\treturn elementMatchesSelector.call(elem, selector);\n\t\t} else if ((typeof selector === 'undefined' ? 'undefined' : _typeof(selector)) === 'object' && selector.length) {\n\t\t\t\treturn selector.indexOf(elem) >= 0;\n\t\t} else if ((typeof selector === 'undefined' ? 'undefined' : _typeof(selector)) === 'object' && selector.nodeType === 1) {\n\t\t\t\treturn elem === selector;\n\t\t}\n\t\treturn false;\n}\n\nfunction generateId() {\n\t\tvar id;\n\t\twhile (true) {\n\t\t\t\tid = ID_POOL_PREFIX + String(++_idPool);\n\t\t\t\tif (!_modals[id]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\t\treturn id;\n}\n\nfunction getModalId(elem) {\n\t\tvar hasClass = false;\n\t\tvar elemClasses = elem && elem.className && elem.className.split(' ') || [];\n\n\t\tfor (var id in _modals) {\n\t\t\t\tvar triggerSelectors = _modals[id].triggerSelectors.map(function (selector) {\n\t\t\t\t\t\treturn selector.substring(1);\n\t\t\t\t});\n\n\t\t\t\tvar dismissSelectors = _modals[id].dismissSelectors.map(function (selector) {\n\t\t\t\t\t\treturn selector.substring(1);\n\t\t\t\t});\n\n\t\t\t\tif (!_modals[id].disable) {\n\t\t\t\t\t\tfor (var i = 0, len = elemClasses.length; i < len; i++) {\n\t\t\t\t\t\t\t\thasClass = triggerSelectors.indexOf(elemClasses[i]) === 0 || dismissSelectors.indexOf(elemClasses[i]) === 0;\n\t\t\t\t\t\t\t\tif (hasClass) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn id;\n\t\t\t\t}\n\t\t}\n}\n\nfunction hideModal(modalId) {\n\t\tvar modal = _modals[modalId];\n\t\tvar modalRoot;\n\n\t\tif (!modal) {\n\t\t\t\treturn;\n\t\t}\n\n\t\tmodalRoot = modal.root;\n\n\t\tmodalRoot.setAttribute('data-modal', 'false');\n\t\tmodalRoot.setAttribute('aria-hidden', 'false');\n\t\tmodal.modalSelector[0].setAttribute('data-visible', 'false');\n\t\tmodal.modalSelector[0].setAttribute('aria-hidden', 'true');\n}\n\nfunction setEmailLink(modal, email) {\n\t\tvar button = $(modal.modalSelector[0]).find(\".js-modalButton-agree\");\n\t\tvar fullEmail = \"javascript:window.location.href='\" + email + \"';\";\n\n\t\tdocument.getElementById(\"js-modal-agree-id\").setAttribute(\"onClick\", fullEmail);\n}\n\nfunction onModalActivatorPress(evt) {\n\n\t\tvar target = this;\n\t\tvar modalId = getModalId(target);\n\t\tvar modal = _modals[modalId];\n\t\tvar modalRoot;\n\t\tvar modalData;\n\n\t\tif (!modal) {\n\t\t\t\treturn;\n\t\t}\n\n\t\tmodalRoot = modal.root;\n\t\tmodalData = modalRoot && modalRoot.getAttribute('data-modal');\n\n\t\tif (modalData && modalData === 'true') {\n\t\t\t\treturn;\n\t\t}\n\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\n\t\tvar email = $(this).attr(\"href\");\n\t\tsetEmailLink(modal, email);\n\n\t\tmodalRoot.setAttribute('data-modal', 'true');\n\t\tmodalRoot.setAttribute('aria-hidden', 'true');\n\t\tmodal.modalSelector[0].setAttribute('data-email', target.getAttribute('href'));\n\t\tmodal.modalSelector[0].setAttribute('data-visible', 'true');\n\t\tmodal.modalSelector[0].setAttribute('aria-hidden', 'false');\n}\n\nfunction onModalDismissorPress(evt) {\n\t\tvar target = this;\n\t\tvar modalId = getModalId(target);\n\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\n\t\thideModal(modalId);\n}\n\n/****************/\n/* Modal Object */\n/****************/\nvar Modal = {\n\t\tinit: function init(config) {\n\t\t\t\tvar options = extend({}, GlobalConfig, config);\n\t\t\t\tvar triggerSelectors = options.triggerSelectors || [];\n\t\t\t\tvar dismissSelectors = options.dismissSelectors || [];\n\n\t\t\t\ttriggerSelectors = triggerSelectors.join(', ');\n\t\t\t\tdismissSelectors = dismissSelectors.join(', ');\n\n\t\t\t\t$(document).on('click', triggerSelectors, onModalActivatorPress);\n\t\t\t\t$(document).on('click', dismissSelectors, onModalDismissorPress);\n\t\t},\n\n\t\tset: function set() {\n\t\t\t\tvar modalId, config;\n\n\t\t\t\tif (_typeof(arguments[0]) === 'object') {\n\t\t\t\t\t\tconfig = arguments[0];\n\t\t\t\t} else if (typeof arguments[0] === 'string' && _typeof(arguments[1]) === 'object') {\n\t\t\t\t\t\tmodalId = arguments[0];\n\t\t\t\t\t\tconfig = arguments[1];\n\t\t\t\t\t\tif (!_modals[modalId]) {\n\t\t\t\t\t\t\t\tthrow new Error('Section \"' + modalId + '\" doesn\\'t exist!');\n\t\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in config) {\n\t\t\t\t\t\tif (GlobalConfig[key] !== undefined) {\n\t\t\t\t\t\t\t\tif (modalId) {\n\t\t\t\t\t\t\t\t\t\t_modals[modalId][key] = config[key];\n\t\t\t\t\t\t\t\t} else if (config[key] !== undefined) {\n\t\t\t\t\t\t\t\t\t\tGlobalConfig[key] = config[key];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (modalId) {\n\t\t\t\t\t\t// remove \"undefined\" items\n\t\t\t\t\t\t_modals[modalId] = extend({}, _modals[modalId]);\n\t\t\t\t}\n\t\t},\n\n\t\tadd: function add() {\n\t\t\t\tvar modalId;\n\t\t\t\tvar config = {};\n\n\t\t\t\tif (_typeof(arguments[0]) === 'object') {\n\t\t\t\t\t\tconfig = arguments[0];\n\t\t\t\t} else if (typeof arguments[0] === 'string' && _typeof(arguments[1]) === 'object') {\n\t\t\t\t\t\tmodalId = arguments[0];\n\t\t\t\t\t\tconfig = arguments[1];\n\t\t\t\t}\n\n\t\t\t\tif (!modalId) {\n\t\t\t\t\t\tmodalId = typeof config.id === 'string' ? config.id : generateId();\n\t\t\t\t}\n\n\t\t\t\tif (_modals[modalId]) {\n\t\t\t\t\t\tthrow new Error('Modal \"' + modalId + '\" already exists!');\n\t\t\t\t}\n\n\t\t\t\t_modals[modalId] = {};\n\n\t\t\t\tModal.set(modalId, config);\n\t\t},\n\n\t\tdestroy: function destroy() {\n\t\t\t\twindow.removeEventListener('keyup', onKeyUp);\n\t\t\t\tModal.clear();\n\t\t\t\t_idPool = 0;\n\t\t\t\t_ready = false;\n\t\t},\n\n\t\tclear: function clear() {\n\t\t\t\t_modals = {};\n\t\t\t\t_modalCount = 0;\n\t\t\t\t_defaultModalId = '';\n\t\t\t\t_lastModalId = '';\n\t\t}\n\n};\n\nwindow.Modal = Modal;\n\n/*********************/\n/* jQuery Interface */\n/*********************/\nif ($) {\n\t\t$.Modal = function () {\n\t\t\t\tModal.init();\n\n\t\t\t\tif (arguments.length > 0) {\n\t\t\t\t\t\tif ($.isPlainObject(arguments[0])) {\n\t\t\t\t\t\t\t\treturn Modal.add(arguments[0]);\n\t\t\t\t\t\t} else if ($.type(arguments[0]) === 'string' && $.isFunction(Modal[arguments[0]])) {\n\t\t\t\t\t\t\t\treturn Modal[arguments[0]].apply(Modal, [].slice.call(arguments, 1));\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn $.extend({}, Modal);\n\t\t};\n\n\t\t$.fn.Modal = function () {\n\t\t\t\tvar config;\n\n\t\t\t\tif ($.isPlainObject(arguments[0])) {\n\t\t\t\t\t\tconfig = arguments[0];\n\t\t\t\t} else {\n\t\t\t\t\t\tconfig = {\n\t\t\t\t\t\t\t\tmodalSelector: arguments[0]\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconfig.modalSelector = this;\n\t\t\t\tconfig.root = config.root || document.body;\n\n\t\t\t\tif (config.id) {\n\t\t\t\t\t\tModal.remove(config.id);\n\t\t\t\t}\n\n\t\t\t\tModal.add(config);\n\t\t\t\tModal.init(config);\n\n\t\t\t\treturn this;\n\t\t};\n}\n\n},{}],6:[function(require,module,exports){\n'use strict';\n\n(function () {\n\n var $faq = $('.js-faq'),\n $questionNodes,\n $answerNodes,\n activeClass;\n\n if ($faq.length === 0) {\n return;\n }\n\n activeClass = 'is-active-question';\n $answerNodes = $faq.find('.js-answer');\n $questionNodes = $faq.find('.js-question');\n\n //simple accordion\n function toggleQuestion($question) {\n\n if ($question.hasClass(activeClass)) {\n $question.removeClass(activeClass);\n $question.next().slideUp();\n } else {\n collapseAnswers();\n\n $question.addClass(activeClass);\n $question.next().slideDown();\n }\n }\n\n function collapseAnswers() {\n $questionNodes.removeClass(activeClass);\n $answerNodes.slideUp();\n }\n\n $faq.on('click.faq', '.js-question', function () {\n var _self = $(this);\n\n toggleQuestion(_self);\n });\n\n $faq.on('click.faq', '.js-close', function () {\n collapseAnswers();\n });\n})();\n\n},{}],7:[function(require,module,exports){\n'use strict';\n\n(function () {\n $(document).ready(function () {\n var $jumpLink = $('.js-jump-link');\n var $bodyHtml;\n\n if ($jumpLink.length) {\n\n $bodyHtml = $('body, html');\n\n $jumpLink.click(function (event) {\n event.preventDefault();\n\n var eleID = $(this).attr('id');\n var offsetContent = $('#' + eleID + '-jump').offset().top;\n var headerHeight = $('.site-header').height();\n\n $bodyHtml.animate({ scrollTop: offsetContent - headerHeight }, 900);\n });\n }\n });\n})();\n\n},{}],8:[function(require,module,exports){\n'use strict';\n\n/**\r\n *\r\n * Common behavior that applies accross the site, ex. global navigation, site search \r\n *\r\n */\n\n(function (global, undefined) {\n\n var $searchToggleTrigger = $('.js-site-search-trigger'),\n siteSearchActive = false,\n $siteSearchInput = $('.js-site-searchbox').find('.searchbox__input'),\n $siteOverlay = $('.js-site-overlay'),\n $siteOverlayClose = $siteOverlay.find('.site-overlay__close'),\n $siteWrapper = $('.site-searchbox__wrapper'),\n $mobileTrigger = $('.js-mobile-trigger'),\n $siteNav = $('.js-site-nav'),\n $subNavLinks = $siteNav.find('.js-subnav'),\n mobileMenuActive = false,\n $body = $('body');\n\n //Binding Click\n $('.site-searchbox__wrapper .searchbox__button').click(function () {\n if ($siteSearchInput != \"\") {\n location.href = \"/site-search?q=\" + encodeURIComponent($siteSearchInput.val());\n }\n });\n\n //Binding Enter\n $('.site-searchbox__wrapper .searchbox').keypress(function (e) {\n if (e.which == 13) {\n if ($siteSearchInput != \"\") {\n location.href = \"/site-search?q=\" + encodeURIComponent($siteSearchInput.val());\n }\n }\n });\n\n function siteSearchLogic() {\n\n if (siteSearchActive) {\n $body.addClass('is-overlay-active-fadeout').removeClass('is-overlay-active is-site-search-active');\n $siteSearchInput.blur();\n siteSearchActive = false;\n\n setTimeout(function () {\n $body.removeClass('is-overlay-active-fadeout');\n }, 1000);\n } else {\n $body.addClass('is-overlay-active is-site-search-active');\n\n siteSearchActive = true;\n\n setTimeout(function () {\n $siteSearchInput.focus();\n }, 1200);\n }\n }\n\n function mobileTrigger() {\n if (mobileMenuActive) {\n $body.removeClass('is-active-mobile-menu ');\n mobileMenuActive = false;\n } else {\n $body.addClass('is-active-mobile-menu ');\n mobileMenuActive = true;\n }\n }\n\n $searchToggleTrigger.on('click.siteSearch', function (ev) {\n ev.preventDefault();\n\n siteSearchLogic();\n });\n\n $siteOverlayClose.on('click.siteSearch', function (ev) {\n ev.preventDefault();\n\n siteSearchLogic();\n });\n\n $siteWrapper.on('click.siteSearch', function (ev) {\n ev.preventDefault();\n\n if (ev.target.classList.contains(\"searchbox__input\") || ev.target.classList.contains(\"searchbox__btn\") || ev.target.classList.contains(\"bi-interface-search\")) {\n return;\n }\n\n siteSearchLogic();\n });\n\n $mobileTrigger.on('click.mobileTrigger', function (ev) {\n ev.preventDefault();\n\n mobileTrigger();\n });\n\n function showSubNav($linkToShow) {\n\n if ($linkToShow.hasClass('is-visible-subnav')) {\n\n $linkToShow.removeClass('is-visible-subnav');\n $siteNav.removeClass('subnav-active');\n } else {\n $subNavLinks.removeClass('is-visible-subnav');\n\n $siteNav.addClass('subnav-active');\n\n $linkToShow.addClass('is-visible-subnav');\n }\n }\n\n //site subnav functionaliy\n $siteNav.on('click.subNav', '.js-subnav', function (ev) {\n ev.preventDefault();\n\n showSubNav($(this));\n });\n})(undefined);\n\n},{}],9:[function(require,module,exports){\n'use strict';\n\n(function () {\n\n var $readMore = $('.js-read-more-btn');\n\n if ($readMore.length) {\n $readMore.click(function () {\n var $this = $(this);\n var prev = $this.prev();\n\n prev.slideToggle();\n $readMore.hide();\n });\n }\n})();\n\n},{}],10:[function(require,module,exports){\n'use strict';\n\n(function () {\n $(document).ready(function () {\n var $searchFilters = $('.filter').find('.js-subnav');\n\n if ($searchFilters.length) {\n //filter subnav functionaliy\n $searchFilters.click(function (ev) {\n ev.preventDefault();\n\n var currActiveSubNav = $('.is-visible-subnav');\n\n if (currActiveSubNav[0] !== $(this)[0]) {\n currActiveSubNav.removeClass('is-visible-subnav');\n $(this).addClass('is-visible-subnav');\n } else {\n $(this).removeClass('is-visible-subnav');\n }\n });\n }\n });\n})();\n\n},{}],11:[function(require,module,exports){\n'use strict';\n\n(function () {\n $(document).ready(function () {\n var $jumpLinkSelector = $('.js-relatedfocus-jumplink');\n\n if ($jumpLinkSelector.length) {\n var $tabsAreas, $tabsAreasLinks, $tabsAreasPanels, $tabFocusAreas, tabFocusAreasIndex, $bodyHtml;\n\n $tabsAreas = $('.js-tabs-area');\n $tabsAreasLinks = $tabsAreas.find('.js-tabs-nav-link');\n $tabsAreasPanels = $tabsAreas.find('.js-tabs-panel');\n $tabFocusAreas = $tabsAreasPanels.filter('[data-name=\"tab-focus-areas\"]');\n tabFocusAreasIndex = $tabsAreasPanels.index($tabFocusAreas);\n\n $bodyHtml = $('body,html');\n\n $jumpLinkSelector.click(function (ev) {\n ev.preventDefault();\n\n var offsetContent = $('#focus-areas').offset().top;\n var headerHeight = $('.site-header').height();\n\n $bodyHtml.animate({\n scrollTop: offsetContent - headerHeight\n }, 900);\n });\n }\n });\n})();\n\n},{}],12:[function(require,module,exports){\n// (function(global,undefined) {\n\n// var siteHeader = document.getElementById('site-header'),\n// isHomepage = document.getElementById('home'),\n// $siteHeader,\n// $pageHeader,\n// headroom,\n// headroomOffset,\n// pageOffset,\n// setupHeaderOffset,\n// rAFTicker;\n\n// if (!!isHomepage) {\n// return false;\n// }\n\n\n// $siteHeader = $(siteHeader);\n\n// $pageHeader = $('.js-page-header');\n\n// function setupWindowOffsets() {\n// headroomOffset = $pageHeader.outerHeight();\n\n// setupHeaderOffset = headroomOffset/2;\n// }\n\n// //setup initial values\n// setupWindowOffsets();\n\n// if (!headroomOffset) headroomOffset = 0;\n\n// headroom = new Headroom(siteHeader, {'offset': headroomOffset});\n\n// headroom.init();\n\n\n// /*=============================================\n// = REquestion animation Frame =\n// =============================================*/\n// function attachScrollEvent() {\n// // only listen for scroll events\n// window.addEventListener('scroll', requestTicker, false);\n// }\n\n// function removeScrollEvent() {\n// //remove ScrollEvent\n// window.removeEventListener('scroll', requestTicker, false);\n// }\n\n// function requestTicker() {\n// if (!rAFTicker) {\n// requestAnimationFrame(windowScrollLogic);\n// rAFTicker = true;\n// }\n// }\n\n// function windowScrollLogic(){\n// pageOffset = window.pageYOffset;\n\n// if( pageOffset > setupHeaderOffset ) {\n// $siteHeader.addClass('is-sticky') \n// }\n\n// else {\n// $siteHeader.removeClass('is-sticky') \n// }\n\n// rAFTicker = false;\n// }\n\n// attachScrollEvent();\n\n\n// if (!window.helperUtils.mobileCheck()) {\n\n// //setup initial values and initialize page animations\n// attachScrollEvent();\n// }\n\n// })(this);\n\"use strict\";\n\n},{}],13:[function(require,module,exports){\n'use strict';\n\n$(document).ready(function () {\n\n var $slideDown, $subheaderNav;\n\n $slideDown = $('.active-page-mobile-title');\n $subheaderNav = $('.subheader-nav');\n\n if ($slideDown.length) {\n $slideDown.click(function () {\n var $this = $(this);\n\n $this.toggleClass('show-slide-down');\n $subheaderNav.toggleClass('expanded');\n $this.next().slideToggle();\n });\n }\n});\n\n},{}],14:[function(require,module,exports){\n'use strict';\n\n(function (global, undefined) {\n\n\tvar $tabsArea = $('.js-tabs-area'),\n\t $tabsNav,\n\t $tabsNavLinks,\n\t $tabsNavLabel,\n\t $tabsDesignLine,\n\t $tabsPanelsBody,\n\t $tabsPanels,\n\t $selectedTab,\n\t slideDirection,\n\t panelLength,\n\t isAnimating,\n\t currentIndex,\n\t selectedTabIndex,\n\t mobileState,\n\t activeNavClass,\n\t activePanelClass,\n\t animationTimingDuration;\n\n\tif ($tabsArea.length === 0) {\n\t\treturn;\n\t}\n\n\t$tabsNav = $tabsArea.find('.js-tabs-nav');\n\t$tabsNavLinks = $tabsNav.find('.js-tabs-nav-link');\n\t$tabsNavLabel = $tabsNav.find('.js-tabs-label');\n\t$tabsDesignLine = $tabsArea.find('.js-design-line');\n\t$tabsPanelsBody = $tabsArea.find('.js-tabs-panel-body');\n\t$tabsPanels = $tabsPanelsBody.find('.js-tabs-panel');\n\tpanelLength = $tabsPanels.length;\n\n\t//Default Values\n\tcurrentIndex = 0;\n\tisAnimating = false;\n\tactiveNavClass = 'is-active-tab';\n\tactivePanelClass = 'is-active-panel';\n\tanimationTimingDuration = 300;\n\n\t//Toggle display of Tabs in mobile\n\t$tabsNavLabel.on(\"click\", function (ev) {\n\t\tev.stopImmediatePropagation();\n\t\t$tabsNav.toggleClass('is-expanded');\n\t});\n\n\t//Attached event handler for nav links\n\t$tabsNav.on('click.tabsPanel', '.js-tabs-nav-link', function (ev) {\n\t\tev.preventDefault();\n\n\t\t$selectedTab = $(this);\n\t\tselectedTabIndex = $tabsNavLinks.index($selectedTab);\n\n\t\t//We clicked the same link so do nothing\n\t\tif (currentIndex === selectedTabIndex || isAnimating) return;\n\n\t\tupdateTabSelection($selectedTab);\n\n\t\tcurrentIndex < selectedTabIndex ? slideDirection = \"left\" : slideDirection = \"right\";\n\n\t\tupdatePanelSelection($tabsPanels.eq(selectedTabIndex), slideDirection);\n\n\t\t//need to account for mobile\n\t\t//$tabsNavList.removeClass('is-expanded');\n\t});\n\n\tfunction updateTabSelection($tabSelected) {\n\t\t$tabsNavLinks.eq(currentIndex).removeClass(activeNavClass);\n\t\t$tabSelected.addClass(activeNavClass);\n\n\t\t//update mobile label \n\t\t$tabsNavLabel.text($tabSelected.text());\n\n\t\tif (window.helperUtils.isMobile) {\n\t\t\t$tabsNav.removeClass('is-expanded');\n\t\t} else {\n\t\t\tslideDesignLine($tabSelected);\n\t\t}\n\t}\n\n\tfunction updatePanelSelection($panelSelected, slideDirection) {\n\t\tisAnimating = true;\n\t\tvar $currentPanel = $tabsPanels.eq(currentIndex);\n\n\t\t$panelSelected.addClass('is-selected');\n\n\t\tslideDirection === \"left\" ? $tabsPanelsBody.addClass('is-animating-left') : $tabsPanelsBody.addClass('is-animating-right');\n\n\t\t$tabsPanelsBody.css('height', $currentPanel.outerHeight()).addClass('is-animating-out');\n\n\t\t$panelSelected.addClass('is-animating-in');\n\n\t\t//Timeout Delay should be in sync with entire duration of animation\n\t\tsetTimeout(function animateHeight() {\n\n\t\t\t$tabsPanelsBody.animate({\n\t\t\t\theight: $panelSelected.outerHeight()\n\t\t\t}, animationTimingDuration, function resetClasses() {\n\n\t\t\t\t$tabsPanelsBody.css('height', '').removeClass('is-animating-out is-animating-left is-animating-right');\n\n\t\t\t\t$currentPanel.removeClass(activePanelClass);\n\n\t\t\t\t$panelSelected.removeClass('is-animating-in is-selected').addClass(activePanelClass);\n\n\t\t\t\tisAnimating = false;\n\t\t\t});\n\t\t\tcurrentIndex = selectedTabIndex;\n\t\t}, animationTimingDuration);\n\t}\n\n\tfunction slideDesignLine($tabSelected) {\n\t\tvar tabWidth = $tabSelected.width(),\n\t\t tabOffset = $tabSelected.position().left;\n\n\t\t$tabsDesignLine.css({\n\t\t\t\"left\": tabOffset,\n\t\t\twidth: tabWidth + 'px'\n\t\t});\n\t}\n\n\t//Initialize default settings\n\t$(window).load(function () {\n\t\t$selectedTab = $tabsNavLinks.eq(0);\n\t\tslideDesignLine($selectedTab);\n\t});\n\n\twindow.addEventListener(\"resize\", resizeThrottler, false);\n\n\tvar resizeTimeout;\n\tfunction resizeThrottler() {\n\t\t// ignore resize events as long as an actualResizeHandler execution is in the queue\n\t\tif (!resizeTimeout) {\n\t\t\tresizeTimeout = setTimeout(function () {\n\t\t\t\tresizeTimeout = null;\n\t\t\t\tslideDesignLine($selectedTab);\n\n\t\t\t\t// The actualResizeHandler will execute at a rate of 15fps\n\t\t\t}, 66);\n\t\t}\n\t}\n})(undefined);\n\n},{}],15:[function(require,module,exports){\n'use strict';\n\n//helper functions\n\nwindow.helperUtils = {\n getDocDimen: function getDocDimen() {\n var winDimen = {\n height: window.innerHeight,\n width: window.innerWidth\n };\n\n return winDimen;\n },\n mobileCheck: function mobileCheck() {\n return window.innerWidth < 768 ? true : false;\n },\n isMobile: false\n};\n\n// precompiles handlebars templates\n\nHandlebars.renderTemplate = function render(tmpl_name, tmpl_data) {\n\n console.log(\"templates function working\");\n\n if (!Handlebars.renderTemplate.tmpl_cache) {\n Handlebars.renderTemplate.tmpl_cache = {};\n }\n\n if (!Handlebars.renderTemplate.tmpl_cache[tmpl_name]) {\n console.log(\"template undefined\");\n\n $.ajax({\n url: 'public/jsTemplates/' + tmpl_name + '.handlebars',\n method: 'GET',\n async: false\n }).done(function (data) {\n console.log(\"success compiling template\");\n Handlebars.renderTemplate.tmpl_cache[tmpl_name] = Handlebars.compile(data);\n });\n }\n\n return Handlebars.renderTemplate.tmpl_cache[tmpl_name](tmpl_data);\n};\n\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\n// requestAnimationFrame polyfill by Erik Möller\n// fixes from Paul Irish and Tino Zijdel\n\n(function () {\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n }\n\n if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = window.setTimeout(function () {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n\n if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n})();\n\n(function () {\n\n var resizeTimeout;\n\n window.helperUtils.isMobile = window.helperUtils.mobileCheck();\n\n window.addEventListener(\"resize\", resizeWindowThrottler, false);\n\n function resizeWindowThrottler() {\n // ignore resize events as long as an actualResizeHandler execution is in the queue\n if (!resizeTimeout) {\n resizeTimeout = setTimeout(function () {\n resizeTimeout = null;\n window.helperUtils.isMobile = window.helperUtils.mobileCheck();\n\n // The actualResizeHandler will execute at a rate of 15fps\n }, 66);\n }\n }\n})();\n\n},{}],16:[function(require,module,exports){\n'use strict';\n\nwindow.Headroom = require('headroom.js');\n\nrequire('./polyfills');\nrequire('./features/utils');\nrequire('./features/global');\nrequire('./features/cube');\nrequire('./features/tabs-area');\nrequire('./features/accordion-list');\nrequire('./features/subheader-slide-down');\nrequire('./features/faq');\nrequire('./features/service-detail-jumplink');\nrequire('./features/general-jumplink');\nrequire('./features/search-helper');\nrequire('./features/dropdown');\nrequire('./features/site-header');\nrequire('./features/read-more');\nrequire('./features/boost-modal');\nrequire('./features/email-disclaimer-modal');\n\nvar modal = $('.js-disclaimerModal').Modal({\n triggerSelectors: ['.js-disclaimerModal-trigger'],\n dismissSelectors: ['.js-modalClose', '.js-modalButton-agree', '.js-modalButton-cancel']\n});\n\n},{\"./features/accordion-list\":1,\"./features/boost-modal\":2,\"./features/cube\":3,\"./features/dropdown\":4,\"./features/email-disclaimer-modal\":5,\"./features/faq\":6,\"./features/general-jumplink\":7,\"./features/global\":8,\"./features/read-more\":9,\"./features/search-helper\":10,\"./features/service-detail-jumplink\":11,\"./features/site-header\":12,\"./features/subheader-slide-down\":13,\"./features/tabs-area\":14,\"./features/utils\":15,\"./polyfills\":17,\"headroom.js\":18}],17:[function(require,module,exports){\n'use strict';\n\n/**\r\n* Parse QueryString polyfill\r\n*/\nif (!window.parseQueryString) {\n window.parseQueryString = function (str) {\n if (typeof str !== 'string') {\n return {};\n }\n str = str.trim().replace(/^\\?/, '');\n if (!str) {\n return {};\n }\n return str.trim().split('&').reduce(function (ret, param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n ret[parts[0]] = parts[1] === undefined ? null : decodeURIComponent(parts[1]);\n return ret;\n }, {});\n };\n}\n\n},{}],18:[function(require,module,exports){\n/*!\n * headroom.js v0.9.3 - Give your page some headroom. Hide your header until you need it\n * Copyright (c) 2016 Nick Williams - http://wicky.nillia.ms/headroom.js\n * License: MIT\n */\n\n(function(root, factory) {\n 'use strict';\n\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n }\n else if (typeof exports === 'object') {\n // COMMONJS\n module.exports = factory();\n }\n else {\n // BROWSER\n root.Headroom = factory();\n }\n}(this, function() {\n 'use strict';\n\n /* exported features */\n \n var features = {\n bind : !!(function(){}.bind),\n classList : 'classList' in document.documentElement,\n rAF : !!(window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame)\n };\n window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n \n /**\n * Handles debouncing of events via requestAnimationFrame\n * @see http://www.html5rocks.com/en/tutorials/speed/animations/\n * @param {Function} callback The callback to handle whichever event\n */\n function Debouncer (callback) {\n this.callback = callback;\n this.ticking = false;\n }\n Debouncer.prototype = {\n constructor : Debouncer,\n \n /**\n * dispatches the event to the supplied callback\n * @private\n */\n update : function() {\n this.callback && this.callback();\n this.ticking = false;\n },\n \n /**\n * ensures events don't get stacked\n * @private\n */\n requestTick : function() {\n if(!this.ticking) {\n requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this)));\n this.ticking = true;\n }\n },\n \n /**\n * Attach this as the event listeners\n */\n handleEvent : function() {\n this.requestTick();\n }\n };\n /**\n * Check if object is part of the DOM\n * @constructor\n * @param {Object} obj element to check\n */\n function isDOMElement(obj) {\n return obj && typeof window !== 'undefined' && (obj === window || obj.nodeType);\n }\n \n /**\n * Helper function for extending objects\n */\n function extend (object /*, objectN ... */) {\n if(arguments.length <= 0) {\n throw new Error('Missing arguments in extend function');\n }\n \n var result = object || {},\n key,\n i;\n \n for (i = 1; i < arguments.length; i++) {\n var replacement = arguments[i] || {};\n \n for (key in replacement) {\n // Recurse into object except if the object is a DOM element\n if(typeof result[key] === 'object' && ! isDOMElement(result[key])) {\n result[key] = extend(result[key], replacement[key]);\n }\n else {\n result[key] = result[key] || replacement[key];\n }\n }\n }\n \n return result;\n }\n \n /**\n * Helper function for normalizing tolerance option to object format\n */\n function normalizeTolerance (t) {\n return t === Object(t) ? t : { down : t, up : t };\n }\n \n /**\n * UI enhancement for fixed headers.\n * Hides header when scrolling down\n * Shows header when scrolling up\n * @constructor\n * @param {DOMElement} elem the header element\n * @param {Object} options options for the widget\n */\n function Headroom (elem, options) {\n options = extend(options, Headroom.options);\n \n this.lastKnownScrollY = 0;\n this.elem = elem;\n this.tolerance = normalizeTolerance(options.tolerance);\n this.classes = options.classes;\n this.offset = options.offset;\n this.scroller = options.scroller;\n this.initialised = false;\n this.onPin = options.onPin;\n this.onUnpin = options.onUnpin;\n this.onTop = options.onTop;\n this.onNotTop = options.onNotTop;\n this.onBottom = options.onBottom;\n this.onNotBottom = options.onNotBottom;\n }\n Headroom.prototype = {\n constructor : Headroom,\n \n /**\n * Initialises the widget\n */\n init : function() {\n if(!Headroom.cutsTheMustard) {\n return;\n }\n \n this.debouncer = new Debouncer(this.update.bind(this));\n this.elem.classList.add(this.classes.initial);\n \n // defer event registration to handle browser \n // potentially restoring previous scroll position\n setTimeout(this.attachEvent.bind(this), 100);\n \n return this;\n },\n \n /**\n * Unattaches events and removes any classes that were added\n */\n destroy : function() {\n var classes = this.classes;\n \n this.initialised = false;\n this.elem.classList.remove(classes.unpinned, classes.pinned, classes.top, classes.notTop, classes.initial);\n this.scroller.removeEventListener('scroll', this.debouncer, false);\n },\n \n /**\n * Attaches the scroll event\n * @private\n */\n attachEvent : function() {\n if(!this.initialised){\n this.lastKnownScrollY = this.getScrollY();\n this.initialised = true;\n this.scroller.addEventListener('scroll', this.debouncer, false);\n \n this.debouncer.handleEvent();\n }\n },\n \n /**\n * Unpins the header if it's currently pinned\n */\n unpin : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(classList.contains(classes.pinned) || !classList.contains(classes.unpinned)) {\n classList.add(classes.unpinned);\n classList.remove(classes.pinned);\n this.onUnpin && this.onUnpin.call(this);\n }\n },\n \n /**\n * Pins the header if it's currently unpinned\n */\n pin : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(classList.contains(classes.unpinned)) {\n classList.remove(classes.unpinned);\n classList.add(classes.pinned);\n this.onPin && this.onPin.call(this);\n }\n },\n \n /**\n * Handles the top states\n */\n top : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(!classList.contains(classes.top)) {\n classList.add(classes.top);\n classList.remove(classes.notTop);\n this.onTop && this.onTop.call(this);\n }\n },\n \n /**\n * Handles the not top state\n */\n notTop : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(!classList.contains(classes.notTop)) {\n classList.add(classes.notTop);\n classList.remove(classes.top);\n this.onNotTop && this.onNotTop.call(this);\n }\n },\n \n bottom : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(!classList.contains(classes.bottom)) {\n classList.add(classes.bottom);\n classList.remove(classes.notBottom);\n this.onBottom && this.onBottom.call(this);\n }\n },\n \n /**\n * Handles the not top state\n */\n notBottom : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(!classList.contains(classes.notBottom)) {\n classList.add(classes.notBottom);\n classList.remove(classes.bottom);\n this.onNotBottom && this.onNotBottom.call(this);\n }\n },\n \n /**\n * Gets the Y scroll position\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY\n * @return {Number} pixels the page has scrolled along the Y-axis\n */\n getScrollY : function() {\n return (this.scroller.pageYOffset !== undefined)\n ? this.scroller.pageYOffset\n : (this.scroller.scrollTop !== undefined)\n ? this.scroller.scrollTop\n : (document.documentElement || document.body.parentNode || document.body).scrollTop;\n },\n \n /**\n * Gets the height of the viewport\n * @see http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript\n * @return {int} the height of the viewport in pixels\n */\n getViewportHeight : function () {\n return window.innerHeight\n || document.documentElement.clientHeight\n || document.body.clientHeight;\n },\n \n /**\n * Gets the physical height of the DOM element\n * @param {Object} elm the element to calculate the physical height of which\n * @return {int} the physical height of the element in pixels\n */\n getElementPhysicalHeight : function (elm) {\n return Math.max(\n elm.offsetHeight,\n elm.clientHeight\n );\n },\n \n /**\n * Gets the physical height of the scroller element\n * @return {int} the physical height of the scroller element in pixels\n */\n getScrollerPhysicalHeight : function () {\n return (this.scroller === window || this.scroller === document.body)\n ? this.getViewportHeight()\n : this.getElementPhysicalHeight(this.scroller);\n },\n \n /**\n * Gets the height of the document\n * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/\n * @return {int} the height of the document in pixels\n */\n getDocumentHeight : function () {\n var body = document.body,\n documentElement = document.documentElement;\n \n return Math.max(\n body.scrollHeight, documentElement.scrollHeight,\n body.offsetHeight, documentElement.offsetHeight,\n body.clientHeight, documentElement.clientHeight\n );\n },\n \n /**\n * Gets the height of the DOM element\n * @param {Object} elm the element to calculate the height of which\n * @return {int} the height of the element in pixels\n */\n getElementHeight : function (elm) {\n return Math.max(\n elm.scrollHeight,\n elm.offsetHeight,\n elm.clientHeight\n );\n },\n \n /**\n * Gets the height of the scroller element\n * @return {int} the height of the scroller element in pixels\n */\n getScrollerHeight : function () {\n return (this.scroller === window || this.scroller === document.body)\n ? this.getDocumentHeight()\n : this.getElementHeight(this.scroller);\n },\n \n /**\n * determines if the scroll position is outside of document boundaries\n * @param {int} currentScrollY the current y scroll position\n * @return {bool} true if out of bounds, false otherwise\n */\n isOutOfBounds : function (currentScrollY) {\n var pastTop = currentScrollY < 0,\n pastBottom = currentScrollY + this.getScrollerPhysicalHeight() > this.getScrollerHeight();\n \n return pastTop || pastBottom;\n },\n \n /**\n * determines if the tolerance has been exceeded\n * @param {int} currentScrollY the current scroll y position\n * @return {bool} true if tolerance exceeded, false otherwise\n */\n toleranceExceeded : function (currentScrollY, direction) {\n return Math.abs(currentScrollY-this.lastKnownScrollY) >= this.tolerance[direction];\n },\n \n /**\n * determine if it is appropriate to unpin\n * @param {int} currentScrollY the current y scroll position\n * @param {bool} toleranceExceeded has the tolerance been exceeded?\n * @return {bool} true if should unpin, false otherwise\n */\n shouldUnpin : function (currentScrollY, toleranceExceeded) {\n var scrollingDown = currentScrollY > this.lastKnownScrollY,\n pastOffset = currentScrollY >= this.offset;\n \n return scrollingDown && pastOffset && toleranceExceeded;\n },\n \n /**\n * determine if it is appropriate to pin\n * @param {int} currentScrollY the current y scroll position\n * @param {bool} toleranceExceeded has the tolerance been exceeded?\n * @return {bool} true if should pin, false otherwise\n */\n shouldPin : function (currentScrollY, toleranceExceeded) {\n var scrollingUp = currentScrollY < this.lastKnownScrollY,\n pastOffset = currentScrollY <= this.offset;\n \n return (scrollingUp && toleranceExceeded) || pastOffset;\n },\n \n /**\n * Handles updating the state of the widget\n */\n update : function() {\n var currentScrollY = this.getScrollY(),\n scrollDirection = currentScrollY > this.lastKnownScrollY ? 'down' : 'up',\n toleranceExceeded = this.toleranceExceeded(currentScrollY, scrollDirection);\n \n if(this.isOutOfBounds(currentScrollY)) { // Ignore bouncy scrolling in OSX\n return;\n }\n \n if (currentScrollY <= this.offset ) {\n this.top();\n } else {\n this.notTop();\n }\n \n if(currentScrollY + this.getViewportHeight() >= this.getScrollerHeight()) {\n this.bottom();\n }\n else {\n this.notBottom();\n }\n \n if(this.shouldUnpin(currentScrollY, toleranceExceeded)) {\n this.unpin();\n }\n else if(this.shouldPin(currentScrollY, toleranceExceeded)) {\n this.pin();\n }\n \n this.lastKnownScrollY = currentScrollY;\n }\n };\n /**\n * Default options\n * @type {Object}\n */\n Headroom.options = {\n tolerance : {\n up : 0,\n down : 0\n },\n offset : 0,\n scroller: window,\n classes : {\n pinned : 'headroom--pinned',\n unpinned : 'headroom--unpinned',\n top : 'headroom--top',\n notTop : 'headroom--not-top',\n bottom : 'headroom--bottom',\n notBottom : 'headroom--not-bottom',\n initial : 'headroom'\n }\n };\n Headroom.cutsTheMustard = typeof features !== 'undefined' && features.rAF && features.bind && features.classList;\n\n return Headroom;\n}));\n},{}]},{},[16]);\n"],"file":"main.bundle.js"}