if (!window.document.querySelectorAll) { document.querySelectorAll = document.body.querySelectorAll = Object.querySelectorAll = function querySelectorAllPolyfill(r, c, i, j, a) { var d=document, s=d.createStyleSheet(); a = d.all; c = []; r = r.replace(/\[for\b/gi, '[htmlFor').split(','); for (i = r.length; i--;) { s.addRule(r[i], 'k:v'); for (j = a.length; j--;) { a[j].currentStyle.k && c.push(a[j]); } s.removeRule(0); } return c; }; } var popMagic = { version: 10, cookie_name: "", url: "", config: {}, open_count: 0, top: null, browser: null, venor_loaded: false, venor: false, tcfData: null, remoteLicensedDomains: [ 'exdynsrv.com', 'exosrv.com', 'exoclick.com', 'opoxv.com', 'exacdn.com', 'pemsrv.com' ], configTpl: { "ads_host": '', "syndication_host": '', "idzone": '', "frequency_period": 720, "frequency_count": 1, "trigger_method": 1, "trigger_class": '', "popup_force": false, "popup_fallback": false, "chrome_enabled": true, "new_tab": false, "cat": '', "tags": '', "el": '', "sub": '', "sub2": '', "sub3": '', "block_ad_types": '', "only_inline": false, "trigger_delay": 0, "capping_enabled": true, "tcf_enabled": false, "agego_cross_site_enabled": true, "cookieconsent": true, "should_fire": function () { return true; }, "on_redirect": null, }, isAdsDomainLicensed: function() { var currentHost = this.config.ads_host; var devDomains = ['.local', 'localhost', '127.0.0.1']; var allDomains = this.remoteLicensedDomains.concat(devDomains); for (var i = 0; i < allDomains.length; i++) { var domain = allDomains[i]; if (typeof domain !== 'string') { continue; } if (domain.charAt(0) === '.') { var wildcard = domain; var root = domain.substring(1); var matchesWildcard = currentHost.slice(-wildcard.length) === wildcard; var matchesRoot = currentHost === root; if (matchesWildcard || matchesRoot) { return true; } } else { var exactMatch = currentHost === domain; var suffix = '.' + domain; var matchesSubdomain = currentHost.slice(-suffix.length) === suffix; if (exactMatch || matchesSubdomain) { return true; } } } return false; }, init: function (config) { if (typeof config.idzone === "undefined" || !config.idzone) { //No zone, nothing to do return; } // Has custom targeting values coming from the publisher if (typeof (config['customTargeting']) === 'undefined') { config['customTargeting'] = []; } window['customTargeting'] = config['customTargeting'] || null; var customTargeting = Object.keys(config['customTargeting']).filter(function(c) { return c.search('ex_')>= 0; }); if (customTargeting.length) { customTargeting.forEach(function(ct) { return this.configTpl[ct] = null; }.bind(this)); } for (var key in this.configTpl) { if (!Object.prototype.hasOwnProperty.call(this.configTpl, key)) { continue; } if (typeof config[key] !== "undefined") { this.config[key] = config[key]; } else { this.config[key] = this.configTpl[key]; } } if (typeof this.config.idzone === 'undefined' || this.config.idzone === '') { return; } if (this.config.only_inline !== true && this.isAdsDomainLicensed()) { this.loadHosted(); } var self = this; this.checkTCFConsent(function() { if (document.readyState === "complete") { self.preparePopWait(); } else { self.addEventToElement(window, "load", self.preparePop); } }); }, getCountFromCookie: function () { if (!this.config.cookieconsent) { return 0; } var shownCookie = popMagic.getCookie(popMagic.cookie_name); var ctr = (typeof shownCookie === 'undefined') ? 0 : parseInt(shownCookie); if (isNaN(ctr)) { ctr = 0; } return ctr; }, getLastOpenedTimeFromCookie: function() { var shownCookie = popMagic.getCookie(popMagic.cookie_name); var delay = null; if (shownCookie) { var value = parseInt(shownCookie.split(';')[1]); delay = value > 0 ? value : 0; } if (isNaN(delay)) { delay = null; } return delay; }, shouldShow: function (skipShouldFire) { skipShouldFire = skipShouldFire || false; if (!popMagic.config.capping_enabled) { var shouldFire = true; var callback = popMagic.config.should_fire; try { if (!skipShouldFire && typeof callback === 'function') { shouldFire = Boolean(callback()); } } catch (e) { console.error('Error executing should fire callback function:', e); } return shouldFire && popMagic.open_count === 0; } if (popMagic.open_count >= popMagic.config.frequency_count) { return false; } var ctr = popMagic.getCountFromCookie(); var last_opened_time = popMagic.getLastOpenedTimeFromCookie(); var current_time = Math.floor(Date.now() / 1000); var maximumDelayTime = last_opened_time + popMagic.config.trigger_delay; if (last_opened_time && maximumDelayTime > current_time) { return false; } popMagic.open_count = ctr; return !(ctr >= popMagic.config.frequency_count); }, venorShouldShow: function () { return (popMagic.venor_loaded && popMagic.venor === "0"); }, setAsOpened: function (triggeredEvent) { var targetElement = triggeredEvent ? (triggeredEvent.target || triggeredEvent.srcElement) : null; var aTag = { id: '', tagName: '', classes: '', text: '', href: '', elm: '' }; if (typeof(targetElement) != 'undefined' && targetElement != null) { aTag = { id: typeof(targetElement.id) != 'undefined' && targetElement.id != null ? targetElement.id : '', tagName: typeof(targetElement.tagName) != 'undefined' && targetElement.tagName != null ? targetElement.tagName : '', classes: typeof(targetElement.classList) != 'undefined' && targetElement.classList != null ? targetElement.classList : '', text: typeof(targetElement.outerText) != 'undefined' && targetElement.outerText != null ? targetElement.outerText : '', href: typeof(targetElement.href) != 'undefined' && targetElement.href != null ? targetElement.href : '', elm: targetElement }; } var event = new CustomEvent('creativeDisplayed-' + popMagic.config.idzone, {detail: aTag}); document.dispatchEvent(event); if (!popMagic.config.capping_enabled) { ++popMagic.open_count; return; } var new_ctr = 1; if (popMagic.open_count !== 0) { new_ctr = popMagic.open_count + 1; } else { new_ctr = popMagic.getCountFromCookie() + 1; } var last_opened_time = Math.floor(Date.now() / 1000); if (popMagic.config.cookieconsent) { popMagic.setCookie(popMagic.cookie_name, new_ctr + ";" + last_opened_time, popMagic.config.frequency_period); } }, loadHosted: function () { var hostedScript = document.createElement("script"); hostedScript.type = "application/javascript"; hostedScript.async = true; hostedScript.src = "//" + this.config.ads_host + "/popunder1000.js"; hostedScript.id = "popmagicldr"; for (var key in this.config) { if (!Object.prototype.hasOwnProperty.call(this.config, key)) { continue; } if (key === "ads_host" || key === "syndication_host") { continue; } hostedScript.setAttribute("data-exo-" + key, this.config[key]); } var insertAnchor = document.getElementsByTagName("body").item(0); if (insertAnchor.firstChild) { insertAnchor.insertBefore(hostedScript, insertAnchor.firstChild); } else { insertAnchor.appendChild(hostedScript); } }, preparePopWait: function() { setTimeout(popMagic.preparePop, 400); }, preparePop: function () { if (typeof exoJsPop101 === "object" && Object.prototype.hasOwnProperty.call(exoJsPop101, "add")) { return; } popMagic.top = self; if (popMagic.top !== self) { try { if (top.document.location.toString()) { popMagic.top = top; } } catch (err) { // continue regardless of error } } popMagic.cookie_name = 'zone-cap-' + popMagic.config.idzone; if (!popMagic.config.capping_enabled) { document.cookie = popMagic.cookie_name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/"; } if (popMagic.shouldShow(true)) { var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == XMLHttpRequest.DONE) { // EX-18682 - If the state is done but the status is 0, the request // has been blocked by an extension; the venor is not loaded, and // splash.php will do the tricks popMagic.venor_loaded = true; if (xmlhttp.status == 200) { popMagic.venor = xmlhttp.responseText; } else { popMagic.venor = "0"; } } }; var protocol = (document.location.protocol !== "https:" && document.location.protocol !== "http:") ? "https:" : document.location.protocol; xmlhttp.open("GET", protocol + "//" + popMagic.config.syndication_host + "/venor.php", true); try { xmlhttp.send(); } catch (error) { popMagic.venor_loaded = true; } } popMagic.buildUrl(); popMagic.browser = popMagic.browserDetector.getBrowserInfo(); if (!popMagic.config.chrome_enabled && popMagic.browser.isChrome) { return; } var popMethod = popMagic.getPopMethod(popMagic.browser); popMagic.addEvent('click', popMethod); popMagic.prefetchAgToken(); }, getPopMethod: function(browserInfo) { if (popMagic.config.popup_force) { return popMagic.methods.popup; } if ( popMagic.config.popup_fallback && browserInfo.isChrome && browserInfo.version >= 68.0 && !browserInfo.isMobile ) { return popMagic.methods.popup; } if (browserInfo.isMobile) { return popMagic.methods.default; } if (browserInfo.isChrome) { return popMagic.methods.chromeTab; } return popMagic.methods.default; }, checkTCFConsent: function(callback) { if (!this.config.tcf_enabled || typeof window.__tcfapi !== 'function') { callback(); return; } var self = this; window.__tcfapi('addEventListener', 2, function(tcData, success) { if (!success) { return; } self.tcfData = tcData; if (tcData.eventStatus === 'tcloaded' || tcData.eventStatus === 'useractioncomplete') { window.__tcfapi('removeEventListener', 2, function() {}, tcData.listenerId); callback(); } }); }, buildUrl: function() { var protocol = (document.location.protocol !== "https:" && document.location.protocol !== "http:") ? "https:" : document.location.protocol; var p = (top === self) ? document.URL : document.referrer; var script_info = { "type": "inline", "name": "popMagic", "ver": this.version }; var encodeScriptInfo = function(script_info) { var result = script_info['type'] + "|" + script_info['name'] + "|" + script_info["ver"]; return encodeURIComponent(btoa(result)); }; var customTargetingParams = ''; if (customTargeting && Object.keys(customTargeting).length) { var customTargetingKeys = typeof(customTargeting) === 'object' ? Object.keys(customTargeting) : customTargeting; var value; customTargetingKeys.forEach(function(key) { if (typeof(customTargeting) === 'object') { value = customTargeting[key]; } else if (Array.isArray(customTargeting)) { value = scriptEl.getAttribute(key); } var keyWithoutExoPrefix = key.replace('data-exo-', ''); customTargetingParams += "&" + keyWithoutExoPrefix + "=" + value; }); } var gdprApplies = this.tcfData && this.tcfData.gdprApplies ? (this.tcfData.gdprApplies === true ? 1 : 0) : 0; this.url = protocol + "//" + this.config.syndication_host + "/v1/link.php" + "?cat=" + this.config.cat + "&idzone=" + this.config.idzone + "&type=8" + "&p=" + encodeURIComponent(p) + "&sub=" + this.config.sub + (this.config.sub2 !== "" ? "&sub2=" + this.config.sub2 : "") + (this.config.sub3 !== "" ? "&sub3=" + this.config.sub3 : "") + "&block=1" + "&el=" + this.config.el + "&tags=" + this.config.tags + (this.config.block_ad_types !== "" ? "&block_ad_types=" + this.config.block_ad_types : "") + "&scr_info=" + encodeScriptInfo(script_info) + customTargetingParams + "&gdpr=" + gdprApplies + "&cb=" + Math.floor(Math.random() * 1000000000) ; if (this.tcfData && this.tcfData.tcString) { this.url += "&gdpr_consent=" + encodeURIComponent(this.tcfData.tcString); } else { this.url += "&cookieconsent=" + this.config.cookieconsent; } }, addSuvtValueToUrl: function(url) { var suvtCookie = popMagic.getCookie("__suvt"); if (suvtCookie) { var separator = url.indexOf('?') !== -1 ? '&' : '?'; return url + separator + "suvt=" + suvtCookie; } return url; }, isAgegoEnabled: function() { return typeof Promise !== 'undefined' && typeof window.AGEGO !== 'undefined' && this.config.agego_cross_site_enabled === true; }, prefetchAgToken: function() { if (popMagic.isAgegoEnabled()) { try { window.AGEGO('prefetchToken'); } catch (e) { /* AGEGO unavailable, ignore */ } } }, addAgeGoToken: function(url) { if (!popMagic.isAgegoEnabled()) { return Promise.resolve(url); } try { var result = window.AGEGO('getTokenUrl', url); return result && typeof result.then === 'function' ? result : Promise.resolve(url); } catch (e) { return Promise.resolve(url); } }, addEventToElement: function(obj, type, fn) { if (obj.addEventListener) { obj.addEventListener(type, fn, false); } else if (obj.attachEvent) { obj["e" + type + fn] = fn; obj[type + fn] = function () { obj["e" + type + fn](window.event); }; obj.attachEvent("on" + type, obj[type + fn]); } else { obj["on" + type] = obj["e" + type + fn]; } }, getTriggerClasses: function() { var trigger_classes; var trigger_classes_final = []; if (popMagic.config.trigger_class.indexOf(",") === -1) { trigger_classes = popMagic.config.trigger_class.split(" "); } else { var trimmed_trigger_classes = popMagic.config.trigger_class.replace(/\s/g, ''); trigger_classes = trimmed_trigger_classes.split(","); } for (var i = 0; i < trigger_classes.length; i++) { if (trigger_classes[i] !== '') { trigger_classes_final.push('.' + trigger_classes[i]); } } return trigger_classes_final; }, addEvent: function(type, fn) { var targetElements; if (popMagic.config.trigger_method == '3') { targetElements = document.querySelectorAll('a'); for (i = 0; i < targetElements.length; i++) { popMagic.addEventToElement(targetElements[i], type, fn); } return; } if (popMagic.config.trigger_method == '2' && popMagic.config.trigger_class != "") { var trigger_classes_select = popMagic.getTriggerClasses(); targetElements = document.querySelectorAll(trigger_classes_select.join(', ')); for (i = 0; i < targetElements.length; i++) { popMagic.addEventToElement(targetElements[i], type, fn); } return; } if (popMagic.config.trigger_method == '4' && popMagic.config.trigger_class != "") { var trigger_classes_ignore = popMagic.getTriggerClasses(); popMagic.addEventToElement(document, type, function (event) { var hasTriggerClass = trigger_classes_ignore.some(function (cls) { return event.target.closest(cls) !== null; }); if (!hasTriggerClass) { fn.call(event.target, event); } }); return; } if (popMagic.config.trigger_method == '5' && popMagic.config.trigger_class != "") { var trigger_classes_to_ignore = popMagic.getTriggerClasses(); var notSelector = trigger_classes_to_ignore.map(function(cls) { return ':not(' + cls + ')'; }).join(''); var finalSelector = 'a' + notSelector; targetElements = document.querySelectorAll(finalSelector); for (var i = 0; i < targetElements.length; i++) { popMagic.addEventToElement(targetElements[i], type, fn); } return; } popMagic.addEventToElement(document, type, fn); }, setCookie: function (name, value, ttl_minutes) { if (!this.config.cookieconsent) { return false; } ttl_minutes = parseInt(ttl_minutes, 10); var now_date = new Date(); now_date.setMinutes(now_date.getMinutes() + parseInt(ttl_minutes)); var c_value = encodeURIComponent(value) + "; expires=" + now_date.toUTCString() + "; path=/"; document.cookie = name + "=" + c_value; }, getCookie: function (name) { if (!this.config.cookieconsent) { return false; } var i, x, y, cookiesArray = document.cookie.split(";"); for (i = 0; i < cookiesArray.length; i++) { x = cookiesArray[i].substr(0, cookiesArray[i].indexOf("=")); y = cookiesArray[i].substr(cookiesArray[i].indexOf("=") + 1); x = x.replace(/^\s+|\s+$/g, ""); if (x === name) { return decodeURIComponent(y); } } }, randStr: function (length, possibleChars) { var text = ""; var possible = possibleChars || "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i < length; i++) { text += possible.charAt(Math.floor(Math.random() * possible.length)); } return text; }, isValidUserEvent: function (event) { if ("isTrusted" in event && event.isTrusted && popMagic.browser.name !== "ie" && popMagic.browser.name !== "safari") { return true; } else { return (event.screenX != 0 && event.screenY != 0); } }, isValidHref: function (href) { if (typeof href === 'undefined' || href == '') { return false; } var empty_ref = /\s?javascript\s?:/i; return !empty_ref.test(href); }, findLinkToOpen: function (clickedElement) { var target = clickedElement; var location = false; try { var breakCtr = 0; while (breakCtr < 20 && !target.getAttribute('href') && target !== document && target.nodeName.toLowerCase() !== "html") { target = target.parentNode; breakCtr++; } var elementTargetAttr = target.getAttribute('target'); if (!elementTargetAttr || elementTargetAttr.indexOf('_blank') === -1) { location = target.getAttribute('href'); } } catch (err) { // continue regardless of error } if (!popMagic.isValidHref(location)) { location = false; } return location || window.location.href; }, getPuId: function () { return "ok_" + Math.floor(89999999 * Math.random() + 10000000); }, executeOnRedirect: function() { try { if (!popMagic.config.capping_enabled && typeof popMagic.config.on_redirect === 'function') { popMagic.config.on_redirect(); } } catch(e) { console.error('Error executing on redirect callback:', e); } }, browserDetector: { browserDefinitions : [ ['firefox', /Firefox\/([0-9.]+)(?:\s|$)/], ['opera', /Opera\/([0-9.]+)(?:\s|$)/], ['opera', /OPR\/([0-9.]+)(:?\s|$)$/], ['edge', /Edg(?:e|)\/([0-9._]+)/], ['ie', /Trident\/7\.0.*rv:([0-9.]+)\).*Gecko$/], ['ie', /MSIE\s([0-9.]+);.*Trident\/[4-7].0/], ['ie', /MSIE\s(7\.0)/], ['safari', /Version\/([0-9._]+).*Safari/], ['chrome', /(?!Chrom.*Edg(?:e|))Chrom(?:e|ium)\/([0-9.]+)(:?\s|$)/], ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9.]+)(:?\s|$)/], ['bb10', /BB10;\sTouch.*Version\/([0-9.]+)/], ['android', /Android\s([0-9.]+)/], ['ios', /Version\/([0-9._]+).*Mobile.*Safari.*/], ['yandexbrowser', /YaBrowser\/([0-9._]+)/], ['crios', /CriOS\/([0-9.]+)(:?\s|$)/] ], /** * This checks for Google Chrome and Chromium specifically. Other Chromium-based browsers should return false. * @return {boolean} */ isChromeOrChromium: function () { var nav = window.navigator; var userAgent = (nav.userAgent || '').toLowerCase(); var vendor = nav.vendor || ''; // Check for iOS Chrome if (userAgent.indexOf('crios') !== -1) { return true; } if ( nav.userAgentData && Array.isArray(nav.userAgentData.brands) && nav.userAgentData.brands.length > 0 ) { var brands = nav.userAgentData.brands; // Chrome detection var isChrome = brands.some(function(brand) { return brand.brand === 'Google Chrome'; }); // Chromium detection - should only have Chromium and Not A Brand in brands (length 2) var isChromium = brands.some(function(brand) { return brand.brand === 'Chromium'; }) && brands.length === 2; return isChrome || isChromium; } // Legacy detection var isChromiumBased = !!window.chrome; // Exclude other Chromium-based browsers var isEdge = userAgent.indexOf('edg') !== -1; var isOpera = !!window.opr || userAgent.indexOf('opr') !== -1; var isBrave = !!(nav.brave && nav.brave.isBrave); var isVivaldi = userAgent.indexOf('vivaldi') !== -1; var isYandex = userAgent.indexOf('yabrowser') !== -1; var isSamsung = userAgent.indexOf('samsungbrowser') !== -1; var isUC = userAgent.indexOf('ucbrowser') !== -1; return isChromiumBased && vendor === "Google Inc." && !isEdge && !isOpera && !isBrave && !isVivaldi && !isYandex && !isSamsung && !isUC; }, getBrowserInfo: function () { var nav = window.navigator; var ua = nav.userAgent; var browserInfo = { name: 'other', version: "1.0", versionNumber: 1.0, isChrome: this.isChromeOrChromium(), isMobile: !!ua.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile|WebOS|Windows Phone/i), }; for (var i in this.browserDefinitions) { var definition = this.browserDefinitions[i]; if (definition[1].test(ua)) { var match = definition[1].exec(ua); var version = match && match[1].split(/[._]/).slice(0, 3); var versionTails = Array.prototype.slice.call(version, 1).join('') || '0'; if (version && version.length < 3) { Array.prototype.push.apply(version, version.length === 1 ? [0, 0] : [0]); } browserInfo.name = definition[0]; browserInfo.version = version.join('.'); browserInfo.versionNumber = parseFloat(version[0] + '.' + versionTails); break; } } return browserInfo; } }, methods: { default: function (triggeredEvent) { if (!popMagic.shouldShow() || !popMagic.venorShouldShow() || !popMagic.isValidUserEvent(triggeredEvent)) return true; var clickedElement = triggeredEvent.target || triggeredEvent.srcElement; var href = popMagic.findLinkToOpen(clickedElement); var url = popMagic.addSuvtValueToUrl(popMagic.url); window.open(href, "_blank"); popMagic.setAsOpened(triggeredEvent); popMagic.executeOnRedirect(); if (popMagic.isAgegoEnabled()) { popMagic.addAgeGoToken(url).then(function (finalUrl) { popMagic.top.document.location = finalUrl; }); } else { popMagic.top.document.location = url; } if (typeof triggeredEvent.preventDefault !== "undefined") { triggeredEvent.preventDefault(); triggeredEvent.stopPropagation(); } return true; }, chromeTab: function (event) { if (!popMagic.shouldShow() || !popMagic.venorShouldShow() || !popMagic.isValidUserEvent(event)) return true; if (typeof event.preventDefault !== "undefined") { event.preventDefault(); event.stopPropagation(); } else { return true; } var url = popMagic.addSuvtValueToUrl(popMagic.url); var a = top.window.document.createElement("a"); var target = event.target || event.srcElement; a.href = popMagic.findLinkToOpen(target); document.getElementsByTagName("body")[0].appendChild(a); var e = new MouseEvent("click", { bubbles: true, cancelable: true, view: window, screenX: 0, screenY: 0, clientX: 0, clientY: 0, ctrlKey: true, altKey: false, shiftKey: false, metaKey: true, button: 0 }); e.preventDefault = undefined; a.dispatchEvent(e); a.parentNode.removeChild(a); popMagic.executeOnRedirect(); if (popMagic.isAgegoEnabled()) { popMagic.addAgeGoToken(url).then(function (finalUrl) { window.open(finalUrl, '_self'); }); } else { window.open(url, '_self'); } popMagic.setAsOpened(event); }, popup: function (triggeredEvent) { if (!popMagic.shouldShow() || !popMagic.venorShouldShow() || !popMagic.isValidUserEvent(triggeredEvent)) return true; var winOptions = ""; if (popMagic.config.popup_fallback && !popMagic.config.popup_force) { var height = Math.max(Math.round(window.innerHeight * 0.80), 300); var width = Math.max(Math.round(window.innerWidth * 0.70), 300); var top = window.screenY + 100; var left = window.screenX + 100; winOptions = "menubar=1,resizable=1,width=" + width + ",height=" + height + ",top=" + top +",left="+ left; } var prePopUrl = document.location.href; var popWin = window.open(prePopUrl, popMagic.getPuId(), winOptions); popMagic.setAsOpened(triggeredEvent); setTimeout(function() { if (popMagic.isAgegoEnabled()) { popMagic.addAgeGoToken(popMagic.url).then(function (finalUrl) { popWin.location.href = finalUrl; popMagic.executeOnRedirect(); }); } else { popWin.location.href = popMagic.url; popMagic.executeOnRedirect(); } }, 200); if (typeof triggeredEvent.preventDefault !== "undefined") { triggeredEvent.preventDefault(); triggeredEvent.stopPropagation(); } } } };