{"version":3,"file":"common-ff.js","sources":["common-ff.js"],"sourcesContent":["//////////////////////////\n// GT COOKIES FUNCTIONS //\n//////////////////////////\n\nvar GTCookies = function () {\n this.cookieName = \"cookiePolicy\";\n\n this.setCookie = function (name, value, expires, path, domain) {\n var today = new Date();\n today.setTime(today.getTime());\n\n /*\n if the expires variable is set, make the correct expires time, the current script below will set\n it for x number of days, to make it for hours, delete * 24, for minutes, delete * 60 * 24\n */\n if (expires) {\n expires = expires * 1000 * 60 * 60 * 24;\n }\n var expires_date = new Date(today.getTime() + expires);\n\n document.cookie = name + \"=\" + encodeURI(value) +\n (expires ? \";expires=\" + expires_date.toGMTString() : \"\") +\n (path ? \";path=\" + path : \"\") +\n (domain ? \";domain=\" + domain : \"\") +\n \";secure\";\n var checkCookies = \"/Cookies/CheckCookies\";\n $.ajax({\n cache: false,\n url: checkCookies,\n type: \"post\",\n dataType: \"json\",\n success: function (data) {\n console.log(\"check cookies successfully\");\n },\n error: function (xhr) {\n console.error(xhr);\n }\n });\n\t};\n\n\tthis.setCookieWithoutServerCheck = function (name, value, expires, path, domain) {\n\t\tvar today = new Date();\n\t\ttoday.setTime(today.getTime());\n\n\t\t/*\n\t\tif the expires variable is set, make the correct expires time, the current script below will set\n\t\tit for x number of days, to make it for hours, delete * 24, for minutes, delete * 60 * 24\n\t\t*/\n\t\tif (expires) {\n\t\t\texpires = expires * 1000 * 60 * 60 * 24;\n\t\t}\n\t\tvar expires_date = new Date(today.getTime() + expires);\n\n\t\tdocument.cookie = name + \"=\" + encodeURI(value) +\n\t\t\t(expires ? \";expires=\" + expires_date.toGMTString() : \"\") +\n\t\t\t(path ? \";path=\" + path : \"\") +\n\t\t\t(domain ? \";domain=\" + domain : \"\") +\n\t\t\t\";secure\";\n\t};\n\n /** @id getCookie */\n this.getCookie = function (name) {\n if (document.cookie.length > 0) {\n var c_start = document.cookie.indexOf(name + \"=\");\n if (c_start !== -1) {\n c_start = c_start + name.length + 1;\n var c_end = document.cookie.indexOf(\";\", c_start);\n if (c_end === -1) {\n c_end = document.cookie.length;\n }\n return decodeURI(document.cookie.substring(c_start, c_end));\n }\n }\n return \"\";\n };\n \n this.deleteCookie = function (name) {\n var me = this;\n if (me.getCookie(name)) {\n document.cookie = name + \"=; expiresThu, 01 Jan 1970 00:00:01 GMT;\";\n }\n };\n\n this.cookieNotify = function () {\n var me = this;\n\n if (this.getCookie(this.cookieName)) {\n document.querySelector(\"#skipcookie\")?.remove();\n return;\n }\n\n var cprompt = $('div.cookie-block');\n var cookieCTA = cprompt.find(\".cookie-cta\");\n\n $(cprompt).show();\n\n // set the cookie and close the box\n cookieCTA.on(\"click keydown touchend\", function (e) {\n if (!e.keyCode || e.keyCode === 13) {\n $(cprompt).slideUp('slow');\n me.setCookie(me.cookieName, $(e.currentTarget).val(), 365, '/');\n e.preventDefault();\n document.querySelector(\"#skipcookie\")?.remove();\n return false;\n }\n });\n };\n};\nlet linkTertiaryList = [];\n\nGT.LinkTertiary = function () {\n linkTertiaryList.push(setTimeout(() => {\n let hiddenLinkAnimation = document.querySelector(\"body\");\n if(hiddenLinkAnimation) {\n hiddenLinkAnimation.classList.remove(\"hidden-link__animation\");\n }\n }, 350))\n}\n\nGT.hideHyperLinkAnimation = function() {\n linkTertiaryList.forEach(timer => {\n clearTimeout(timer);\n })\n \n let _body = document.querySelector(\"body\");\n if(!_body.classList.contains('hidden-link__animation')) _body.classList.add('hidden-link__animation');\n GT.LinkTertiary();\n}\n\nGT.domContentLoadedFncList.push(function(){\n GT.LinkTertiary();\n});\n\nGT.clampData = {\n \"aboutblock\": [\n {selector: '.gt-small-title > a'},\n {selector: '.gt-body-text', lines: 5}\n ],\n \"ibcblock\": [\n {selector: '.ibc-suggested__descriptions', lines: 4}\n ],\n \"newsblock\": [\n {selector: '.gt-small-title > a'},\n {selector: '.news-title-text'},\n {selector: '.gt-body-text', lines: 5}\n // {selector: '.news-text', lines: 5, isHidden: false}\n ],\n \"relatedcontentwithimage\": [\n {selector: '.event-item__title--gridview'},\n {selector: '.rcwib_item-content-category', lines: 1},\n {selector: '.rcwib_item-content-title', lines: 2}\n ],\n \"relatedcontentnoimage\": [\n {selector: '.event-item__title--gridview'},\n {selector: '.rcwib_item-content-category', lines: 1},\n {selector: '.rcwib_item-content-title', lines: 2},\n {selector: '.article-tile .title', lines: 2},\n {selector: '.article-tile .text', lines: 5},\n {selector: '.four-items-per-view .article-tile .text', lines: 3}\n ],\n \"event-block\": [\n {selector: '.event-item__title--gridview'},\n {selector: '.event-item__title--listview', lines: 2},\n {selector: '.grid-view .js-single-event-name'},\n {selector: '.list-view .js-single-event-name', lines: 2},\n {selector: '.single-event-block .js-single-event-name', lines: 2}\n ],\n \"semminar-block\": [\n {selector: '.list-view .js-single-semminar-name', lines: 2},\n {selector: '.single-event-block .js-single-semminar-name', lines: 2}\n ],\n \"insight-hub-block\": [\n { selector: '.article-content__clamp .content .title', lines: 3 },\n { selector: '.article-content__clamp .content-bottom .text', lines: 3 }\n ],\n \"global-article-clamp\": [\n { selector: '.global-article__list--items .article-content__clamp .content .category', lines: 1 },\n { selector: '.global-article__list--items .article-content__clamp .content .title', lines: 3 },\n { selector: '.global-article__list--items .article-content__clamp .content .text', lines: 3 }\n ],\n \"upcoming-events__results\": [\n {selector: '.event-item__title--gridview'},\n {selector: '.event-item__title--listview', lines: 2}\n ],\n \"tombstone\": [\n {selector: '.tombstone-block-container .item-transaction'},\n {selector: '.tombstone-block-container .item-business', lines: 4}\n ],\n \"tombstone-transaction\": [\n { selector: '.transaction-action__container .transaction-action', lines: 2 }\n ],\n \"eventdetailpagev2\": [\n {selector: '.title', lines: 1}\n ],\n \"mega-menu-v2\": [\n {selector: '.mega-content__item .mega-link', lines: 2, renderAtPageLoad: true},\n {selector: '.mega-content__item .mega-content__item--descriptions', lines: 3, renderAtPageLoad: true}\n ],\n \"t11-result-v2\": [\n {selector: '.result-card__desc'}, \n {selector: '.result-card__people-desc'}\n ]\n}\n\nGT.getLineHeight = function ($elem) {\n if($elem) {\n let computedStyle = window.getComputedStyle($elem);\n let fontSize = parseFloat(computedStyle.fontSize.replace(\"px\",\"\"));\n let lineHeight = computedStyle.lineHeight.replace(\"px\",\"\");\n if(lineHeight == \"normal\")\n lineHeight = 1.2 * fontSize;\n return parseFloat(lineHeight);\n }\n};\n\nGT.getNumberLineContent = function ($elem) {\n try {\n var divheight = $elem.offsetHeight; \n var lineheight = GT.getLineHeight($elem);\n return Math.round(divheight/parseInt(lineheight));\n } catch (e) {\n return 0;\n }\n};\n\nGT.clampArticleBlock = function ($elem, isForceReRender){\n let articleText = $elem.querySelector('.text'),\n articleTitle = $elem.querySelector('.title'),\n authorElm = $elem.querySelector('.page-promote__info'),\n isNoImage = $elem.classList.contains(\"no-image\"),\n isNoDescription = $elem.classList.contains(\"no-description\"),\n isTrending = $elem.classList.contains(\"trending\"),\n isReverse = $elem.classList.contains(\"reverse\"),\n isMediumDesktopView = GT.isMediumDesktopView(),\n clampText = 3,\n elClamp = 3;\n\n if(!articleTitle) return;\n \n if(articleText && !articleText.dataset.clamptext) {\n articleText.dataset.clamptext = articleText.textContent;\n }\n\n if(!articleTitle.dataset.clamptext) {\n articleTitle.dataset.clamptext = articleTitle.textContent;\n }\n\n let numberLine = GT.getNumberLineContent(articleTitle),\n authorLine = 0;\n \n if(authorElm) {\n authorLine = GT.getNumberLineContent(authorElm);\n }\n\n if (numberLine > 3) isNoImage && !isNoDescription && isMediumDesktopView ? elClamp = 4 : elClamp = 3;\n else elClamp = numberLine;\n\n \n let customLineClamp = getCustomClampLines(articleTitle);\n if(customLineClamp != -2)\n elClamp = customLineClamp;\n \n if(authorLine > 1 && elClamp > 2) {\n elClamp = elClamp - authorLine + 2 - (isTrending || isReverse ? 1 : 0);\n }\n\n var objTitle = {\n settings: { clamp: elClamp, isHidden: true}\n }\n\n if(elClamp > -1 && articleTitle) {\n if(isForceReRender) {\n articleTitle.removeAttribute(\"data-lazyevent-triggered\");\n articleTitle.textContent = articleTitle.dataset.clamptext;\n }\n GT.Clamp(articleTitle, objTitle, isForceReRender);\n $elem.setAttribute('clamp', true);\n }\n \n // Apply only for featured article block in T1, T9 and T39\n clampText = 6 - elClamp;\n if(isNoImage) {\n if(elClamp == 4) clampText = 3;\n if(elClamp == 3) clampText = 4;\n\n if(isMediumDesktopView) {\n if(elClamp == 2) clampText = 6;\n if(elClamp == 1) clampText = 8;\n } else {\n if(elClamp == 2) clampText = 5;\n if(elClamp == 1) clampText = 7;\n }\n }\n\n\n if(articleTitle?.closest(\".mega-featured__contents\")) {\n if (numberLine > 3) elClamp = 3;\n clampText = 5 - elClamp;\n } else if(authorLine > 1)\n clampText = clampText - authorLine + 1;\n\n if(articleText) {\n customLineClamp = getCustomClampLines(articleText);\n if(customLineClamp != -2)\n clampText = customLineClamp;\n\n var objText = {\n settings: { clamp: clampText, isHidden: true}\n }\n\n if(clampText > -1) {\n if(isForceReRender) {\n articleText.removeAttribute(\"data-lazyevent-triggered\");\n articleText.textContent = articleText.dataset.clamptext;\n }\n GT.Clamp(articleText, objText, isForceReRender);\n $elem.setAttribute('clamp', true);\n }\n }\n}\n\nfunction getCustomClampLines(clampElm){\n let _lines = -2;\n if(clampElm && clampElm.dataset.clamplines) {\n let _tmpLines = JSON.parse(clampElm.dataset.clamplines);\n\n if(GT.wWidth < GT.breakPoints.tablet_lg)\n _lines = _tmpLines.mobile;\n else\n _lines = _tmpLines.desktop;\n }\n return _lines;\n}\n\nGT.Clamp = function (elem, obj, isForceReRender) {\n if(!elem.dataset) return;\n\n let spaces = true;\n const lang = document.documentElement.lang;\n if([\"zh\", \"ja\"].indexOf(lang) >= 0) spaces = false;\n\n var lines = obj.settings.clamp || 3; // a default\n var isHidden = obj.settings.isHidden || false;\n var doClamp = function execute(current) {\n var lineHeight = GT.getLineHeight(current);\n var containerHeight = lineHeight * lines;\n\n if (current.offsetHeight > containerHeight || isHidden) {\n var height = containerHeight + parseInt(lineHeight / 2.5);\n if (height)\n shave(current, height, {spaces: spaces});\n }\n };\n\n let clampKey = elem.dataset.clampkey,\n oldClampKey = null;\n\n if(!clampKey || isForceReRender) {\n if(isForceReRender) {\n oldClampKey = clampKey;\n \n // delete GT.listFunctionsTriggerInScrollEvent[oldClampKey];\n // delete GT.windowResizeFncList[oldClampKey];\n }\n clampKey = 'lazy_clampKey_' + (Math.random() * (1000000 - 0) + 0);\n elem.dataset.clampkey = clampKey;\n }\n\n if(obj.settings.renderAtPageLoad)\n doClamp(elem);\n else\n LazyEvent([elem], doClamp, null, isForceReRender, clampKey, oldClampKey);\n};\n\nGT.initClampText = function(elmSelector, clampName){\n let elms = document.querySelectorAll(elmSelector);\n Array.prototype.slice.call(elms).forEach(function(elm){\n elm.dataset.clampname = clampName;\n elm.classList.add(\"clamp-text\");\n })\n}\n\nGT.clampText = function(clampName, isForceReRender){\n function doClamp(elm){\n //let ClampText function auto collect selectors. Just call GT.clampText() or GT.clampText(null, true) to force rerender\n elm.classList.add(\"clamp-text\");\n let clampData = GT.clampData[elm.dataset.clampname];\n if(clampData){\n const clampDataLength = clampData.length;\n for(let i = 0; i < clampDataLength; i++) {\n const clampItem = clampData[i],\n clampSelectors = elm.querySelectorAll(clampItem.selector),\n clampSelectorsLength = clampSelectors.length;\n \n for(let clampElmIndex = 0; clampElmIndex < clampSelectorsLength; clampElmIndex++) {\n const clampElm = clampSelectors[clampElmIndex];\n if(!clampElm.dataset.clamptext)\n clampElm.dataset.clamptext = clampElm.innerText || clampElm.text || clampElm.textContent;\n if(isForceReRender || clampItem.isHidden) {\n delete clampElm.dataset.lazyeventTriggered;\n clampItem.isHidden = true;\n }\n\n let customLineClamp = getCustomClampLines(clampElm);\n if(customLineClamp != -2)\n clampItem.lines = customLineClamp;\n\n if(clampItem.lines > -1 || clampItem.lines == null) {\n GT.Clamp(clampElm, {settings: {isHidden: clampItem.isHidden, renderAtPageLoad: clampItem.renderAtPageLoad, clamp: clampItem.lines || 3}}, isForceReRender);\n }\n }\n }\n }\n }\n\n let clampElms = [];\n\n if(clampName) {\n clampElms = document.querySelectorAll(\"[data-clampname=\" + clampName + \"]\");\n } else {\n clampElms = document.querySelectorAll(\"[data-clampname]\");\n }\n\n const clampElmsLength = clampElms.length;\n for(let i = 0; i < clampElmsLength; i++) {\n const item = clampElms[i];\n try{\n if(isForceReRender)\n GT.clampRevertToOriginalText(item.dataset.clampname);\n setTimeout(e => {\n doClamp(item);\n })\n }catch(e){\n console.log(e);\n }\n }\n}\n\nGT.clampRevertToOriginalText = function(clampElmName){\n Array.prototype.slice.call(document.querySelectorAll(\"[data-clampname=\" + clampElmName + \"]\")).forEach(function(item){\n try{\n let clampData = GT.clampData[item.dataset.clampname];\n if(clampData){\n Array.prototype.slice.call(clampData).forEach(function(clampItem){\n let clampElms = item.querySelectorAll(clampItem.selector);\n Array.prototype.slice.call(clampElms).forEach(function(clampElm){\n if(clampElm.dataset.clamptext) {\n clampElm.innerText = clampElm.dataset.clamptext;\n }\n })\n })\n }\n }catch(e){\n console.log(e);\n }\n })\n}\n\n\nGT.clampArticle = function(isForceReRender){\n //only apply for mega menu if it opens\n let $article = document.querySelectorAll(document.querySelector(\".mega__level--2.open\") ? '.mega__level--2.open .article-tile' : '.gt-wrapper .article-tile');\n\n $article.forEach(function(item){\n item.removeAttribute(\"clamp\");\n GT.clampArticleBlock(item, isForceReRender);\n })\n}\n\nGT.retriggerClampList = {};\n\nGT.domContentLoadedFncList.push(function(){\n GT.clampArticle();\n GT.clampText();\n});\n\nGT.windowResizeFncList.clampTextOnResize = function() {\n GT.clampArticle(true);\n GT.clampText(null, true);\n Object.keys(GT.retriggerClampList).forEach(clampItemKey => {\n GT.retriggerClampList[clampItemKey]();\n })\n};\nvar initTranslationDetect = function() {\n\tvar allowTranslator = allowTranslateDetector();\n\tif(!allowTranslator) return;\n var originalLang = $('html').attr('lang');\n\tvar observer = new MutationObserver(checkLang);\n\tfunction checkLang(){\n\t\tvar currentLang = $('html').attr('lang');\n if (currentLang !== originalLang){\n \t$('body').addClass('lang-changed');\n\t\t\t$(window).trigger('user-translate');\n\t\t\toriginalLang = currentLang;\n }\n\t}\n\tvar htmlDom = document.getElementsByTagName('html')[0];\n\tobserver.observe(htmlDom, { attributes: true, childList: false, subtree: false });\n\n\tfunction allowTranslateDetector(){\n\t\tvar hasMutation = typeof MutationObserver !== undefined;\n\t\tvar isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\t\tvar notMobile = window.screen.width > 768;\n\t\treturn hasMutation && isChrome && notMobile;\n\t}\n}\n\ninitTranslationDetect();\nGT.InputLabel = function ($elem) {\n\n var input = $($elem).children('input');\n var label = $($elem).children('label');\n\n input.on('input', function (e) {\n if (input.val() != 0) {\n label.css('opacity', '0');\n } else {\n label.css('opacity', '1');\n }\n });\n\n};\n\nGT.HeadSearch = function ($element) {\n var me = this,\n $toggle = $element.find('.icon-link'),\n $content = $element.find('.header__search-form'),\n $search = $content.find('.searchBox'),\n $close = $element.find('.h-search__close'),\n\n $parent = $element.parent(),\n $globalreach = $parent.find('.header__global-reach-toggle'),\n $lang = $parent.find('.header__lang'),\n $login = $parent.find('.header__login');\n $header = $parent.parent();\n\n function is_iOS() {\n var iDevices = [\n 'iPad Simulator',\n 'iPhone Simulator',\n 'iPod Simulator',\n 'iPad',\n 'iPhone',\n 'iPod'\n ];\n\n while (iDevices.length) {\n if (navigator.platform === iDevices.pop()) {\n return true;\n }\n }\n\n return false;\n }\n\n\n function fixNav() {\n if (is_iOS()) {\n $('body').css('overflow-y', 'auto');\n $('body').css('position', 'absolute');\n $('body').css('top', 0);\n $('body').css('bottom', 0);\n $('body').css('-webkit-overflow-scrolling', 'touch');\n\n $(document).on('resize', function () {\n $('body').scrollTop(topShift);\n })\n }\n }\n function unfixNav() {\n if (is_iOS()) {\n $('html, body').removeClass('absolute');\n }\n }\n function closeSearch() { \n $element.removeClass('open');\n $content.removeClass('open');\n $toggle.css({ 'display': '' });\n $lang.css({ 'display': '' });\n $login.css({ 'display': '' });\n $globalreach.css({ 'display': '' });\n $content.css({ 'position': 'absolute' });\n $('.mobile-logo').removeClass('hide');\n document.getElementById('searchField').blur();\n setTimeout(function(){\n $toggle.focus();\n }, 50)\n }\n\n me.init = function () {\n\n // fixNav();\n\n var $toggle = $element.find('.icon-link'),\n $content = $element.find('.header__search-form'),\n $close = $element.find('.h-search__close');\n $parent = $element.parent();\n $globalreach = $parent.find('.header__global-reach-toggle');\n $lang = $parent.find('.header__lang');\n $login = $parent.find('.header__login');\n\n topShift = $(window).scrollTop();\n\n $('body').on('touchmove', function () {\n topShift = $(window).scrollTop();\n document.activeElement.blur();\n })\n\n $toggle.on('click keydown', function (e) { \n if (!e.keyCode || e.keyCode === '13') {\n $('.insight-menu__toggle').removeClass('open');\n $element.addClass('open');\n $content.addClass('open');\n $search.focus();\n $(this).css({ 'display': 'none' });\n $globalreach.css({ 'display': 'none' });\n $lang.css({ 'display': 'none' });\n $login.css({ 'display': 'none' });\n $content.css({ 'position': 'relative' });\n $('.mobile-logo').addClass('hide');\n document.getElementById('searchField').focus();\n }\n });\n\n $close.on('click keydown', function (e) {\n if (!e.keyCode || e.keyCode === 13) {\n closeSearch();\n }\n });\n\n // $content.find('.searchBox').blur(function () {\n // closeSearch();\n // });\n\n\n }\n me.init();\n};\nGT.Reveal = function ($elements, obj) {\n // var isMobile = GT.isMobile();\n // // $elements.forEach(elm => {\n // document.querySelectorAll(\".reveal-item\").forEach(function(childElm){\n // if(isMobile)\n // childElm.classList.add(\"use-banner-zoom\");\n // else\n // childElm.classList.add(\"use-block-element-fade-in\");\n // })\n // })\n // return;\n // var current = this;\n // if (typeof obj.settings === 'undefined') {\n // obj.settings = {};\n // }\n\n // // SETTINGS\n // current.settings = $.extend({}, {\n // animationType: 'fromBottom',\n // dataDelay: 'reveal-delay',\n // dataTransition: 'transition',\n // customAnimation: null,\n // rvlItemClass: null,\n // }, obj.settings);\n\n // // CREATE SCROLL REVEAL ANIMATION OBJECT\n // current.revealObj = ScrollReveal(current.settings.customAnimation || current.GetAnimation(current.settings.animationType));\n\n // // GET REVEAL ELEMENT AND REVEAL CONTAINER IF IT IS SET\n // current.rvlItemClass = current.settings.rvlItemClass;\n\n // // SEQUENCE ANIMATION IF CONTAINER IS SET\n // if (!GT.isMobile() && !sessionStorage['animationDone'] || $(\".\" + current.rvlItemClass).attr(\"data-replay\") == \"true\") {\n // $element.each(function () {\n // current.revealAnimation();\n // });\n // sessionStorage['animationDone'] = 'true';\n // } else {\n // $('.' + current.rvlItemClass).addClass('still');\n // $('.' + current.rvlItemClass).removeClass(current.rvlItemClass);\n // }\n};\n\n// Animations to obj prototype\nGT.Reveal.prototype.GetAnimation = function (animationType) {\n var current = this;\n var defaultAnimation = {\n duration: 0,\n easing: 'cubic-bezier(0.4, 0.0, 0.2, 1)',\n distance: '0rem',\n opacity: 1,\n scale: 1,\n viewFactor: 0.2,\n beforeReveal: function () {\n current.revealAnimation();\n }\n }\n switch (animationType) {\n case 'fromBottom':\n return $.extend({}, defaultAnimation, {\n origin: 'bottom'\n })\n default:\n return defaultAnimation\n }\n};\n\nGT.Reveal.prototype.revealAnimation = function () {\n var current = this;\n var targetElements = $('.' + current.rvlItemClass);\n for (var i = 0; i < targetElements.length; i++) {\n var elem = targetElements[i];\n var className = elem.getAttribute('data-transition');\n var delay = elem.getAttribute('data-reveal-delay');\n new revealElement(elem, className, delay);\n }\n}\n\nfunction revealElement(elem, className, delay) {\n $(elem).css({ 'animation-delay': delay + 'ms' })\n elem.classList.add(className);\n}\n\n\nGT.Animation = function () {\n if (GT.isMobileView()) return;\n\n GT.checkElmVisible(\".scroll-animation__container\", function (intersectObj) {\n let target = intersectObj.target;\n target.querySelectorAll(\".animation-item\").forEach(function (item) {\n if (item.dataset.animationDelay)\n item.style.animationDelay = item.dataset.animationDelay;\n if (item.dataset.y)\n item.style.setProperty('--element-fade-in-y', item.dataset.y);\n (typeof item.dataset.transition != \"undefined\") && item.classList.add(item.dataset.transition);\n })\n });\n}\n\nGT.domContentLoadedFncList.push(GT.Animation);\nGT.windowResizeFncList.GTAnimation = GT.Animation;\nfunction GTSkipLink(){\n Array.prototype.slice.call(document.querySelectorAll(\".shortcuts a\")).forEach(function(shortcut){\n shortcut.addEventListener(\"click\", function(e){\n e.preventDefault();\n let ahref = \"#\" + e.target.href.split(\"#\")[1],\n target = document.querySelector(ahref);\n\n if(ahref == \"#skip-nav\"){\n let insightToggleBtn = document.querySelector(\".insight-menu__toggle\");\n const firstFocusableElement = target.querySelector(\"ul.level-1 li\")?.querySelector(\"a, button\");\n if(insightToggleBtn) {\n insightToggleBtn.click();\n setTimeout(function(){\n firstFocusableElement?.focus();\n }, 500)\n } else\n firstFocusableElement?.focus();\n } else if(ahref == \"#skip-cookie\") {\n let lstElm = GT.getListFocusableElms(document.querySelector(\".cookie-block\"));\n if(lstElm.length) {\n lstElm[0].focus();\n }\n } else {\n GT.getFirstFocusableVisible()?.focus();\n }\n })\n })\n}\n\nGT.domContentLoadedFncList.push(function(){\n GTSkipLink();\n});\n\nGT.fakeHyperLinkClickEvtList = [];\nGT.fakeHyperLinkKeypressEvtList = [];\nGT.FakeHyperlink = function () {\n Array.prototype.slice.call(document.querySelectorAll('[data-anchor]')).forEach(function (el, index) {\n GT.fakeHyperLinkClickEvtList.forEach(function (func, funIdx) {\n el.removeEventListener(\"click\", func);\n })\n GT.fakeHyperLinkKeypressEvtList.forEach(function (func, funIdx) {\n el.removeEventListener(\"keypress\", func);\n })\n })\n GT.fakeHyperLinkClickEvtList = [];\n GT.fakeHyperLinkKeypressEvtList = [];\n\n\n function redirectLink(linkElm){\n window.open(linkElm.dataset.anchor, linkElm.getAttribute(\"target\") ? linkElm.getAttribute(\"target\") : '_self');\n }\n\n Array.prototype.slice.call(document.querySelectorAll('[data-anchor]')).forEach(function (el) {\n el.setAttribute(\"tabindex\", 0);\n el.setAttribute(\"role\", \"link\");\n\n function handleClickEvt(e) {\n redirectLink(e.currentTarget);\n }\n function handleKeypressEvt(e) {\n if (e.keyCode == 13)\n redirectLink(e.currentTarget);\n }\n\n GT.fakeHyperLinkClickEvtList.push(handleClickEvt);\n GT.fakeHyperLinkKeypressEvtList.push(handleKeypressEvt);\n el.addEventListener(\"click\", handleClickEvt);\n el.addEventListener(\"keypress\", handleKeypressEvt);\n })\n\n Array.prototype.slice.call(document.querySelectorAll('[data-anchor] a')).forEach(function (el) {\n el.setAttribute(\"role\", \"link\");\n el.addEventListener(\"click\", function(e){\n e.stopPropagation();\n });\n })\n};\n///////////////////////////\n// GT OVERLAYS FUNCTIONS //\n///////////////////////////\n\nfunction GTOverlays() {\n\n var me = this;\n var lastFocusElement;\n\n this._clientY = null; // remember Y position on touch start\n\n this.calculateOverlayH = function ($container, screenH, overlayH) {\n var offSetH = 0;\n $container.removeClass(\"full-height\");\n if (overlayH > screenH) {\n $container.addClass(\"full-height\");\n } else {\n offSetH = (screenH - overlayH) / 2;\n }\n\n return offSetH;\n };\n\n this.getWindowWidth = function ($window) {\n var winWidth;\n if ($('html').hasClass('lt-ie9')) {\n winWidth = document.body.clientWidth;\n } else {\n winWidth = $window.width();\n }\n\n return winWidth;\n };\n\n this.getWindowHeight = function ($window) {\n var winHeight;\n if ($('html').hasClass('lt-ie9')) {\n winHeight = document.body.clientHeight / 4;\n } else {\n winHeight = Math.max($window.height(), window.innerHeight);\n }\n\n return winHeight;\n };\n\n this.disableRubberBand = function (event, container) {\n var clientY = event.targetTouches[0].clientY - me._clientY;\n\n if (container.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll\n event.preventDefault();\n }\n\n if (me.isOverlayTotallyScrolled(container) && clientY < 0) {\n //element is at the top of its scroll\n event.preventDefault();\n }\n }\n\n this.isOverlayTotallyScrolled = function (overlay) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\n return overlay.scrollHeight - overlay.scrollTop <= overlay.clientHeight;\n }\n\n //reset Epi form\n this.resetEpiForm = function(){\n setTimeout(function(){\n if ($('.newsletter-container').length >= 1) \n $('.newsletter-container .content > div').removeAttr('style');\n }, 600);\n }\n\n function autoFocusAtFirstElm(elm){\n var tabbable = elm.find('select, input, textarea, button, a, [role=\"button\"]').filter(':visible');\n var firstTabbable = tabbable.first();\n var lastTabbable = tabbable.last();\n /*set focus on first input*/\n setTimeout(() => {\n firstTabbable.focus();\n }, 500)\n\n /*redirect last tab to first input*/\n lastTabbable.on('keydown', function (e) {\n if ((e.which === 9 && !e.shiftKey)) {\n e.preventDefault();\n firstTabbable.focus();\n }\n });\n\n /*redirect first shift+tab to last input*/\n firstTabbable.on('keydown', function (e) {\n if ((e.which === 9 && e.shiftKey)) {\n e.preventDefault();\n lastTabbable.focus();\n }\n });\n }\n\n // try this\n this.runOverlay = function (htmlOrRef, container, containerWidth, containerHeight, checkH, isNewsletter, doNotAddBindings, callbackOnClose) {\n var screenW, screenH;\n\n var $window = $(window);\n var screenW = me.getWindowWidth($window);\n var screenH = me.getWindowHeight($window);\n var removeOnClose = false;\n\n var $body = $('body');\n $body.addClass('overlay-no-scroll');\n $('html').addClass('overflowHidden');\n\n if (!$(\".overlay\").length) {\n $body.append('
');\n } else {\n $(\".overlay\").show();\n }\n if (typeof htmlOrRef === 'string' || htmlOrRef instanceof String) {\n $(\".overlay\").after(htmlOrRef);\n removeOnClose = true;\n } else if (htmlOrRef instanceof Element) {\n\n } else {\n return false;\n }\n\n // ok, so we have to check if our overlay isn't heigher than window\n var $container = $(container);\n if (checkH) {\n $container.width('100%');\n }\n var overlayH = $container.outerHeight(true);\n var offSetH = me.calculateOverlayH($container, screenH, overlayH);\n\n var scrollTop = $(window).scrollTop();\n var offSetL = (screenW - containerWidth) / 2;\n\n // Blur all inputs / textareas with placeholders to init on browsers LTE IE9\n if ($(\"html\").hasClass('lte-ie9')) {\n $container.find(\"[placeholder]\").blur();\n }\n\n // if offset is <0 make offset 10 else the overlay will appear off the screen on mobile.\n if (offSetL < 0) {\n offSetL = 0;\n }\n\n if (isNewsletter) {\n $container.css({ 'position': 'fixed' });\n } else {\n offSetH = offSetH + scrollTop;\n }\n\n $('.overlay').bind('touchmove', function (event) {\n event.preventDefault();\n })\n\n var closeOverlay = function(){\n //issue: cannot remove container in T32, so have to query selector again\n let _container = $(container);\n if ($('.overlay').is(':visible')) {\n me.hideOverlay();\n if (lastFocusElement) {\n lastFocusElement.focus();\n }\n if (removeOnClose) {\n _container.remove();\n } else {\n _container.fadeOut();\n me.resetEpiForm();\n }\n if (GT.isFunction(callbackOnClose)) {\n callbackOnClose();\n }\n }\n }\n\n if (!doNotAddBindings) {\n $container.bind('touchstart', function (event) {\n me._clientY = event.targetTouches[0].clientY;\n });\n\n $container.bind('touchmove', function (event) {\n me.disableRubberBand(event, this);\n });\n\n $(document).on('resize', function () {\n setTimeout(function () {\n $container.css({ 'overflow': 'auto' });\n $container.css('-webkit-overflow-scrolling', 'touch');\n $container.css('max-height', 'calc(100vh - 40px)');\n }, 1000)\n });\n\n $(document).on('keydown', function (e) {\n if (e.keyCode === 27) { // ESC\n closeOverlay();\n }\n });\n\n $('.js-close-overlay').on('click', function () {\n //lastFocusElement = this;\n closeOverlay();\n return false;\n });\n }\n\n $('.overlay').on('click', function (e) {\n // lastFocusElement = this;\n closeOverlay();\n e.stopImmediatePropagation();\n return false;\n });\n\n $container.fadeIn();\n if (!$container.is(\".contact-form-popup\") && !$container.is(\".popup-contact-me-form\") && !$container.is(\".focusable-form\")) {\n me.overlayTabNavHandlerOnOpen();\n } else {\n $container.css('display','flex');\n // if($container.is(\".focusable-form\")) {\n // }\n \n autoFocusAtFirstElm($container);\n }\n GT.hideHyperLinkAnimation();\n return true;\n };\n // / try this\n\n // hide overlay function\n this.hideOverlay = function () {\n\n $('.overlay').off('click');\n var $body = $('body');\n $body.removeClass('overlay-no-scroll');\n if(!document.firstElementChild.classList.contains(\"opening-mobile-menu\"))\n $('html').removeClass('overflowHidden');\n\n var $window = $(window);\n var screenW = me.getWindowWidth($window);\n\n\n var top = Math.abs(parseInt($('body').css('top'), 10));\n\n GT.setInertWhileOpeningDialog(false);\n $('.overlay').fadeOut('slow');\n me.overlayTabNavHandlerOnClose();\n };\n\n // youtube overlay\n this.youTubeOverlay = function (url) {\n var winWidth = $(window).innerWidth();\n var winHeight = $(window).innerHeight();\n var playerWidth = winWidth * 0.8;//560,\n\n //if(playerWidth > 1000) playerWidth = 1000;\n\n var playerHeight = playerWidth / 1.6;//315,\n\n if (playerHeight > winHeight) {\n playerHeight = winHeight * 0.8;\n playerWidth = playerHeight * 1.6;\n }\n\n if (winWidth <= 480) {\n playerWidth = 320;\n playerHeight = 200;\n }\n\n var regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=)([^#\\&\\?]*).*/;\n var videoID = url.match(regExp);\n\n if (videoID && videoID[2].length == 11) {\n videoID = videoID[2];\n } else {\n videoID = false;\n }\n\n if (videoID) {\n url = 'https://www.youtube.com/embed/' + videoID;\n }\n // var htmlMarkup = '
\"close
';\n var htmlMarkup = '
';\n var container = '.youtube-container';\n\n me.runOverlay(htmlMarkup, container, playerWidth, playerHeight, false, false);\n me.hideRelatedVideoInYoutube(container);\n };\n\n // vimeo overlay\n this.vimeoVideoOverlay = function (me, id, playerWidth, playerHeight) {\n var htmlMarkup = '
';\n\n var container = '.youtube-container';\n\n me.runOverlay(htmlMarkup, container, playerWidth, playerHeight, false, false);\n };\n\n // vimeo thumbnail\n this.vimeoVideoThumbNail = function (me, currentElem, videoID) {\n currentElem.addClass(\"lazyload\");\n currentElem.attr('data-bgset', 'https://vumbnail.com/' + videoID + '.jpg');\n };\n\n // youtube overlay\n this.youTubeVideoOverlay = function (me, id, playerWidth, playerHeight) {\n var htmlMarkup = '
';\n var container = '.youtube-container';\n me.runOverlay(htmlMarkup, container, playerWidth, playerHeight, false, false);\n me.hideRelatedVideoInYoutube(container);\n };\n\n var player;\n this.loadPlayer = function (playerFrame) {\n if (typeof (YT) == 'undefined' || typeof (YT.Player) == 'undefined') {\n var tag = document.createElement('script');\n tag.src = \"https://www.youtube.com/iframe_api\";\n var firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n\n window.onYouTubePlayerAPIReady = function () {\n me.onYouTubePlayer(playerFrame);\n };\n } else {\n me.onYouTubePlayer(playerFrame);\n }\n }\n\n this.onYouTubePlayer = function (playerFrame) {\n player = new YT.Player(playerFrame, {\n videoId: playerFrame,\n events: {\n 'onReady': me.onPlayerReady,\n 'onStateChange': me.onPlayerStateChange\n }\n });\n }\n \n this.onPlayerReady = function (event) {\n event.target.playVideo();\n }\n\n this.onPlayerStateChange = function (event) {\n if (event.data == YT.PlayerState.ENDED) {\n if (typeof player !== 'undefined' && typeof player.seekTo != \"function\"){\n event.target.a.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"' + 'stopVideo' + '\",\"args\":\"\"}', '*');\n }else{\n player.seekTo(0, false);\n player.stopVideo();\n }\n }\n }\n this.hideRelatedVideoInYoutube = function (container) {\n var playerFrame = $(container).find(\"iframe\");\n me.loadPlayer(playerFrame.attr(\"id\"));\n }\n\n // generic overlay\n this.newsletterOverlay = function () {\n\n var containerWidth = 640,\n containerHeight = 457;\n var winWidth = $(window).innerWidth();\n if (containerWidth < winWidth) {\n containerWidth = winWidth;\n }\n\n // html content\n var heading = 'Subscribe to our newsletters',\n newsletter1 = 'Email newsletter option 1',\n newsletter1copy = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eu ante lorem. Phasellus at lacinia nunc. Nullam iaculis quis nunc facilisis luctus.',\n newsletter2 = 'Email newsletter option 2',\n newsletter2copy = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eu ante lorem. Phasellus at lacinia nunc. Nullam iaculis quis nunc facilisis luctus.',\n submitURL = '#';\n\n var htmlMarkup = '

' + heading + '

Close

' + newsletter1copy + '

' + newsletter2copy + '

Subscribe here
';\n\n var container = '.newsletter-container';\n\n me.runOverlay(htmlMarkup, container, containerWidth, containerHeight, true, true);\n };\n\n this.openVideoInNewTab = function (currentElem) {\n\n currentElem.blur();\n var EXIT = true,\n CONTINUE = false;\n var win = false;\n\n if (currentElem.hasClass('video__open-in-new-tab')) {\n win = window.open(currentElem.attr(\"href\"), '_blank');\n if (win) {\n //Browser has allowed it to be opened\n win.focus();\n }\n return EXIT;\n }\n return CONTINUE;\n }\n\n this.launchOverlay = function ($elem, obj) {\n function handleClick(e){\n if (!e.keyCode || e.keyCode === '13') {\n e.preventDefault();\n if (!me.openVideoInNewTab($(e.srcElement))) {\n // on click - button name changes to \"loading...\" at the end\n // open the modal\n var youtubeLink = e.srcElement.href;\n if (youtubeLink && youtubeLink.length > 0) {\n me.youTubeOverlay(youtubeLink);\n }\n }\n }\n }\n $elem.each(function(idx, item){\n item.onclick = handleClick;\n item.onkeydown = handleClick;\n })\n };\n\n this.launchVideoOverlay = function (elem, obj) {\n var\n vimeoRegExp = /https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|[\\w]+\\/review\\/|)(\\d+)(?:\\/(\\w+))?(?:$|\\/|\\?)/,\n youtubeRegExp = /^.*(?:(?:youtu\\.be\\/|v\\/|vi\\/|u\\/\\w\\/|embed\\/)|(?:(?:watch)?\\?v(?:i)?=|\\&v(?:i)?=))([^#\\&\\?]*).*/,\n playerWidth = 560,\n playerHeight = 315,\n winWidth = $(window).innerWidth();\n\n if (winWidth <= 480) {\n playerWidth = 320;\n playerHeight = 200;\n }\n\n function handleLaunchOfVideoOverlay(videoID, playerWidth, playerHeight, videoFunction) {\n // on click - button name changes to \"loading...\" at the end\n // open the modal\n videoFunction(me, videoID, playerWidth, playerHeight);\n };\n\n elem.each(function () {\n var $current = $(this),\n videoLink = $current.attr(\"href\"),\n videoID = 0;\n var vimeoMatch, youtubeMatch;\n if (videoLink && videoLink.length > 0) {\n vimeoMatch = videoLink.match(vimeoRegExp);\n youtubeMatch = videoLink.match(youtubeRegExp);\n }\n\n if (vimeoMatch) {\n videoID = vimeoMatch[3];\n if(!$current.parent(\".press-video\").length)\n me.vimeoVideoThumbNail(me, $current, videoID);\n } else if (youtubeMatch) {\n videoID = youtubeMatch[1];\n if(!$current.parent(\".press-video\").length) {\n $current.addClass(\"lazyload\");\n $current.attr('data-bgset', 'https://img.youtube.com/vi/' + videoID + '/maxresdefault.jpg');\n }\n // $current.attr('style', 'background-image: url(\" https://img.youtube.com/vi/' + videoID + '/maxresdefault.jpg\");');\n }\n })\n\n \n function handleClick(e){\n if (!e.keyCode || e.keyCode === '13') {\n var currentElm = e.srcElement,\n videoLink = currentElm.href,\n videoID = 0;\n var vimeoMatch, youtubeMatch;\n if (videoLink && videoLink.length > 0) {\n vimeoMatch = videoLink.match(vimeoRegExp);\n youtubeMatch = videoLink.match(youtubeRegExp);\n }\n e.preventDefault();\n if (!me.openVideoInNewTab($(currentElm))) {\n if (vimeoMatch) {\n videoID = vimeoMatch[3];\n handleLaunchOfVideoOverlay(videoID, playerWidth, playerHeight, me.vimeoVideoOverlay);\n } else if (youtubeMatch) {\n videoID = youtubeMatch[1];\n handleLaunchOfVideoOverlay(videoID, playerWidth, playerHeight, me.youTubeVideoOverlay);\n }\n }\n \n }\n }\n\n elem.each(function (idx, item) {\n item.onclick = handleClick;\n item.onkeydown = handleClick;\n });\n };\n\n this.launchNewsletter = function ($elem) {\n\n //opening the overlay and the basket\n $($elem).on('click keydown', function (e) {\n if (!e.keyCode || e.keyCode === '13') {\n // on click - button name changes to \"loading...\" at the end\n // open the modal\n me.newsletterOverlay();\n return false;\n }\n });\n };\n\n this.overlayContactProcess = function(elem, container, postFormURL){\n var $optionErrors = $(container).find(\".checkbox-inline .error\");\n var $emailErrors = $(container).find(\".footer .error\");\n // FocusTrap\n var findInsiders = function (elem) {\n //reset\n var content = elem.find('.content');\n content.find('input, textarea, select').val('');\n content.find('input[type=checkbox], input[type=radio]').prop('checked', false); \n $optionErrors.empty().addClass('hide');\n $emailErrors.empty().addClass('hide');\n \n autoFocusAtFirstElm(elem);\n\n /* allow escape key to close insiders div */\n elem.on('keyup', function (e) {\n if (e.keyCode === 27) {\n lastFocusElement.focus();\n me.resetEpiForm();\n elem.hide();\n };\n });\n };\n\n findInsiders($(container));\n var recaptchaContainer = $(container).find(\".g-recaptcha\");\n var recaptcha = null;\n if (recaptchaContainer.length) {\n recaptcha = new GT.Captcha(recaptchaContainer, {\n settings: {\n error_origin: \"selector\",\n error_value: \"\",\n error_selector: \"data-captcha-error\",\n error_where: \"after\"\n }\n });\n }\n $(container).find(\"a.subscribe-btn\").click(function (e) {\n e.preventDefault();\n\n var $btn = $(this);\n if ($btn.attr('disabled') === 'disabled') {\n return false;\n }\n\n var $selectedCbxs = $(container).find(\".checkbox-inline input:checked\");\n var email = $(container).find(\"input#subscribeEmail\").val();\n var keys = [];\n var hpc = $(container).find('.hpc').val();\n var recaptchaVal = \"\";\n if (recaptcha) {\n recaptchaVal = $(container).find('.g-recaptcha-response').val();\n }\n\n if ((recaptcha && !recaptcha.captchaChecked)) {\n recaptcha.showRecaptchaErrorMsg();\n return false;\n }\n $btn.attr('disabled', 'disabled');\n\n $.each($selectedCbxs, function (i, val) {\n keys.push($(val).attr(\"id\"));\n });\n var subscribeFormModel = {\n Email: email,\n Keys: keys,\n HoneyPotCaptcha: hpc,\n CurrentLanguage: window.gtConfig.currentLanguageId,\n ReCaptchaToken: recaptchaVal,\n ContactPageId: $(\"#ContactPageId\").val()\n };\n var jsonData = JSON.stringify(subscribeFormModel);\n var postFormAjaxOptions = {\n url: postFormURL,\n type: \"POST\",\n data: jsonData,\n contentType: \"application/json; charset=utf-8\",\n dataType: \"json\",\n success: function (data, results, info) {\n $btn.removeAttr('disabled');\n if (data.Success) {\n $('.newsletter-container .content').children('div:not(.thanks)').hide();\n $('.thanks').find('a.close').addClass('link-btn link-btn-page');\n $('.newsletter-container .thanks').show();\n findInsiders($(container));\n $('.newsletter-container .thanks').find('.close').on('click', function (e) {\n e.preventDefault();\n $(container).find(\".js-close-overlay\").click();\n me.resetEpiForm();\n lastFocusElement.focus();\n });\n } else {\n if (!data.IsEmailValid) {\n $.each(data.EmailErrors, function (i, val) {\n $emailErrors.empty();\n $emailErrors.append($(\"

\").text(val));\n $emailErrors.removeClass(\"hide\");\n });\n } else {\n $emailErrors.addClass(\"hide\");\n }\n \n if (!data.AreKeysValid) {\n $.each(data.KeysErrors, function (i, val) {\n $optionErrors.empty();\n $optionErrors.append($(\"

\").text(val));\n $optionErrors.removeClass(\"hide\");\n });\n } else {\n $optionErrors.addClass(\"hide\");\n }\n }\n },\n // if error (302) - honeypot GTE-462\n error: function (data) {\n //$('.newsletter-container .content').empty().append(data.responseText);\n $optionErrors.empty().append(data.responseText).removeClass('hide');\n $btn.removeAttr('disabled');\n }\n };\n $.ajax(postFormAjaxOptions);\n });\n }\n\n this.loadOverlayContact = function (elem) {\n\n $(elem).click(function (e) {\n e.preventDefault();\n lastFocusElement = this;\n var postFormURL = $(this).data('postajax');\n var url = $(this).data('href');\n var containerWidth = 640, containerHeight = 457;\n var container = '.newsletter-container';\n var winWidth = $(window).innerWidth();\n\n //FocusTrap\n if (containerWidth > winWidth) {\n containerWidth = winWidth;\n }\n\n if (url != \"#\") {\n container = '.newsletter-container[subscribe-overlay]';\n var options = {\n url: url,\n success: function (data, results, info) {\n me.runOverlay(data, container, containerWidth, containerHeight, true, true);\n me.overlayContactProcess(elem, container, postFormURL);\n }\n };\n $.ajax(options);\n }else{\n me.runOverlay(document.getElementsByClassName('newsletter-container')[0], container, containerWidth, containerHeight, true, true);\n me.overlayContactProcess(elem, container, postFormURL);\n }\n });\n },\n this.loadOverlaySeminar = function (elem) {\n elem.click(function (e) {\n e.preventDefault();\n var postFormURL = $(this).data('postajax');\n var options = {\n url: $(this).attr('href'),\n success: function (data, results, info) {\n var containerWidth = 640, containerHeight = 457;\n var container = 'form.subscribe-semminars-container';\n var winWidth = $(window).innerWidth();\n if (containerWidth > winWidth) {\n containerWidth = winWidth;\n }\n me.runOverlay(data, container, containerWidth, containerHeight, true, true);\n var $container = $(container);\n var recaptchaContainer = $container.find(\".g-recaptcha\");\n var recaptcha = null;\n if (recaptchaContainer.length) {\n recaptcha = new GT.Captcha(recaptchaContainer, {\n settings: {\n error_origin: \"selector\",\n error_value: \"\",\n error_selector: \"data-captcha-error\",\n error_where: \"after\"\n }\n });\n }\n\n $(document).on(\"submit\", container, function (e) {\n e.preventDefault();\n\n var current = this;\n var $nameError = $(current).find(\"#nameErrorMessage\");\n var $emailError = $(current).find(\"#emailErrorMessage\");\n var $optionsError = $(current).find(\"#optionsErrorMessage\");\n var $optinError = $(current).find(\"#optinErrorMessage\");\n\n $nameError.addClass(\"hide\");\n $nameError.prev().removeClass(\"errors\");\n $emailError.addClass(\"hide\");\n $emailError.prev().removeClass(\"errors\");\n $optinError.addClass(\"hide\");\n $optionsError.addClass(\"hide\");\n\n var $btn = $(this).find(\".subscribe-btn\");\n if ($btn.attr('disabled') === 'disabled') {\n return false;\n }\n var $selectedCbxs = $(current).find(\".js-seminar-keys .checkbox-inline input:checked\");\n var $selectedOptin = $(current).find(\".js-seminar-optin .checkbox-inline input:checked\");\n var name = $(current).find(\"input#subscribeName\").val();\n var email = $(current).find(\"input#subscribeEmail\").val();\n var hpc = $(current).find('.hpc').val();\n var valid = {};\n valid.Email = /^[-a-z0-9~!$%^&*_=+}{\\'?]+(\\.[-a-z0-9~!$%^&*_=+}{\\'?]+)*@([a-z0-9_][-a-z0-9_]*(\\.[-a-z0-9_]+)*\\.([a-z]([a-z])+)|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,5})?$/i.test(email);\n valid.Name = name.length > 0 && /^\\D+$/i.test(name);\n valid.Optin = $selectedOptin.length;\n valid.Keys = $selectedCbxs.length;\n\n if (!valid.Name) {\n $nameError.removeClass(\"hide\");\n $nameError.prev().addClass(\"errors\");\n }\n if (!valid.Email) {\n $emailError.removeClass(\"hide\");\n $emailError.prev().addClass(\"errors\");\n }\n if (!valid.Optin) {\n $optinError.removeClass(\"hide\");\n }\n if (!valid.Keys) {\n $optionsError.removeClass(\"hide\");\n }\n if (valid.Email && valid.Keys && valid.Name && valid.Optin && hpc.length === 0) {\n var postFormAjaxOptions = {\n url: postFormURL,\n type: \"POST\",\n dataType: \"json\",\n data: $(current).serialize(),\n contentType: \"application/json; charset=utf-8\",\n dataType: \"json\",\n success: function (data) {\n $btn.removeAttr('disabled');\n $nameError.addClass(\"hide\");\n $emailError.addClass(\"hide\");\n $optinError.removeClass(\"hide\");\n $optionsError.addClass(\"hide\");\n\n $('.subscribe-semminars-container .content').children().hide();\n $('.thanks').show().parent().show();\n $('.field-group, .footer').hide();\n $('.thanks').find('a.close').addClass('link-btn link-btn-page');\n $('.subscribe-semminars-container .thanks').show().find('.close').on('click', function (e) {\n e.preventDefault();\n $(current).find(\".js-close-overlay\").click();\n });\n },\n // if error (302) - honeypot GTE-462\n error: function (data) {\n // $('.subscribe-semminars-container .content').empty().append(data.responseText);\n $btn.removeAttr('disabled');\n }\n };\n try {\n if ((recaptcha && recaptcha.captchaChecked) || !recaptcha) {\n $.ajax(postFormAjaxOptions);\n }\n } catch (ex) {\n console.warn(ex);\n }\n }\n });\n\n }\n };\n $.ajax(options);\n });\n };\n\n this.calculateAndSetOverlayPos = function ($overlay, isNewsletter) {\n\n // get window width & height\n var $window = $(window);\n var winWidth = me.getWindowWidth($window);\n var winHeight = me.getWindowHeight($window);\n\n // get overlay width & height\n var overlayW = $overlay.outerWidth(true);\n $overlay.css({ 'height': '' });\n var overlayH = $overlay.outerHeight(true);\n // if overlay is heigher or wider than window - adjust it's size\n // center overlay in window (vertically & horizontally)\n if (overlayH > winHeight) {\n $overlay.css({ 'height': winHeight + 'px', 'overflow': 'auto' });\n // no need to center\n } else {\n // center vertically\n if (isNewsletter) {\n var topOffset = (winHeight - overlayH) / 2;\n } else {\n var topOffset = ((winHeight - overlayH) / 2) + $window.scrollTop();\n }\n $overlay.css({ 'top': topOffset + 'px' });\n }\n\n if (overlayW > winWidth) {\n $overlay.width(winWidth);\n // no need to center\n } else {\n // center horizontally\n var leftOffset = (winWidth - overlayW) / 2;\n $overlay.css({ 'left': leftOffset + 'px' });\n }\n\n };\n\n this.resizeOverlay = function ($elem) {\n\n // resize overlay if it's open\n $(window).resize(function () {\n var $overlay = $('.overlay');\n if ($overlay.length && $overlay.css('display') !== 'none') {\n //me.calculateAndSetOverlayPos($('.newsletter-container'), true);\n }\n });\n };\n\n this.overlayTabNavHandlerOnOpen = function () {\n\n $(\"*[tabindex != '-1']:visible\").each(function () {\n var $this = $(this);\n if (!$this.closest('.newsletter-container').length && !$this.closest('.expert-modal').length) {\n $this.attr('tabindex', '-1').addClass('js-tabbable-blocked');\n }\n });\n };\n\n this.overlayTabNavHandlerOnClose = function () {\n\n $('.js-tabbable-blocked').each(function () {\n $(this).removeAttr('tabindex').removeClass('js-tabbable-blocked');\n });\n };\n\n let htmlElm = document.firstElementChild; \n\n //Performance issue\n // this.initHeaderOverlay = function () {\n // let headerOverlayHtml = '

',\n // body = htmlElm.querySelector('body');\n \n // // body.innerHTML += headerOverlayHtml;\n // body.insertAdjacentHTML(\"beforeend\", headerOverlayHtml);\n // }\n // this.initHeaderOverlay()\n \n \n this.toggleHeaderOverlay = function() { \n htmlElm.classList.toggle('opening-header-overlay')\n }\n \n this.showHeaderOverlay = function() { \n htmlElm.classList.add('opening-header-overlay')\n }\n \n this.hideHeaderOverlay = function() { \n htmlElm.classList.remove('opening-header-overlay')\n }\n\n};\n\n\nGT.Overlays = new GTOverlays();\nGT.domContentLoadedFncList.push(function(){\n if(typeof isV1GT == \"undefined\") {\n GT.Overlays.launchVideoOverlay($('.video__with-overlay'));\n GT.Overlays.launchOverlay($('.youtube-video'));\n GT.Overlays.loadOverlayContact($('#launchContactFormSubscribe:not([data-epiforms-overlay])'));\n GT.Overlays.loadOverlaySeminar($('#launchSemminarsFormSubscribe'));\n }\n});\n\nGT.EmailObfuscate = function (elem) {\n\t$(document).on('mouseover touchstart focus',\n\t\t'[data-obfuscate-specific=\"true\"]',\n\t\tfunction (e) {\n\t\t\tvar $m = $(this);\n\t\t\tvar href = $m.attr('href');\n\t\t\tif (!href) {\n\t\t\t\t$m.attr('target', '_blank');\n\t\t\t\tvar user = $m.data('user');\n\t\t\t\tvar domain = $m.data('domain');\n\t\t\t\tvar subject = $m.data('subject');\n\t\t\t\tvar bccUser = $m.data('bccuser');\n\t\t\t\tvar bccDomain = $m.data('bccdomain');\n\t\t\t\tif (user != '' && domain != '') {\n\t\t\t\t\tvar email = user + '@' + domain;\n\t\t\t\t\tvar emailOnly = email;\n\t\t\t\t\tif (subject != '' && subject != undefined && subject != null) {\n\t\t\t\t\t\temail = email + '?subject=' + subject;\n\t\t\t\t\t\tif (bccUser != '' && bccUser != undefined && bccUser != null) {\n\t\t\t\t\t\t\tvar bcc = bccUser + '@' + bccDomain;\n\t\t\t\t\t\t\temail = email + '&bcc=' + bcc;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (bccUser != '' && bccUser != undefined && bccUser != null) {\n\t\t\t\t\t\t\tvar bcc = bccUser + '@' + bccDomain;\n\t\t\t\t\t\t\temail = email + '?bcc=' + bcc;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$m.closest(\"a\").attr('href', 'mailto:' + email);\n\t\t\t\t\tvar isMobile = GT.isMobile();\n\t\t\t\t\tif (!isMobile && $($m, \".email-obfuscate\").length) {\n\t\t\t\t\t\tvar $emailObfucate = $m.find(\".email-obfuscate\");\n\t\t\t\t\t\tvar $buttonText = $emailObfucate.parents('.button-vi-text');\n\t\t\t\t\t\t$emailObfucate.remove();\n\t\t\t\t\t\tif($buttonText.length <= 0) {\n\t\t\t\t\t\t\t$m.append('' + emailOnly + '');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$buttonText.text(emailOnly);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (GT.isIE()) {\n\t\t\t\t\t\t$m[0].blur();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\tif (typeof(isEnableMailtoDialog) == \"undefined\" || !isEnableMailtoDialog) {\n\t\t$(document).on('mouseover touchstart focus',\n\t\t\t'[data-obfuscate=\"true\"]',\n\t\t\tfunction (e) {\n\t\t\t\tvar $m = $(this);\n\t\t\t\tvar href = $m.attr('href');\n\t\t\t\tif (!href) {\n\t\t\t\t\t$m.attr('target', '_blank');\n\t\t\t\t\tvar user = $m.data('user');\n\t\t\t\t\tvar domain = $m.data('domain');\n\t\t\t\t\tvar subject = $m.data('subject');\n\t\t\t\t\tvar bccUser = $m.data('bccuser');\n\t\t\t\t\tvar bccDomain = $m.data('bccdomain');\n\t\t\t\t\tif (user != '' && domain != '') {\n\t\t\t\t\t\tvar email = user + '@' + domain;\n\t\t\t\t\t\tif (subject != '' && subject != undefined && subject != null) {\n\t\t\t\t\t\t\temail = email + '?subject=' + subject;\n\t\t\t\t\t\t\tif (bccUser != '' && bccUser != undefined && bccUser != null) {\n\t\t\t\t\t\t\t\tvar bcc = bccUser + '@' + bccDomain;\n\t\t\t\t\t\t\t\temail = email + '&bcc=' + bcc;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (bccUser != '' && bccUser != undefined && bccUser != null) {\n\t\t\t\t\t\t\t\tvar bcc = bccUser + '@' + bccDomain;\n\t\t\t\t\t\t\t\temail = email + '?bcc=' + bcc;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$m.closest(\"a\").attr('href', 'mailto:' + email);\n\t\t\t\t\t\tif (GT.isIE()) {\n\t\t\t\t\t\t\t$m[0].blur();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t} else {\n\t\t$(document).on('click',\n\t\t\t'[data-obfuscate=\"true\"]',\n\t\t\tfunction (e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tvar $m = $(this);\n\t\t\t\tif($m.attr(\"data-obfuscate-specific\"))\n\t\t\t\t\treturn;\n\t\t\t\t$m.attr('href', \"#\");\n\t\t\t\tif ($m && mailtoDialogTemplate) {\n\t\t\t\t\tvar user = $m.data('user');\n\t\t\t\t\tvar domain = $m.data('domain');\n\t\t\t\t\tvar subject = $m.data('subject');\n\t\t\t\t\tvar bccUser = $m.data('bccuser');\n\t\t\t\t\tvar bccDomain = $m.data('bccdomain');\n\t\t\t\t\tif (user != '' && domain != '') {\n\t\t\t\t\t\tvar email = user + '@' + domain,\n\t\t\t\t\t\t\tmailto = email;\n\t\t\t\t\t\tif (subject != '' && subject != undefined && subject != null) {\n\t\t\t\t\t\t\temail = email + '&subject=' + subject;\n\t\t\t\t\t\t\tif (bccUser != '' && bccUser != undefined && bccUser != null) {\n\t\t\t\t\t\t\t\tvar bcc = bccUser + '@' + bccDomain;\n\t\t\t\t\t\t\t\tmailto = email + '&bcc=' + bcc;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (bccUser != '' && bccUser != undefined && bccUser != null) {\n\t\t\t\t\t\t\t\tvar bcc = bccUser + '@' + bccDomain;\n\t\t\t\t\t\t\t\tmailto = email + '?bcc=' + bcc;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar newMailtoDialogTemplate = mailtoDialogTemplate\n\t\t\t\t\t\t\t\t\t\t\t\t\t.replaceAll(\"gmailto\", mailto.replace(\"?\", \"&\"))\n\t\t\t\t\t\t\t\t\t\t\t\t\t.replaceAll(\"mailto\", mailto)\n\t\t\t\t\t\t\t\t\t\t\t\t\t.replaceAll(\"mailoption\", \"mailto:\" + mailto)\n\t\t\t\t\t\t\t\t\t\t\t\t\t.replaceAll(\"copyemail\", email)\n\t\t\t\t\t\t\t\t\t\t\t\t\t.replaceAll(\"copybcc\", bcc);\n\t\t\t\t\t\tif(!bcc) {\n\t\t\t\t\t\t\tnewMailtoDialogTemplate = newMailtoDialogTemplate.replace(\"hidebccblock\", \"hide\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar $mailtoTemplate = $(\"#emailDialogTemplate\");\n\t\t\t\t\t\tif ($mailtoTemplate)\n\t\t\t\t\t\t\t$mailtoTemplate.remove();\n\t\t\t\t\t\tGT.Overlays.runOverlay(newMailtoDialogTemplate, '#emailDialogTemplate', 640, 457, true, true, false, function(){\n\t\t\t\t\t\t\t$m.focus();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tvar clientSelect = document.querySelector('.js-client-select'),\n\t\t\t\t\t\t\tclientOpen = document.querySelector('.js-client-open');\n\n\t\t\t\t\t\tdocument.querySelector('.js-copy').addEventListener('click', function () {\n\t\t\t\t\t\t\t\tvar copyText = document.getElementById(\"emailMailtoInput\");\n\n\t\t\t\t\t\t\t\t/* Select the text field */\n\t\t\t\t\t\t\t\tcopyText.select();\n\t\t\t\t\t\t\t\tcopyText.setSelectionRange(0, 99999); /*For mobile devices*/\n\n\t\t\t\t\t\t\t\t/* Copy the text inside the text field */\n\t\t\t\t\t\t\t\tdocument.execCommand(\"copy\");\n\t\t\t\t\t\t\t\t$(\"#emailDialogTemplate\").find('.copied-confirmation.bcc').removeClass('show-confirmation');\n\t\t\t\t\t\t\t\t$(\"#emailDialogTemplate\").find('.copied-confirmation.email').addClass('show-confirmation');\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tdocument.querySelector('.js-copy-bcc').addEventListener('click', function () {\n\t\t\t\t\t\t\t\tvar copyText = document.getElementById(\"emailBCCtoInput\");\n\n\t\t\t\t\t\t\t\t/* Select the text field */\n\t\t\t\t\t\t\t\tcopyText.select();\n\t\t\t\t\t\t\t\tcopyText.setSelectionRange(0, 99999); /*For mobile devices*/\n\n\t\t\t\t\t\t\t\t/* Copy the text inside the text field */\n\t\t\t\t\t\t\t\tdocument.execCommand(\"copy\");\n\t\t\t\t\t\t\t\t$(\"#emailDialogTemplate\").find('.copied-confirmation.email').removeClass('show-confirmation');\n\t\t\t\t\t\t\t\t$(\"#emailDialogTemplate\").find('.copied-confirmation.bcc').addClass('show-confirmation');\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tclientSelect.addEventListener('change',\n\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\tvar clientSelection = clientSelect.value;\n\t\t\t\t\t\t\t\tclientOpen.setAttribute('href', clientSelection);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t$(document).ready(function () {\n\n\t\tvar beforePrint = function (e) {\n\t\t\t$('.email-obfuscate').each(function () {\n\t\t\t\t$(this).html($(this).attr(\"data-user\") + \"@\" + $(this).attr(\"data-domain\"));\n\t\t\t});\n\t\t\t$('.email-obfuscate').addClass('printing');\n\n\t\t\t$('.icon-social-email').each(function () {\n\t\t\t\tvar user, domain;\n\t\t\t\tif ($(this).find('.ir').length > 0) {\n\t\t\t\t\t$(this).find(\".ir\").html('');\n\t\t\t\t\tuser = $(this).attr(\"data-user\");\n\t\t\t\t\tdomain = $(this).attr(\"data-domain\");\n\t\t\t\t\t$(this).find(\".ir\").html(user + \"@\" + domain);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\tvar afterPrint = function (e) {\n\t\t\t$('.email-obfuscate').removeClass('printing').html('');\n\t\t\t$('.icon-social-email .ir').html('Email address');\n\t\t\t$('[data-obfuscate=\"true\"]').blur();\n\t\t};\n\n\t\tif (window.matchMedia) {\n\t\t\twindow.matchMedia('print').addListener(function (mql) {\n\t\t\t\tif (mql.matches) {\n\t\t\t\t\tbeforePrint();\n\t\t\t\t} else {\n\t\t\t\t\tafterPrint();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\twindow.onbeforeprint = beforePrint;\n\t\twindow.onafterprint = afterPrint;\n\t}());\n};\n\nif (typeof isV1GT == \"undefined\")\n\tGT.domContentLoadedFncList.push(function(){\n\t\tGT.EmailObfuscate();\n\t});\nGT.GTMGlobal = (function(){\n let fncList = {\n clickBlock: clickEvtBlock,\n megaMenuV3: megaMenuV3ClickEvt,\n megaMenu: megaMenuClickEvt,\n megaMenuV1Mobile: megaMenuClickEvtV1Mobile,\n globalSearch: globalSearch\n };\n\n function clickEvtBlock() {\n document.querySelectorAll(\"[data-tracking-block]\").forEach(elm => {\n elm.querySelectorAll(\"a, [data-anchor]\").forEach(anchorElm => {\n anchorElm.addEventListener(\"click\", (e) => {\n let link = e.target.href || e.currentTarget.href || (e.target.dataset && e.target.dataset.anchor) || (e.currentTarget.dataset && e.currentTarget.dataset.anchor),\n allowTracking = false;\n\n if(document.querySelector(\".home-page-container\"))\n allowTracking = true;\n\n if(link && allowTracking)\n dataLayer.push({ \n 'event': 'block_view',\n 'blockName': elm.dataset.trackingBlock, \n 'blockLink': link\n });\n })\n })\n })\n }\n\n function megaMenuV3ClickEvt() {\n setTimeout(() => {\n document.querySelectorAll(\".nav3 a, .nav3 [data-anchor]\").forEach(elm => {\n if (!elm.dataset.initializedTracking) {\n elm.dataset.initializedTracking = true;\n elm.addEventListener(\"click\", (e) => {\n let currentTarget = e.currentTarget || e.target,\n link = currentTarget.href || currentTarget.dataset.anchor,\n containerClick = \"level 1\",\n menuLevel_1 = \"\",\n menuLevel_2 = \"\",\n menuLevel_3 = \"\";\n\n if (currentTarget.closest(\".level-1\")) {\n menuLevel_1 = currentTarget.closest(\".nav-link\")?.innerText;\n }\n\n if (currentTarget.closest(\".bleed\")) {\n if (currentTarget.closest(\".mega__level--2\")) {\n containerClick = \"level 2\";\n menuLevel_2 = currentTarget.closest(\".mega__level--2\").querySelector(\".mega-link--level-2\")?.innerText;\n }\n if (!menuLevel_1)\n menuLevel_1 = currentTarget.closest(\".bleed\")?.dataset.content;\n }\n\n if (currentTarget.closest(\".mega-link--level-3\")) {\n if (currentTarget.closest(\".mega-link--level-2-placeholder\")) {\n containerClick = \"level 2\";\n menuLevel_2 = currentTarget.dataset.linktext ? currentTarget.dataset.linktext : currentTarget.innerText;\n } else {\n containerClick = \"level 3\";\n menuLevel_3 = currentTarget.innerText;\n }\n }\n\n if (currentTarget.closest(\".header-logo\")) {\n containerClick = \"logo\";\n }\n\n if (currentTarget.closest(\".message-top-banner__message\")) {\n containerClick = \"top banner\";\n }\n\n if (currentTarget.closest(\".additional-link\") || currentTarget.closest(\".externalLoginButton\") || (currentTarget.closest(\".mobile__footer\") && !currentTarget.closest(\".list__global\") && !currentTarget.hreflang)) {\n containerClick = \"header\";\n menuLevel_1 = currentTarget.textContent?.trim();\n }\n\n if (currentTarget.closest(\".site-language\") || (currentTarget.closest(\".lang__elem\") && currentTarget.hreflang)) {\n containerClick = \"header\";\n menuLevel_1 = \"language\";\n }\n\n if (currentTarget.closest(\".local-site-link\")) {\n containerClick = \"header\";\n menuLevel_1 = \"member firm\";\n }\n\n if (link) {\n dataLayer.push({\n 'event': 'menu_click',\n 'containerClick': containerClick,\n 'menuLevel_1': menuLevel_1 || \"\",\n 'menuLevel_2': menuLevel_2 || \"\",\n 'menuLevel_3': menuLevel_3 || \"\",\n 'containerLink': link\n });\n }\n })\n }\n })\n }, 1000)\n }\n\n function megaMenuClickEvt(){\n setTimeout(() => {\n document.querySelectorAll(\"header a, header [data-anchor]\").forEach(elm => {\n if(!elm.dataset.initializedTracking) {\n elm.dataset.initializedTracking = true;\n elm.addEventListener(\"click\", (e) => {\n let currentTarget = e.currentTarget || e.target,\n link = currentTarget.href || currentTarget.dataset.anchor,\n containerClick = \"level 1\",\n menuLevel_1 = \"\",\n menuLevel_2 = \"\",\n menuLevel_3 = \"\";\n\n if(currentTarget.closest(\".mobile__wrap\") && !currentTarget.closest(\".mobile__footer\")) return;//NAV V1 Mobile\n\n if(currentTarget.closest(\".level-1\")) {\n menuLevel_1 = currentTarget.closest(\".nav-link\")?.innerText;\n }\n\n if(currentTarget.closest(\".bleed\")) {\n if(\n (currentTarget.closest(\".bleed__col--left\") && !currentTarget.closest(\".mega-header\") && !currentTarget.matches(\".mega-link--has-submenu, .group-name-text\"))\n || \n (currentTarget.closest(\".mega__level--3\") && !currentTarget.closest(\".bleed\").querySelector(\".group-name-text.selected\"))\n ) {\n containerClick = \"level 2\";\n menuLevel_2 = currentTarget.closest(\".mega-link--level-2\")?.innerText || currentTarget.closest(\".bleed\").querySelector(\".bleed__col--left .selected .mega-link--level-2\")?.innerText || currentTarget.closest(\".bleed\").querySelector(\".bleed__col--left .mega-link--level-2.active\")?.innerText;\n }\n if(!menuLevel_1)\n menuLevel_1 = currentTarget.closest(\".bleed\")?.dataset.content;\n }\n\n if(currentTarget.closest(\".mega__level--3\") && !currentTarget.closest(\".mega-header\") && !currentTarget.closest(\"span.h3\")) {\n containerClick = \"level 3\";\n menuLevel_3 = currentTarget.innerText;\n }\n\n if(currentTarget.closest(\".article-tile\")) {\n containerClick = \"Related-Insight\";\n menuLevel_3 = \"\";\n }\n\n if(currentTarget.closest(\".header-logo\")) {\n containerClick = \"logo\";\n }\n\n if(currentTarget.closest(\".message-top-banner__message\")) {\n containerClick = \"top banner\";\n }\n\n if(currentTarget.closest(\".additional-link\") || currentTarget.closest(\".externalLoginButton\") || (currentTarget.closest(\".mobile__footer\") && !currentTarget.closest(\".list__global\") && !currentTarget.hreflang)) {\n containerClick = \"header\";\n menuLevel_1 = currentTarget.textContent?.trim();\n }\n\n if(currentTarget.closest(\".site-language\") || (currentTarget.closest(\".lang__elem\") && currentTarget.hreflang)) {\n containerClick = \"header\";\n menuLevel_1 = \"language\";\n }\n\n if(currentTarget.closest(\".local-site-link\")) {\n containerClick = \"header\";\n menuLevel_1 = \"member firm\";\n }\n\n if(link) {\n dataLayer.push({ \n 'event': 'menu_click',\n 'containerClick': containerClick,\n 'menuLevel_1': menuLevel_1 || \"\",\n 'menuLevel_2': menuLevel_2 || \"\",\n 'menuLevel_3': menuLevel_3 || \"\",\n 'containerLink': link\n });\n }\n })\n }\n })\n }, 1000)\n }\n\n function megaMenuClickEvtV1Mobile() {\n function triggerTracking() {\n setTimeout(() => {\n document.querySelectorAll(\".mobile__wrap a, .mobile__wrap [data-anchor]\").forEach(elm => {\n if(!elm.dataset.initialized) {\n elm.dataset.initialized = true;\n elm.addEventListener(\"click\", (e) => {\n triggerTracking();\n let currentTarget = e.currentTarget || e.target,\n link = currentTarget.href || currentTarget.dataset.anchor,\n containerClick = \"level 1\",\n menuLevel_1 = \"\",\n menuLevel_2 = \"\",\n menuLevel_3 = \"\";\n\n if(!currentTarget.closest(\".mobile__wrap\") || currentTarget.closest(\"[aria-haspopup]\")) return;//NAV V1 Mobile\n\n if(currentTarget.closest(\".level-1\")) {\n menuLevel_1 = currentTarget.closest(\".nav-link\")?.innerText;\n }\n\n if(currentTarget.closest(\".mobile__level--2\") && !currentTarget.closest(\".mobile__level--2\").querySelector(\".group-name-text.mega-link\")) {\n containerClick = \"level 2\";\n menuLevel_2 = currentTarget.innerText;\n menuLevel_1 = currentTarget.closest(\".mobile__wrap\")?.querySelector(\".mobile__level--1 [aria-expanded=true]\")?.innerText;\n }\n\n if(currentTarget.closest(\".mobile__level--3\")) {\n containerClick = \"level 3\";\n menuLevel_3 = currentTarget.innerText;\n menuLevel_1 = currentTarget.closest(\".mobile__wrap\")?.querySelector(\".mobile__level--1 [aria-expanded=true]\")?.innerText;\n menuLevel_2 = currentTarget.closest(\".mobile__wrap\")?.querySelector(\".mobile__level--2 [aria-expanded=true]\")?.innerText;\n }\n \n if(currentTarget.closest(\".article-tile\")) {\n containerClick = \"Related-Insight\";\n menuLevel_3 = \"\";\n }\n\n if(link) {\n dataLayer.push({ \n 'event': 'menu_click',\n 'containerClick': containerClick,\n 'menuLevel_1': menuLevel_1 || \"\",\n 'menuLevel_2': menuLevel_2 || \"\",\n 'menuLevel_3': menuLevel_3 || \"\",\n 'containerLink': link\n });\n }\n })\n }\n })\n }, 1000)\n }\n document.querySelector(\"header:not(.nav2) .menu-toggle\")?.addEventListener(\"click\", (e) => {\n triggerTracking();\n })\n }\n\n function globalSearch(){\n\n const __TYPE_POPULAR = \"Popular searches\",\n __TYPE_PREVIOUS = \"Previous searches\",\n __TYPE_RECENT = \"Recently visited\",\n __TYPE_SUGGESTION = \"Search suggestions\",\n __TYPE_YOUR_RESULTS = \"Your Results\",\n __TYPE_ALL_RESULTS = \"See all results\",\n __TYPE_SITE_SEARCH = \"Site Search\";\n\n function pushData(search_term, search_type, search_link, search_text){\n if(search_link && search_type)\n dataLayer.push({\n 'search_term': search_term,\n 'search_type': search_type,\n 'search_link': search_link,\n 'search_text': search_text,\n 'event': 'search_used'\n });\n }\n\n document.querySelectorAll(\"#previous-search__container a, .popular-search__container a, .recently-visited__container a, .suggestions-search__container a\").forEach(item => {\n if(!item.dataset.initialized) {\n item.addEventListener(\"click\", e => {\n let currentElm = e.currentTarget || e.target;\n let searchType = \"\",\n searchText = currentElm.innerText,\n searchTerm = document.querySelector(\"#searchField\")?.value || \"\";\n\n if(currentElm.closest(\".search-contents__container.popular-search__container\")) searchType = __TYPE_POPULAR;\n if(currentElm.closest(\"#previous-search__container\")) searchType = __TYPE_PREVIOUS;\n if(currentElm.closest(\".recently-visited__container\")) searchType = __TYPE_RECENT;\n if(currentElm.closest(\".suggestions-search__container\")) searchType = __TYPE_SUGGESTION;\n if(currentElm.closest(\".has-search__results\")) searchType = __TYPE_YOUR_RESULTS;\n if(currentElm.closest(\".viewall-results\")) searchText = __TYPE_ALL_RESULTS;\n if([__TYPE_POPULAR, __TYPE_PREVIOUS, __TYPE_RECENT].indexOf(searchType) >= 0) searchTerm = \"\";\n if(searchType) pushData(searchTerm, searchType, currentElm.href, searchText);\n })\n item.dataset.initialized = true;\n }\n })\n\n let currentFormx = document.querySelector(\".header-search__form\");\n if(currentFormx && !currentFormx.dataset.initialized) {\n currentFormx.dataset.initialized = true;\n currentFormx.addEventListener(\"submit\", function(e) {\n let currentElm = e.currentTarget || e.target;\n let searchText = currentElm.querySelector(\"#searchField\")?.value;\n const queryString = new URLSearchParams(new FormData(currentElm)).toString()\n pushData(searchText, __TYPE_SITE_SEARCH, currentElm.action + \"?\" + queryString, searchText);\n })\n }\n }\n\n return fncList;\n});\n\nGT.domContentLoadedFncList.push(function(){\n GT.GTMGlobal = GT.GTMGlobal();\n Object.keys(GT.GTMGlobal).forEach(function(key){\n GT.GTMGlobal[key]();\n })\n})"],"names":["GTCookies","this","cookieName","setCookie","name","value","expires","path","domain","today","Date","expires_date","setTime","getTime","document","cookie","encodeURI","toGMTString","$","ajax","cache","url","type","dataType","success","data","console","log","error","xhr","setCookieWithoutServerCheck","getCookie","length","c_start","indexOf","c_end","decodeURI","substring","deleteCookie","cookieNotify","cprompt","cookieCTA","me","querySelector","remove","find","show","on","e","keyCode","slideUp","currentTarget","val","preventDefault","let","linkTertiaryList","getCustomClampLines","clampElm","_lines","dataset","clamplines","_tmpLines","JSON","parse","GT","wWidth","breakPoints","tablet_lg","mobile","desktop","LinkTertiary","push","setTimeout","hiddenLinkAnimation","classList","hideHyperLinkAnimation","forEach","timer","clearTimeout","_body","contains","add","domContentLoadedFncList","clampData","aboutblock","selector","lines","ibcblock","newsblock","relatedcontentwithimage","relatedcontentnoimage","event-block","semminar-block","insight-hub-block","global-article-clamp","upcoming-events__results","tombstone","tombstone-transaction","eventdetailpagev2","mega-menu-v2","renderAtPageLoad","t11-result-v2","getLineHeight","$elem","computedStyle","window","getComputedStyle","fontSize","parseFloat","replace","lineHeight","getNumberLineContent","divheight","offsetHeight","lineheight","Math","round","parseInt","clampArticleBlock","isForceReRender","articleText","articleTitle","authorElm","isNoImage","isNoDescription","isTrending","isReverse","isMediumDesktopView","clampText","elClamp","clamptext","textContent","numberLine","authorLine","customLineClamp","objTitle","settings","clamp","isHidden","removeAttribute","Clamp","setAttribute","closest","objText","elem","obj","spaces","doClamp","current","containerHeight","height","shave","lang","documentElement","clampKey","clampkey","oldClampKey","random","LazyEvent","initClampText","elmSelector","clampName","elms","querySelectorAll","Array","prototype","slice","call","elm","clampname","clampElms","clampElmsLength","i","item","clampRevertToOriginalText","clampDataLength","clampItem","clampSelectors","clampSelectorsLength","clampElmIndex","innerText","text","lazyeventTriggered","clampElmName","clampArticle","$article","retriggerClampList","windowResizeFncList","clampTextOnResize","Object","keys","clampItemKey","initTranslationDetect","originalLang","observer","htmlDom","isChrome","test","navigator","userAgent","vendor","notMobile","screen","width","attr","MutationObserver","currentLang","addClass","trigger","getElementsByTagName","observe","attributes","childList","subtree","revealElement","className","delay","css","animation-delay","GTSkipLink","shortcut","addEventListener","ahref","target","href","split","insightToggleBtn","firstFocusableElement","click","focus","lstElm","getListFocusableElms","getFirstFocusableVisible","GTOverlays","lastFocusElement","player","autoFocusAtFirstElm","tabbable","filter","firstTabbable","first","lastTabbable","last","which","shiftKey","_clientY","calculateOverlayH","$container","screenH","overlayH","offSetH","removeClass","getWindowWidth","$window","winWidth","hasClass","body","clientWidth","getWindowHeight","winHeight","clientHeight","max","innerHeight","disableRubberBand","event","container","clientY","targetTouches","scrollTop","isOverlayTotallyScrolled","overlay","scrollHeight","resetEpiForm","removeAttr","runOverlay","htmlOrRef","containerWidth","checkH","isNewsletter","doNotAddBindings","callbackOnClose","removeOnClose","$body","append","String","after","Element","closeOverlay","_container","is","hideOverlay","fadeOut","isFunction","outerHeight","blur","position","bind","overflow","stopImmediatePropagation","fadeIn","overlayTabNavHandlerOnOpen","off","firstElementChild","abs","setInertWhileOpeningDialog","overlayTabNavHandlerOnClose","youTubeOverlay","innerWidth","playerWidth","playerHeight","videoID","match","hideRelatedVideoInYoutube","vimeoVideoOverlay","id","vimeoVideoThumbNail","currentElem","youTubeVideoOverlay","loadPlayer","playerFrame","tag","firstScriptTag","YT","createElement","src","parentNode","insertBefore","onYouTubePlayerAPIReady","onYouTubePlayer","Player","videoId","events","onReady","onPlayerReady","onStateChange","onPlayerStateChange","playVideo","PlayerState","ENDED","seekTo","a","contentWindow","postMessage","stopVideo","newsletterOverlay","openVideoInNewTab","win","open","launchOverlay","handleClick","srcElement","youtubeLink","each","idx","onclick","onkeydown","launchVideoOverlay","vimeoRegExp","youtubeRegExp","handleLaunchOfVideoOverlay","videoFunction","currentElm","videoLink","vimeoMatch","youtubeMatch","$current","parent","launchNewsletter","overlayContactProcess","postFormURL","findInsiders","content","prop","$optionErrors","empty","$emailErrors","hide","recaptchaContainer","recaptcha","Captcha","error_origin","error_value","error_selector","error_where","$btn","$selectedCbxs","email","hpc","recaptchaVal","captchaChecked","showRecaptchaErrorMsg","subscribeFormModel","Email","Keys","HoneyPotCaptcha","CurrentLanguage","gtConfig","currentLanguageId","ReCaptchaToken","ContactPageId","jsonData","stringify","contentType","results","info","Success","children","IsEmailValid","EmailErrors","AreKeysValid","KeysErrors","responseText","loadOverlayContact","getElementsByClassName","loadOverlaySeminar","options","$nameError","$emailError","$optionsError","$optinError","prev","$selectedOptin","valid","Name","Optin","postFormAjaxOptions","serialize","ex","warn","calculateAndSetOverlayPos","$overlay","overlayW","outerWidth","topOffset","top","left","resizeOverlay","resize","$this","htmlElm","toggleHeaderOverlay","toggle","showHeaderOverlay","hideHeaderOverlay","InputLabel","input","label","HeadSearch","$element","$toggle","$content","$search","$parent","$globalreach","$lang","$login","$header","init","$close","topShift","activeElement","display","getElementById","Reveal","$elements","GetAnimation","animationType","defaultAnimation","duration","easing","distance","opacity","scale","viewFactor","beforeReveal","revealAnimation","extend","origin","targetElements","rvlItemClass","getAttribute","Animation","isMobileView","checkElmVisible","intersectObj","animationDelay","style","y","setProperty","transition","GTAnimation","fakeHyperLinkClickEvtList","fakeHyperLinkKeypressEvtList","FakeHyperlink","redirectLink","linkElm","anchor","el","index","func","funIdx","removeEventListener","handleClickEvt","handleKeypressEvt","stopPropagation","Overlays","isV1GT","EmailObfuscate","beforePrint","html","user","afterPrint","bccDomain","emailOnly","$emailObfucate","$buttonText","$m","subject","bccUser","undefined","isMobile","parents","isIE","isEnableMailtoDialog","mailto","bcc","newMailtoDialogTemplate","$mailtoTemplate","clientSelect","clientOpen","mailtoDialogTemplate","replaceAll","copyText","select","setSelectionRange","execCommand","clientSelection","ready","matchMedia","addListener","mql","matches","onbeforeprint","onafterprint","GTMGlobal","clickBlock","anchorElm","link","allowTracking","dataLayer","blockName","trackingBlock","blockLink","megaMenuV3","initializedTracking","containerClick","menuLevel_1","menuLevel_2","menuLevel_3","linktext","hreflang","trim","containerLink","megaMenu","megaMenuV1Mobile","triggerTracking","initialized","globalSearch","__TYPE_POPULAR","__TYPE_PREVIOUS","__TYPE_RECENT","pushData","search_term","search_type","search_link","search_text","searchType","searchText","searchTerm","currentFormx","queryString","URLSearchParams","FormData","toString","action","key"],"mappings":"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"}