Last active
October 26, 2019 00:04
-
-
Save thomasbaldwin/48a0f41f881b08b2493a61398154609c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
window.bouncex && bouncex.loaded || function() { | |
! function(e) { | |
function t(i) { | |
if (n[i]) return n[i].exports; | |
var o = n[i] = { | |
i: i, | |
l: !1, | |
exports: {} | |
}; | |
return e[i].call(o.exports, o, o.exports, t), o.l = !0, o.exports | |
} | |
var n = {}; | |
t.m = e, t.c = n, t.d = function(e, n, i) { | |
t.o(e, n) || Object.defineProperty(e, n, { | |
enumerable: !0, | |
get: i | |
}) | |
}, t.r = function(e) { | |
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { | |
value: "Module" | |
}), Object.defineProperty(e, "__esModule", { | |
value: !0 | |
}) | |
}, t.t = function(e, n) { | |
if (1 & n && (e = t(e)), 8 & n) return e; | |
if (4 & n && "object" == typeof e && e && e.__esModule) return e; | |
var i = Object.create(null); | |
if (t.r(i), Object.defineProperty(i, "default", { | |
enumerable: !0, | |
value: e | |
}), 2 & n && "string" != typeof e) | |
for (var o in e) t.d(i, o, function(t) { | |
return e[t] | |
}.bind(null, o)); | |
return i | |
}, t.n = function(e) { | |
var n = e && e.__esModule ? function() { | |
return e.default | |
} : function() { | |
return e | |
}; | |
return t.d(n, "a", n), n | |
}, t.o = function(e, t) { | |
return Object.prototype.hasOwnProperty.call(e, t) | |
}, t.p = "", t(t.s = 12) | |
}([function(module, exports, __webpack_require__) { | |
function _interopRequireDefault(e) { | |
return e && e.__esModule ? e : { | |
default: e | |
} | |
} | |
function _typeof(e) { | |
return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { | |
return typeof e | |
} : function(e) { | |
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e | |
})(e) | |
} | |
function incrementPageView() { | |
bouncex.cookie.vpv++, setBounceCookie() | |
} | |
function jQueryIsAvailable() { | |
return "undefined" != typeof jQuery && void 0 !== jQuery.fn | |
} | |
function init_protocol_and_domain() { | |
var e = bouncex.website.force_https ? "https:" : window.location.protocol; | |
bouncex.sau = "https://" + bouncex.website.bau, bouncex.seu = -1 === bouncex.website.beu.indexOf("127.0.0.1") ? "https://" + bouncex.website.beu : "http://" + bouncex.website.beu, bouncex.au = e + "//" + bouncex.website.bau, bouncex.eu = e + "//" + bouncex.website.beu | |
} | |
function init_url_and_referrer() { | |
bouncex.referrer = bouncex.utils.url.formatReferrer(document.referrer), bouncex.calling_url = encodeURIComponent(window.location.href), bouncex.cookie_domain = !1, ("bind_to_domain" == bouncex.website.ct || "multi_cookie" == bouncex.website.ct || "fp_local_storage" == bouncex.website.ct) && 0 < bouncex.calling_url.indexOf(bouncex.website.domain.toLowerCase()) && (bouncex.cookie_domain = bouncex.website.domain) | |
} | |
function init_dash() { | |
(bouncex.eventLog = [], sessionStorage) && (sessionStorage.getItem("bxDashUrl") && baddjs(window.location.protocol + "//dash-staging.bounceexchange.com/client.js")) | |
} | |
function init_testmode_before_cookie() { | |
bouncex.testmode = { | |
bxdev: determineTestModeFromUrl() | |
} | |
} | |
function determineTestModeFromUrl() { | |
if (-1 === bouncex.calling_url.indexOf("bxdev")) return !1; | |
var e = bouncex.utils.getParam("bxdev").toLowerCase(); | |
if ("off" === e) return !1; | |
var t = ["cvars", "events", "page_types", "campaign_js", "spa", "coupons", "log", "log:error", "log:warn", "log:debug"]; | |
if ("" === e || "all" === e) return t.reduce(function(e, t) { | |
return e[t] = !0, e | |
}, {}); | |
var n = e.split(",").reduce(function(e, n) { | |
return -1 < t.indexOf(n) && (e[n] = !0), e | |
}, {}); | |
return 0 !== Object.keys(n).length && n | |
} | |
function init_testmode_after_cookie() { | |
bouncex.testmode.bxtest = bouncex.cookie.hcs_bxtest || -1 !== bouncex.calling_url.indexOf("bxtest"), -1 === bouncex.calling_url.indexOf("bxdev") ? bouncex.testmode.bxdev = bouncex.cookie.bxdev || !1 : (bouncex.testmode.bxdev ? bouncex.cookie.bxdev = bouncex.testmode.bxdev : delete bouncex.cookie.bxdev, setBounceCookie()) | |
} | |
function sanitizeMetadata(e, t, n) { | |
var i = {}; | |
for (k in n = n || [], t) | |
if (t.hasOwnProperty(k)) { | |
var o = k.trim().toLowerCase(); - 1 === o.indexOf(":") && -1 === n.indexOf(o) && (o = e + ":" + o); | |
var a = t[k]; | |
"string" == typeof a && (a = a.trim()), i[o] = a | |
} | |
return i | |
} | |
function pushItemEvent(e, t) { | |
var n = sanitizeMetadata(e, t); | |
if (1 == bouncex.website.ete) { | |
if (!bouncex.et.item.validate(n)) return !1; | |
if (bouncex.et.item.requireImageLoad && n["item:imageurl"]) { | |
var i = new Image; | |
i.onload = function() { | |
event_stream_report(e, n) | |
}, i.src = n["item:imageurl"] | |
} else event_stream_report(e, n) | |
} else event_stream_report(e, n) | |
} | |
function pushRequestemailEvent(e, t) { | |
if (!bouncex.carbTrap) { | |
var n = sanitizeMetadata(e, t, ["email", "campaignid", "parentcampaignid"]); | |
return !!(n.campaignid && n.email && bouncex.utils.validate.email(n.email)) && (n["user:email"] = n.email, void event_stream_report(e, n)) | |
} | |
} | |
function pushRequestpushEvent(e, t) { | |
var n = sanitizeMetadata(e, t, ["campaignid", "parentcampaignid"]); | |
return !!n.campaignid && void event_stream_report(e, n) | |
} | |
function pushRequestsendEvent(e, t) { | |
var n = sanitizeMetadata(e, t, ["campaignid", "parentcampaignid", "fcmtoken", "channel", "campaign_data", "source"]); | |
return !!n.campaignid && void event_stream_report(e, n) | |
} | |
function pushUserEvent(e, t) { | |
return !(!t.email && !t.emailHash) && (!(t.email && !bouncex.utils.validate.email(t.email)) && (t["user:gcr"] = bouncex && bouncex.cookie ? bouncex.cookie.gcr : 99, t.agent = "js", t.eq = 1, event_stream_report(e, sanitizeMetadata(e, t, ["agent", "eq", "campaignid"])), bouncex.cookie.uid = 1, void setBounceCookie())) | |
} | |
function processPushedData(e, t) { | |
t = t || {}; | |
var n = e.trim().toLowerCase(); | |
if ("conversion" == n) report_conversion_sync(t, "pushdata"); | |
else if ("bx-load-hide" == n) bouncex.usd = t; | |
else if ("item" === n) pushItemEvent(n, t); | |
else if ("view item" === n && bouncex.website.osre) { | |
var i = t["item:id"], | |
o = sanitizeMetadata(n, t); | |
i && (bouncex.osr.viewItemId = i, Object.keys(bouncex.campaigns || {}).forEach(function(e) { | |
void 0 === bouncex.campaigns[e].osr_params_json && bouncex.campaigns[e].isr_params_json && (bouncex.campaigns[e].osr_params_json = bouncex.campaigns[e].isr_params_json), bouncex.campaigns[e].osr_params_json && bouncex.campaigns[e].osr_params_json.length && bouncex.osr.init(e, i) | |
})), event_stream_report(n, o) | |
} else if ("requestemail" == e) pushRequestemailEvent(n, t); | |
else if ("requestpush" == e) pushRequestpushEvent(n, t); | |
else if ("requestsend" == e) pushRequestsendEvent(n, t); | |
else if ("user" == e) pushUserEvent(n, t); | |
else { | |
event_stream_report(n, o = sanitizeMetadata(n, t)) | |
} | |
} | |
function initPushedData() { | |
for (var e = bouncex.pushedData.length, t = 0; t < e; t++) processPushedData(bouncex.pushedData[t][0], bouncex.pushedData[t][1]); | |
bouncex.pushedData = [] | |
} | |
function can_init_post_cookie() { | |
return !bouncex.gdpr_opt_out | |
} | |
function can_init() { | |
if (document.visibilityState && "prerender" === document.visibilityState) { | |
var e = tryCatch(function() { | |
"prerender" !== document.visibilityState && (removeEvent(document, "visibilitychange", e), bcx_init()) | |
}); | |
return addEvent(document, "visibilitychange", e), bouncex.prerendered = !0, !1 | |
} | |
if (bouncex.baddjs) return !1; | |
if (!JSON.parse) return !1; | |
if (!window.postMessage) return !1; | |
if (!bouncex.website.ei && window != window.top) return !1; | |
if (!areCookiesEnabled()) return !1; | |
if (bouncex.browser.prerenderio) return !1; | |
if (bouncex.browser.msie && 11 > bouncex.browser.msie) return !1; | |
if (bouncex.website.burls.length) | |
for (var t in bouncex.website.burls) | |
if (bouncex.website.burls.hasOwnProperty(t)) { | |
var n = bouncex.website.burls[t]; | |
if (-1 != n.prop.indexOf("contains")) { | |
var i = window.location.href.indexOf(n.val); | |
if ("contains" == n.prop && -1 != i || "not_contains" == n.prop && -1 == i) return !1 | |
} else if (-1 != n.prop.indexOf("regex_match")) { | |
var o = new RegExp(n.val, "gi").test(window.location.href); | |
if ("regex_match" == n.prop && o || "not_regex_match" == n.prop && !o) return !1 | |
} | |
} | |
return !("fp_local_storage" === bouncex.website.ct && !fpLocalStorageAvailable()) | |
} | |
function init_visit_cookie() { | |
if (!bouncex.gdpr_opt_out) { | |
var e = getBounceVisitCookie(); | |
e && (bouncex.visit_cookie = bouncex.parseJSON(e)), bouncex.visit_cookie ? !bouncex.visit_cookie.ueh && (bouncex.visit_cookie.ueh = getParam("ueh") || void 0, bouncex.visit_cookie.ueh && setBounceVisitCookie()) : (bouncex.visit_cookie = {}, bouncex.visit_cookie.lp = bouncex.calling_url.substring(0, 500).replace(/\+/g, "%2B").replace(/\%[A-F0-9]?[^A-F0-9]/, ""), bouncex.visit_cookie.r = bouncex.referrer, bouncex.visit_cookie.ueh = getParam("ueh") || void 0, setBounceVisitCookie()) | |
} | |
} | |
function init_cookie() { | |
if (!bouncex.gdpr_opt_out && (bouncex.cookie = getBounceCookie(), bouncex.cookie.vid || (bouncex.cookie = "fp_local_storage" == bouncex.website.ct ? getBounceCookieSingle() : getBounceCookieFPLocalStorage(), bouncex.cookie.vid && setBounceCookie()), "fp_local_storage" == bouncex.website.ct)) { | |
var e = tryCatch(function(e) { | |
e.key == bouncex.website.cookie_name && e.newValue && (bouncex.cookie = bouncex.getBounceCookie()) | |
}); | |
addEvent(window, "storage", e, !1) | |
} | |
} | |
function init_cookie_functions() { | |
bouncex.local_storage_enabled ? (window.setBounceCookie = bouncex.setBounceCookie = setBounceCookieLocalStorage, window.getBounceCookie = bouncex.getBounceCookie = getBounceCookieLocalStorage, init_cookie_localstorage()) : "multi_cookie" == bouncex.website.ct ? (window.MultiCookie = MultiCookie, window.getBounceCookie = bouncex.getBounceCookie = getBounceCookieMulti, window.setBounceCookie = bouncex.setBounceCookie = setBounceCookieMulti) : "fp_local_storage" == bouncex.website.ct ? (window.getBounceCookie = bouncex.getBounceCookie = getBounceCookieFPLocalStorage, window.setBounceCookie = bouncex.setBounceCookie = setBounceCookieFPLocalStorage) : (window.getBounceCookie = bouncex.getBounceCookie = getBounceCookieSingle, window.setBounceCookie = bouncex.setBounceCookie = setBounceCookieSingle), window.setBounceVisitCookie = setBounceVisitCookie, window.getBounceVisitCookie = getBounceVisitCookie, window.clearBounceCookie = clearBounceCookie, bouncex.stringify_cookie = stringify_cookie, bouncex.lz = bouncex.lz || function() { | |
var e = Math.pow, | |
t = _StringfromCharCode, | |
n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$", | |
i = {}, | |
o = { | |
compressToURI: function(e) { | |
return null == e ? "" : o._compress(e, 6, function(e) { | |
return n.charAt(e) | |
}) | |
}, | |
decompressFromURI: function(e) { | |
if (null == e) return ""; | |
if ("" == e) return null; | |
try { | |
return e = e.replace(/ /g, "+"), o._decompress(e.length, 32, function(t) { | |
return function(e, t) { | |
if (!i[e]) { | |
i[e] = {}; | |
for (var n = 0; n < e.length; n++) i[e][e.charAt(n)] = n | |
} | |
return i[e][t] | |
}(n, e.charAt(t)) | |
}) | |
} catch (e) { | |
return bouncex.err(e, { | |
source: "decompressFromURI" | |
}), "" | |
} | |
}, | |
compress: function(e) { | |
return o._compress(e, 16, function(e) { | |
return t(e) | |
}) | |
}, | |
_compress: function(t, n, i) { | |
if (null == t) return ""; | |
var o, a, r, s = {}, | |
c = {}, | |
u = "", | |
b = "", | |
l = "", | |
d = 2, | |
p = 3, | |
x = 2, | |
g = [], | |
m = 0, | |
f = 0; | |
for (r = 0; r < t.length; r += 1) | |
if (u = t.charAt(r), Object.prototype.hasOwnProperty.call(s, u) || (s[u] = p++, c[u] = !0), b = l + u, Object.prototype.hasOwnProperty.call(s, b)) l = b; | |
else { | |
if (Object.prototype.hasOwnProperty.call(c, l)) { | |
if (256 > l.charCodeAt(0)) { | |
for (o = 0; o < x; o++) m <<= 1, f == n - 1 ? (f = 0, g.push(i(m)), m = 0) : f++; | |
for (a = l.charCodeAt(0), o = 0; 8 > o; o++) m = m << 1 | 1 & a, f == n - 1 ? (f = 0, g.push(i(m)), m = 0) : f++, a >>= 1 | |
} else { | |
for (a = 1, o = 0; o < x; o++) m = m << 1 | a, f == n - 1 ? (f = 0, g.push(i(m)), m = 0) : f++, a = 0; | |
for (a = l.charCodeAt(0), o = 0; 16 > o; o++) m = m << 1 | 1 & a, f == n - 1 ? (f = 0, g.push(i(m)), m = 0) : f++, a >>= 1 | |
} | |
0 == --d && (d = e(2, x), x++), delete c[l] | |
} else | |
for (a = s[l], o = 0; o < x; o++) m = m << 1 | 1 & a, f == n - 1 ? (f = 0, g.push(i(m)), m = 0) : f++, a >>= 1; | |
0 == --d && (d = e(2, x), x++), s[b] = p++, l = u + "" | |
} | |
if ("" != l) { | |
if (Object.prototype.hasOwnProperty.call(c, l)) { | |
if (256 > l.charCodeAt(0)) { | |
for (o = 0; o < x; o++) m <<= 1, f == n - 1 ? (f = 0, g.push(i(m)), m = 0) : f++; | |
for (a = l.charCodeAt(0), o = 0; 8 > o; o++) m = m << 1 | 1 & a, f == n - 1 ? (f = 0, g.push(i(m)), m = 0) : f++, a >>= 1 | |
} else { | |
for (a = 1, o = 0; o < x; o++) m = m << 1 | a, f == n - 1 ? (f = 0, g.push(i(m)), m = 0) : f++, a = 0; | |
for (a = l.charCodeAt(0), o = 0; 16 > o; o++) m = m << 1 | 1 & a, f == n - 1 ? (f = 0, g.push(i(m)), m = 0) : f++, a >>= 1 | |
} | |
0 == --d && (d = e(2, x), x++), delete c[l] | |
} else | |
for (a = s[l], o = 0; o < x; o++) m = m << 1 | 1 & a, f == n - 1 ? (f = 0, g.push(i(m)), m = 0) : f++, a >>= 1; | |
0 == --d && (d = e(2, x), x++) | |
} | |
for (a = 2, o = 0; o < x; o++) m = m << 1 | 1 & a, f == n - 1 ? (f = 0, g.push(i(m)), m = 0) : f++, a >>= 1; | |
for (;;) { | |
if (m <<= 1, f == n - 1) { | |
g.push(i(m)); | |
break | |
} | |
f++ | |
} | |
return g.join("") | |
}, | |
decompress: function(e) { | |
return null == e ? "" : "" == e ? null : o._decompress(e.length, 32768, function(t) { | |
return e.charCodeAt(t) | |
}) | |
}, | |
_decompress: function(n, i, o) { | |
var a, r, s, c, u, b, l, d = [], | |
p = 4, | |
x = 4, | |
g = 3, | |
m = "", | |
f = [], | |
h = { | |
val: o(0), | |
position: i, | |
index: 1 | |
}; | |
for (a = 0; 3 > a; a += 1) d[a] = a; | |
for (s = 0, u = 4, b = 1; b != u;) c = h.val & h.position, h.position >>= 1, 0 == h.position && (h.position = i, h.val = o(h.index++)), s |= (0 < c ? 1 : 0) * b, b <<= 1; | |
switch (s) { | |
case 0: | |
for (s = 0, u = 256, b = 1; b != u;) c = h.val & h.position, h.position >>= 1, 0 == h.position && (h.position = i, h.val = o(h.index++)), s |= (0 < c ? 1 : 0) * b, b <<= 1; | |
l = t(s); | |
break; | |
case 1: | |
for (s = 0, u = 65536, b = 1; b != u;) c = h.val & h.position, h.position >>= 1, 0 == h.position && (h.position = i, h.val = o(h.index++)), s |= (0 < c ? 1 : 0) * b, b <<= 1; | |
l = t(s); | |
break; | |
case 2: | |
return "" | |
} | |
for (d[3] = l, r = l, f.push(l);;) { | |
if (h.index > n) return ""; | |
for (s = 0, u = e(2, g), b = 1; b != u;) c = h.val & h.position, h.position >>= 1, 0 == h.position && (h.position = i, h.val = o(h.index++)), s |= (0 < c ? 1 : 0) * b, b <<= 1; | |
switch (l = s) { | |
case 0: | |
for (s = 0, u = 256, b = 1; b != u;) c = h.val & h.position, h.position >>= 1, 0 == h.position && (h.position = i, h.val = o(h.index++)), s |= (0 < c ? 1 : 0) * b, b <<= 1; | |
d[x++] = t(s), l = x - 1, p--; | |
break; | |
case 1: | |
for (s = 0, u = 65536, b = 1; b != u;) c = h.val & h.position, h.position >>= 1, 0 == h.position && (h.position = i, h.val = o(h.index++)), s |= (0 < c ? 1 : 0) * b, b <<= 1; | |
d[x++] = t(s), l = x - 1, p--; | |
break; | |
case 2: | |
return f.join("") | |
} | |
if (0 == p && (p = e(2, g), g++), d[l]) m = d[l]; | |
else { | |
if (l !== x) return null; | |
m = r + r.charAt(0) | |
} | |
f.push(m), d[x++] = r + m.charAt(0), r = m, 0 == --p && (p = e(2, g), g++) | |
} | |
} | |
}; | |
return o | |
}() | |
} | |
function setLocalStorageCookie(e) { | |
var t = bouncex.parseJSON(decodeURIComponent(e)); | |
t && t[bouncex.website.id] ? (bouncex.cookies = t, bouncex.cookie = t[bouncex.website.id]) : t && t.vpv ? (bouncex.cookie = t, bouncex.cookies[bouncex.website.id] = bouncex.cookie) : (t[bouncex.website.id] = {}, bouncex.cookies = t) | |
} | |
function localStorageFrameSuccess() { | |
var e = tryCatch(function(e) { | |
if (e.origin == "https://" + bouncex.website.biu && "string" == typeof e.data) { | |
var t = e.data; | |
if (-1 < t.indexOf("gdpr_opt_out") && (bouncex.gdpr_opt_out = !0), "third_party_cookies_disabled" == t) localStorageFail(); | |
else if (0 > t.indexOf("bcx_message=true")) { | |
var n = e.data; | |
bouncex.local_storage_initialized ? setLocalStorageCookie(n) : (bouncex.local_storage_initialized = !0, bouncex.cookie = {}, bouncex.cookies = {}, n ? setLocalStorageCookie(n) : (bouncex.cookie = "multi_cookie" == bouncex.website.ct ? getBounceCookieMulti() : getBounceCookieSingle(), clearBounceCookie(!0)), InitSequence.preInit1.cookieReady()) | |
} | |
} | |
}); | |
addEvent(window, "message", e) | |
} | |
function addLocalStorageFrame() { | |
try { | |
document.body.appendChild(bouncex.local_storage_frame), localStorageFrameSuccess() | |
} catch (e) { | |
setTimeout2(localStorageFail, 0) | |
} | |
} | |
function localStorageFail() { | |
bouncex.local_storage_enabled = !1, init_cookie_functions(), bouncex.local_storage_initialized || (bouncex.local_storage_initialized = !0, InitSequence.preInit1.cookieReady()) | |
} | |
function init_cookie_localstorage() { | |
if (!bouncex.gdpr_opt_out) { | |
var e = "https://" + bouncex.website.biu + "/assets/bounce/local_storage_frame10.min.html#" + bouncex.website.id + (bouncex.website.swids ? "&" + bouncex.website.swids : ""); | |
if (bouncex.local_storage_frame = document.createElement("IFRAME"), bouncex.local_storage_frame.style.display = "none", bouncex.local_storage_frame.setAttribute("id", "bcx_local_storage_frame"), bouncex.local_storage_frame.setAttribute("src", e), document.body) addLocalStorageFrame(); | |
else var t = setInterval2(function() { | |
document.body && (clearTimeout(t), addLocalStorageFrame()) | |
}, 100) | |
} | |
} | |
function init_public_functions() { | |
var e; | |
window.console || (window.console = { | |
log: function() { | |
return {} | |
} | |
}), bouncex.setv = bouncex.setVar = CustomVariables.setVar.bind(CustomVariables), bouncex.setVarAndReload = CustomVariables.setVarAndReload.bind(CustomVariables), bouncex.getVar = CustomVariables.getVar.bind(CustomVariables), bouncex.perf = perf, bouncex.loadBounceCss = loadBounceCss, bouncex.updateQS = updateQS, bouncex.make_include_string = make_include_string, bouncex.baddjs = baddjs, bouncex.wndsize = wndsize, bouncex.init = InitSequence.postInit1.entry, bouncex.bcxReady = bcxReady, bouncex.stringify = stringify, bouncex.parseJSON = parseJSON, bouncex.addCss = addCss, bouncex.createIframe = createIframe, bouncex.unload_campaigns = unload_campaigns, bouncex.unload_campaign = unload_campaign, bouncex.reload_campaigns = window.reload_campaigns = ReloadCampaigns.addRequest.bind(ReloadCampaigns), bouncex.dynamicPageChange = SinglePageApp.dynamicPageChange, bouncex.nextStep = nextStep, bouncex.submitCampaignStep = submitCampaignStep, bouncex.setJumpStep = setJumpStep, bouncex.placeCampaign = placeCampaign, bouncex.alignCampaign = alignCampaign, bouncex.destroyAll = destroyAll, bouncex.passiveEventRegistry = {}, "window" in (e = window) && "document" in e && ("atob" in e && "btoa" in e || (e.atob = function(e) { | |
var t = 0, | |
n = [], | |
i = 0, | |
o = 0; | |
if (0 == (e = (e += "").replace(/\s/g, "")).length % 4 && (e = e.replace(/=+$/, "")), 1 == e.length % 4) throw Error("InvalidCharacterError"); | |
if (/[^+\/0-9A-Za-z]/.test(e)) throw Error("InvalidCharacterError"); | |
for (; t < e.length;) i = i << 6 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(e.charAt(t)), 24 == (o += 6) && (n.push(_StringfromCharCode(255 & i >> 16)), n.push(_StringfromCharCode(255 & i >> 8)), n.push(_StringfromCharCode(255 & i)), i = o = 0), t += 1; | |
return 12 == o ? n.push(_StringfromCharCode(255 & i >> 4)) : 18 == o && (i >>= 2, n.push(_StringfromCharCode(255 & i >> 8)), n.push(_StringfromCharCode(255 & i))), n.join("") | |
}, e.btoa = function(e) { | |
var t, n, i, o, a = 0, | |
r = []; | |
if (/[^\x00-\xFF]/.test(e += "")) throw Error("InvalidCharacterError"); | |
for (; a < e.length;) o = (t = e.charCodeAt(a++)) >> 2, t = (3 & t) << 4 | (n = e.charCodeAt(a++)) >> 4, n = (15 & n) << 2 | (i = e.charCodeAt(a++)) >> 6, i &= 63, a === e.length + 2 ? i = n = 64 : a === e.length + 1 && (i = 64), r.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(o), "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(t), "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(n), "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(i)); | |
return r.join("") | |
})), bouncex.repressCampaigns = repressCampaigns, bouncex.isGbi2Campaign = isGbi2Campaign, bouncex.isBxPlayerCampaign = isBxPlayerCampaign | |
} | |
function init_browser() { | |
var e = navigator.userAgent; | |
bouncex.browser = {}, bouncex.browser.webkit = /WebKit/.test(e), bouncex.browser.firefox = /Firefox/.test(e), bouncex.browser.msie = /Trident\/7\.|MSIE/.test(e), bouncex.browser.opera = /Opera|OPR\//.test(e), bouncex.browser.msie && 0 < e.indexOf("MSIE") && (bouncex.browser.msie = parseInt(e.split("MSIE")[1])), bouncex.browser.msie && 0 < e.indexOf("rv:") && (bouncex.browser.msie = parseInt(e.split("rv:")[1])), bouncex.browser.edge = /Edge/.test(e), bouncex.browser.edge && (bouncex.browser.edge = parseInt(e.split("Edge/")[1])), bouncex.browser.prerenderio = -1 < e.indexOf("Prerender"), bouncex.browser.android = -1 < e.indexOf("Android"), bouncex.browser.iphone = -1 < e.indexOf("iPhone"), bouncex.browser.ipad = -1 < e.indexOf("iPad"), bouncex.browser.ios8 = !1, bouncex.browser.ios9 = !1, bouncex.browser.ios = !1, bouncex.browser.iphone || bouncex.browser.ipad ? (bouncex.browser.ios = parseInt(e.split("Version/")[1]), bouncex.browser.ios9 = 9 === bouncex.browser.ios, bouncex.browser.ios8 = 8 === bouncex.browser.ios, bouncex.browser.chrome = /CriOS/.test(e), bouncex.browser.chrome && (bouncex.browser.ios = !!(47 < parseInt(e.split("CriOS/")[1])) && 9)) : bouncex.browser.chrome = /Chrome/.test(e), bouncex.browser.safari = !(-1 == e.indexOf("Safari") || -1 != e.indexOf("Chrome")), bouncex.browser.safari && 0 < e.indexOf("Version/") && (bouncex.browser.safari = parseInt(e.split("Version/")[1].replace(".", ""))), bouncex.browser.chrome && 0 < e.indexOf("Chrome/") && (bouncex.browser.chrome = parseInt(e.split("Chrome/")[1])), bouncex.browser.firefox && 0 < e.indexOf("Firefox/") && (bouncex.browser.firefox = parseInt(e.split("Firefox/")[1])), bouncex.ssl = "https:" == window.location.protocol | |
} | |
function init_post_campaign_public_function() { | |
bouncex.setBounceCookie = function() { | |
setBounceCookie() | |
}, bouncex.initActivationFuncs = function() { | |
init_activation_funcs() | |
}, bouncex.contains = !jQuery.contains || -1 != jQuery().jquery.indexOf("1.4.") || -1 < jQuery().jquery.indexOf("1.8.") ? eval("document.contains||document.compareDocumentPosition?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while((b=b.parentNode)){if(b===a){return true}}}return false};") : jQuery.contains, bouncex.close_ad = function(e, t, n) { | |
close_ad(e, t, n) | |
}, bouncex.report = function(e, t, n) { | |
return bouncex.campaigns[e] ? report(e, t, n) : void 0 | |
}, bouncex.report_submit = function(e, t, n) { | |
return report_submit(e, t, n) | |
}, bouncex.report_ga = function(e, t, n) { | |
report_ga(e, t, n) | |
}, bouncex.report_conversion = function(e, t) { | |
report_conversion(e, t) | |
}, window.close_bouncex_ad = close_ad, bouncex.fs = fs, bouncex.by_parent_id = function(e) { | |
return by_parent_id(e) | |
}, bouncex.show_ad = function(e) { | |
trigger_ad("manual", e) | |
}, bouncex.align_callout = align_callout_public, bouncex.destroy_ad = destroy_ad, bouncex.unload_campaigns = unload_campaigns, bouncex.reload_campaigns = ReloadCampaigns.addRequest.bind(ReloadCampaigns), bouncex.reportGa = reportGa, bouncex.loadBrandStyles = loadBrandStyles, bouncex.loadWebfonts = loadWebfonts, bouncex.activate_campaign = activate_campaign | |
} | |
function initBa() { | |
bouncex.website.ba.enabled && (bouncex.ba = { | |
fbel: [], | |
fbrc: 0, | |
fbto: null, | |
lip: {} | |
}) | |
} | |
function init_ibx() { | |
bouncex.ibx = { | |
wsid: bouncex.website.id, | |
_event_store: [], | |
_item_store: [], | |
uid: null, | |
crt: null, | |
token: null, | |
mode: 1, | |
cvar: {}, | |
_init: function() { | |
this.vid = bouncex.cookie.vid, this.token = bouncex.cookie.did, this.uid = this._get("user"), this.mode = this._get("mode"), this.crt = this._get("cart"), this._cart("set"), this._clkthrough(), this._espemailid(), this._emailhash(), this._log("initialized"), this._log("mode: " + this.mode + " | token: " + this.token) | |
}, | |
user: function(e, t) { | |
if (this._validate(e)) { | |
bouncex.cookie.uid = 1, setBounceCookie(); | |
var n = this._cart("get"); | |
n && ((t = t || {}).__cart = n), this._push("user", { | |
key: e, | |
val: t | |
}); | |
var i = {}; | |
i["user:email"] = e, i["user:source"] = t.__src, i["user:gcr"] = bouncex && bouncex.cookie ? bouncex.cookie.gcr : 99, i.agent = "js", t.campaign && (i.campaignid = t.campaign), i.eq = 1, event_stream_report("user", i) | |
} else this._log("invalid email") | |
}, | |
track: function(e, t, n, i) { | |
if (e && t) { | |
this["_" + e + "_store"] && this["_" + e + "_store"].push({ | |
key: JSON.stringify(n) | |
}), i || (i = ""); | |
var o = { | |
key: t, | |
val: n, | |
segment: i | |
}; | |
this._push(e, o); | |
var a = {}, | |
r = t; | |
for (var s in "item" == e && (r = "item", a["item:segment"] = i, a["item:category"] = i, a["item:id"] = t, a["item:url"] = n.__url, a["item:imageurl"] = n.creative, a["item:imagewidth"] = n.__width, a["item:imageheight"] = n.__height, a.stringvalue = t, a.legacy = 1), "cart" == e && (r = "cart"), n) n.hasOwnProperty(s) && "__" != s.substring(0, 2) && (a[r + ":" + s] = n[s]); | |
n && n.stringvalue && (a.stringvalue = n.stringvalue), a.eq = 1, event_stream_report(r, a) | |
} else this._log("type and key must be set") | |
}, | |
conv_params: function() { | |
var e = this._auto_add({ | |
ibx_mode: this._get("mode"), | |
ibx_clicks: this._get("clickstr") | |
}); | |
return e.ibx_clicks && (this._cookies.create("__ibxc0", e.ibx_clicks), this._cookies.destroy("__ibxc")), this._log("conv_params: " + (e.ibx_clicks ? e.ibx_clicks : "[none]")), this._qs(e) | |
}, | |
set: function(e, t) { | |
return "user" === e ? this.uid = t : "mode" === e ? (0 == t || 1 == t) && (this.mode = t, this._cookies.create("__ibxm", t)) : "cart" === e && (this.crt = t, this._cookies.create("__ibxcr", t, .5)), t | |
}, | |
dump: function(e) { | |
this._log(e + " = " + this._get(e)) | |
}, | |
_get: function(e) { | |
var t; | |
return "events" === e ? t = this._event_store : "items" === e ? t = this._item_store : "token" === e ? t = btoa(bouncex.cookie.did) : "user" === e ? (t = parseInt(bouncex.cookie.uid || this._cookies.read("__ibxu")), isNaN(t) && (t = 0)) : "mode" === e ? t = "0" === this._cookies.read("__ibxm") ? 0 : 1 : "clickstr" === e ? t = this._cookies.read("__ibxc") : "clicks" === e ? t = (t = this._cookies.read("__ibxc")) ? t.split(",") : [] : "cart" === e ? (t = parseInt(this._cookies.read("__ibxcr")), isNaN(t) && (t = 0)) : t = "invalid", t | |
}, | |
_push: function(e, t) { | |
var n, i = "type=" + e + "&wsid=" + this.wsid + "&gcr=" + bouncex.cookie.gcr + "&vid=" + bouncex.cookie.vid + "&mode=1"; | |
if (i += "&device_id=" + encodeURIComponent(bouncex.cookie.did), t.val = JSON.stringify(this._auto_add(t.val || {})), i = i + "&" + this._qs(t), n = void 0 === t.key ? "" : ": " + t.key, this._log(e.toUpperCase() + n + " // " + i), "cart" == e || "isr" == e) { | |
var o = bouncex.sau + "/ibx/ping?" + i; | |
document.createElement("img").src = o | |
} | |
}, | |
_auto_add: function(e) { | |
return (e = e || {}).hasOwnProperty("__url") || (e.__url = location.href), e.hasOwnProperty("__referrer") || (e.__referrer = document.referrer), e | |
}, | |
_cart: function(action) { | |
var cart = !1; | |
switch (action) { | |
case "get": | |
try { | |
cart = eval(bouncex.website.ibx.cart_rep.get) | |
} catch (e) { | |
cart = !1, this._log(e) | |
} | |
break; | |
case "set": | |
if (this.crt || -1 == location.href.indexOf("ibx_cart")) return !1; | |
cart = this._getparam("ibx_cart"), cart && (eval(bouncex.website.ibx.cart_rep.set), this.set("cart", 1)), cart = this.crt | |
} | |
return cart | |
}, | |
_clkthrough: function() { | |
var e, t = this._getparam("ibx_source"); | |
if (t) try { | |
if (e = this._get("clickstr")) { | |
if (-1 != e.indexOf(t)) return void this._log("click-through: " + t + " (DUPLICATE)"); | |
e += "," + t | |
} else e = t; | |
this._cookies.create("__ibxc", e), this._log("click-through: " + t) | |
} catch (e) { | |
this._log(e) | |
} | |
}, | |
_emailhash: function() { | |
var e = bouncex.visit_cookie.ueh; | |
e && event_stream_report("user", { | |
agent: "js", | |
"user:emailhash": e, | |
"user:source": "ibx_clickthrough" | |
}) | |
}, | |
_espemailid: function() { | |
if (bouncex.website.ibx.ulpj) { | |
var e = { | |
"user:source": "esp-email-id", | |
agent: "js" | |
}, | |
t = !1; | |
for (var n in bouncex.website.ibx.ulpj) | |
if (bouncex.website.ibx.ulpj.hasOwnProperty(n)) { | |
var i = this._getparam(n); | |
i && (t = !0, e["user:" + bouncex.website.ibx.ulpj[n]] = i) | |
} | |
t && event_stream_report("user", e) | |
} | |
}, | |
_log: function(e) { | |
0 == this.mode && bouncex.log("ibx: " + e) | |
}, | |
_validate: function(e) { | |
return /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e) | |
}, | |
_quick_validate: function(e) { | |
return null != e && 2 < e.indexOf(".") && 0 < e.indexOf("@") | |
}, | |
_qs: function(e) { | |
var t = []; | |
for (var n in e) e.hasOwnProperty(n) && t.push(n + "=" + encodeURIComponent(e[n])); | |
return t.join("&") | |
}, | |
_cookies: { | |
domain: window.bouncex.cookie_domain, | |
create: function(e, t, n) { | |
n || (n = 365); | |
var i = new Date; | |
i.setTime(i.getTime() + 24 * n * 60 * 60 * 1e3); | |
var o = "; expires=" + i.toGMTString(), | |
a = this.domain ? "domain=." + this.domain + ";" : ""; | |
document.cookie = e + "=" + t + o + "; path=/;" + a | |
}, | |
read: function(e) { | |
for (var t, n = e + "=", i = document.cookie.split(";"), o = 0; o < i.length; o++) { | |
for (t = i[o]; | |
" " == t.charAt(0);) t = t.substring(1, t.length); | |
if (0 == t.indexOf(n)) return t.substring(n.length, t.length) | |
} | |
return null | |
}, | |
destroy: function(e) { | |
this.create(e, "", -1) | |
} | |
}, | |
_getparam: getParam | |
} | |
} | |
function initAds() { | |
bouncex.website.gbi_enabled && (bouncex.website.gbi_enabled = canShowGbi()) | |
} | |
function shouldCheckDfp() { | |
return gbi2Enabled() && bouncex.website.checkDfp | |
} | |
function init_website_custom_js() { | |
if (bouncex.website.cjs) try { | |
eval(bouncex.website.cjs) | |
} catch (e) { | |
bouncex.err(e, { | |
source: "bouncex.website.cjs" | |
}) | |
} | |
} | |
function initPreInitCustomJs() { | |
if (bouncex.website.preinit_cjs) try { | |
eval(bouncex.website.preinit_cjs) | |
} catch (e) { | |
bouncex.err(e, { | |
source: "bouncex.website.preinit_cjs" | |
}) | |
} | |
} | |
function init_ibx_tracking() { | |
if (bouncex.website.ibx.te && 1 == bouncex.website.ibx.te) { | |
try { | |
eval(bouncex.website.ibx.tjs) | |
} catch (e) { | |
bouncex.err(e, { | |
source: "bouncex.website.ibx.tjs" | |
}) | |
} | |
if (1 == bouncex.website.ibx.miw) { | |
NativeCapture.init(); | |
var selector = "input:not([type=button],[type=submit],[type=reset],[type=hidden],[type=radio],[type=checkbox],[type=image],[type=password], #privy-container input, #dwfrm_giftcert_purchase_recipientEmail, #dwfrm_wishlist_search_email)"; | |
bouncex.website.ibx.miw_exclude && (selector += ":not(" + bouncex.website.ibx.miw_exclude + ")"), bouncex.off(bouncex.body, "blur.bx-miw", selector), bouncex.on(bouncex.body, "blur.bx-miw", function() { | |
var e = { | |
email: jQuery(this).val(), | |
source: "input" | |
}, | |
t = jQuery(this).attr("id"); | |
t && (e.input_id = t), bouncex.push(["user", e]) | |
}, selector) | |
} | |
} | |
} | |
function init_event_tracking() { | |
if (bouncex.website.ete) { | |
if (bouncex.website.ettm && !visitorTestMode("events")) return; | |
bouncex.et.init() | |
} | |
} | |
function tryCatch(e, t) { | |
if ("function" == typeof e) return e._wrapped || (e._wrapped = function() { | |
try { | |
return e.apply(this, arguments) | |
} catch (n) { | |
(t = t || {}).source = t.source || e.name || "tryCatch wrapper", Debug.report(n, t) | |
} | |
}), e._wrapped | |
} | |
function delegate(e, t, n, i) { | |
if (null != jQuery.fn.on) e.on(t, i, n); | |
else { | |
if (null == jQuery.fn.delegate) return bouncex.err("event listener delegation not supported"), !1; | |
e.delegate(i, t, n) | |
} | |
} | |
function undelegate(e, t, n) { | |
if (null != jQuery.fn.off) e.off(t, n); | |
else { | |
if (null == jQuery.fn.undelegate) return !1; | |
e.undelegate(n, t) | |
} | |
} | |
function bcxReady(f) { | |
bouncex.website.fbe || !(-1 < bouncex.website.sd && bouncex.website.vars) ? f() : (!bouncex._bcxReady && eval('bouncex._bcxReady=function(){function i(){if(r.isReady){return}try{document.documentElement.doScroll("left")}catch(e){bouncex.setTimeout2(i,1);return}r.ready()}function s(t){r.bindReady();var n=r.type(t);e.done(t)}var e,t,n={};n["[object Boolean]"]="boolean";n["[object Number]"]="number";n["[object String]"]="string";n["[object Function]"]="function";n["[object Array]"]="array";n["[object Date]"]="date";n["[object RegExp]"]="regexp";n["[object Object]"]="object";var r={isReady:false,readyWait:1,holdReady:function(e){if(e){r.readyWait++}else{r.ready(true)}},ready:function(t){if(t===true&&!--r.readyWait||t!==true&&!r.isReady){if(!document.body){return bouncex.setTimeout2(r.ready,1)}r.isReady=true;if(t!==true&&--r.readyWait>0){return}e.resolveWith(document,[r])}},bindReady:function(){if(e){return}e=r._Deferred();if(document.readyState==="complete"){return bouncex.setTimeout2(r.ready,1)}if(document.addEventListener){document.addEventListener("DOMContentLoaded",t,false);window.addEventListener("load",r.ready,false)}else if(document.attachEvent){document.attachEvent("onreadystatechange",t);window.attachEvent("onload",r.ready);var n=false;try{n=window.frameElement==null}catch(s){}if(document.documentElement.doScroll&&n){i()}}},_Deferred:function(){var e=[],t,n,i,s={done:function(){if(!i){var n=arguments,o,u,a,f,l;if(t){l=t;t=0}for(o=0,u=n.length;o<u;o++){a=n[o];f=r.type(a);if(f==="array"){s.done.apply(s,a)}else if(f==="function"){e.push(a)}}if(l){s.resolveWith(l[0],l[1])}}return this},resolveWith:function(r,s){if(!i&&!t&&!n){s=s||[];n=1;try{while(e[0]){e.shift().apply(r,s)}}finally{t=[r,s];n=0}}return this},resolve:function(){s.resolveWith(this,arguments);return this},isResolved:function(){return!!(n||t)},cancel:function(){i=1;e=[];return this}};return s},type:function(e){return e==null?String(e):n[Object.prototype.toString.call(e)]||"object"}};if(document.addEventListener){t=function(){document.removeEventListener("DOMContentLoaded",t,false);r.ready()}}else if(document.attachEvent){t=function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",t);r.ready()}}}return s}()'), bouncex._bcxReady(f)) | |
} | |
function updateQS() { | |
for (var e = 1 & arguments.length, t = (e ? arguments[0] : window.top.location.href).split("#"), n = t[0], i = !!(1 < t.length) && t[1], o = [], a = e; a < arguments.length; a += 2) { | |
var r = arguments[a], | |
s = encodeURIComponent(arguments[a + 1]), | |
c = new RegExp("([?&])" + r + "=?.*?(&|$)", "gi"); | |
n.match(c) ? n = n.replace(c, "$1" + r + "=" + s + "$2") : o.push(r + "=" + s) | |
} | |
return o.length && (n += (-1 == n.indexOf("?") ? "?" : "&" == n.slice(-1) ? "" : "&") + o.join("&")), n + (i ? "#" + i : "") | |
} | |
function qs(e) { | |
var t = []; | |
for (var n in e) e.hasOwnProperty(n) && t.push(n + "=" + encodeURIComponent(e[n])); | |
return t.join("&") | |
} | |
function getJString(e) { | |
var t = _typeof(e); | |
if ("object" != t || null === e) return "string" == t && (e = '"' + e + '"'), e + ""; | |
var n, i, o = [], | |
a = e && e.constructor == Array; | |
for (n in e) "string" == (t = _typeof(i = e[n])) ? i = '"' + i + '"' : "object" == t && null !== i && (i = getJString(i)), o.push((a ? "" : '"' + n + '":') + i); | |
return (a ? "[" : "{") + o + (a ? "]" : "}") | |
} | |
function stringify(e) { | |
return "undefined" == typeof JSON || "function" != typeof JSON.stringify ? getJString(e) : JSON.stringify(e) | |
} | |
function parseJSON(e, t) { | |
t = t || {}; | |
try { | |
var n = JSON.parse(e); | |
return n && "object" === _typeof(n) ? n : t | |
} catch (e) { | |
return t | |
} | |
} | |
function addCss(e, t, n) { | |
var i = document.createElement("style"); | |
return n && (i.id = n + "-style"), i.styleSheet ? i.styleSheet.cssText = e : i.innerHTML = e, t.appendChild(i), i | |
} | |
function getParam(e, t) { | |
var n = t ? "?" + t : window.location.href; | |
e = e.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); | |
var i = new RegExp("[\\?&#]" + e + "=([^&#]*)").exec(n); | |
return null == i ? "" : decodeURIComponent(i[1]) | |
} | |
function createIframe(e) { | |
var t = document.createElement("iframe"); | |
for (var n in e) e.hasOwnProperty(n) && t.setAttribute(n, e[n]); | |
return t | |
} | |
function MultiCookie(e) { | |
for (var t in this.disable_first_party = !1, this.first_party_limit = 999999, this.domain = window.location.host, this.best = function(e, t) { | |
return t.length > e.length ? t : e | |
}, this.parse_json = function(e) { | |
return JSON.parse(e) | |
}, this.stringify_json = function(e) { | |
return JSON.stringify(e) | |
}, this.set_qs = function(e, t, n) { | |
if (-1 == e.indexOf("&" + t + "=")) e += "&" + t + "=" + n; | |
else { | |
var i = new RegExp("&" + t + "=[^&]*"); | |
e = e.replace(i, "&" + t + "=" + n) | |
} | |
return e | |
}, e) this[t] = e[t]; | |
var n = window.localStorage, | |
i = window.globalStorage; | |
this.set = function(e, t) { | |
"object" == _typeof(t) && (t = this.stringify_json(t)), this.disable_first_party || this.cookie(e, t), this.local_storage(e, t), this.global_storage(e, t), this.window_name(e, t), this.user_data(e, t) | |
}, this.get = function(e) { | |
for (var t, n = this.getvs(e), i = ""; t = n.pop();) i = this.best(i, t); | |
return this.set(e, i), i | |
}, this.getvs = function(e) { | |
function t(e) { | |
e && "" !== e && n.push(e) | |
} | |
var n = []; | |
return t(this.cookie(e)), t(this.local_storage(e)), t(this.global_storage(e)), t(this.window_name(e)), t(this.user_data(e)), n | |
}, this.cookie = function(e, t) { | |
if (void 0 === t) return this.get_qs(e, document.cookie); | |
var n = this.domain; | |
0 > window.location.host.indexOf(n) && (n = window.location.host.split(".").slice(-2).join(".")), document.cookie = e + "='; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=" + n, document.cookie.length + t.length < this.first_party_limit && (document.cookie = e + "=" + t + "; expires=Tue, 31 Dec 2030 00:00:00 UTC; path=/; domain=" + n) | |
}, this.local_storage = function(e, t) { | |
try { | |
if (n) { | |
if (void 0 === t) return n.getItem(e); | |
n.setItem(e, t) | |
} | |
} catch (e) {} | |
}, this.global_storage = function(e, t) { | |
if (i) { | |
var n = this.getHost(); | |
try { | |
if (void 0 === t) return i[n][e]; | |
i[n][e] = t | |
} catch (e) {} | |
} | |
}, this.window_name = function(e, t) { | |
try { | |
if (void 0 === t) return this.get_qs(e, window.name); | |
window.name = this.set_qs(window.name, e, t) | |
} catch (e) {} | |
}, this.user_data = function(e, t) { | |
try { | |
var n = this.createElem("div", "userdata_el", 1); | |
if (n.style.behavior = "url(#default#userData)", void 0 === t) return n.load(e), n.getAttribute(e); | |
n.setAttribute(e, t), n.save(e) | |
} catch (e) {} | |
}, this.get_qs = function(e, t) { | |
if ("string" == typeof t) { | |
var n, i, o = e + "=", | |
a = t.split(/[;&]/); | |
for (n = 0; n < a.length; n++) { | |
for (i = a[n]; | |
" " === i.charAt(0);) i = i.substring(1, i.length); | |
if (0 === i.indexOf(o)) return i.substring(o.length, i.length) | |
} | |
} | |
} | |
} | |
function getBounceCookieMulti(e) { | |
if (bouncex.multicookie || (bouncex.multicookie = new MultiCookie({ | |
domain: bouncex.website.domain, | |
disable_first_party: bouncex.website.aco.disable_first_party && bouncex.website.aco.disable_first_party ? 1 : 0, | |
first_party_limit: bouncex.website.aco.first_party_limit && bouncex.website.aco.first_party_limit ? bouncex.website.aco.first_party_limit : 999999, | |
parse_json: bouncex.parseJSON, | |
stringify_json: bouncex.stringify, | |
best: function(e, t) { | |
"" === e && (e = {}); | |
var n = {}; | |
try { | |
'{"' !== t.substr(0, 2) && (t = bouncex.lz.decompressFromURI(t)), n = this.parse_json(t) | |
} catch (t) { | |
return e | |
} | |
var i = e.fvt ? e.fvt : 0; | |
return (n && n.fvt ? n.fvt : 0) > i ? n : e | |
} | |
})), void 0 !== e) return bouncex.multicookie.cookie(e); | |
var t = bouncex.multicookie.get(bouncex.website.cookie_name); | |
return "" === t && (t = {}), t | |
} | |
function getBounceCookieLocalStorage(e) { | |
return void 0 === e ? bouncex.cookie : getBounceCookieSingle(e) | |
} | |
function setBounceCookieLocalStorage() { | |
var e = encodeURIComponent(bouncex.stringify(bouncex.cookie)); | |
if (bouncex.local_storage_frame.contentWindow) bouncex.local_storage_frame.contentWindow.postMessage(e, "*"); | |
else var t = setInterval2(function() { | |
bouncex.local_storage_frame.contentWindow && (bouncex.local_storage_frame.contentWindow.postMessage(e, "*"), clearInterval(t)) | |
}, 100) | |
} | |
function getBounceCookieFPLocalStorage(e) { | |
if (e) return getBounceCookieSingle(e); | |
var t = localStorage.getItem(bouncex.website.cookie_name); | |
return parseJSON(bouncex.lz.decompressFromURI(t)) || {} | |
} | |
function setBounceCookieFPLocalStorage() { | |
localStorage.setItem(bouncex.website.cookie_name, bouncex.lz.compressToURI(bouncex.stringify(bouncex.cookie))) | |
} | |
function setBounceCookieSingle() { | |
var e = bouncex.website.cookie_name, | |
t = new Date; | |
t.setDate(t.getDate() + 365); | |
var n = bouncex.lz.compressToURI(bouncex.stringify(bouncex.cookie)) + "; expires=" + t.toUTCString(); | |
document.cookie = bouncex.cookie_domain ? e + "=" + n + ";path=/;domain=." + bouncex.cookie_domain + ";" : e + "=" + n + ";path=/;" | |
} | |
function getBounceCookieSingle(e) { | |
e || (e = bouncex.website.cookie_name); | |
var t, n, i, o = document.cookie.split(";"); | |
for (t = 0; t < o.length; t++) | |
if (n = o[t].substr(0, o[t].indexOf("=")), i = o[t].substr(o[t].indexOf("=") + 1), (n = n.replace(/^\s+|\s+$/g, "")) == e) return bouncex.website.cookie_name == e ? i ? ('{"' !== i.substr(0, 2) && (i = bouncex.lz.decompressFromURI(i)), parseJSON(i)) : {} : i; | |
if (bouncex.website.cookie_name == e) return {} | |
} | |
function setBounceVisitCookie() { | |
if (3400 !== bouncex.website.id) { | |
var e = bouncex.website.cookie_name + "v", | |
t = new Date; | |
t.setTime(t.getTime() + 18e5); | |
var n = bouncex.lz.compressToURI(bouncex.stringify(bouncex.visit_cookie)) + "; expires=" + t.toUTCString(); | |
document.cookie = bouncex.cookie_domain ? e + "=" + n + ";path=/;domain=." + bouncex.cookie_domain + ";" : e + "=" + n + ";path=/;" | |
} | |
} | |
function getBounceVisitCookie(e) { | |
if (3400 !== bouncex.website.id) { | |
e || (e = bouncex.website.cookie_name + "v"); | |
var t, n, i, o = document.cookie.split(";"); | |
for (t = 0; t < o.length; t++) | |
if (n = o[t].substr(0, o[t].indexOf("=")), i = o[t].substr(o[t].indexOf("=") + 1), (n = n.replace(/^\s+|\s+$/g, "")) == e) return '{"' === i.substr(0, 2) ? i : bouncex.lz.decompressFromURI(i) | |
} | |
} | |
function setBounceCookieMulti() { | |
var e = bouncex.website.cookie_name; | |
if (bouncex.multicookie.set(e, bouncex.stringify_cookie(bouncex.cookie)), !bouncex.browser || !bouncex.browser.safari) { | |
var t = bouncex.au + "/capture/update_cookie?cookie_name=" + e + "&cookie=" + encodeURIComponent(JSON.stringify(bouncex.cookie)); | |
document.createElement("img").src = t | |
} | |
} | |
function destroyAll(e) { | |
document.cookie.split(";").forEach(function(e) { | |
var t = e.split("=")[0]; | |
(-1 < t.indexOf("_ibx") || -1 < t.indexOf("bounceClientVisit")) && (document.cookie = t + "=; expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;", document.cookie = t + "=; expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;domain=" + bouncex.cookie_domain + ";") | |
}), localStorage.removeItem(bouncex.website.cookie_name), bouncex.gdpr_opt_out || (bouncex.gdpr_opt_out = !0, bouncex.local_storage_frame && bouncex.local_storage_frame.contentWindow && bouncex.local_storage_frame.contentWindow.postMessage("clear_all_data", "*"), bouncex.campaigns && init_post_campaign_public_function(), InitSequence.dynamic.tearDown(), bouncex.website.vars = [], bouncex.website.etjson = [], bouncex.website.cjs = "", bouncex.website.preinit_cjs = "", bouncex.website.etjs = "", bouncex.baddjs = exports.baddjs = baddjs = function() {}, exports.event_stream_report = event_stream_report = function() {}, bouncex.cookie && (bouncex.cookie.vid = bouncex.cookie.did = 0), "client_opt_out" !== e && "gdpr_no_consent_cookie" !== e && report_optout("bx_suppress", { | |
reason: e | |
}), bouncex.cookie = {}) | |
} | |
function clearBounceCookie(e) { | |
var t = bouncex.website.cookie_name, | |
n = "; expires=Thu, 01 Jan 1970 00:00:01 GMT"; | |
e ? (document.cookie = t + "=" + n + ";path=/;", document.cookie = t + "=" + n + ";path=/;domain=." + bouncex.cookie_domain + ";") : bouncex.cookie_domain ? document.cookie = t + "=" + n + ";path=/;" : document.cookie = t + "=" + n + ";path=/;domain=." + bouncex.cookie_domain + ";" | |
} | |
function stringify_cookie(e) { | |
return bouncex.stringify(e).replace(/;/g, "\\u003b").replace(/\+/g, "\\u002b").replace(/\=/g, "\\u003d") | |
} | |
function areCookiesEnabled() { | |
var e = !!navigator.cookieEnabled; | |
return void 0 !== navigator.cookieEnabled || e || (document.cookie = "testcookie", e = -1 != document.cookie.indexOf("testcookie")), e | |
} | |
function fpLocalStorageAvailable() { | |
if (window.localStorage) try { | |
if (localStorage.setItem("bxtest", !0), localStorage.getItem("bxtest")) return localStorage.removeItem("bxtest"), !0 | |
} catch (e) {} | |
return !1 | |
} | |
function visitorTestMode(e) { | |
switch (!0) { | |
case -1 < ["office", "bxdev", "bxtest"].indexOf(e): | |
return !(!bouncex.testmode || !bouncex.testmode[e]); | |
case !(bouncex.testmode && bouncex.testmode.bxdev): | |
return !1; | |
default: | |
return !!(bouncex.testmode && bouncex.testmode.bxdev && bouncex.testmode.bxdev[e]) | |
} | |
} | |
function initTestModeParts(e) { | |
var t = { | |
page_types: bouncex.website.pt, | |
cvars: bouncex.website.vars | |
}[e]; | |
if (!visitorTestMode(e)) | |
if (bouncex.removedItems = bouncex.removedItems || {}, bouncex.removedItems[e] = [], Array.isArray(t)) t = t.filter(function(t) { | |
return t.testmode && bouncex.removedItems[e].push(t.name), !t.testmode | |
}); | |
else | |
for (var n in t) t.hasOwnProperty(n) && t[n].testmode && (bouncex.removedItems[e].push(n), delete t[n]); | |
return t | |
} | |
function init_page_types() { | |
if (bouncex.website.pt) { | |
bouncex.website.pt = initTestModeParts("page_types"); | |
var e = findPageTypeMatch(bouncex.website.pt); | |
bouncex.website.pts = e | |
} | |
} | |
function getEnabledPageTypes() { | |
return bouncex.website.pt ? Object.keys(bouncex.website.pt) : [] | |
} | |
function findPageTypeMatch(e) { | |
for (var t in e) | |
if (e.hasOwnProperty(t)) { | |
var n = e[t]; | |
if (void 0 === n.val ? new Criteria(t, n, "pagetype").evaluate() : new Criteria(t, n.val, "pagetype").evaluate()) return t | |
} | |
return !1 | |
} | |
function Criteria(e, t, n) { | |
this.name = e, this.conditions = t, this.type = n || "other", this.conditionsPassed = !1, this.evaluate = function() { | |
try { | |
for (var e = 0; e < this.conditions.length; e++) { | |
for (var t = this.conditions[e], n = !1, i = 0; i < t.length && !n; i++) { | |
var o = t[i], | |
a = CriteriaHelper.activations[o.activation]; | |
n = !("function" != typeof a) && a(o.prop, o.prop2, o.prop3, o.val) | |
} | |
if (!n) return this.fail(t) | |
} | |
return this.pass() | |
} catch (e) { | |
bouncex.err(e, { | |
source: "criteria evaluation: " + this.type | |
}) | |
} | |
return this.fail() | |
}, this.log = function() { | |
if (bouncex.testmode.bxdev || bouncex.testmode.bxtest) { | |
bouncex.criteriaLog = bouncex.criteriaLog || {}, bouncex.criteriaLog[this.type] = bouncex.criteriaLog[this.type] || {}; | |
var e = this.name + "-" + JSON.stringify(this.conditions).length; | |
bouncex.criteriaLog[this.type][e] = { | |
conditions: this.conditions, | |
conditionsPassed: this.conditionsPassed, | |
failedCondition: this.failedCondition, | |
name: this.name | |
} | |
} | |
}, this.pass = function() { | |
return this.conditionsPassed = !0, this.log(), !0 | |
}, this.fail = function(e) { | |
return this.conditionsPassed = !1, this.failedCondition = e, this.log(), !1 | |
} | |
} | |
function percentageLiveTraffic(e) { | |
return bouncex.cookie && bouncex.cookie.did && bouncex.cookie.did.substr(bouncex.cookie.did.length - 2) < e | |
} | |
function isBxInternalTraffic() { | |
return "production" !== bouncex.env || visitorTestMode("office") || visitorTestMode("bxdev") | |
} | |
function next_sequence_id() { | |
return bouncex.cookie = getBounceCookie(), (!bouncex.cookie.hasOwnProperty("sid") || isNaN(bouncex.cookie.sid)) && (bouncex.cookie.sid = -1), bouncex.cookie.sid++, setBounceCookie(), bouncex.cookie.sid | |
} | |
function preventUserTracking(e) { | |
return updatePolicyCompliance({ | |
email: e["user:email"] | |
}), shouldEnforcePolicies({ | |
gdpr: !0, | |
casl: !0 | |
}) && !policyException(e) | |
} | |
function updatePolicyCompliance(e) { | |
if ((!bouncex.state.casl || !bouncex.state.gdpr) && e.email) { | |
var t = e.email.split(".").pop().toLowerCase(); | |
bouncex.state.casl || (bouncex.state.casl = 1 === bouncex.restrictedTlds.casl[t]), bouncex.state.gdpr || (bouncex.state.gdpr = 1 === bouncex.restrictedTlds.gdpr[t]) | |
} | |
} | |
function shouldEnforcePolicies(e) { | |
return !(!e.gdpr || !bouncex.state.gdpr) || !(!e.casl || !bouncex.state.casl || bouncex.website.cmp.whitelist_check) | |
} | |
function policyException(e) { | |
var t = "bouncex overlay" === e["user:source"] && e.campaignid && isCompliantCampaign(e.campaignid), | |
n = loggedInTrackingAllowed(e), | |
i = fromCompliantSource(e); | |
return t || n || i | |
} | |
function isCompliantCampaign(e) { | |
return !!(!bouncex.state.gdpr || bouncex.website.cmp.gdpr && bouncex.campaigns[e].compliance.gdpr) && (!bouncex.state.casl || bouncex.campaigns[e].compliance.casl) | |
} | |
function loggedInTrackingAllowed(e) { | |
if (e["user:source"] && "loggedin" === e["user:source"].toLowerCase()) { | |
if (bouncex.state.gdpr) return bouncex.website.cmp.gdpr && bouncex.website.cmp.whitelist_check; | |
if (bouncex.state.casl) return bouncex.website.cmp.whitelist_check | |
} | |
return !1 | |
} | |
function fromCompliantSource(e) { | |
if (e["user:source"] && bouncex.website.ibx && "string" == typeof bouncex.website.ibx.cus && -1 < bouncex.website.ibx.cus.indexOf(e["user:source"])) return !0 | |
} | |
function report_optout(e, t) { | |
var n = bouncex.seu + "/track.gif/" + encodeURIComponent(e) + "?"; | |
t.websiteid = bouncex.website.id, t.source || (t.source = "web"), t.agent || (t.agent = "user"); | |
var i = n + qs(t), | |
o = document.createElement("img"); | |
return o.src = i, o.src | |
} | |
function event_stream_report(e, t) { | |
"user" === e && bouncex.ibx._validate(t["user:email"]) && (bouncex.state.redactEmail || preventUserTracking(t)) && (t["user:email"] = "redacted"), "requestemail" === e && bouncex.ibx._validate(t["user:email"]) && (bouncex.state.redactEmail || void 0 === bouncex.state.redactEmail && preventUserTracking(t)) && (t["user:email"] = "redacted", t.email = "redacted"); | |
var n = bouncex.seu + "/track.gif/" + encodeURIComponent(e) + "?"; | |
t.mode = bouncex.cookie.m, t.websiteid = bouncex.website.id, t.visitid = bouncex.cookie.vid, t.deviceid = bouncex.cookie.did, t.pageviewid = bouncex.state && void 0 !== bouncex.state.pvid ? bouncex.state.pvid : bouncex.cookie.vpv + 1, t.sequenceid = next_sequence_id(), t.clienttimestamp = getTimeMs(), t.clientapiversion = bouncex.tag, t.device = bouncex.cookie.d, bouncex.website.pts && (t.page_type = bouncex.website.pts), t.source || (t.source = "web"), t.agent || (t.agent = "user"), bouncex.dg && bouncex.dg.softID && (t.soft_id = bouncex.dg.softID), bouncex.dg && bouncex.dg.hardID && (t.hard_id = bouncex.dg.hardID), bouncex.debug && bouncex.eventLog.push({ | |
name: e, | |
params: t | |
}), bouncex.cookie.t && (t.testmode = 1); | |
var i = n + qs(t), | |
o = document.createElement("img"); | |
return o.onload = function() { | |
handleEventStreamReportCompletion(t) | |
}, o.src = i, behavioralAudiencesReport(e, t), o.src | |
} | |
function handleEventStreamReportCompletion(e) { | |
e["user:emailhash"] && bouncex.visit_cookie && bouncex.visit_cookie.ueh && (delete bouncex.visit_cookie.ueh, setBounceVisitCookie()) | |
} | |
function report(e, t, n) { | |
isGbi2Campaign(e) ? bouncex.gbi2.report(e, t, n) : bouncex.website.gbi_enabled && bouncex.campaigns[e].gbi ? bouncex.gbi.report(e, t, n) : buildReport(e, t, n) | |
} | |
function buildReport(e, t, n) { | |
var i = 0, | |
o = "user", | |
a = { | |
views: "eligible", | |
pops: "pop", | |
clicks: "click", | |
closes: "close" | |
}; | |
if (a[t] && (t = a[t]), "click" == t) { | |
if (bouncex.campaigns[e].impression_click_reported) return !1; | |
bouncex.campaigns[e].impression_click_reported = !0, bouncex.cookie.campaigns[e].lclk = getTime2(), setBounceCookie() | |
} else if ("close" != t) "eligible" == t ? (o = "js", bouncex.cookie.campaigns[e].vv = bouncex.cookie.campaigns[e].vv ? bouncex.cookie.campaigns[e].vv + 1 : 1, 1 == bouncex.cookie.campaigns[e].vv && (i = 1), setBounceCookie()) : "pop" == t || "trypop" == t ? (o = "js", 1 == bouncex.cookie.campaigns[e].av && (i = 1)) : ("bid_fill" == t || "bid_none" == t || "bid_empty" == t || "bid_error" == t) && (o = "js"); | |
else if (bouncex.campaigns[e].impression_click_reported || bouncex.campaigns[e].submitted) return !1; | |
"object" !== _typeof(n) && (n = {}), i && (n.uq = 1), n.campaignid = e, n.source = n.source || "bouncex", n.agent = o, event_stream_report(t, n), reportGa(e, t), "click" == t && event_js_eval(e, "click") | |
} | |
function report_submit(e, t, n) { | |
return t.m = bouncex.cookie.m, t.d = bouncex.cookie.d, t.visit_id = bouncex.cookie.vid, t.device_id = bouncex.cookie.did, t.campaign_id = e, t.website_id = bouncex.website.id, t.pvid = bouncex.state.pvid, t.cts = getTimeMs(), next_sequence_id(), t.cookie = bouncex.stringify(getBounceCookie()), t.hasOwnProperty("step") || (t.step = 1), n && (t.last_step = 1), bouncex.dg && bouncex.dg.hardID && (t.hard_id = bouncex.dg.hardID), bouncex.dg && bouncex.dg.softID && (t.soft_id = bouncex.dg.softID), jQuery('<img src="' + bouncex.sau + "/capture/submit.gif?" + qs(t) + '"/>') | |
} | |
function report_conversion_sync(obj, source) { | |
perf.times("conversion"), obj = obj || {}, source = source || "sync", bouncex.cookie = getBounceCookie(), void 0 === obj.amount && (obj.amount = 0), void 0 === obj.order_id && (obj.order_id = ""), void 0 === obj.email && (obj.email = ""), void 0 === obj.goal && (obj.goal = ""); | |
var bamount = obj.amount, | |
border_id = obj.order_id, | |
bemail = obj.email, | |
bgoal = obj.goal, | |
sid = next_sequence_id(), | |
pvid = bouncex.state ? bouncex.state.pvid : bouncex.cookie.vpv + 1, | |
url = bouncex.sau + "/capture/convert.gif?m=" + bouncex.cookie.m + "&d=" + bouncex.cookie.d + "&goal=" + encodeURIComponent(bgoal) + "&email=" + encodeURIComponent(bemail) + "&email_sha256=" + (obj.email_sha256 ? encodeURIComponent(obj.email_sha256) : "") + "&order_id=" + encodeURIComponent(border_id) + "&amount=" + encodeURIComponent(bamount) + "&website_id=" + bouncex.website.id + "&visit_id=" + bouncex.cookie.vid + "&device_id=" + bouncex.cookie.did + "&pvid=" + pvid + "&sid=" + sid + "&cts=" + getTimeMs() + "&source=" + source + "&cookie=" + escape(bouncex.stringify(bouncex.cookie)) + "&" + bouncex.ibx.conv_params(); | |
bouncex.cookie.t && (url += "&testmode=" + bouncex.cookie.t), bouncex.dg && bouncex.dg.hardID && (url += "&hard_id=" + bouncex.dg.hardID), bouncex.dg && bouncex.dg.softID && (url += "&soft_id=" + bouncex.dg.softID); | |
var urlLengthLimit = 32e3, | |
newUrl = url + "&extradata=" + escape(bouncex.stringify(obj)); | |
newUrl.length < urlLengthLimit && (url = newUrl); | |
var img = document.createElement("img"); | |
if (img.alt = "conversion pixel", img.src = url, bouncex.website.tcjs) try { | |
eval(bouncex.website.tcjs) | |
} catch (e) { | |
bouncex.err(e, { | |
source: "bouncex.website.tcjs" | |
}) | |
} | |
if (bouncex.website.ibx.te && 1 == bouncex.website.ibx.te) try { | |
eval(bouncex.website.ibx.cjs) | |
} catch (e) { | |
bouncex.err(e, { | |
source: "bouncex.website.ibx.cjs" | |
}) | |
} | |
bouncex.cookie.lc = getTime2(), setBounceCookie() | |
} | |
function report_conversion(obj, source) { | |
var border_id = 0, | |
bemail = "", | |
bgoal = "", | |
bamount; | |
if (obj ? (bamount = obj.amount, border_id = obj.order_id, bemail = obj.email, obj.goal && (bgoal = obj.goal)) : obj = {}, bouncex.state.oijs && !border_id) try { | |
border_id = eval(bouncex.state.oijs) | |
} catch (e) {} | |
if (bouncex.state.ovjs && !bamount) try { | |
bamount = eval(bouncex.state.ovjs) | |
} catch (e) {} | |
if (bouncex.state.oejs && !bemail) try { | |
bemail = eval(bouncex.state.oejs) | |
} catch (e) {} | |
if (bouncex.state.goal && !bgoal) try { | |
bgoal = bouncex.state.goal | |
} catch (e) {} | |
obj.goal = bgoal, obj.amount = bamount, obj.order_id = border_id, obj.email = bemail, source = source || "async", report_conversion_sync(obj, source) | |
} | |
function event_js_eval(ca_id, type, data) { | |
if (bouncex.campaigns[ca_id].event_js) { | |
var campaign_id = ca_id; | |
if (bouncex.campaigns[ca_id].event_js[type]) try { | |
eval(bouncex.campaigns[ca_id].event_js[type]) | |
} catch (e) { | |
bouncex.err(e, { | |
source: "event_js_eval", | |
ca_id: ca_id | |
}) | |
} | |
} | |
} | |
function post_submit_redirect(e) { | |
var t = bouncex.campaigns[e].is_api, | |
n = bouncex.campaigns[e].submission_redirect, | |
i = bouncex.campaigns[e].submission_redirect_delay; | |
if (t && .3 > i) i = .3; | |
else if (!t) return !1; | |
n && setTimeout2(function() { | |
window.top.location.href = n | |
}, i ? 1e3 * i : 0) | |
} | |
function reportGa(e, t) { | |
var n = t; | |
"pop" == t && (n = "impression"), bouncex.website.gar && bouncex.campaigns[e].ga_i && bouncex.campaigns[e].ga_i[n] && bouncex.report_ga(n, bouncex.campaigns[e].ga_i.label) | |
} | |
function report_ga(e, t, n) { | |
if (n = void 0 !== n && !!n, "string" == typeof e && "string" == typeof t) { | |
var i = !1; | |
if (n || (i = "Impression" == (e = e.charAt(0).toUpperCase() + e.slice(1).toLowerCase()), e = "BounceX " + e), "function" == typeof window.ga) bouncex.website.gai && window.ga("create", bouncex.website.gai), window.ga("send", "event", "BounceX", e, t, { | |
nonInteraction: i | |
}); | |
else if ("object" === _typeof(window._gaq)) { | |
bouncex.website.gai && window._gaq.push(["_setAccount", bouncex.website.gai]); | |
var o = t.replace(/\(|\)/g, ""); | |
window._gaq.push(["_trackEvent", "BounceX", e, o, , i]) | |
} | |
} | |
} | |
function behavioralAudiencesReport(e, t) { | |
bouncex.website.ba.enabled && "user" === t.agent && facebookReport(e, t) | |
} | |
function facebookReport(e, t) { | |
if (1 === bouncex.website.ba.fbte && "user" === t.agent) { | |
for (var n = createFacebookEvents(e, t), i = 0; i < n.length; i++) bouncex.ba.fbel.push(n[i]); | |
sendEventsToFacebook(!1), "item" === e && (bouncex.ba.lip = t) | |
} | |
} | |
function sendEventsToFacebook(t) { | |
if ("undefined" != typeof fbq) | |
for (; null != (e = bouncex.ba.fbel.pop());) fbq(e.eventType, e.eventName, e.eventParams), bouncex.ba.fbto && clearTimeout(bouncex.ba.fbto); | |
else(null == bouncex.ba.fbto || 1 == t) && 5 > bouncex.ba.fbrc && (bouncex.ba.fbto = setTimeout2(sendEventsToFacebook, 500, !0), bouncex.ba.fbrc++) | |
} | |
function createFacebookEvents(e, t) { | |
var n = [], | |
i = { | |
"add to cart": "AddToCart", | |
"added to cart": "AddToCart", | |
"view item": "ViewContent", | |
"viewed item": "ViewContent", | |
conversion: "Purchase" | |
}, | |
o = { | |
source: "bx", | |
bx_event_name: e | |
}; | |
if ("conversion" !== e) { | |
var a = "item:id" in t ? t["item:id"] : bouncex.ba.lip["item:id"], | |
r = "item:price" in t ? t["item:price"] : bouncex.ba.lip["item:price"], | |
s = "item:category" in t ? t["item:category"] : bouncex.ba.lip["item:category"], | |
c = "item:copy" in t ? t["item:copy"] : bouncex.ba.lip["item:copy"]; | |
a && (o.content_type = "product", o.content_ids = [a]), r && (o.value = r), s && (o.content_category = s), c && (o.content_name = c) | |
} | |
var u = void 0 === bouncex.getBounceCookie().lc ? "prospect" : "customer"; | |
return n.push({ | |
eventType: "trackCustom", | |
eventName: "bx:" + e + " - " + u, | |
eventParams: o | |
}), e in i && n.push({ | |
eventType: "track", | |
eventName: i[e], | |
eventParams: o | |
}), n | |
} | |
function noteCookieAdShown(e) { | |
if (bouncex.website.gbi_enabled && bouncex.campaigns[e].gbi.stack_id) { | |
if (bouncex.gbi.stacks[bouncex.campaigns[e].gbi.stack_id].failed) return bouncex.gbi.log(e, "NOT saving cookie data"), !1; | |
bouncex.gbi.log(e, "saving cookie data") | |
} | |
bouncex.campaigns[e].ad_shown = !0, bouncex.cookie.campaigns[e].lavid = bouncex.cookie.vid, bouncex.cookie.campaigns[e].la = getTime2(), bouncex.cookie.campaigns[e].av = bouncex.cookie.campaigns[e].av ? bouncex.cookie.campaigns[e].av + 1 : 1, bouncex.cookie.campaigns[e].fsa || (bouncex.cookie.campaigns[e].fsa = bouncex.cookie.campaigns[e].la), bouncex.cookie.campaigns[e].as = bouncex.cookie.campaigns[e].as ? bouncex.cookie.campaigns[e].as + 1 : 1, bouncex.cookie.campaigns[e].ao = bouncex.cookie.campaigns[e].ao ? bouncex.cookie.campaigns[e].ao + 1 : 1, bouncex.campaigns[e].ap = bouncex.campaigns[e].ap ? bouncex.campaigns[e].ap + 1 : 1, "overlay" != bouncex.campaigns[e].type && "none" === bouncex.campaigns[e].coverlay || bouncex.campaigns[e].is_man || (bouncex.cookie.ao++, bouncex.pa++, bouncex.cookie.as++), setBounceCookie() | |
} | |
function report_endpageview(e) { | |
"visibilitychange" === e.type && "hidden" !== document.visibilityState || (event_stream_report("endpageview", { | |
"pageview:url": bouncex.calling_url, | |
"pageview:customvariables": JSON.stringify(bouncex.vars), | |
"pageview:event": e.type, | |
"perf:times": JSON.stringify(bouncex.perf.timesArr) | |
}), bouncex.off(bouncex.window, ".bx_endpageview"), bouncex.off(bouncex.document, ".bx_endpageview")) | |
} | |
function init_endpageview_event() { | |
bouncex.state.mobile && bouncex.on(bouncex.document, "visibilitychange.bx_endpageview", report_endpageview), bouncex.on(bouncex.window, "beforeunload.bx_endpageview pagehide.bx_endpageview unload.bx_endpageview", report_endpageview) | |
} | |
function baddjs(e) { | |
var t = document.createElement("script"); | |
t.setAttribute("src", e), t.setAttribute("type", "text/javascript"), document.getElementsByTagName("head")[0].appendChild(t) | |
} | |
function loadBrandStyles() { | |
if (bouncex.brandStyles) { | |
bouncex.brandStylesLoaded = bouncex.brandStylesLoaded || {}; | |
var e = "", | |
t = ""; | |
for (var n in bouncex.brandStyles) bouncex.brandStyles.hasOwnProperty(n) && !bouncex.brandStylesLoaded[n] && (e += bouncex.brandStyles[n], t += "-" + n, bouncex.brandStylesLoaded[n] = !0); | |
e && bouncex.addCss(e, bouncex.head[0], "bx-brand" + t) | |
} | |
} | |
function loadWebfonts() { | |
if (bouncex.webfonts) { | |
bouncex.fontCSSLoaded = bouncex.fontCSSLoaded || {}; | |
var e = ""; | |
for (var t in bouncex.webfonts) bouncex.webfonts.hasOwnProperty(t) && !bouncex.fontCSSLoaded[t] && (e += '<link href="//assets.bounceexchange.com/fonts/' + t + '/stylesheet.css" rel="stylesheet" type="text/css" media="all" />', bouncex.fontCSSLoaded[t] = 1); | |
jQuery(e).appendTo(bouncex.head) | |
} | |
} | |
function wndsize() { | |
var e = 0, | |
t = 0; | |
return window.innerWidth ? (e = window.innerWidth, t = window.innerHeight) : 0 == document.documentElement.clientWidth ? (e = document.body.clientWidth, t = document.body.clientHeight) : (e = document.documentElement.clientWidth, t = document.documentElement.clientHeight), { | |
width: e, | |
height: t | |
} | |
} | |
function wndorientation() { | |
return window.orientation | |
} | |
function make_include_string(e, t, n) { | |
var i = "never" === bouncex.website.ljq ? 0 : "undefined" == typeof jQuery ? "undefined" : _typeof(jQuery), | |
o = ""; | |
if (e) { | |
var a = bouncex.cookie; | |
e = "reloadCampaigns" | |
} else if (e = "init1", CustomVariables.varsToExpire && 0 < CustomVariables.varsToExpire.length) { | |
a = bouncex.cookie; | |
CustomVariables.varsToExpire.forEach(function(e) { | |
o += "&vdef[" + e.name + "]=" + escape(e.default).replace(/\+/g, "%2B") | |
}) | |
} else a = getBounceCookie(); | |
a = bouncex.stringify(a); | |
var r = bouncex.stringify(bouncex.visit_cookie); | |
bcx_vars = ""; | |
var s = {}; | |
for (var c in bouncex.vars) bcx_vars += "&vars[" + c + "]=" + escape(bouncex.vars[c]), s[c] = bouncex.vars[c] + ""; | |
bouncex.varsToAPI = JSON.stringify(s), bouncex.cookieToAPI = JSON.stringify(bouncex.cookie); | |
var u = (new Date).getTimezoneOffset(), | |
b = bouncex.wndsize(), | |
l = b.width + "x" + b.height, | |
d = getTimeMs(), | |
p = bouncex.psh && bouncex.psh.supported ? 1 : 0, | |
x = { | |
tojQ: i, | |
cts: d, | |
tzo: u, | |
website_id: bouncex.website.id, | |
resolution: l, | |
referrer: bouncex.referrer, | |
calling_url: bouncex.calling_url, | |
visit_cookie: escape(r), | |
cookie: escape(a) + bcx_vars.replace(/\+/g, "%2B") + o, | |
cookie_too_large: bouncex.cookie_too_large, | |
bp: p, | |
etp: JSON.stringify(getEnabledPageTypes()), | |
pts: bouncex.website.pts || "", | |
compliance_flag: bouncex.complianceFlag || "" | |
}, | |
g = bouncex.au + "/bounce/" + e + ".js" + bouncex.utils.url.generateQuerystring(x, "?"); | |
if (shouldCheckDfp()) { | |
var m = bouncex.gbi2.getDfpLineItemIds(); | |
0 < m.length && (g += "&dfp[]=".concat(m.join(","))) | |
} | |
if ("reloadCampaigns" == e) { | |
if (g += "&pvid=" + bouncex.state.pvid, bouncex.campaigns) | |
for (var f in bouncex.campaigns) bouncex.campaigns[f].ad_visible && (g += "&vc[]=" + f); | |
null != t && (g += "&rltype=" + t), null != n && (g += "&rlname=" + n), bouncex.cookie.t && (g += "&testmode=" + bouncex.cookie.t) | |
} | |
return bouncex.dg && bouncex.dg.hardID && (g += "&hard_id=" + bouncex.dg.hardID), bouncex.dg && bouncex.dg.softID && (g += "&soft_id=" + bouncex.dg.softID), g | |
} | |
function unload_campaigns() { | |
if (bouncex.events) | |
for (var e in bouncex.events) unload_campaign(e) | |
} | |
function unload_campaign(e) { | |
if (bouncex.events && bouncex.events[e]) | |
for (var t in bouncex.events[e]) "object" == _typeof(bouncex.events[e][t]) ? jQuery(bouncex.events[e][t]).unbind(t) : "function" == typeof bouncex.events[e][t] ? bouncex.events[e][t]() : clearTimeout(bouncex.events[e][t]), delete bouncex.events[e][t] | |
} | |
function unhideSite() { | |
clearTimeout(bouncex.usd.timeout), bouncex.usd.callback(), delete bouncex.usd | |
} | |
function can_show_ad(e, t) { | |
if (!bouncex.campaigns[e]) return !1; | |
if (bouncex.campaigns[e].qbxtest && !bouncex.campaigns[e].ad_visible) return !(!t && bouncex.campaigns[e].hasBehavioralCriteria && !behavioralCriteriaComplete(e)); | |
var n = e, | |
i = bouncex.campaigns[e].gbi.stack_id; | |
bouncex.website.gbi_enabled && i && e != bouncex.gbi.stacks[i].leader_id && (e = bouncex.gbi.stacks[i].leader_id); | |
var o = getTime2(); | |
if (bouncex.cookie = getBounceCookie(), bouncex.cookie.lvt = bouncex.cookie.campaigns[e].lvt = o, setBounceCookie(), !t) { | |
if (("none" != bouncex.campaigns[e].coverlay || "overlay" == bouncex.campaigns[e].type) && bouncex.overlay_visible) return !1; | |
if (bouncex.campaigns[n].ad_visible) return !1; | |
if (0 < bouncex.campaigns[e].tvao) { | |
var a = (window.pageYOffset || document.documentElement.scrollTop) - (document.documentElement.clientTop || 0); | |
if (bouncex.campaigns[e].tvao > a) return !1 | |
} | |
if (bouncex.campaigns[e].hasBehavioralCriteria && !behavioralCriteriaComplete(e)) return !1 | |
} | |
return !(bouncex.campaigns[n].failed || 0 < bouncex.website.map && bouncex.pa >= bouncex.website.map && ("none" != bouncex.campaigns[e].coverlay || "overlay" == bouncex.campaigns[e].type) && !bouncex.campaigns[e].is_man || 0 < bouncex.campaigns[e].map && bouncex.campaigns[e].ap >= bouncex.campaigns[e].map || 0 < bouncex.campaigns[e].mas && bouncex.cookie.campaigns[e].as >= bouncex.campaigns[e].mas || !bouncex.campaigns[e].is_man && 0 < bouncex.website.mas && ("none" != bouncex.campaigns[e].coverlay || "overlay" == bouncex.campaigns[e].type) && bouncex.website.mas <= bouncex.cookie.as || 0 < bouncex.campaigns[e].mao && bouncex.cookie.campaigns[e].ao >= bouncex.campaigns[e].mao || !bouncex.campaigns[e].is_man && !bouncex.campaigns[e].ipc && (bouncex.cookie.es || bouncex.cookie.campaigns[e].ls || bouncex.cookie.campaigns[e].submitted) && bouncex.campaigns[e].is_ec || (bouncex.campaigns[e].is_pers || bouncex.campaigns[e].closed_no_show) && bouncex.cookie.campaigns[e].wcv || bouncex.campaigns[e].repressed || t && bouncex.campaigns[e].hasBehavioralCriteria && 0 < bouncex.campaigns[e].activation_registry.length && !bouncex.campaigns[e].realtimeArmed && behavioralCriteriaComplete(e) || bouncex.campaigns[e].purchase_no_show && bouncex.cookie.lc > bouncex.cookie.campaigns[e].la) | |
} | |
function close_ad(e, t, n) { | |
if (bouncex.campaigns[e] && bouncex.campaigns[e].ad_visible && (bouncex.campaigns[e].ad_visible = !1, ("none" != bouncex.campaigns[e].coverlay || "overlay" == bouncex.campaigns[e].type) && (bouncex.overlay_visible = !1, bouncex.website.otc && (bouncex.timespaced = !0, bouncex.events[e].timeout_timespace = setTimeout2(function() { | |
bouncex.timespaced = !1 | |
}, 1e3 * bouncex.website.otc))), bouncex.campaigns[e].ng && close_ad_ng(e), unrepressCampaigns(e), event_js_eval(e, "close"), bouncex.campaigns[e].listeners.stopAll(), !t)) { | |
var i = e; | |
bouncex.website.gbi_enabled && bouncex.campaigns[e].gbi.stack_id && i != bouncex.gbi.stacks[bouncex.campaigns[e].gbi.stack_id].leader_id && (i = bouncex.gbi.stacks[bouncex.campaigns[e].gbi.stack_id].leader_id), bouncex.cookie.campaigns[i].wc = bouncex.cookie.campaigns[i].wcv = getTime2(), setBounceCookie(), n || report(e, "close"), "reload" === bouncex.campaigns[e].close_redirect_type ? bouncex.reload_campaigns() : bouncex.campaigns[e].close_redirect_type && bouncex.campaigns[e].close_redirect_url && (bouncex.events[e].timeout_close_redirect = teleport(bouncex.campaigns[e].close_redirect_type, bouncex.campaigns[e].close_redirect_url)) | |
} | |
} | |
function close_ad_ng(e) { | |
if ("tabtitle" !== bouncex.campaigns[e].type || bouncex.campaigns[e].control || (bouncex.campaigns[e].custom_tab_title.favicon_url && TabTalk.changeFavicon(e, !0), TabTalk.cancelTitleUpdate(e)), bouncex.campaigns[e].control || bouncex.campaigns[e].noCreative && !isGbi2Campaign(e)) return !1; | |
bouncex.campaigns[e].obj1.unbind("click.bcx_campaign_click_" + e, handleClick), bouncex.browser.ios && 0 < bouncex.campaigns[e].inputs.length && ("conversionbar" === bouncex.campaigns[e].type || "nanobar" === bouncex.campaigns[e].type) && (bouncex.campaigns[e].inputs.unbind(".bcx_ios_input_fix_" + e), removeIosInputFix(e)); | |
var t = "timeout_auto_submission_close"; | |
for (var n in bouncex.events[e][t] && (clearTimeout(bouncex.events[e][t]), delete bouncex.events[e][t]), bouncex.events[e]) - 1 !== n.indexOf("campaign_timer") && (clearInterval(bouncex.events[e][n]), delete bouncex.events[e][n]); | |
if (close_ad_ng_post_outro(e), "no_effect" !== bouncex.campaigns[e].transitionEffect) { | |
bouncex.campaigns[e].obj1.addClass("bx-impress-out"); | |
var i = jQuery("#bx-creative-" + e); | |
bouncex.on(i, "animationend webKitAnimationEnd", function() { | |
bouncex.off(i, "animationend webKitAnimationEnd"), clearInterval(bouncex.campaigns[e].animationTimeout), bouncex.campaigns[e].obj2.removeClass("bx-impress bx-impress-out") | |
}), bouncex.campaigns[e].animationTimeout = setTimeout2(function() { | |
bouncex.campaigns[e] && !bouncex.campaigns[e].ad_visible && (bouncex.off(i, "animationend webKitAnimationEnd"), bouncex.campaigns[e].obj2.removeClass("bx-impress bx-impress-out")) | |
}, 1e3) | |
} else bouncex.campaigns[e].obj2.removeClass("bx-impress"); | |
hideAlly(e), bouncex.campaigns[e].gbi && bouncex.campaigns[e].gbi.isVideo && bouncex.campaigns[e].gbi.player && bouncex.campaigns[e].gbi.player.remove() | |
} | |
function close_ad_ng_post_outro(e) { | |
"overlay" == bouncex.campaigns[e].type && (hideAllyOverlayPostOutro(e), bouncex.browser.iphone || bouncex.browser.ipad ? (bouncex.html.removeClass("bx-client-overlay-ios"), bouncex.body.removeClass("bx-client-overlay-ios"), bouncex.window.scrollTop(bouncex.preImpressScrollY)) : (bouncex.html.removeClass("bx-client-overlay"), bouncex.body.removeClass("bx-client-overlay"))), bouncex.campaigns[e].blur_gate_enabled && ("agilityzone" == bouncex.campaigns[e].type || "annotation" == bouncex.campaigns[e].type) && blurGateRemove(e) | |
} | |
function trigger_ad(e, t, n) { | |
var i = bouncex.campaigns[t]; | |
if ("manual" !== e) { | |
var o = makeUniqueInstrumentId(e, n); | |
if (i.hasBehavioralCriteria && (addTriggerToRegistry(o, t), i.realtimeArmed && !evaluateBehavioralTriggers([o], i.activations))) return behavioralCriteriaComplete(t) | |
} | |
show_ad(e, t) | |
} | |
function show_ad(type, ca_id) { | |
var ca = bouncex.campaigns[ca_id]; | |
if (isGbi2Campaign(ca_id) && !ca.dynamic_anchor && bouncex.gbi2.tryPop(ca_id, type), can_show_ad(ca_id) && (!isGbi2Campaign(ca_id) || bouncex.gbi2.canShowPubCampaign(type, ca_id))) { | |
if (bouncex.pa || perf.times("showad"), ca.trigger = type, bouncex.website.gbi_enabled) { | |
if (ca.gbi && ("index" == ca.gbi.provider || "tabr" == ca.gbi.provider || "dfphtml" == ca.gbi.provider || "pbm" == ca.gbi.provider || "aqbx" == ca.gbi.provider) && !ca.gbi.contentLoaded && !ca.gbi.isVideo) { | |
bouncex.gbi.clearRequestAssets(ca_id); | |
var call = "tabr" == ca.gbi.provider ? "requestCompleteMultiple" : "requestCompleteSingle"; | |
return bouncex.gbi[call](ca_id, ca.gbi.html, function() { | |
ca.gbi.contentLoaded = !0, show_ad(type, ca_id), 1 < ca.gbi.step && (setJumpStep(ca_id, ca.gbi.step, !1), nextStep(ca_id)) | |
}), !1 | |
} | |
var checkPlayVideo = !isBxPlayerCampaign(ca_id) || void 0 === ca.video.status.isPlayable; | |
if (checkPlayVideo && isPlayableVideoCampaign(ca_id, !0)) return playVideo(ca_id, !0, type), !1 | |
} | |
if (isGbi2Campaign(ca_id) && !ca.gbi.contentLoaded && !ca.gbi.contentLoading && "function" == typeof ca.onImpression) return ca.gbi.contentLoading = !0, ca.onImpression(function() { | |
ca.gbi.contentLoading = !1, ca.gbi.contentLoaded = !0, show_ad(type, ca_id) | |
}); | |
if (bouncex.campaigns[ca_id].ad_visible = !0, bouncex.campaigns[ca_id].impression_click_reported = !1, bouncex.campaigns[ca_id].submitted = !1, noteCookieAdShown(ca_id), isBxPlayerCampaign(ca_id) ? bouncex.video.bxPlayerPop(ca_id, type) : report(ca_id, "pop", { | |
"pop:activation": type | |
}), bouncex.campaigns[ca_id].ng && _prepareAndDisplay(ca_id), "teleport" != bouncex.campaigns[ca_id].overlay && !bouncex.campaigns[ca_id].noCreative && (show_close(ca_id), bouncex.campaigns[ca_id].ad_auto_close)) { | |
var delay = bouncex.campaigns[ca_id].is_pers ? calc_delay_cvt(bouncex.campaigns[ca_id].ad_auto_close) : 1e3 * bouncex.campaigns[ca_id].ad_auto_close; | |
bouncex.events[ca_id].timeout_auto_close = setTimeout2(function() { | |
close_ad(ca_id) | |
}, delay) | |
} | |
if (bouncex.campaigns[ca_id].supress_overlay || bouncex.campaigns[ca_id].supress_top || bouncex.campaigns[ca_id].supress_bottom) | |
for (var nca_id in bouncex.campaigns) nca_id != ca_id && (bouncex.campaigns[ca_id].supress_overlay && ("none" != bouncex.campaigns[nca_id].coverlay || "overlay" == bouncex.campaigns[nca_id].type) || bouncex.campaigns[ca_id].supress_top && ("none" != bouncex.campaigns[nca_id].ctop || "nanobar" == bouncex.campaigns[nca_id].type) || bouncex.campaigns[ca_id].supress_bottom && ("none" != bouncex.campaigns[nca_id].cbottom || "conversionbar" == bouncex.campaigns[nca_id].type)) && (bouncex.campaigns[nca_id].supressed_by_ca_id = ca_id, close_ad(nca_id, !0)); | |
if (repressCampaigns(ca_id), bouncex.usd && unhideSite(), event_js_eval(ca_id, "impression"), bouncex.campaigns[ca_id].osfn_website) try { | |
eval(bouncex.campaigns[ca_id].osfn_website) | |
} catch (e) { | |
bouncex.err(e, { | |
source: "osfn_website", | |
ca_id: ca_id | |
}) | |
} | |
} | |
} | |
function repressCampaigns(e) { | |
if (bouncex.campaigns[e].repress_overlay || bouncex.campaigns[e].repress_top || bouncex.campaigns[e].repress_bottom) | |
for (var t in bouncex.campaigns) t != e && (bouncex.campaigns[e].repress_overlay && ("none" != bouncex.campaigns[t].coverlay || "overlay" == bouncex.campaigns[t].type) || bouncex.campaigns[e].repress_top && ("none" != bouncex.campaigns[t].ctop || "nanobar" == bouncex.campaigns[t].type) || bouncex.campaigns[e].repress_bottom && ("none" != bouncex.campaigns[t].cbottom || "conversionbar" == bouncex.campaigns[t].type)) && (bouncex.campaigns[t].repressed_by_ca_id = e, bouncex.campaigns[t].repressed = !0) | |
} | |
function unrepressCampaigns(e) { | |
for (var t in bouncex.campaigns) bouncex.campaigns.hasOwnProperty(t) && bouncex.campaigns[t].repressed_by_ca_id === e && (delete bouncex.campaigns[t].repressed_by_ca_id, delete bouncex.campaigns[t].repressed) | |
} | |
function show_ad_ng(e, t) { | |
_prepareAndDisplay(t) | |
} | |
function _prepareAndDisplay(e) { | |
if (bouncex.campaigns[e].control || ("tabtitle" == bouncex.campaigns[e].type ? TabTalk.updateTitle(e) : "teleport" == bouncex.campaigns[e].type && teleport("_self", bouncex.campaigns[e].overlay_teleport_html)), bouncex.campaigns[e].control || bouncex.campaigns[e].noCreative && !isGbi2Campaign(e)) return !1; | |
if (googleTrustedStoresBadgeFix(e), bouncex.campaigns[e].submittedYet && (bouncex.campaigns[e].submittedYet = !1), bouncex.events[e].edwTimeout && clearTimeout(bouncex.events[e].edwTimeout), bouncex.campaigns[e].forceLastStep = !1, bouncex.campaigns[e].current_step ? (bouncex.campaigns[e].next_step = 1, bouncex.nextStep(e)) : (bouncex.campaigns[e].next_step = 2, bouncex.campaigns[e].current_step = 1, CouponCodes.insertCodesInCurrentStep(e)), bouncex.campaigns[e].obj1.bind("click.bcx_campaign_click_" + e, { | |
ca_id: e | |
}, handleClick), !(bouncex.browser.msie || bouncex.browser.ipad || bouncex.browser.iphone)) { | |
var t = bouncex.campaigns[e].obj1.find(".bx-click-to-copy"); | |
0 < t.length && (bouncex.on(t, "click", function() { | |
document.execCommand("copy") | |
}), bouncex.on(t, "copy", clickToCopy)) | |
} | |
if (bouncex.campaigns[e].inputs = bouncex.campaigns[e].obj1.find(".bx-input, .bx-textarea"), (!bouncex.browser.msie || 8 < bouncex.browser.msie) && 0 < bouncex.campaigns[e].inputs.length && bxBind(bouncex.campaigns[e].inputs, "keydown.bcx_campaign_input_" + e + " focus.bcx_campaign_input_" + e + " blur.bcx_campaign_input_" + e + " change.bcx_campaign_input_" + e + " paste.bcx_campaign_input_" + e + " keyup.bcx_campaign_input_" + e, handleInputEvents), "overlay" == bouncex.campaigns[e].type) | |
if (bouncex.overlay_visible = !0, bouncex.browser.iphone || bouncex.browser.ipad) bouncex.preImpressScrollY = bouncex.window.scrollTop(), bouncex.html.addClass("bx-client-overlay-ios"), bouncex.body.addClass("bx-client-overlay-ios"), bouncex.html[0].scrollTop = 1, bouncex.body[0].scrollTop = 1; | |
else { | |
var n = getStyle(bouncex.html[0], "overflow-y"); | |
"auto" == n || "scroll" == n ? bouncex.html.addClass("bx-client-overlay") : bouncex.body.addClass("bx-client-overlay") | |
} | |
else if ("nanobar" == bouncex.campaigns[e].type || "conversionbar" == bouncex.campaigns[e].type || "liquidscreen" == bouncex.campaigns[e].type) { | |
var i = jQuery("#bx-campaign-" + e + "-clone"); | |
"nanobar" == bouncex.campaigns[e].type || "liquidscreen" == bouncex.campaigns[e].type ? bouncex.body.prepend(i) : "conversionbar" == bouncex.campaigns[e].type && bouncex.body.append(i) | |
} else "annotation" == bouncex.campaigns[e].type && bxBind(window, "resize.bx_campaign_" + e, function() { | |
alignCampaign(e) | |
}, e); | |
if (bouncex.browser.ios && 0 < bouncex.campaigns[e].inputs.length && ("conversionbar" === bouncex.campaigns[e].type || "nanobar" === bouncex.campaigns[e].type) && bouncex.campaigns[e].inputs.bind("touchstart.bcx_ios_input_fix_" + e, { | |
ca_id: e | |
}, handleIosInputTouchStart).bind("blur.bcx_ios_input_fix_" + e, { | |
ca_id: e | |
}, handleIosInputBlur), alignCampaign(e), bouncex.campaigns[e].blur_gate_enabled && ("agilityzone" == bouncex.campaigns[e].type || "annotation" == bouncex.campaigns[e].type) && blurGateAdd(e), bouncex.campaigns[e].shroud_on_hover && addShroudOnHover(e), bouncex.campaigns[e].obj2.addClass("bx-impress"), isGbi2Campaign(e) && bouncex.gbi2.handleImpression(e), showAlly(e), "no_effect" !== bouncex.campaigns[e].transitionEffect) { | |
var o = jQuery("#bx-creative-" + e); | |
bouncex.campaigns[e].obj1.addClass("bx-impress-in"), bouncex.on(o, "animationend webKitAnimationEnd", function() { | |
bouncex.off(o, "animationend webKitAnimationEnd"), bouncex.campaigns[e].obj1.removeClass("bx-impress-in") | |
}) | |
} | |
bouncex.events[e].ally_timeout = setTimeout2(function() { | |
runCampaignTimers(e), "overlay" == bouncex.campaigns[e].type && focusOnFirstFocusableElement(e, !0) | |
}, 0), isPlayableVideoCampaign(e) && playVideo(e), bouncex.website.bpush && bouncex.psh.supported && bouncex.psh.showOptinPromptIfEligible(e) | |
} | |
function isPlayableVideoCampaign(e, t) { | |
var n = bouncex.campaigns[e], | |
i = n.gbi && n.gbi.isVideo; | |
if (t) { | |
if (!n.video && i && n.gbi.playBeforeImpression && !n.gbi.videoResponseLoaded) return !0; | |
if (isBxPlayerCampaign(e) && bouncex.video.ready(e)) return n.video.status.isPlayable = !0, !0 | |
} else { | |
if (!isBxPlayerCampaign(e) && i && n.gbi.config.playOnImpression && n.gbi.player && "playing" !== n.gbi.player.getState()) return !0; | |
if (isBxPlayerCampaign(e) && i && !n.ad_shown) return n.video.status.isPlayable = !0, !0 | |
} | |
return !1 | |
} | |
function playVideo(e, t, n) { | |
var i = bouncex.campaigns[e]; | |
BrowserUtil.currentTab.isVisible() ? (i.listeners.onTabVisibilityChange(function() { | |
bouncex.video.playPauseVisibility(e) | |
}), t ? isBxPlayerCampaign(e) ? bouncex.video.playVideoBeforeImpression(n, e) : bouncex.gbi.playVideoBeforeImpression(n, e) : i && i.gbi && i.gbi.player ? i.gbi.player.play() : isBxPlayerCampaign(e) && bouncex.video.play(e)) : i.listeners.onTabVisible(playVideo.bind(this, e, t, n)) | |
} | |
function runCampaignTimers(e) { | |
var t = bouncex.campaigns[e].obj2.find(".bx-timer"); | |
if (0 < t.length) { | |
var n = 0; | |
t.each(function(t, i) { | |
var o = "campaign_timer_" + ++n; | |
if (!bouncex.events[e][o]) { | |
var a = jQuery(i), | |
r = a.attr("data-count-to"), | |
s = a.attr("data-count-from"), | |
c = a.attr("data-format"), | |
u = a.attr("data-on-complete"), | |
b = parseInt(a.attr("data-reset")), | |
l = /{0?days}/.test(c); | |
run_timer(r, s, c, l, u, b, a, o, e), bouncex.events[e][o] = setInterval2(function() { | |
run_timer(r, s, c, l, u, !1, a, o, e) | |
}, 1e3) | |
} | |
}) | |
} | |
} | |
function blurGateAdd(e) { | |
var t = bouncex.campaigns[e]; | |
t.blur_gate_targets = jQuery(t.callout_t + " ~ *").add(t.blur_gate_inclusions).not(t.blur_gate_exclusions).not(".bxc"), t.blur_gate_filler_placement = t.calloutTarget.next().is(t.obj1) ? t.obj1 : t.calloutTarget, t.blur_gate_filler = jQuery(), bouncex.browser.msie && 9 >= bouncex.browser.msie ? blurGateAddUsingRedactedContent(e) : 10 === bouncex.browser.msie || 11 === bouncex.browser.msie || bouncex.browser.edge ? blurGateAddUsingTextShadow(e) : blurGateAddUsingCssFilters(e) | |
} | |
function blurGateAddUsingRedactedContent(e) { | |
var t = bouncex.campaigns[e], | |
n = 0; | |
t.blur_gate_targets.each(function(e, t) { | |
n += jQuery(t).height() | |
}), blurGateFillWithDummyContent(e, t.blur_gate_redacted_filler, n, 0); | |
var i = getStyle(t.calloutTarget[0], "color") || "#000", | |
o = bouncex.addCss(".bx-blur-" + e + ".bx-blur-redacted b { color:" + i + "!important; background-color:" + i + "!important; }", t.obj1[0], "bx-campaign-" + e + "-blur-redacted"); | |
t.blur_gate_filler = t.blur_gate_filler.add(o), t.blur_gate_targets.addClass("bx-blur-" + e + " bx-blur-hide") | |
} | |
function blurGateAddUsingTextShadow(e) { | |
var t = bouncex.campaigns[e]; | |
blurGateAddFillerIfNeeded(e, t.blur_gate_lorem_filler); | |
var n = getStyle(t.calloutTarget[0], "color") || "#000", | |
i = bouncex.addCss(".bx-blur-" + e + ".bx-blur-textshadow { text-shadow: 0 0 8px 1px " + n + "!important; }", t.obj1[0], "bx-campaign-" + e + "-blur-shadow"); | |
t.blur_gate_targets.add(t.blur_gate_filler).addClass("bx-blur-" + e + " bx-blur-textshadow"), t.blur_gate_filler = t.blur_gate_filler.add(i) | |
} | |
function blurGateAddUsingCssFilters(e) { | |
var t = bouncex.campaigns[e]; | |
blurGateAddFillerIfNeeded(e, t.blur_gate_lorem_filler), t.blur_gate_targets.add(t.blur_gate_filler).addClass("bx-blur-" + e + " bx-blur") | |
} | |
function blurGateRemove(e) { | |
var t = bouncex.campaigns[e]; | |
t.blur_gate_filler && t.blur_gate_filler.remove(), t.blur_gate_targets && t.blur_gate_targets.removeClass("bx-blur-" + e + " bx-blur bx-blur-hide bx-blur-textshadow") | |
} | |
function blurGateAddFillerIfNeeded(e, t) { | |
var n = bouncex.campaigns[e], | |
i = 0; | |
n.blur_gate_targets.each(function(e, t) { | |
return (i += jQuery(t).height()) < 600 | |
}); | |
var o = 600 - i; | |
0 < o && blurGateFillWithDummyContent(e, t, o, 0) | |
} | |
function blurGateFillWithDummyContent(e, t, n, i) { | |
var o = bouncex.campaigns[e]; | |
if (i < n) { | |
var a = o.blur_gate_filler.length % t.length, | |
r = jQuery(t[a]); | |
o.blur_gate_filler_placement.after(r); | |
var s = r.height(); | |
0 < s && (o.blur_gate_filler = o.blur_gate_filler.add(r), blurGateFillWithDummyContent(e, t, n, i + s)) | |
} | |
} | |
function addShroudOnHover(e) { | |
var t, n = jQuery("#bx-creative-" + e), | |
i = jQuery("#bx-hover-shroud-" + e); | |
n.length && i.length && (bxBind(n, "mouseenter.bx-backdrop", function() { | |
t = setTimeout2(function() { | |
bouncex.campaigns[e].obj1.addClass("bx-hover-shroud-on") | |
}, 150) | |
}, e), bxBind(n, "mouseleave.bx-backdrop", function() { | |
clearTimeout(t), bouncex.campaigns[e].obj1.removeClass("bx-hover-shroud-on") | |
}, e)) | |
} | |
function destroy_ad(e, t) { | |
bouncex.campaigns[e].mobile_interval && clearInterval(bouncex.campaigns[e].mobile_interval), unload_campaign(e), close_ad(e, !0), bouncex.campaigns[e].ng && jQuery("#bx-campaign-" + e + ",#bx-campaign-" + e + "-clone").remove(), bouncex.campaigns[e] && !t && (bouncex.campaigns[e].activeTimeCallback && ActiveTime.clearCallback(bouncex.campaigns[e].activeTimeCallback), delete bouncex.campaigns[e]) | |
} | |
function getScript(e, t) { | |
jQuery.ajax({ | |
url: e, | |
cache: !0, | |
dataType: "script", | |
success: t | |
}) | |
} | |
function clickToCopy(e) { | |
var t = jQuery(e.target), | |
n = t.text().trim(); | |
"Copied!" == n ? t.text(n) : (e.originalEvent.clipboardData.setData("text/plain", n), e.preventDefault(), t.text("Copied!"), setTimeout2(function() { | |
t.text(n) | |
}, 1e3)) | |
} | |
function showGenieFormErrors(e, t, n) { | |
var i = !!n && n.errors; | |
if (i) { | |
var o = jQuery(); | |
for (var a in i) | |
if (i.hasOwnProperty(a)) { | |
var r = t.find(".bx-error-" + e + "-" + a).text(i[a]).closest(".bx-row"); | |
r.addClass("bx-row-validation"), r.find(":input").attr("aria-invalid", !0).attr("aria-describedby", "bx-error-" + e + "-" + a), o = o.add(r) | |
} | |
return o.eq(0).find(":input").focus(), !1 | |
} | |
return !0 | |
} | |
function setSubmittedCookies(e) { | |
bouncex.cookie = getBounceCookie(), bouncex.campaigns[e].submitted = !0, bouncex.cookie.campaigns[e].ls = getTime2(), bouncex.campaigns[e].is_ec && (bouncex.cookie.es = !0), setBounceCookie() | |
} | |
function processSubmittedCampaignForm(e, t) { | |
if (bouncex.carbTrap = bouncex.carbTrap || "" !== e["carb-trap"], !bouncex.carbTrap) { | |
setSubmittedCookies(t), bouncex.state.redactEmail = !(!e.email || !preventUserTracking({ | |
"user:email": e.email, | |
"user:source": "bouncex overlay", | |
campaignid: t | |
}, "email")), bouncex.website.ibx.te && 1 == bouncex.website.ibx.te && 1 == bouncex.website.ibx.mibcx && bouncex.push(["user", { | |
email: e.email, | |
source: "bouncex overlay", | |
campaignid: t | |
}]), reportGa(t, "submission"), event_js_eval(t, "submission", e), "function" == typeof bouncex.onformsubmit && bouncex.onformsubmit(e.email); | |
var n = !!bouncex.campaigns[t].trigger_offsite_json && JSON.parse(bouncex.campaigns[t].trigger_offsite_json); | |
n && n.campaignId && bouncex.push(["requestemail", { | |
email: e.email, | |
campaignId: n.campaignId, | |
testmode: visitorTestMode("bxdev") ? 1 : 0 | |
}]), post_submit_redirect(t) | |
} | |
} | |
function processCampaignSubmitClose(e, t) { | |
bouncex.campaigns[e].acas && (bouncex.events[e].timeout_auto_submission_close = setTimeout2(function() { | |
bouncex.close_ad(e) | |
}, 1e3 * bouncex.campaigns[e].acas)), t && bouncex.close_ad(e, !1, !0) | |
} | |
function processLastStep(e, t) { | |
bouncex.campaigns[e].submittedYet || (bouncex.campaigns[e].submittedYet = !0, processSubmittedCampaignForm(queryStringToObject(bouncex.campaigns[e].obj1.find(".bx-input").serialize()), e), processCampaignSubmitClose(e, t)) | |
} | |
function loadCouponsAndValidateForm(e) { | |
CouponCodes.insertCodesInFormAndSubmit(e, function(e) { | |
validateForm(bouncex.campaigns[e].jform, e) | |
}.bind(this, e)) | |
} | |
function validateForm(e, t) { | |
if (bouncex.formSubmitting) return !1; | |
bouncex.formSubmitting = !0, next_sequence_id(); | |
var n = bouncex.campaigns[t].next_step == bouncex.campaigns[t].numSteps && !bouncex.campaigns[t].noPostSubmit || bouncex.campaigns[t].forceLastStep, | |
i = bouncex.campaigns[t].current_step == bouncex.campaigns[t].numSteps && (1 === bouncex.campaigns[t].numSteps || bouncex.campaigns[t].noPostSubmit), | |
o = n || i ? 1 : 0, | |
a = e.serialize(); | |
for (var r in a += "&step=" + bouncex.campaigns[t].current_step + "&visit_id=" + bouncex.cookie.vid + "&m=" + bouncex.cookie.m + "&d=" + bouncex.cookie.d, a += "&cookie=" + encodeURIComponent(bouncex.stringify(bouncex.cookie)), a += "&pos=overlay&step_name=before", a += "&last_step=" + o, a += "&device_id=" + bouncex.cookie.did, a += "&cts=" + getTimeMs(), a += "&pvid=" + bouncex.state.pvid, a += "&url=" + bouncex.calling_url, a += "&request_token=" + bouncex.state.request_token, bouncex.cookie.t && (a += "&testmode=" + bouncex.cookie.t), bouncex.dg && bouncex.dg.hardID && (a += "&hard_id=" + bouncex.dg.hardID), bouncex.dg && bouncex.dg.softID && (a += "&soft_id=" + bouncex.dg.softID), bouncex.vars) a += "&var[" + r + "]=" + encodeURIComponent(bouncex.vars[r]); | |
var s = e.attr("action"); | |
e.find(".bx-row-validation").removeClass("bx-row-validation"), e.find('[aria-invalid="true"]').removeAttr("aria-invalid"); | |
var c = { | |
url: s, | |
data: a, | |
dataType: "jsonp", | |
contentType: "multipart/form-data", | |
crossDomain: !0, | |
global: !1, | |
success: function(n) { | |
bouncex.formSubmitting = !1, bouncex.events[t].edwTimeout && clearTimeout(bouncex.events[t].edwTimeout), showGenieFormErrors(t, e, n) && (bouncex.nextStep(t), o && processLastStep(t, i)), jQuery.event.trigger({ | |
campaign_id: t, | |
isEmptyResponse: !n, | |
response: n, | |
stepNumber: bouncex.campaigns[t].current_step, | |
type: "bxValidateFormComplete" | |
}) | |
}, | |
error: function() { | |
bouncex.formSubmitting = !1, bouncex.nextStep(t) | |
} | |
}; | |
bouncex.campaigns[t].edw || (bouncex.events[t].edwTimeout = setTimeout2(function() { | |
bouncex.nextStep(t), o && processLastStep(t, i) | |
}, 2500)), _records2.default.addRecord({ | |
group: "email_capture", | |
campaignId: t, | |
data: c.data | |
}), jQuery.ajax(c) | |
} | |
function submitCampaignStep(e, t) { | |
return e = t || e, 0 < bouncex.campaigns[e].jform.find(".bx-input").length ? loadCouponsAndValidateForm(e) : nextStep(e), !1 | |
} | |
function setJumpStep(e, t, n) { | |
bouncex.campaigns[e].jumpStep = t, bouncex.campaigns[e].forceLastStep = n | |
} | |
function nextStep(e) { | |
bouncex.campaigns[e].jumpStep && (bouncex.campaigns[e].next_step = bouncex.campaigns[e].jumpStep, bouncex.campaigns[e].jumpStep = !1), bouncex.campaigns[e].next_step <= bouncex.campaigns[e].numSteps && (bouncex.campaigns[e].obj2.find(".bx-step-" + e + "-" + bouncex.campaigns[e].current_step).removeClass("bx-active-step"), bouncex.campaigns[e].obj2.find(".bx-step-" + e + "-" + bouncex.campaigns[e].next_step).addClass("bx-active-step"), cacheCreativeForm(e, bouncex.campaigns[e].next_step), bouncex.campaigns[e].obj2.removeClass("bx-active-step-" + bouncex.campaigns[e].current_step).addClass("bx-active-step-" + bouncex.campaigns[e].next_step), bouncex.campaigns[e].current_step = bouncex.campaigns[e].next_step, bouncex.campaigns[e].next_step++, CouponCodes.insertCodesInCurrentStep(e), show_close(e), alignCampaign(e), setFocusableElements(e), focusOnFirstFocusableElement(e, !0)), bouncex.website.bpush && bouncex.psh.supported && bouncex.psh.showOptinPromptIfEligible(e) | |
} | |
function handleInputEvents(e) { | |
var t = jQuery(this), | |
n = t.closest(".bx-row"); | |
switch (e.type) { | |
case "focus": | |
n.addClass("bx-has-focus"); | |
break; | |
case "blur": | |
n.removeClass("bx-has-focus"); | |
break; | |
case "keydown": | |
t.css("min-height", t.outerHeight()), { | |
Backspace: null, | |
Tab: null, | |
Enter: null, | |
ShiftLeft: null, | |
ShiftRight: null, | |
ControlLeft: null, | |
ControlRight: null, | |
AltLeft: null, | |
AltRight: null, | |
CapsLock: null, | |
ArrowLeft: null, | |
ArrowUp: null, | |
ArrowRight: null, | |
ArrowDown: null, | |
MetaLeft: null, | |
OSLeft: null, | |
MetaRight: null, | |
OSRight: null | |
}.hasOwnProperty(e.code) && { | |
8: null, | |
9: null, | |
13: null, | |
16: null, | |
17: null, | |
18: null, | |
20: null, | |
37: null, | |
38: null, | |
39: null, | |
40: null, | |
91: null, | |
93: null, | |
224: null | |
}.hasOwnProperty(e.keyCode) || n.addClass("bx-has-text"); | |
break; | |
case "change": | |
case "paste": | |
case "keyup": | |
0 < t.val().length ? n.addClass("bx-has-text") : n.removeClass("bx-has-text") | |
} | |
} | |
function handleClickReporting(e, t, n) { | |
var i = "default" === n, | |
o = 0 < bouncex.campaigns[e].jform.find(".bx-input").length; | |
if ("nothing" === n || "submit" === t && i && o) return !1; | |
"close" === t && i ? n = "close" : i && (n = "click"), bouncex.report(e, n) | |
} | |
function handleClick(e) { | |
var t = e.data.ca_id, | |
n = jQuery(e.target), | |
i = n.attr("data-click") ? n : n.closest("#bx-campaign-" + t + " [data-click]", "#bx-campaign-" + t), | |
o = i.attr("data-click"), | |
a = parseInt(i.attr("data-ignore-bubbles")) && !n.is(i), | |
r = i.attr("data-click-report") || "default", | |
s = parseInt(i.attr("data-fb-login")); | |
if (0 === i.length || a) return !0; | |
if (e.preventDefault(), e.stopPropagation(), handleClickReporting(t, o, r), "close" === o) 1 == bouncex.utils.getNestedProp("bouncex.campaigns[" + t + "].video.vast.isVPAID") && bouncex.campaigns[t].video.vpaid.ad.stopAd(), bouncex.close_ad(t, !1, !0); | |
else if ("nothing" === o) s && bouncex.fb.popCa(t); | |
else if ("hyperlink" === o) { | |
var c = i.attr("href"); | |
if ("_blank" === i.attr("target")) { | |
var u = window.open(); | |
u.opener = null, u.location = c | |
} else setTimeout2(function() { | |
window.location.href = c | |
}, 300) | |
} else if ("sms-optin" === o) bouncex.sms.optInMobile(t); | |
else if ("trigger" === o) { | |
bouncex.report(t, "click"); | |
var b = parseInt(i.attr("data-click-trigger")); | |
bouncex.campaigns[b] || (b = by_parent_id(b)), bouncex.campaigns[b] && bouncex.show_ad(b) | |
} else if ("submit" === o) { | |
var l = parseInt(i.attr("data-submit-jump")), | |
d = parseInt(i.attr("data-submit-force")), | |
p = parseInt(i.attr("data-step-delay")); | |
if (p) return setTimeout2(function() { | |
s ? bouncex.fb.nextStep(t, l, d) : (bouncex.setJumpStep(t, l, d), bouncex.submitCampaignStep(t)) | |
}, p); | |
s && !p ? bouncex.fb.nextStep(t, l, d) : (bouncex.setJumpStep(t, l, d), bouncex.submitCampaignStep(t)) | |
} | |
} | |
function run_timer(e, t, n, i, o, a, r, s, c) { | |
var u = bouncex.cookie.campaigns[c].fsa, | |
b = getTime2(), | |
l = e - b; | |
"first_impression" === t && (a && 0 >= u + l && (u = bouncex.cookie.campaigns[c].fsa = b, setBounceCookie()), l += u), 0 >= l && (clearInterval(bouncex.events[c][s]), l = 0, "close" === o && close_ad(c)); | |
var d = n.replace(/{(.*?)}/gi, function(e, t, n, o) { | |
var a = 0, | |
r = "floor", | |
s = '<span class="bx-ally-label">' + ("0days" === t ? "days" : t) + "</span>"; | |
return "0days" === t || "days" === t ? (r = 0 == o.split("{").length - 1 ? "ceil" : "floor", a = l / 60 / 60 / 24) : "hours" === t ? a = i ? l / 60 / 60 % 24 : l / 60 / 60 : "minutes" === t ? a = l / 60 % 60 : "seconds" === t && (a = l % 60), '<span class="bx-timer-units bx-timer-' + t + '">' + (10 > (a = Math[r](a)) && "days" != t ? "0" + a : a) + s + "</span>" | |
}); | |
r.html(d) | |
} | |
function by_parent_id(e) { | |
for (var t in bouncex.campaigns) | |
if (bouncex.campaigns[t].pid == e) return t; | |
return null | |
} | |
function show_close(e, t) { | |
bouncex.campaigns[e].ng && show_close_ng(e, t) | |
} | |
function show_close_ng(e, t) { | |
function n(t) { | |
bouncex.campaigns[e].obj2.removeClass("bx-has-close-inside bx-has-close-outside"), t && bouncex.campaigns[e].obj2.addClass("bx-has-close-" + t) | |
} | |
var i = bouncex.campaigns[e].closePlacement[bouncex.campaigns[e].current_step - 1]; | |
t ? n(i = i || "outside") : 1 === bouncex.campaigns[e].current_step ? bouncex.campaigns[e].close_button_delay && (n(!1), bouncex.events[e].timeout_close_delay = setTimeout2(function() { | |
n(bouncex.campaigns[e].closePlacement[bouncex.campaigns[e].current_step - 1]), delete bouncex.events[e].timeout_close_delay, "overlay" == bouncex.campaigns[e].type && setFocusableElements(e) | |
}, 1e3 * bouncex.campaigns[e].close_button_delay)) : (bouncex.campaigns[e].show_close_step || !bouncex.events[e].timeout_close_delay) && (n(i), bouncex.events[e].timeout_close_delay && (clearTimeout(bouncex.events[e].timeout_close_delay), delete bouncex.events[e].timeout_close_delay)), "overlay" == bouncex.campaigns[e].type && setFocusableElements(e) | |
} | |
function getCampaignTransitionEffect(e) { | |
var t = bouncex.campaigns[e].ng ? 0 : 1; | |
return bouncex.campaigns[e][bouncex.cookie.campaigns[e].as > t ? "te2" : "te"] | |
} | |
function placeCampaign(e) { | |
!bouncex.campaigns[e].ng || "agilityzone" !== bouncex.campaigns[e].type && "annotation" !== bouncex.campaigns[e].type ? bouncex.body.append(bouncex.campaigns[e].html) : placeCallout(e), bouncex.campaigns[e].placed = !0 | |
} | |
function placeCallout(e) { | |
bouncex.campaigns[e].calloutTarget = bouncex.campaigns[e].calloutTarget || jQuery(bouncex.campaigns[e].callout_t).eq(0), bouncex.campaigns[e].calloutPlacementTarget = bouncex.campaigns[e].calloutPlacementTarget || jQuery(bouncex.campaigns[e].callout_pt).eq(0); | |
var t = bouncex.campaigns[e].obj1 || jQuery(bouncex.campaigns[e].html); | |
"annotation" !== bouncex.campaigns[e].type && t.css({ | |
marginTop: parseInt(bouncex.campaigns[e].callout_voffset) + "px", | |
marginLeft: parseInt(bouncex.campaigns[e].callout_hoffset) + "px" | |
}), bouncex.campaigns[e].calloutPlacementTarget.length ? bouncex.campaigns[e].calloutPlacementTarget[bouncex.campaigns[e].dom_placement_method](t) : bouncex.campaigns[e].calloutTarget[bouncex.campaigns[e].dom_placement_method](t) | |
} | |
function alignCampaign(e) { | |
var t = parseInt(bouncex.campaigns[e].callout_hoffset) || 0, | |
n = parseInt(bouncex.campaigns[e].callout_voffset) || 0; | |
if ("nanotab" == bouncex.campaigns[e].type || "conversioncorner" == bouncex.campaigns[e].type || "dynamicwallpaper" == bouncex.campaigns[e].type || "railbar" == bouncex.campaigns[e].type) { | |
if (bouncex.campaigns[e].lastCalloutPos && bouncex.campaigns[e].obj1.removeClass("bx-fixed-" + bouncex.campaigns[e].lastCalloutPos), bouncex.campaigns[e].obj1.addClass("bx-fixed-" + bouncex.campaigns[e].callout_pos), bouncex.campaigns[e].lastCalloutPos = bouncex.campaigns[e].callout_pos, "dynamicwallpaper" == bouncex.campaigns[e].type && bouncex.website.content_width) { | |
var i = jQuery("#bx-creative-" + e).width(); | |
"content_right" == bouncex.campaigns[e].header_bottom_alignment ? t += parseInt((+bouncex.website.content_width + +i) / 2) : t -= parseInt((+bouncex.website.content_width + +i) / 2) | |
} | |
bouncex.campaigns[e].obj1.find(".bx-slab").css("margin-left", t + "px"), -1 === bouncex.campaigns[e].callout_pos.indexOf("b") ? bouncex.campaigns[e].obj1.find(".bx-align").css("margin-top", n + "px") : bouncex.campaigns[e].obj1.find(".bx-align").css("margin-bottom", -n + "px"), "dynamicwallpaper" == bouncex.campaigns[e].type && bouncex.website.content_width && (-1 < bouncex.campaigns[e].header_bottom_alignment.indexOf("right") ? bouncex.campaigns[e].obj1.find(".bx-shroud").css({ | |
left: "50%", | |
"margin-left": parseInt(bouncex.website.content_width / 2) + "px" | |
}) : -1 < bouncex.campaigns[e].header_bottom_alignment.indexOf("left") && bouncex.campaigns[e].obj1.find(".bx-shroud").css({ | |
left: "auto", | |
right: "50%", | |
"margin-right": parseInt(bouncex.website.content_width / 2) + "px" | |
})) | |
} else if ("annotation" == bouncex.campaigns[e].type && bouncex.campaigns[e].calloutTarget.length) { | |
var o = bouncex.campaigns[e].calloutTarget, | |
a = bouncex.campaigns[e].dom_placement_method, | |
r = bouncex.campaigns[e].calloutPlacementTarget, | |
s = bouncex.campaigns[e].callout_anchor_pos.substr(0, 1), | |
c = bouncex.campaigns[e].callout_anchor_pos.substr(1, 2), | |
u = bouncex.campaigns[e].obj1.find(".bx-creative"); | |
bouncex.campaigns[e].obj1.hasClass("bx-annotation-" + bouncex.campaigns[e].callout_pos) || (bouncex.campaigns[e].lastCalloutPos && bouncex.campaigns[e].obj1.removeClass("bx-annotation-" + bouncex.campaigns[e].lastCalloutPos), bouncex.campaigns[e].obj1.addClass("bx-annotation-" + bouncex.campaigns[e].callout_pos), bouncex.campaigns[e].lastCalloutPos = bouncex.campaigns[e].callout_pos); | |
var b = { | |
height: parseInt(o.height()), | |
width: parseInt(o.width()), | |
outerHeight: parseInt(o.outerHeight()), | |
outerWidth: parseInt(o.outerWidth()) | |
}, | |
l = { | |
x: 0, | |
y: 0 | |
}, | |
d = { | |
top: 0, | |
right: 0, | |
bottom: 0, | |
left: 0 | |
}, | |
p = 0, | |
x = 0; | |
if (r && 0 < r.length) { | |
var g = parseInt(r.outerHeight()), | |
m = r.outerWidth() / 2 + r.offset().left, | |
f = b.outerWidth / 2 + o.offset().left, | |
h = r.outerHeight() / 2 + r.offset().top, | |
v = b.outerHeight / 2 + o.offset().top; | |
p = { | |
before: o.offset().top - r.offset().top, | |
after: v + b.outerHeight / 2 - (h + g / 2), | |
prepend: o.offset().top - b.outerHeight / 2 - r.offset().top, | |
append: v + b.outerHeight - (h + g) | |
}[a], x = f - m | |
} | |
if (b.outerHeight - b.height || b.outerWidth - b.width) | |
for (var _ in d) d[_] = parseInt(o.css("padding-" + _)) + parseInt(o.css("border-" + _ + "-width")); | |
var y = { | |
l: -d.left - b.width / 2, | |
c: (d.right - d.left) / 2, | |
r: d.right + b.width / 2 | |
}[s], | |
w = { | |
t: d.top, | |
m: d.top - b.outerHeight / 2, | |
b: -d.bottom - b.height | |
}[c]; | |
if ("before" === a || "after" === a) { | |
var k = parseInt(o.css("marginLeft")) - parseInt(o.css("marginRight")); | |
l.x = (d.left - d.right + k) / 2, "before" === a && (l.y = -d.top), "after" === a && (l.y = b.height + d.bottom + parseInt(o.css("marginBottom"))) | |
} | |
u.css("margin", "0 0 " + (w + l.y - p - n) + "px " + (y + l.x + x + t) + "px") | |
} | |
} | |
function align_callout(e, t, n, i) { | |
n = void 0 !== n && n; | |
var o = bouncex.campaigns[t].c_button, | |
a = bouncex.campaigns[t], | |
r = o.offset(), | |
s = parseInt(r.top), | |
c = parseInt(r.left), | |
u = parseInt(e.height()), | |
b = parseInt(e.width()), | |
l = parseInt(o.outerWidth(!1)), | |
d = parseInt(o.outerHeight(!1)), | |
p = a.callout_pos.substr(0, 1), | |
x = a.callout_pos.substr(1, 2), | |
g = a.callout_anchor_pos.substr(0, 1), | |
m = a.callout_anchor_pos.substr(1, 2); | |
"l" == p ? c += 0 : "c" == p ? c -= parseInt(b / 2) : "r" == p && (c -= b), "r" == g ? c += l : "c" == g ? c += parseInt(l / 2) : "l" == g && (c += 0), "t" == x ? s += 0 : "m" == x ? s -= parseInt(u / 2) : "b" == x && (s -= u), "b" == m ? s += d : "m" == m ? s += parseInt(d / 2) : "t" == m && (s += 0), s += parseInt(a.callout_voffset), c += parseInt(a.callout_hoffset), "down" == n && void 0 !== i ? e.animate({ | |
top: s + i + "px" | |
}, 400) : "up" == n ? e.animate({ | |
top: s - i | |
}, 400) : e.css({ | |
top: s + "px", | |
left: c + "px" | |
}) | |
} | |
function align_callout_public(e) { | |
bouncex.campaigns[e].c_button = jQuery(bouncex.campaigns[e].callout_t).eq(0), align_callout(jQuery("#campaign_" + e + "_container_callout"), e) | |
} | |
function handleIosInputTouchStart(e) { | |
addIosInputFix(e.data.ca_id) | |
} | |
function addIosInputFix(e) { | |
if (!bouncex.campaigns[e].hasIosInputFix) { | |
var t = "conversionbar" === bouncex.campaigns[e].type ? document.body.scrollHeight : 0; | |
bouncex.head.append('<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1" id="bx-ios-meta-' + e + '"/>'), window.scrollTo(0, t), bouncex.campaigns[e].hasIosInputFix = !0 | |
} | |
} | |
function handleIosInputBlur(e) { | |
removeIosInputFix(e.data.ca_id) | |
} | |
function removeIosInputFix(e) { | |
bouncex.campaigns[e].hasIosInputFix && (jQuery("#bx-ios-meta-" + e).remove(), bouncex.campaigns[e].hasIosInputFix = !1) | |
} | |
function showAlly(e) { | |
"overlay" == bouncex.campaigns[e].type && showAllyOverlay(e), bouncex.campaigns[e].obj1.attr("aria-hidden", !1) | |
} | |
function showAllyOverlay(e) { | |
bouncex.campaigns[e].tabDecoys.bind("focus.bcx_campaign_ally_" + e, { | |
ca_id: e | |
}, handleTabDecoyFocus), bouncex.body.bind("keydown.bcx_campaign_ally_" + e, { | |
ca_id: e | |
}, handleAllyKeyDown), bouncex.campaigns[e].focusedBeforeCampaign = jQuery(document.activeElement), bouncex.campaigns[e].siblings = bouncex.campaigns[e].obj2.siblings(), bouncex.campaigns[e].siblings.each(function() { | |
var e = jQuery(this), | |
t = { | |
"aria-hidden": "true", | |
"aria-live": "off" | |
}; | |
for (var n in t) | |
if (t.hasOwnProperty(n)) { | |
var i = e.attr(n); | |
i && e.attr("data-bx-" + n, i), e.attr(n, t[n]) | |
} | |
}), setFocusableElements(e) | |
} | |
function hideAlly(e) { | |
bouncex.campaigns[e].obj1.attr("aria-hidden", !0), "overlay" == bouncex.campaigns[e].type && hideAllyOverlay(e) | |
} | |
function hideAllyOverlay(e) { | |
bouncex.campaigns[e].tabDecoys.unbind("focus.bcx_campaign_ally_" + e, handleTabDecoyFocus), bouncex.body.unbind("keydown.bcx_campaign_ally_" + e, handleAllyKeyDown), bouncex.campaigns[e].focusedBeforeCampaign && bouncex.campaigns[e].focusedBeforeCampaign.focus() | |
} | |
function hideAllyOverlayPostOutro(e) { | |
bouncex.campaigns[e].siblings.each(function() { | |
for (var e = jQuery(this), t = ["aria-hidden", "aria-live"], n = 0; n < t.length; n++) { | |
var i = t[n], | |
o = e.attr("data-bx-" + i); | |
o ? e.attr(i, o) : e.removeAttr(i), e.removeAttr("data-bx-" + i) | |
} | |
}) | |
} | |
function setFocusableElements(e) { | |
var t = bouncex.campaigns[e]; | |
t.focusableEls = t.obj1.find("form, :input, a").not(":hidden, .bx-ally-tab-decoy, .bx-carb-trap, .bx-ally-no-focus") | |
} | |
function focusOnFirstFocusableElement(e, t) { | |
var n = bouncex.campaigns[e], | |
i = t ? n.focusableEls.not(".bx-close-outside, .bx-close-inside") : n.focusableEls; | |
i.eq(0) && i.eq(0).focus() | |
} | |
function focusOnLastFocusableElement(e, t) { | |
var n = bouncex.campaigns[e], | |
i = t ? n.focusableEls.not(".bx-close-outside, .bx-close-inside") : n.focusableEls; | |
i.eq(i.length - 1) && i.eq(i.length - 1).focus() | |
} | |
function handleAllyKeyDown(e) { | |
var t = e.data.ca_id; | |
("Escape" === e.code || 27 === e.keyCode) && bouncex.close_ad(t) | |
} | |
function handleTabDecoyFocus(e) { | |
var t = e.data.ca_id, | |
n = bouncex.campaigns[t]; | |
e.stopImmediatePropagation(), e.preventDefault(), this === n.tabDecoys.get(0) ? focusOnLastFocusableElement(t) : this === n.tabDecoys.get(1) && focusOnFirstFocusableElement(t) | |
} | |
function isGbi2Campaign(e) { | |
var t = bouncex.campaigns[e]; | |
return !!(t && t.gbi && t.gbi.placements) | |
} | |
function isBxPlayerCampaign(e) { | |
var t = bouncex.campaigns[e]; | |
return !!(t && isGbi2Campaign(e) && t.video) | |
} | |
function gbi2Enabled() { | |
return bouncex.gbi2 && bouncex.website.gbi2Enabled | |
} | |
function init_activation_funcs() { | |
for (var e in bouncex.campaigns) bouncex.campaigns[e].activation_registry = [], bouncex.campaigns[e].failed = !1, bouncex.events[e] = bouncex.events[e] || {}, can_show_ad(e, !0) && !bouncex.campaigns[e].ad_visible && function(e) { | |
var t = 0; | |
bouncex.campaigns[e].activation_delay && (t = calc_delay_cvt(bouncex.campaigns[e].activation_delay)), bouncex.events[e].timeout_activation = setTimeout2(function() { | |
init_activation(e) | |
}, t) | |
}(e) | |
} | |
function cacheCreativeForm(e, t) { | |
bouncex.campaigns[e].jform = jQuery("#bx-form-" + e + "-step-" + t) | |
} | |
function setAccessibilityProperties(e) { | |
var t = bouncex.campaigns[e]; | |
bouncex.browser.msie && "overlay" == t.type && t.obj2.removeAttr("role"), t.tabDecoys = t.obj1.find(".bx-ally-tab-decoy") | |
} | |
function setTransitionEffect(e) { | |
var t = bouncex.campaigns[e]; | |
t.transitionEffect = getCampaignTransitionEffect(e), t.transitionEffect && "no_effect" !== t.transitionEffect && t.obj2.addClass("bx-fx-" + t.transitionEffect) | |
} | |
function assignDomReferencesToCampaign(e) { | |
bouncex.campaigns[e].obj1 = jQuery("#bx-campaign-" + e), bouncex.campaigns[e].obj2 = jQuery(".bx-campaign-" + e) | |
} | |
function applyCampaignStyles(e) { | |
var t = bouncex.campaigns[e]; | |
bouncex.addCss(t.styles, t.obj1[0], "bx-campaign-" + e) | |
} | |
function setCalloutTarget(e) { | |
("annotation" === e.type || "agilityzone" === e.type) && evalCalloutTarget(e) | |
} | |
function init_activation(e) { | |
var t = bouncex.campaigns[e], | |
n = bouncex.website.osre && t.osr_params_json && !t.osrItems; | |
if (!t) return !1; | |
if (isGbi2Campaign(e)) return gbi2Enabled() && !t.gbi.hasBegunAuction && bouncex.gbi2.initCampaign(e), !1; | |
if (setCalloutTarget(t), isMissingTarget(t)) return t.failed = !0, !1; | |
if (t.failed || t.placed) return !1; | |
if (t.html && placeCampaign(e), bouncex.website.gbi_enabled && t.gbi && t.gbi.stack_id) { | |
var i = t.gbi.stack_id; | |
bouncex.gbi.stacks[i].started || initGbiStack(i) | |
} | |
t.ng ? (assignDomReferencesToCampaign(e), n || cacheCreativeForm(e, 1), setAccessibilityProperties(e), t.listeners = new EventListeners, event_js_eval(e, "preactivation"), t.styles && applyCampaignStyles(e), t.control || t.noCreative || setTransitionEffect(e), loadImages(t.images || [], function() { | |
if (bouncex.website.gbi_enabled && t.gbi && t.gbi.provider) bouncex.gbi.log(e, "requesting v2 ad unit"), bouncex.gbi.request(e); | |
else if (n) | |
if ("product" !== bouncex.website.pts) bouncex.osr.init(e, !1); | |
else { | |
if (!bouncex.osr.viewItemId) return !1; | |
bouncex.osr.init(e, bouncex.osr.viewItemId) | |
} | |
else activate_campaign(e) | |
})) : t.html ? isDeprecatedFunction("ca.html else block") : activate_campaign(e) | |
} | |
function loadImagesCount(e, t) { | |
return 0 === --e && t(), e | |
} | |
function loadImages(e, t) { | |
var n, i = n = e.length; | |
if (i) | |
for (var o = 0; o < n; o += 1) | |
if (8 === bouncex.browser.msie && -1 !== e[o].indexOf(".svg")) i = loadImagesCount(i, t); | |
else { | |
if ("string" == typeof e[o]) { | |
var a = e[o]; | |
0 !== a.indexOf("http") && 0 !== a.indexOf("//") && (a = "//" + a); | |
var r = jQuery('<img src="' + a + '"/>') | |
} else r = jQuery(e[o]); | |
r.one("load", function() { | |
i = loadImagesCount(i, t) | |
}), r.length && r.get(0).complete && (i = loadImagesCount(i, t)) | |
} | |
else t() | |
} | |
function activate_campaign(e) { | |
return bouncex.campaigns[e] && !bouncex.campaigns[e].activated && void(bouncex.campaigns[e].gbi && !isGbi2Campaign(e) ? bouncex.website.gbi_enabled ? !bouncex.campaigns[e].gbi.provider && activateGbiCampaign(e) : (bouncex.campaigns[e].failed = !0, bouncex.log(e + ": incompatible extension")) : (campaignEligible(e), activateInstruments(e))) | |
} | |
function activateInstruments(e) { | |
bouncex.campaigns[e].hasBehavioralCriteria ? (initBehavioralCriteriaInstruments(e), onlyBehavioralCriteriaNegations(e) && (bouncex.campaigns[e].realtimeArmed = !0, initActivationInstruments(e))) : initActivationInstruments(e) | |
} | |
function campaignEligible(e) { | |
return !bouncex.campaigns[e].activated && (bouncex.campaigns[e].activated = !0, report(e, "eligible"), void event_js_eval(e, "activation")) | |
} | |
function initBehavioralCriteriaInstruments(e) { | |
var t = bouncex.campaigns[e].list_of_rt_activations || []; | |
for (var n in t) | |
if (t.hasOwnProperty(n)) { | |
var i = t[n]; | |
i.val = parseSiteElementSelector(i.val), bouncex.ca[i.activation](i.prop, i.val, e, i.prop2, i.prop3, i.prop4, i.prop5, i.prop6) | |
} | |
} | |
function initActivationInstruments(e) { | |
var t = bouncex.campaigns[e].activations; | |
for (var n in t) | |
if (t.hasOwnProperty(n)) { | |
var i = t[n]; | |
i.val = parseSiteElementSelector(i.val), bouncex.ca[i.activation](i.prop, i.val, e, i.prop2, i.prop3, i.prop4, i.prop5, i.prop6) | |
} | |
} | |
function hasBehavioralCriteria(e) { | |
return 0 < bouncex.campaigns[e].list_of_rt_activations | |
} | |
function onlyBehavioralCriteriaNegations(e) { | |
var t = bouncex.campaigns[e].list_of_rt_activations, | |
n = bouncex.campaigns[e].activations_rt; | |
return !!(0 < t.filter(function(e) { | |
return e.shouldBeAbsent | |
}).length) && (1 === n.length || 0 === t.filter(function(e) { | |
return !e.shouldBeAbsent | |
}).length) | |
} | |
function makeUniqueInstrumentId(e, t) { | |
if (!t) return e; | |
var n = t.slice(0, 2).concat(t.slice(3)); | |
return e + "_" + ["prop", "val", "prop2", "prop3", "prop4", "prop5", "prop6"].map(function(e, t) { | |
return n[t] | |
}).join("_") | |
} | |
function getUniqueInstrumentId(e) { | |
return -1 === ["bounce", "manual", "control", "inter", "back", "pers"].indexOf(e.activation) ? ["activation", "prop", "val", "prop2", "prop3", "prop4", "prop5", "prop6"].map(function(t) { | |
return e[t] | |
}).join("_") : e.activation | |
} | |
function addTriggerToRegistry(e, t) { | |
var n = bouncex.campaigns[t]; - 1 !== n.activation_registry.indexOf(e) || n.activation_registry.push(e) | |
} | |
function behavioralCriteriaComplete(e) { | |
var t = bouncex.campaigns[e]; | |
return t.realtimeArmed ? !!BehavioralCriteria.evaluate(t.activation_registry, t.activations_rt, e) && evaluateBehavioralTriggers(t.activation_registry, t.activations) : !!BehavioralCriteria.evaluate(t.activation_registry, t.activations_rt, e) && (t.realtimeArmed = !0, initActivationInstruments(e), !1) | |
} | |
function evaluateBehavioralTriggers(e, t) { | |
for (var n = 0; n < t.length; n++) | |
if (-1 !== e.indexOf(getUniqueInstrumentId(t[n]))) return !0; | |
return !1 | |
} | |
function activation_funcs() { | |
var e = Math.abs, | |
t = []; | |
return t.manual = function() {}, t.control = function(e, t, n) { | |
trigger_ad("control", n) | |
}, t.inter = function(e, t, n) { | |
bouncex.cookie.vpv >= e && trigger_ad("inter", n) | |
}, t.bounce = function(e, t, n) { | |
bxBind("html,body", "mouseout.bouncex_show_" + n, function(e) { | |
process_mouse_out(e, n) | |
}, n), (bouncex.browser.msie || bouncex.browser.safari && 50 >= bouncex.browser.safari) && bxBind("html,body", "mousemove.bouncex_show_" + n, function(e) { | |
process_mouse_move(e, n) | |
}, n) | |
}, t.iosbounce = function(e, t, n) { | |
if (!bouncex.browser.ios) return !1; | |
var i = Array.prototype.slice.call(arguments), | |
o = { | |
previousHeight: wndsize().height, | |
thresholdHeight: wndsize().height, | |
previousOrientation: wndorientation(), | |
previousPosition: bouncex.window.scrollTop(), | |
isScrollingUp: !1, | |
touchLock: !1, | |
touchEnded: !0 | |
}; | |
bxPassiveBind(window, "touchstart.bouncex_iosbounce_" + n, function(e) { | |
o.touchLock = !0, o.touchEnded = !1, o.previousPosition = e.pageY, o.thresholdHeight = wndsize().height | |
}, n), bxPassiveBind(window, "touchend.bouncex_iosbounce_" + n, function(e) { | |
o.isScrollingUp = o.previousPosition < e.pageY, o.touchEnded = !0, clearTimeout(bouncex.events[n]["touch_timeout_" + n]), bouncex.events[n]["touch_timeout_" + n] = setIosBounceTouchTimeout(o) | |
}, n), bxPassiveBind(window, "resize.bouncex_iosbounce_" + n, function() { | |
o.touchLock ? (clearTimeout(bouncex.events[n]["touch_timeout_" + n]), bouncex.events[n]["touch_timeout_" + n] = setIosBounceTouchTimeout(o)) : (clearTimeout(bouncex.events[n]["orientation_timeout_" + n]), bouncex.events[n]["orientation_timeout_" + n] = setIosBounceTimeout(n, o, "yes" === t, i)) | |
}, n) | |
}, t.mobile_bounce = function(n, i, o) { | |
if (bouncex.state.mobile) { | |
if (bouncex.browser.ios) { | |
var a = bouncex.campaigns[o].activations; | |
for (var r in a) | |
if (a.hasOwnProperty(r) && "iosbounce" === a[r].activation) return !1; | |
return t.iosbounce(n, i, o) | |
} | |
var s, c = Array.prototype.slice.call(arguments), | |
u = 0, | |
b = "yes" === i, | |
l = 0; | |
clearInterval(bouncex.campaigns[o].mobile_interval), bouncex.campaigns[o].mobile_interval = setInterval2(function() { | |
var t, n = window.scrollY, | |
i = e(n - u); | |
n > u ? s = "down" : n < u && (s = "up"), t = bouncex.campaigns[o].ad_visible && b && "down" === s, !0 === bouncex.campaigns[o].ad_shown && l++, can_show_ad(o) && "up" === s && 50 < .1 * i ? (trigger_ad("mobile_bounce", o, c), !b && clearInterval(bouncex.campaigns[o].mobile_interval)) : t && 10 < l && (clearInterval(bouncex.campaigns[o].mobile_interval), close_ad(o, !0)), u = n | |
}, 100) | |
} | |
}, t.timer = function(e, t, n) { | |
bouncex.events[n].timeout_timer = setTimeout2(function() { | |
trigger_ad("timer", n, [e, t]) | |
}, 1e3 * parseInt(t)) | |
}, t.back = function(e, t, n) { | |
if (!window.angular) { | |
var i = !1; | |
if ("landing_page" == e ? bouncex.state.iol && (i = !0) : i = !0, i && history.pushState) { | |
if (!history.state || !history.state.bx_rewind) | |
if (bouncex.browser.chrome && (bouncex.browser.iphone || bouncex.browser.ipad)) { | |
var o = "touchend.bcx_rewind_fix_" + n; | |
bxBind(bouncex.body, o, function() { | |
bouncex.body.unbind(o), history.pushState({ | |
bx_rewind: "bx_rewind1" | |
}, "", "") | |
}, n) | |
} else history.pushState({ | |
bx_rewind: "bx_rewind1" | |
}, "", decodeURIComponent(bouncex.calling_url)); | |
bouncex.original_hash = window.location.hash, bxBind(bouncex.window, "popstate.bcx_popstate_" + n, function(t) { | |
history.state || "landing_page" == e && bouncex.browser.safari && history.state && history.state.bx_rewind || bouncex.original_hash !== window.location.hash || history.state && history.state.bx_rewind || "popstate" != t.type || (can_show_ad(n) ? (trigger_ad("back", n), clearTimeout(bouncex.rewind_control_timeout), bouncex.campaigns[n].control && !bouncex.rewind_variation_timeout ? bouncex.rewind_control_timeout = setTimeout2(function() { | |
history.back() | |
}, 300) : bouncex.rewind_variation_timeout = setTimeout2(function() { | |
delete bouncex.rewind_variation_timeout | |
}, 300)) : (bouncex.window.unbind("popstate.bcx_popstate_" + n), history.back())) | |
}, n) | |
} | |
} | |
}, t.pers = function(e, t, n) { | |
var i = !1; | |
bouncex.campaigns[n].is_pers = !0, "landing_page" == e && bouncex.state.iol ? i = !0 : "landing_page" != e && (i = !0), i && trigger_ad("pers", n) | |
}, t.worm = function(e, t, n) { | |
noteCookieAdShown(n), report(n, "pop", { | |
"pop:activation": "worm" | |
}), teleport("_self", t) | |
}, t.inactivity = function(e, t, n) { | |
var i = Array.prototype.slice.call(arguments), | |
o = "mousemove.bouncex_inactivity_" + n + " keydown.bouncex_inactivity_" + n + " DOMMouseScroll.bouncex_inactivity_" + n + " mousewheel.bouncex_inactivity_" + n + " mousedown.bouncex_inactivity_" + n + " touchstart.bouncex_inactivity_" + n + " touchmove.bouncex_inactivity_" + n + " focus.bouncex_inactivity_" + n; | |
bxPassiveBind(window, o, function() { | |
clearTimeout(bouncex.events[n].inactivity), bouncex.events[n].inactivity = setInactivityTimeout(n, t, o, i) | |
}, n), bouncex.events[n].inactivity = setInactivityTimeout(n, t, o, i) | |
}, t.reactivity = function(e, t, n) { | |
var i = Array.prototype.slice.call(arguments), | |
o = "mousemove.bouncex_activity_" + n + " keydown.bouncex_activity_" + n + " DOMMouseScroll.bouncex_activity_" + n + " mousewheel.bouncex_activity_" + n + " mousedown.bouncex_activity_" + n + " touchstart.bouncex_activity_" + n + " touchmove.bouncex_activity_" + n + " focus.bouncex_activity_" + n; | |
bxPassiveBind(window, o, function() { | |
clearTimeout(bouncex.events[n].reactivity), bouncex.events[n].reactivity = setReactivityTimeout(n, t, o, i) | |
}, n), bouncex.events[n].reactivity = setReactivityTimeout(n, t, o, i) | |
}, t.scroll = function(t, n, i, o, a) { | |
var r, s, c, u = Array.prototype.slice.call(arguments), | |
b = jQuery(document).height(), | |
l = bouncex.wndsize().height, | |
d = parseInt(n); | |
t = 1 === t, o = !!o && parseInt(o), c = t || o, a = !!a, bxBind(window, "scroll.bouncex_" + i, function() { | |
var n, p, x, g, m, f = (new Date).getTime(), | |
h = window.pageYOffset || document.body.scrollTop, | |
v = bouncex.wndsize(), | |
_ = v.height !== l, | |
y = v.height + h + 5 >= b || 0 >= h - 5, | |
w = bouncex.campaigns[i].ad_visible, | |
k = !c, | |
C = !c; | |
if (p = t ? (b - v.height - h) / (b - v.height) * 100 : (h + v.height) / b * 100, n = t ? p >= d : 100 < parseInt(p) + d && p > r, c && (void 0 === s || null == p)) return s = f, void(r = p); | |
c && (x = t ? (b - v.height) * (r - p) / 100 : b * (p - r) / 100, g = 100 * e(x / (f - s)), m = 0 < x, k = t && !m || !t && m, C = !o || g >= o); | |
s = f, r = p, l = v.height, !a || _ || y || (!w || k) && (!w || n) || (close_ad(i, !0), !can_show_ad(i, !0) && jQuery(window).unbind("scroll.bouncex_" + i)), C && n && k && !_ && !y && (trigger_ad("scroll", i, u), !can_show_ad(i, !0) && !a && jQuery(window).unbind("scroll.bouncex_" + i)) | |
}, i) | |
}, t.mclick = function(e, t, n) { | |
var i = Array.prototype.slice.call(arguments); | |
if ("left" == e && "teleport" == bouncex.campaigns[n].overlay && "_self" !== bouncex.campaigns[n].overlay_teleport_type) { | |
var o = function() { | |
trigger_ad("mclick", n, i) | |
}; | |
bxBind(window.document, "click.bouncex_mclick_" + n, o, n) | |
} else { | |
o = function(t) { | |
var o = t.keyCode || t.which || t.button; | |
t.button && 2 == t.button && (o = 3), ("left" == e && 1 == o || "any" == e) && trigger_ad("mclick", n, i), ("right" == e && 3 == o || "any" == e) && trigger_ad("mclick", n, i), can_show_ad(n, !0) || bouncex.off(jQuery(window.document), "mousedown.bouncex_mclick_" + n) | |
}; | |
bxBind(window.document, "mousedown.bouncex_mclick_" + n, o, n) | |
} | |
}, t.hover = function(e, t, n, i) { | |
var o = Array.prototype.slice.call(arguments); | |
e = e ? _Mathround(1e3 * e) : 500, i = 1 === i; | |
var a = t.replace(/\W/g, ""), | |
r = jQuery(t), | |
s = showHover.bind(null, n, a, o), | |
c = handleHover.bind(null, n, a, e, t, i, s), | |
u = unhandleHover.bind(null, n, a); | |
bxBind(t, "mouseenter.bx" + n + a, c, n), bxBind(t, "mouseleave.bx" + n + a, u, n), bouncex.events[n]["listener_hover" + a] = function() { | |
r.unbind("mouseenter.bx" + n + a, c), r.unbind("mouseleave.bx" + n + a, u), r.unbind("mouseleave.bx" + n + a, s) | |
} | |
}, t.clickon = function(e, t, n) { | |
var i = Array.prototype.slice.call(arguments), | |
o = t.replace(/\W/g, ""), | |
a = function() { | |
jQuery(t).length && (trigger_ad("clickon", n, i), !can_show_ad(n, !0) && bouncex.events[n]["listener_clickon" + o]()) | |
}; | |
void 0 === bouncex.body.on ? (bouncex.body.delegate(t, "click.bx" + n + o, a), bouncex.events[n]["listener_clickon" + o] = function() { | |
bouncex.body.undelegate(t, "click.bx" + n + o, a) | |
}) : (bouncex.body.on("click.bx" + n + o, t, a), bouncex.events[n]["listener_clickon" + o] = function() { | |
bouncex.body.off("click.bx" + n + o, t, a) | |
}) | |
}, t.change = function(e, t, n) { | |
var i = Array.prototype.slice.call(arguments), | |
o = t.replace(/\W/g, ""), | |
a = function() { | |
jQuery(t).length && (trigger_ad("change", n, i), !can_show_ad(n, !0) && bouncex.events[n]["listener_change" + o]()) | |
}; | |
void 0 === bouncex.body.on ? (bouncex.body.delegate(t, "change.bx" + n + o, a), bouncex.events[n]["listener_change" + o] = function() { | |
bouncex.body.undelegate(t, "change.bx" + n + o, a) | |
}) : (bouncex.body.on("change.bx" + n + o, t, a), bouncex.events[n]["listener_change" + o] = function() { | |
bouncex.body.off("change.bx" + n + o, t, a) | |
}) | |
}, t.waypoint = function(e, t, n, i, o, a, r, s) { | |
var c = Array.prototype.slice.call(arguments); | |
o = !!o, a = !!a, r = !!r, s = !!s, offsetUnitIsPercent = !!i, e = parseInt(e) || 0; | |
var u = jQuery(t).eq(0); | |
if (u.length) { | |
var b, l, d, p, x = "scroll.bx.waypoint." + n + " resize.bx.waypoint." + n, | |
g = bouncex.window, | |
m = getCurrentScrollPosition(g, a), | |
f = crossedWaypointDown = hasCrossedWaypoint = hasReversedWaypoint = isScrollingDown = isScrollingUp = !1, | |
h = function() { | |
l = u.height(), d = offsetUnitIsPercent ? l * e / 100 : e, p = u.offset().top + d + (r ? 0 : l), b = getCurrentScrollPosition(g, a), isScrollingUp = b < m, isScrollingDown = b > m, f = isScrollingUp && p <= m && p > b, crossedWaypointDown = isScrollingDown && p >= m && p < b, hasCrossedWaypoint = f && o || crossedWaypointDown && !o, hasReversedWaypoint = f && !o || crossedWaypointDown && o, hasCrossedWaypoint && (trigger_ad("waypoint", n, c), !s && !can_show_ad(n, !0) && g.unbind(x)), hasReversedWaypoint && s && (close_ad(n, !0), !can_show_ad(n, !0) && g.unbind(x)), m = getCurrentScrollPosition(g, a) | |
}; | |
bxBind(window, x, function() { | |
clearTimeout(bouncex.events[n].waypoint_debounce_timeout), bouncex.events[n].waypoint_debounce_timeout = setTimeout2(h, 30) | |
}, n) | |
} | |
}, t.highlight_text = function(e, t, n, i) { | |
var o = Array.prototype.slice.call(arguments); | |
e = parseInt(e) || 5, i = parseInt(i) || 5; | |
var a = jQuery(t).eq(0); | |
if (a.length) { | |
var r = a.text().toLowerCase().trim(), | |
s = "mouseup.bouncex_highlight_text_" + n; | |
bxBind(bouncex.body, s, function() { | |
var t = ""; | |
window.getSelection ? t = window.getSelection().toString().toLowerCase() : document.selection && "Control" != document.selection.type && (t = document.selection.createRange().text.toLowerCase()); | |
var a = t.substring(t.length - e, t.length), | |
c = t.substring(0, e); | |
t.length >= e && (-1 < t.indexOf(r) || -1 < r.indexOf(t) || a.length >= e && -1 < r.indexOf(a) || c.length >= e && -1 < r.indexOf(c)) && t.length <= r.length + i && (trigger_ad("highlight_text", n, o), !can_show_ad(n, !0) && bouncex.body.unbind(s)) | |
}, n) | |
} | |
}, t.tab_unfocus = function(e, t, n, i, o) { | |
var a = parseInt(e), | |
r = Array.prototype.slice.call(arguments); | |
bxBind(window, "blur.bouncex_tabunfocus_" + n, function() { | |
bouncex.events[n].tabunfocus_delay = bouncex.events[n].tabunfocus_delay || setTimeout2(function() { | |
trigger_ad("tab_unfocus", n, r), bxBind(window, "focus.bouncex_tabunfocus_" + n, function() { | |
bouncex.window.unbind("focus.bouncex_tabunfocus_" + n), "yes" === i && report(n, "click"), "yes" === o && (clearTimeout(bouncex.events[n].tabunfocus_delay), delete bouncex.events[n].tabunfocus_delay, close_ad(n)) | |
}, n), can_show_ad(n, !0) || bouncex.window.unbind("blur.bouncex_tabunfocus_" + n) | |
}, 1e3 * a) | |
}, n) | |
}, t.finished_typing = function(e, t, n) { | |
var i = Array.prototype.slice.call(arguments), | |
o = jQuery(t).eq(0); | |
if (o.length) { | |
var a = t.replace(/\W/g, ""); | |
bxBind(t, "keyup.bx" + n + a + ", blur.bx" + n + a, function(e) { | |
var t = jQuery(this).val(); | |
handleFinishedTyping(e, n, a, o, i, t) | |
}, n) | |
} | |
}, t.active_time = function(e, t, n) { | |
var i = Array.prototype.slice.call(arguments); | |
bouncex.campaigns[n].activityArgs = i, bouncex.campaigns[n].activeTimeCallback = ActiveTime.addCallback(t, function() { | |
trigger_ad("active_time", n, bouncex.campaigns[n].activityArgs) | |
}) | |
}, t | |
} | |
function setCampaignCalloutTargetToIndex(e, t) { | |
var n = bouncex.campaigns[e]; | |
n.calloutTarget = jQuery(n.callout_t).eq(t) | |
} | |
function handleHover(e, t, n, i, o, a) { | |
bouncex.events[e]["timeout_" + t] = setTimeout2(function() { | |
o ? bxBind(i, "mouseleave.bx" + e + t, a, e) : a() | |
}, n) | |
} | |
function unhandleHover(e, t) { | |
clearTimeout(bouncex.events[e]["timeout_" + t]), delete bouncex.events[e]["timeout_" + t] | |
} | |
function showHover(e, t, n) { | |
trigger_ad("hover", e, n), can_show_ad(e, !0) || bouncex.events[e]["listener_hover" + t]() | |
} | |
function getCurrentScrollPosition(e, t) { | |
return e.scrollTop() + (t ? e.height() : 0) | |
} | |
function setInactivityTimeout(e, t, n, i) { | |
return setTimeout2(function() { | |
trigger_ad("inactivity", e, i), bxPassiveUnbind(window, n) | |
}, 1e3 * t) | |
} | |
function setReactivityTimeout(e, t, n, i) { | |
return setTimeout2(function() { | |
bxPassiveUnbind(window, n); | |
var o = "mousemove.bouncex_reactivity_" + e + " keydown.bouncex_reactivity_" + e + " DOMMouseScroll.bouncex_reactivity_" + e + " mousewheel.bouncex_reactivity_" + e + " mousedown.bouncex_reactivity_" + e + " touchstart.bouncex_reactivity_" + e + " touchmove.bouncex_reactivity_" + e + " focus.bouncex_reactivity_" + e; | |
bxPassiveBind(window, o, function() { | |
bxPassiveUnbind(window, o), trigger_ad("reactivity", e, i), can_show_ad(e, !0) && bxPassiveBind(window, n, function() { | |
clearTimeout(bouncex.events[e].reactivity), bouncex.events[e].reactivity = setReactivityTimeout(e, t, n) | |
}, e) | |
}, e) | |
}, 1e3 * t) | |
} | |
function handleFinishedTyping(e, t, n, i, o, a) { | |
clearTimeout(bouncex.events[t]["typing_timeout_" + n]), "" !== a && ("Tab" !== e.code && "Enter" !== e.code || 9 !== e.keyCode && 13 !== e.keyCode) && (bouncex.events[t]["typing_timeout_" + n] = setTimeout2(function() { | |
trigger_ad("finished_typing", t, o), can_show_ad(t, !0) || i.unbind("keyup.bx" + t + n + ", blur.bx" + t + n) | |
}, "blur" === e.type ? 0 : 1500)) | |
} | |
function process_mouse_move(e, t) { | |
var n = e.layerY ? e.layerY : e.pageY; | |
if (bouncex.direction = !!(18 >= n - (document.body.scrollTop || document.documentElement.scrollTop)) && "up", 0 < bouncex.campaigns[t].iao || 0 < bouncex.campaigns[t].rao) { | |
var i = e.layerX ? e.layerX : e.pageX; | |
bouncex.lastX = 0 < i ? i : 1 | |
} | |
} | |
function process_mouse_out(e, t) { | |
var n = e || window.event, | |
i = n.toElement, | |
o = n.relatedTarget, | |
a = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; | |
if (!(o && (o === this || bouncex.contains(this, o)) || i && "HTML" != i.nodeName)) | |
if (bouncex.browser.msie && "up" == bouncex.direction) { | |
if (0 < bouncex.campaigns[t].iao) | |
if (bouncex.lastX < bouncex.campaigns[t].iao) return !1; | |
if (0 < bouncex.campaigns[t].rao) | |
if (a - bouncex.lastX < bouncex.campaigns[t].rao) return !1; | |
trigger_ad("bounce", t), can_show_ad(t, !0) || jQuery("html,body").unbind("mouseout.bouncex_show_" + t) | |
} else if (!bouncex.browser.msie && (5 > e.clientY && -50 < e.clientY || bouncex.browser.safari && (-32768 == e.clientY || 671 == e.clientY) && "up" == bouncex.direction)) { | |
if (0 < bouncex.campaigns[t].iao) | |
if ((e.layerX ? e.layerX : e.pageX) < bouncex.campaigns[t].iao) return !1; | |
if (0 < bouncex.campaigns[t].rao) | |
if (a - (e.layerX ? e.layerX : e.pageX) < bouncex.campaigns[t].rao) return !1; | |
40 < bouncex.browser.chrome ? (!bouncex.events[t].bouncex_timeout && (bouncex.events[t].bouncex_timeout = setTimeout2(function() { | |
trigger_ad("bounce", t), bouncex.events[t].bouncex_timeout = !1, jQuery(document).unbind("mouseenter.bx_bouncex_mousenter_" + t), can_show_ad(t, !0) || jQuery("html,body").unbind("mouseout.bouncex_show_" + t) | |
}, 0)), bxBind(document, "mouseenter.bx_bouncex_mousenter_" + t, function() { | |
jQuery(document).unbind("mouseenter.bx_bouncex_mousenter_" + t), clearTimeout(bouncex.events[t].bouncex_timeout), bouncex.events[t].bouncex_timeout = !1 | |
}, t)) : (trigger_ad("bounce", t), !can_show_ad(t, !0) && jQuery("html,body").unbind("mouseout.bouncex_show_" + t)) | |
} | |
} | |
function teleport(e, t) { | |
return "_blank" == e ? window.open(t, e) : setTimeout2(function() { | |
window.open(t, e) | |
}, 300) | |
} | |
function setIosBounceTouchTimeout(e) { | |
return setTimeout2(function() { | |
e.touchEnded && (wndsize().height > e.thresholdHeight && (e.threshold = wndsize().height - e.thresholdHeight), e.touchLock = !1, e.previousHeight = wndsize().height) | |
}, 900) | |
} | |
function setIosBounceTimeout(e, t, n, i) { | |
return setTimeout2(function() { | |
var o = wndsize().height; | |
return t.touchLock ? void(t.previousHeight = o) : t.previousOrientation === wndorientation() ? t.isScrollingUp ? void(t.isScrollingUp = !1) : (o < t.previousHeight && t.previousHeight - o == t.threshold ? (trigger_ad("iosbounce", e, i), !n && !can_show_ad(e, !0) && (bxPassiveUnbind(window, "resize.bouncex_iosbounce_" + e), bxPassiveUnbind(window, "touchstart.bouncex_iobounce_" + e), bxPassiveUnbind(window, "touchend.bouncex_iosbounce_" + e))) : n && bouncex.campaigns[e].ad_visible && (close_ad(e, !0), !can_show_ad(e, !0) && (bxPassiveUnbind(window, "resize.bouncex_iosbounce_" + e), bxPassiveUnbind(window, "touchstart.bouncex_iobounce_" + e), bxPassiveUnbind(window, "touchend.bouncex_iosbounce_" + e))), void(t.previousHeight = o)) : (t.previousOrientation = wndorientation(), void(t.previousHeight = o)) | |
}, 100) | |
} | |
function setTimeout2(e, t) { | |
return bouncex.website.fbe && 1 > t ? (tryCatch(e)(), !1) : setTimeout(tryCatch(e), t) | |
} | |
function evalCalloutTarget(e) { | |
e.callout_t = parseSiteElementSelector(e.callout_t) | |
} | |
function parseSiteElementSelector(e) { | |
if (e && 0 < e.length && "{" === e.charAt(0)) { | |
var t = e.substr(1, e.length - 2); | |
return bouncex.website.els[t] | |
} | |
return e | |
} | |
function setInterval2(e, t) { | |
return setInterval(tryCatch(e), t) | |
} | |
function isMissingTarget(e) { | |
return !("annotation" !== e.type && "agilityzone" !== e.type || e.callout_t && 0 < e.callout_t.length && 0 < jQuery(e.callout_t).length) | |
} | |
function loadBounceCss(e) { | |
e = "function" == typeof e ? e : function() {}, bouncex.css_added ? e() : (bouncex.addCss('@charset "UTF-8";.bx-client-body,.bxc svg:not(:root){overflow:hidden}.bxc,.bxc button,.bxc select{text-transform:none}.bxc a,.bxc a:active,.bxc a:focus,.bxc a:hover,.bxc.bx-base .bx-close:hover{text-decoration:none}.bxc body{margin:0}.bxc article,.bxc aside,.bxc details,.bxc figcaption,.bxc figure,.bxc footer,.bxc header,.bxc hgroup,.bxc main,.bxc menu,.bxc nav,.bxc section,.bxc summary{display:block}.bxc audio,.bxc canvas,.bxc progress,.bxc video{display:inline-block;vertical-align:baseline}.bxc audio:not([controls]){display:none;height:0}.bxc [hidden],.bxc template{display:none}.bxc a{background-color:transparent}.bxc a:active,.bxc a:hover{outline:0}.bxc abbr[title]{border-bottom:1px dotted}.bxc b,.bxc strong{font-weight:700}.bxc dfn{font-style:italic}.bxc h1{font-size:2em;margin:.67em 0}.bxc mark{background:#ff0;color:#000}.bxc small{font-size:80%}.bxc sub,.bxc sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.bxc sup{top:-.5em}.bxc sub{bottom:-.25em}.bxc img{border:0}.bxc figure{margin:1em 40px}.bxc hr{box-sizing:content-box;height:0}.bxc pre{overflow:auto}.bxc code,.bxc kbd,.bxc pre,.bxc samp{font-family:monospace,monospace;font-size:1em}.bxc button,.bxc input,.bxc optgroup,.bxc select,.bxc textarea{color:inherit;font:inherit;margin:0}.bxc button{overflow:visible}.bxc button,.bxc input[type=button],.bxc input[type=reset],.bxc input[type=submit]{-webkit-appearance:button;cursor:pointer}.bxc button[disabled],.bxc input[disabled]{cursor:default}.bxc button::-moz-focus-inner,.bxc input::-moz-focus-inner{border:0;padding:0}.bxc input{line-height:normal}.bxc input[type=checkbox],.bxc input[type=radio]{box-sizing:border-box;padding:0}.bxc input[type=number]::-webkit-inner-spin-button,.bxc input[type=number]::-webkit-outer-spin-button{height:auto}.bxc input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}.bxc input[type=search]::-webkit-search-cancel-button,.bxc input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.bxc fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}.bxc legend{border:0;padding:0}.bxc textarea{overflow:auto}.bx-client-overlay,.bx-client-overlay-ios{overflow:hidden!important}.bxc optgroup{font-weight:700}.bxc table{border-collapse:collapse;border-spacing:0}.bxc td,.bxc th{padding:0}.bxc{/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */-ms-text-size-adjust:auto;-webkit-text-size-adjust:auto;font-family:Helvetica,sans-serif;font-size:0;text-align:center;text-indent:0;text-overflow:clip;text-rendering:optimizeLegibility;text-shadow:none;line-height:1;letter-spacing:normal;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:normal}.bx-blur,.bx-blur-redacted,.bx-blur-textshadow{-moz-user-select:none!important;-webkit-user-select:none!important;-ms-user-select:none!important;cursor:default!important;pointer-events:none!important}.bxc *{box-sizing:border-box}.bxc a{color:inherit;display:inline-block}.bxc a:focus{outline:0}.bxc form,.bxc p{margin:0}.bxc img,.bxc svg{display:inline-block;max-width:100%;height:auto}.bxc button,.bxc input,.bxc select,.bxc textarea{display:block;text-rendering:inherit}.bxc iframe{display:none}.bx-client-overlay-ios{position:absolute!important;top:0!important;right:0!important;bottom:0!important;left:0!important;-webkit-overflow-scrolling:touch!important;margin-top:0!important;margin-bottom:0!important;-webkit-transition:none!important;transition:none!important}.bx-client-body{position:fixed;-webkit-overflow-scrolling:touch;width:100%}.bxc.bx-base.bx-type-conversionbar.bx-impress-in .bx-slab,.bxc.bx-base.bx-type-conversionbar.bx-impress-out .bx-slab,.bxc.bx-base.bx-type-liquidscreen.bx-impress-in .bx-slab,.bxc.bx-base.bx-type-liquidscreen.bx-impress-out .bx-slab{overflow:hidden}.bx-blur-redacted{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"!important;opacity:.2!important}.bx-blur-hide{display:none!important}.bx-blur-textshadow{color:transparent!important;opacity:.4!important}.bx-blur-textshadow *{color:transparent!important;text-shadow:inherit!important}.bx-blur{-webkit-filter:blur(4px)!important;filter:blur(4px)!important;opacity:.6!important}.bxc.bx-base{display:block!important;visibility:hidden}.bxc.bx-base.bx-impress{visibility:visible!important}.bxc.bx-base .bx-matte,.bxc.bx-base .bx-powered,.bxc.bx-base .bx-shroud{display:none;pointer-events:auto}.bxc.bx-base .bx-hover-shroud,.bxc.bx-base .bx-slab{pointer-events:none}.bxc.bx-base .bx-hover-shroud,.bxc.bx-base .bx-shroud{position:fixed;width:100%;height:100%;top:0;left:0}.bxc.bx-base .bx-powered{position:fixed;bottom:10px;left:10px}.bxc.bx-base .bx-align{max-width:100%;max-height:100%;pointer-events:auto}.bxc.bx-base.bx-type-conversionbar.bx-pusher.bx-impress,.bxc.bx-base.bx-type-liquidscreen.bx-pusher.bx-impress,.bxc.bx-base.bx-type-nanobar.bx-pusher.bx-impress{pointer-events:none;visibility:hidden}.bxc.bx-base .bx-creative{position:relative;display:inline-block;max-width:100%;max-height:none;height:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden}.bxc.bx-base .bx-step{display:none}.bxc.bx-base .bx-step.bx-active-step{display:block}.bxc.bx-base.bx-width-full .bx-align,.bxc.bx-base.bx-width-full .bx-creative{width:100%}.bxc.bx-base.bx-width-full .bx-wrap{margin:0 auto}.bxc.bx-base.bx-width-full-content .bx-align,.bxc.bx-base.bx-width-full-content .bx-creative,.bxc.bx-base.bx-width-full-content .bx-wrap{width:100%}.bxc.bx-base.bx-type-agilityzone{display:none!important;clear:both}.bxc.bx-base.bx-type-agilityzone.bx-impress{display:block!important}.bxc.bx-base.bx-type-agilityzone.bx-hover-shroud-on .bx-creative{z-index:2147483643}.bxc.bx-base.bx-type-agilityzone .bx-hover-shroud{z-index:2147483642}.bxc.bx-base.bx-type-agilityzone .bx-close{z-index:auto}.bxc.bx-base.bx-type-annotation .bx-align{position:relative;z-index:2147483643}.bxc.bx-base.bx-type-annotation .bx-hover-shroud{z-index:2147483642}.bxc.bx-base.bx-type-annotation .bx-creative{position:absolute;bottom:0;left:50%;max-width:none}.bxc.bx-base.bx-type-annotation.bx-annotation-cm .bx-creative{-webkit-transform:translate(-50%,50%);-ms-transform:translate(-50%,50%);transform:translate(-50%,50%)}.bxc.bx-base.bx-type-annotation.bx-annotation-ct .bx-creative{-webkit-transform:translate(-50%,0);-ms-transform:translate(-50%,0);transform:translate(-50%,0)}.bxc.bx-base.bx-type-annotation.bx-annotation-rt .bx-creative{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.bxc.bx-base.bx-type-annotation.bx-annotation-rm .bx-creative{-webkit-transform:translate(0,50%);-ms-transform:translate(0,50%);transform:translate(0,50%)}.bxc.bx-base.bx-type-annotation.bx-annotation-rb .bx-creative{-webkit-transform:translate(0,100%);-ms-transform:translate(0,100%);transform:translate(0,100%)}.bxc.bx-base.bx-type-annotation.bx-annotation-cb .bx-creative{-webkit-transform:translate(-50%,100%);-ms-transform:translate(-50%,100%);transform:translate(-50%,100%)}.bxc.bx-base.bx-type-annotation.bx-annotation-lb .bx-creative{-webkit-transform:translate(-100%,100%);-ms-transform:translate(-100%,100%);transform:translate(-100%,100%)}.bxc.bx-base.bx-type-annotation.bx-annotation-lm .bx-creative{-webkit-transform:translate(-100%,50%);-ms-transform:translate(-100%,50%);transform:translate(-100%,50%)}.bxc.bx-base.bx-type-annotation.bx-annotation-lt .bx-creative{-webkit-transform:translate(-100%,0);-ms-transform:translate(-100%,0);transform:translate(-100%,0)}.bxc.bx-base.bx-type-conversionbar.bx-pusher.bx-impress .bx-slab{visibility:hidden;position:relative;height:auto}.bxc.bx-base.bx-type-conversionbar.bx-pusher.bx-impress .bx-align{position:relative}.bxc.bx-base.bx-type-conversionbar .bx-slab{position:fixed;bottom:0;left:0;z-index:2147483643;height:100%;height:100vh;width:100%;text-align:center;overflow-x:hidden}.bxc.bx-base.bx-type-conversionbar .bx-hover-shroud{z-index:2147483642}.bxc.bx-base.bx-type-conversionbar .bx-align{position:absolute;bottom:0;width:100%}.bxc.bx-base.bx-type-nanobar.bx-pusher.bx-impress .bx-slab{visibility:hidden;position:relative}.bxc.bx-base.bx-type-nanobar.bx-pusher.bx-impress .bx-align{position:relative}.bxc.bx-base.bx-type-nanobar .bx-slab{position:fixed;top:0;left:0;z-index:2147483643;height:100%;width:100%;text-align:center;overflow-x:hidden}.bxc.bx-base.bx-type-nanobar .bx-hover-shroud{z-index:2147483642}.bxc.bx-base.bx-type-nanobar .bx-align{position:absolute;top:0;width:100%}.bxc.bx-base.bx-type-liquidscreen{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.bxc.bx-base.bx-type-liquidscreen.bx-pusher.bx-impress .bx-slab{visibility:hidden;position:relative}.bxc.bx-base.bx-type-liquidscreen .bx-slab{position:absolute;top:0;left:0;z-index:2147483637;width:100%;overflow-x:hidden}.bxc.bx-base.bx-type-liquidscreen .bx-creative{width:100%}.bxc.bx-base.bx-type-liquidscreen .bx-creative:before{min-height:100vh}.bxc.bx-base.bx-type-conversioncorner .bx-align,.bxc.bx-base.bx-type-dynamicwallpaper .bx-align,.bxc.bx-base.bx-type-nanotab .bx-align,.bxc.bx-base.bx-type-railbar .bx-align{display:inline-block}.bxc.bx-base.bx-type-conversioncorner .bx-slab,.bxc.bx-base.bx-type-dynamicwallpaper .bx-slab,.bxc.bx-base.bx-type-nanotab .bx-slab,.bxc.bx-base.bx-type-railbar .bx-slab{position:fixed;left:0;z-index:2147483642;width:100%;height:100%;text-align:left}.bxc.bx-base.bx-type-conversioncorner .bx-slab:before,.bxc.bx-base.bx-type-dynamicwallpaper .bx-slab:before,.bxc.bx-base.bx-type-nanotab .bx-slab:before,.bxc.bx-base.bx-type-railbar .bx-slab:before{content:"";display:inline-block;width:0;height:100%;vertical-align:middle}.bxc.bx-base.bx-type-conversioncorner.bx-fixed-ct .bx-align,.bxc.bx-base.bx-type-conversioncorner.bx-fixed-lt .bx-align,.bxc.bx-base.bx-type-conversioncorner.bx-fixed-rt .bx-align,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-ct .bx-align,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-lt .bx-align,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-rt .bx-align,.bxc.bx-base.bx-type-nanotab.bx-fixed-ct .bx-align,.bxc.bx-base.bx-type-nanotab.bx-fixed-lt .bx-align,.bxc.bx-base.bx-type-nanotab.bx-fixed-rt .bx-align,.bxc.bx-base.bx-type-railbar.bx-fixed-ct .bx-align,.bxc.bx-base.bx-type-railbar.bx-fixed-lt .bx-align,.bxc.bx-base.bx-type-railbar.bx-fixed-rt .bx-align{vertical-align:top}.bxc.bx-base.bx-type-conversioncorner .bx-hover-shroud,.bxc.bx-base.bx-type-dynamicwallpaper .bx-hover-shroud,.bxc.bx-base.bx-type-nanotab .bx-hover-shroud,.bxc.bx-base.bx-type-railbar .bx-hover-shroud{z-index:2147483641}.bxc.bx-base.bx-type-conversioncorner.bx-fixed-lt .bx-slab,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-lt .bx-slab,.bxc.bx-base.bx-type-nanotab.bx-fixed-lt .bx-slab,.bxc.bx-base.bx-type-railbar.bx-fixed-lt .bx-slab{top:0;text-align:left}.bxc.bx-base.bx-type-conversioncorner.bx-fixed-ct .bx-slab,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-ct .bx-slab,.bxc.bx-base.bx-type-nanotab.bx-fixed-ct .bx-slab,.bxc.bx-base.bx-type-railbar.bx-fixed-ct .bx-slab{top:0;text-align:center}.bxc.bx-base.bx-type-conversioncorner.bx-fixed-rt .bx-slab,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-rt .bx-slab,.bxc.bx-base.bx-type-nanotab.bx-fixed-rt .bx-slab,.bxc.bx-base.bx-type-railbar.bx-fixed-rt .bx-slab{top:0;text-align:right}.bxc.bx-base.bx-type-conversioncorner.bx-fixed-cm .bx-align,.bxc.bx-base.bx-type-conversioncorner.bx-fixed-lm .bx-align,.bxc.bx-base.bx-type-conversioncorner.bx-fixed-rm .bx-align,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-cm .bx-align,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-lm .bx-align,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-rm .bx-align,.bxc.bx-base.bx-type-nanotab.bx-fixed-cm .bx-align,.bxc.bx-base.bx-type-nanotab.bx-fixed-lm .bx-align,.bxc.bx-base.bx-type-nanotab.bx-fixed-rm .bx-align,.bxc.bx-base.bx-type-railbar.bx-fixed-cm .bx-align,.bxc.bx-base.bx-type-railbar.bx-fixed-lm .bx-align,.bxc.bx-base.bx-type-railbar.bx-fixed-rm .bx-align{vertical-align:middle}.bxc.bx-base.bx-type-conversioncorner.bx-fixed-lm .bx-slab,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-lm .bx-slab,.bxc.bx-base.bx-type-nanotab.bx-fixed-lm .bx-slab,.bxc.bx-base.bx-type-railbar.bx-fixed-lm .bx-slab{top:0;text-align:left}.bxc.bx-base.bx-type-conversioncorner.bx-fixed-cm .bx-slab,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-cm .bx-slab,.bxc.bx-base.bx-type-nanotab.bx-fixed-cm .bx-slab,.bxc.bx-base.bx-type-railbar.bx-fixed-cm .bx-slab{top:0;text-align:center}.bxc.bx-base.bx-type-conversioncorner.bx-fixed-rm .bx-slab,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-rm .bx-slab,.bxc.bx-base.bx-type-nanotab.bx-fixed-rm .bx-slab,.bxc.bx-base.bx-type-railbar.bx-fixed-rm .bx-slab{top:0;text-align:right}.bxc.bx-base.bx-type-conversioncorner.bx-fixed-cb .bx-align,.bxc.bx-base.bx-type-conversioncorner.bx-fixed-lb .bx-align,.bxc.bx-base.bx-type-conversioncorner.bx-fixed-rb .bx-align,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-cb .bx-align,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-lb .bx-align,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-rb .bx-align,.bxc.bx-base.bx-type-nanotab.bx-fixed-cb .bx-align,.bxc.bx-base.bx-type-nanotab.bx-fixed-lb .bx-align,.bxc.bx-base.bx-type-nanotab.bx-fixed-rb .bx-align,.bxc.bx-base.bx-type-railbar.bx-fixed-cb .bx-align,.bxc.bx-base.bx-type-railbar.bx-fixed-lb .bx-align,.bxc.bx-base.bx-type-railbar.bx-fixed-rb .bx-align{vertical-align:bottom}.bxc.bx-base.bx-type-conversioncorner.bx-fixed-lb .bx-slab,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-lb .bx-slab,.bxc.bx-base.bx-type-nanotab.bx-fixed-lb .bx-slab,.bxc.bx-base.bx-type-railbar.bx-fixed-lb .bx-slab{bottom:0;height:100vh;text-align:left}.bxc.bx-base.bx-type-conversioncorner.bx-fixed-cb .bx-slab,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-cb .bx-slab,.bxc.bx-base.bx-type-nanotab.bx-fixed-cb .bx-slab,.bxc.bx-base.bx-type-railbar.bx-fixed-cb .bx-slab{bottom:0;height:100vh;text-align:center}.bxc.bx-base.bx-type-conversioncorner.bx-fixed-rb .bx-slab,.bxc.bx-base.bx-type-dynamicwallpaper.bx-fixed-rb .bx-slab,.bxc.bx-base.bx-type-nanotab.bx-fixed-rb .bx-slab,.bxc.bx-base.bx-type-railbar.bx-fixed-rb .bx-slab{bottom:0;height:100vh;text-align:right}.bxc.bx-base.bx-type-dynamicwallpaper .bx-align,.bxc.bx-base.bx-type-nanotab .bx-align,.bxc.bx-base.bx-type-railbar .bx-align{vertical-align:middle}.bxc.bx-base.bx-type-conversioncorner .bx-align{vertical-align:bottom}.bxc.bx-base.bx-type-dynamicwallpaper .bx-slab{z-index:2147483643}.bxc.bx-base.bx-type-dynamicwallpaper .bx-shroud{opacity:0;z-index:2147483642}.bxc.bx-base.bx-type-dynamicwallpaper.bx-impress .bx-shroud{display:block}.bxc.bx-base.bx-type-overlay .bx-slab{position:fixed;top:0;right:0;left:0;z-index:2147483645;height:100%;overflow-x:hidden;overflow-y:auto;text-align:center;pointer-events:auto}.bx-client-overlay-ios .bxc.bx-base.bx-type-overlay .bx-slab{position:absolute}.bxc.bx-base.bx-type-overlay .bx-slab:before{content:"";display:inline-block;width:0;height:100%;vertical-align:middle;margin-right:-.25em}.bxc.bx-base.bx-type-overlay.bx-impress-in .bx-slab,.bxc.bx-base.bx-type-overlay.bx-impress-out .bx-slab{overflow:hidden}.bxc.bx-base.bx-type-overlay .bx-shroud{z-index:2147483644}.bx-client-overlay-ios .bxc.bx-base.bx-type-overlay .bx-shroud{position:absolute;bottom:0;height:100vh}.bxc.bx-base.bx-type-overlay .bx-powered{z-index:2147483646}.bxc.bx-base.bx-type-overlay .bx-align{display:inline-block;vertical-align:middle;padding:6px}.bxc.bx-base.bx-type-overlay .bx-creative{z-index:2147483645}.bxc.bx-base.bx-type-overlay .bx-creative:before{min-height:300px}.bxc.bx-base.bx-type-overlay.bx-impress .bx-powered,.bxc.bx-base.bx-type-overlay.bx-impress .bx-shroud{display:block}@-webkit-keyframes bx-fx-checked-bounce{0%,100%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(.8);transform:scale(.8)}}@keyframes bx-fx-checked-bounce{0%,100%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(.8);transform:scale(.8)}}@-webkit-keyframes bx-fx-invalid-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}12.5%{-webkit-transform:translateX(-6px) rotateY(-5deg);transform:translateX(-6px) rotateY(-5deg)}37.5%{-webkit-transform:translateX(5px) rotateY(4deg);transform:translateX(5px) rotateY(4deg)}62.5%{-webkit-transform:translateX(-3px) rotateY(-2deg);transform:translateX(-3px) rotateY(-2deg)}87.5%{-webkit-transform:translateX(2px) rotateY(1deg);transform:translateX(2px) rotateY(1deg)}}@keyframes bx-fx-invalid-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}12.5%{-webkit-transform:translateX(-6px) rotateY(-5deg);transform:translateX(-6px) rotateY(-5deg)}37.5%{-webkit-transform:translateX(5px) rotateY(4deg);transform:translateX(5px) rotateY(4deg)}62.5%{-webkit-transform:translateX(-3px) rotateY(-2deg);transform:translateX(-3px) rotateY(-2deg)}87.5%{-webkit-transform:translateX(2px) rotateY(1deg);transform:translateX(2px) rotateY(1deg)}}.bxc.bx-base.bx-fx-invalid-shake .bx-slab{-webkit-perspective:1800px;perspective:1800px}.bxc.bx-base.bx-fx-invalid-shake .bx-align{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.bxc.bx-base.bx-impress.bx-fx-invalid-shake .bx-align{-webkit-animation:bx-fx-invalid-shake .4s ease-in-out;animation:bx-fx-invalid-shake .4s ease-in-out}@-webkit-keyframes bx-fx-fade{0%{opacity:0}100%{opacity:1}}@keyframes bx-fx-fade{0%{opacity:0}100%{opacity:1}}.bxc.bx-base.bx-fx-fade.bx-impress-in .bx-creative{-webkit-animation:bx-fx-fade 1s ease;animation:bx-fx-fade 1s ease}.bxc.bx-base.bx-fx-fade.bx-impress-out .bx-creative{-webkit-animation:bx-fx-fade 1s ease reverse;animation:bx-fx-fade 1s ease reverse}.bxc.bx-base .bx-shroud{background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";opacity:.75}.bxc.bx-base .bx-hover-shroud{background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;-webkit-transition:.4s opacity ease-in-out;transition:.4s opacity ease-in-out}.bxc.bx-base.bx-hover-shroud-on .bx-hover-shroud{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";opacity:.7}.bxc.bx-base .bx-creative{margin:0 auto;text-align:center;background-color:#fff;background-size:cover;background-repeat:no-repeat;background-position:50% 50%}.bxc.bx-base .bx-creative:before{content:"";display:inline-block;width:0;vertical-align:middle}.bxc.bx-base .bx-step,.bxc.bx-base .bx-wrap,.bxc.bx-base form{text-align:inherit}.bxc.bx-base .bx-wrap{display:inline-block;vertical-align:middle;margin:0 auto;width:650px;padding:10px}@media only screen{.bxc.bx-base .bx-wrap{max-width:100%}}.bxc.bx-base form:focus{outline:0}.bxc.bx-base .bx-group,.bxc.bx-base .bx-row{display:inline-block;width:100%;vertical-align:middle}.bxc.bx-base .bx-row>.bx-el,.bxc.bx-base .bx-row>:first-child{float:none;height:auto;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.bxc.bx-base .bx-row-html{font-size:16px}.bxc.bx-base .bx-row-html iframe{display:block}.bxc.bx-base .bx-row-image{line-height:0}.bxc.bx-base .bx-row-image img{width:100%}.bxc.bx-base .bx-row-text{color:#a1a1a1;font-size:14px;cursor:default;line-height:0}.bxc.bx-base .bx-row-text>*{line-height:1}.bxc.bx-base .bx-row-text a{color:inherit;display:inline-block}.bxc.bx-base .bx-row-line .bx-lineshape{height:1px;background-color:#a1a1a1}.bxc.bx-base .bx-row-select{position:relative;border:0 transparent;font-size:14px;border-radius:0;box-shadow:none;outline:0}.bxc.bx-base .bx-row-select .bx-select{position:relative;display:inline-block;width:100%;padding:1.5em;border:1px solid #c4c4c4;color:#a0a0a0;background-color:#fff}.bxc.bx-base .bx-row-select .bx-select:before{content:"\\00a0"}.bxc.bx-base .bx-row-select .bx-select:after{content:"â—„â–º";position:absolute;top:53%;right:15px;font-size:8px;letter-spacing:2px;color:#bdbdbd;font-family:Arial;-webkit-transform:translateY(-50%) rotate(90deg);-ms-transform:translateY(-50%) rotate(90deg);transform:translateY(-50%) rotate(90deg);pointer-events:none}.bxc.bx-base .bx-row-select .bx-select:active,.bxc.bx-base .bx-row-select .bx-select:focus{border:1px solid #91c7ed;color:#464545;background-color:#e6f5ff;outline:0}.bxc.bx-base .bx-row-select .bx-selectelem{position:absolute;top:0;right:0;bottom:0;left:0;outline:0;margin:0;width:100%;border-radius:0;border:0;padding:inherit;background-color:transparent;color:inherit;font-weight:inherit;text-transform:inherit;letter-spacing:inherit;cursor:context-menu;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none}.bxc.bx-base .bx-row-select .bx-selectelem::-ms-expand{display:none}.bxc.bx-base .bx-row-select option{color:initial;font-weight:initial;font-family:initial}.bxc.bx-base .bx-row-timer{color:#a0a0a0;font-size:24px;font-weight:100;cursor:default}.bxc.bx-base .bx-row-timer .bx-row-timer-digits{color:#a1a1a1}.bxc.bx-base .bx-row-coupon{color:#a0a0a0;font-size:24px;font-weight:100;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.bxc.bx-base .bx-row-radio .bx-label{display:inline-block;cursor:pointer;position:relative;padding:0;color:#a1a1a1;font-size:14px}.bxc.bx-base .bx-row-radio .bx-labeltext{vertical-align:middle}.bxc.bx-base .bx-row-radio .bx-radioelem{position:absolute;left:0;width:1px;height:1px;overflow:hidden;opacity:0}.bxc.bx-base .bx-row-radio .bx-radioelem+.bx-radioshape{border-radius:50%;display:inline-block;vertical-align:middle;margin-right:6px;background-color:#dedede;box-shadow:inset 0 1px 3px 0 rgba(0,0,0,.2),0 1px 0 0 rgba(255,255,255,.3);-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);width:18px;height:18px}.bxc.bx-base .bx-row-radio .bx-radioelem:checked+.bx-radioshape{fill:#f3f3f3;background-color:#3A98FB;text-shadow:0 0 1px rgba(0,0,0,.2);-webkit-animation:bx-fx-checked-bounce .3s;animation:bx-fx-checked-bounce .3s}.bxc.bx-base .bx-row-radio .bx-radioelem:focus+.bx-radioshape{box-shadow:0 0 0 2px #91c7ed}.bxc.bx-base .bx-row-radio .bx-radioelem+.bx-radioshape .bx-radio-svg{display:none}.bxc.bx-base .bx-row-radio .bx-radioelem:checked+.bx-radioshape .bx-radio-svg{display:block}.bxc.bx-base .bx-row-radio.bx-radiosize-lrg .bx-radioelem+.bx-radioshape{width:24px;height:24px}.bxc.bx-base .bx-row-radio.bx-radiosize-lrgr .bx-radioelem+.bx-radioshape{width:36px;height:36px}.bxc.bx-base .bx-row-checkbox .bx-label{display:inline-block;cursor:pointer;position:relative;padding:0;color:#a1a1a1;font-size:14px}.bxc.bx-base .bx-row-checkbox .bx-labeltext{vertical-align:middle}.bxc.bx-base .bx-row-checkbox .bx-checkelem{position:absolute;left:0;width:1px;height:1px;overflow:hidden;opacity:0}.bxc.bx-base .bx-row-checkbox .bx-checkelem+.bx-checkshape{border-radius:3px;display:inline-block;vertical-align:middle;background-color:#dedede;box-shadow:inset 0 1px 3px 0 rgba(0,0,0,.2),0 1px 0 0 rgba(255,255,255,.3);-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);width:18px;height:18px;margin-right:6px}.bxc.bx-base .bx-close:focus,.bxc.bx-base .bx-row-checkbox .bx-checkelem:focus+.bx-checkshape{box-shadow:0 0 0 2px #91c7ed}.bxc.bx-base .bx-row-checkbox .bx-checkelem:checked+.bx-checkshape{stroke:#f3f3f3;background-color:#3A98FB;text-shadow:0 0 1px rgba(0,0,0,.2);-webkit-animation:bx-fx-checked-bounce .25s;animation:bx-fx-checked-bounce .25s}.bxc.bx-base .bx-row-checkbox .bx-checkelem+.bx-checkshape .bx-check-svg{display:none;fill:none;stroke-width:3}.bxc.bx-base .bx-row-checkbox .bx-checkelem:checked+.bx-checkshape .bx-check-svg{display:block}.bxc.bx-base .bx-row-checkbox.bx-checksize-lrg .bx-checkelem+.bx-checkshape{width:24px;height:24px}.bxc.bx-base .bx-row-checkbox.bx-checksize-lrgr .bx-checkelem+.bx-checkshape{width:36px;height:36px}.bxc.bx-base .bx-row-checkbox.bx-check-round .bx-checkelem+.bx-checkshape .bx-check-svg{stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.bxc.bx-base .bx-row-checkbox.bx-check-sharp .bx-checkelem+.bx-checkshape .bx-check-svg{stroke:none;fill:#fff}.bxc.bx-base .bx-row-submit .bx-button{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;position:relative;text-align:center;cursor:pointer;background-color:#666;border:none;font-size:20px;border-radius:0;color:#fff;padding:1em}.bxc.bx-base .bx-row-submit .bx-button:hover{outline:0}.bxc.bx-base .bx-row-submit .bx-button:focus{outline:1px}.bxc.bx-base .bx-row-submit .bx-button:active{outline:0;top:1px}.bxc.bx-base .bx-row-input [type=""],.bxc.bx-base .bx-row-input [type=color],.bxc.bx-base .bx-row-input [type=date],.bxc.bx-base .bx-row-input [type=datetime-local],.bxc.bx-base .bx-row-input [type=datetime],.bxc.bx-base .bx-row-input [type=email],.bxc.bx-base .bx-row-input [type=month],.bxc.bx-base .bx-row-input [type=number],.bxc.bx-base .bx-row-input [type=password],.bxc.bx-base .bx-row-input [type=search],.bxc.bx-base .bx-row-input [type=tel],.bxc.bx-base .bx-row-input [type=text],.bxc.bx-base .bx-row-input [type=time],.bxc.bx-base .bx-row-input [type=url],.bxc.bx-base .bx-row-input [type=week],.bxc.bx-base .bx-row-textarea .bx-textarea{width:100%;height:auto;font-size:14px;text-align:left;border-radius:0;outline:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #c4c4c4;color:#a0a0a0;background-color:#fff;padding:1.5em;background-position:10px 50%;background-repeat:no-repeat;background-size:auto;-ms-transition:none!important;-webkit-transition:padding .07s ease-in-out;transition:padding .07s ease-in-out}.bxc.bx-base .bx-row-input [type=""]::-ms-clear,.bxc.bx-base .bx-row-input [type=color]::-ms-clear,.bxc.bx-base .bx-row-input [type=date]::-ms-clear,.bxc.bx-base .bx-row-input [type=datetime-local]::-ms-clear,.bxc.bx-base .bx-row-input [type=datetime]::-ms-clear,.bxc.bx-base .bx-row-input [type=email]::-ms-clear,.bxc.bx-base .bx-row-input [type=month]::-ms-clear,.bxc.bx-base .bx-row-input [type=number]::-ms-clear,.bxc.bx-base .bx-row-input [type=password]::-ms-clear,.bxc.bx-base .bx-row-input [type=search]::-ms-clear,.bxc.bx-base .bx-row-input [type=tel]::-ms-clear,.bxc.bx-base .bx-row-input [type=text]::-ms-clear,.bxc.bx-base .bx-row-input [type=time]::-ms-clear,.bxc.bx-base .bx-row-input [type=url]::-ms-clear,.bxc.bx-base .bx-row-input [type=week]::-ms-clear,.bxc.bx-base .bx-row-textarea .bx-textarea::-ms-clear{width:0;height:0}.bxc.bx-base .bx-row-input [type=""]:hover,.bxc.bx-base .bx-row-input [type=color]:hover,.bxc.bx-base .bx-row-input [type=date]:hover,.bxc.bx-base .bx-row-input [type=datetime-local]:hover,.bxc.bx-base .bx-row-input [type=datetime]:hover,.bxc.bx-base .bx-row-input [type=email]:hover,.bxc.bx-base .bx-row-input [type=month]:hover,.bxc.bx-base .bx-row-input [type=number]:hover,.bxc.bx-base .bx-row-input [type=password]:hover,.bxc.bx-base .bx-row-input [type=search]:hover,.bxc.bx-base .bx-row-input [type=tel]:hover,.bxc.bx-base .bx-row-input [type=text]:hover,.bxc.bx-base .bx-row-input [type=time]:hover,.bxc.bx-base .bx-row-input [type=url]:hover,.bxc.bx-base .bx-row-input [type=week]:hover,.bxc.bx-base .bx-row-textarea .bx-textarea:hover{cursor:auto}.bxc.bx-base .bx-row-input [type=""]:focus,.bxc.bx-base .bx-row-input [type=color]:focus,.bxc.bx-base .bx-row-input [type=date]:focus,.bxc.bx-base .bx-row-input [type=datetime-local]:focus,.bxc.bx-base .bx-row-input [type=datetime]:focus,.bxc.bx-base .bx-row-input [type=email]:focus,.bxc.bx-base .bx-row-input [type=month]:focus,.bxc.bx-base .bx-row-input [type=number]:focus,.bxc.bx-base .bx-row-input [type=password]:focus,.bxc.bx-base .bx-row-input [type=search]:focus,.bxc.bx-base .bx-row-input [type=tel]:focus,.bxc.bx-base .bx-row-input [type=text]:focus,.bxc.bx-base .bx-row-input [type=time]:focus,.bxc.bx-base .bx-row-input [type=url]:focus,.bxc.bx-base .bx-row-input [type=week]:focus,.bxc.bx-base .bx-row-textarea .bx-textarea:focus{border-color:#91c7ed;background-color:#e6f5ff;color:#464545;outline:0}.bxc.bx-base .bx-inputwrap{position:relative}.bxc.bx-base .bx-inputwrap .bx-placeholder{position:absolute;top:7px;right:22px;left:22px;z-index:1;display:block;line-height:normal;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;pointer-events:none;-ms-transition:none!important;-webkit-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.bxc.bx-base .bx-inputwrap .bx-placeholdertext{display:block;color:#a0a0a0;font-size:10px;line-height:normal;text-align:left}.bxc.bx-base .bx-vbox,.bxc.bx-base .bx-vtext{display:none;font-size:10px;text-align:left;line-height:1.35;position:absolute;z-index:3}.bxc.bx-base .bx-row.bx-has-focus .bx-placeholdertext{color:#91c7ed}.bxc.bx-base .bx-row-placeholder-top.bx-has-text .bx-placeholder{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)";opacity:1}.bxc.bx-base .bx-row-placeholder-top.bx-has-text .bx-input,.bxc.bx-base .bx-row-placeholder-top.bx-has-text .bx-textarea{padding-top:2em;padding-bottom:1em}.bxc.bx-base .bx-vtext{padding:4px;padding-bottom:inherit;bottom:0;pointer-events:none;text-transform:none;font-style:normal;font-weight:400;letter-spacing:normal;font-family:Helvetica,Arial,sans-serif}#bcx_power a,#bcx_power a span,.bxc.bx-base .bx-powered{font-family:\'Segoe UI\',\'Open Sans\',\'Helvetica Neue\',Helvetica,Arial}.bxc.bx-base .bx-vbox{padding:4px;margin-top:-4px;margin-right:-4px;margin-left:-4px;color:#e9a6a6;border:1px solid #e9a6a6;background:#faebeb}.bxc.bx-base .bx-row-validation .bx-vbox,.bxc.bx-base .bx-row-validation .bx-vtext,.bxc.bx-base .bx-row-validation.bx-row-checkbox .bx-vtext,.bxc.bx-base .bx-row-validation.bx-row-radio .bx-vtext{display:block}.bxc.bx-base .bx-row-validation{position:relative}.bxc.bx-base .bx-row-validation .bx-select,.bxc.bx-base .bx-row-validation .bx-textarea,.bxc.bx-base .bx-row-validation [type=""],.bxc.bx-base .bx-row-validation [type=color],.bxc.bx-base .bx-row-validation [type=date],.bxc.bx-base .bx-row-validation [type=datetime-local],.bxc.bx-base .bx-row-validation [type=datetime],.bxc.bx-base .bx-row-validation [type=email],.bxc.bx-base .bx-row-validation [type=month],.bxc.bx-base .bx-row-validation [type=number],.bxc.bx-base .bx-row-validation [type=password],.bxc.bx-base .bx-row-validation [type=search],.bxc.bx-base .bx-row-validation [type=tel],.bxc.bx-base .bx-row-validation [type=text],.bxc.bx-base .bx-row-validation [type=time],.bxc.bx-base .bx-row-validation [type=url],.bxc.bx-base .bx-row-validation [type=week]{border-color:#e9a6a6;background-color:#faebeb;color:#a0a0a0}.bxc.bx-base .bx-row-validation .bx-vtext{color:#E46161}.bxc.bx-base .bx-row-validation.bx-has-focus .bx-vtext{color:#91c7ed}.bxc.bx-base .bx-row-video{width:100%;height:100%}.bxc.bx-base .bx-row-video .bx-video-wrapper{position:relative;width:100%;padding-top:75%;background-color:#666}.bxc.bx-base .bx-row-video .bx-video-wrapper.bx-video-wrapper-has-focus .bx-video-controls,.bxc.bx-base .bx-row-video .bx-video-wrapper:hover .bx-video-controls{opacity:1}.bxc.bx-base .bx-row-video .bx-video-wrapper>video{position:absolute;top:0;left:0;width:100%;height:100%}.bxc.bx-base .bx-row-video .bx-video-controls{position:absolute;bottom:0;left:0;width:100%;height:44px;opacity:0;-webkit-transition:.15s opacity ease-in-out;transition:.15s opacity ease-in-out;background-image:linear-gradient(-180deg,transparent 0,#000 100%)}.bxc.bx-base .bx-row-video .bx-video-progress-wrapper{position:absolute;top:3px;left:43px;line-height:38px;color:#fff;font-size:12px;cursor:default}.bxc.bx-base .bx-row-video .bx-video-btn{position:absolute;top:3px;width:38px;height:38px;padding:5px;border:none;background-color:transparent;fill:#fff}.bxc.bx-base .bx-row-video .bx-video-btn:focus{outline:0}.bxc.bx-base .bx-row-video .bx-video-btn:hover{background-image:radial-gradient(circle at center,rgba(255,255,255,.3) 0,transparent 70%)}.bxc.bx-base .bx-row-video .bx-video-btn-playpause{left:3px}.bxc.bx-base .bx-row-video .bx-video-btn-mute{right:3px}.bxc.bx-base .bx-row-video .bx-video-btn-mute-shape,.bxc.bx-base .bx-row-video .bx-video-btn-pause-shape,.bxc.bx-base .bx-row-video .bx-video-btn-play-shape,.bxc.bx-base .bx-row-video .bx-video-btn-unmute-shape{-webkit-transition:.15s -webkit-transform ease-in-out,.15s opacity ease-in-out;transition:.15s transform ease-in-out,.15s opacity ease-in-out;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.bxc.bx-base .bx-row-video .bx-video-btn-play-shape{opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.bxc.bx-base .bx-row-video .bx-video-btn-pause-shape,.bxc.bx-base .bx-row-video .bx-video-player-paused .bx-video-btn-play-shape{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.bxc.bx-base .bx-row-video .bx-video-btn-mute-shape,.bxc.bx-base .bx-row-video .bx-video-player-paused .bx-video-btn-pause-shape{opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.bxc.bx-base .bx-row-video .bx-video-btn-unmute-shape,.bxc.bx-base .bx-row-video .bx-video-player-unmuted .bx-video-btn-mute-shape{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.bxc.bx-base .bx-row-video .bx-video-player-unmuted .bx-video-btn-unmute-shape{opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.bxc.bx-base .bx-carb-trap.bx-input{opacity:0;width:0;height:0;padding:0;border:0;overflow:hidden}.bxc.bx-base .bx-gbi-frame{display:none}.bxc.bx-base.bx-impress .bx-gbi-frame{display:block}.bxc.bx-base .bx-close{z-index:2147483647;text-align:center;vertical-align:middle;display:none;position:absolute;cursor:pointer;top:12px;right:12px;width:26px;height:26px;border-width:0;border-radius:50%;padding:2px;background-color:transparent;background-position:50% 50%;background-repeat:no-repeat;background-size:cover;stroke-width:2px;stroke:#b3b3b3;stroke-linejoin:miter;stroke-miterlimit:10;stroke-linecap:butt}.bxc.bx-base .bx-close.bx-close-outside{position:fixed}.bxc.bx-base.bx-has-close-inside .bx-close.bx-close-inside,.bxc.bx-base.bx-has-close-outside .bx-close.bx-close-outside{display:block}.bxc.bx-base .bx-close .bx-close-xsvg{display:block;stroke:inherit;stroke-width:inherit;stroke-opacity:inherit;stroke-miterlimit:inherit;stroke-linecap:inherit;stroke-linejoin:inherit;stroke-dasharray:inherit;stroke-dashoffset:inherit}.bxc.bx-base .bx-powered{color:#fff;font-size:13px}.bxc.bx-base .bx-powered a{text-decoration:none;text-transform:none}.bxc.bx-base .bx-powered a span{text-decoration:underline}.bxc.bx-base .bx-tail{position:absolute;display:block;width:30px;height:30px;fill:#fff}.bxc.bx-base .bx-tail-placement- .bx-tail,.bxc.bx-base .bx-tail-placement-none .bx-tail,.bxc.bx-base .bx-tail-placement-off .bx-tail{display:none}.bxc.bx-base .bx-tail-placement-top .bx-tail{top:0;left:50%;-webkit-transform:translate(-50%,-100%) rotate(180deg);-ms-transform:translate(-50%,-100%) rotate(180deg);transform:translate(-50%,-100%) rotate(180deg)}.bxc.bx-base .bx-tail-placement-right .bx-tail{top:50%;right:0;-webkit-transform:translate(100%,-50%) rotate(270deg);-ms-transform:translate(100%,-50%) rotate(270deg);transform:translate(100%,-50%) rotate(270deg)}.bxc.bx-base .bx-tail-placement-bottom .bx-tail{bottom:0;left:50%;-webkit-transform:translate(-50%,100%);-ms-transform:translate(-50%,100%);transform:translate(-50%,100%)}.bxc.bx-base .bx-tail-placement-left .bx-tail{top:50%;left:0;-webkit-transform:translate(-100%,-50%) rotate(90deg);-ms-transform:translate(-100%,-50%) rotate(90deg);transform:translate(-100%,-50%) rotate(90deg)}.bxc.bx-base .bx-tail-placement-topright .bx-tail{top:0;right:0;-webkit-transform:translate(50%,-50%) rotate(225deg);-ms-transform:translate(50%,-50%) rotate(225deg);transform:translate(50%,-50%) rotate(225deg)}.bxc.bx-base .bx-tail-placement-bottomright .bx-tail{top:100%;right:0;-webkit-transform:translate(50%,-50%) rotate(315deg);-ms-transform:translate(50%,-50%) rotate(315deg);transform:translate(50%,-50%) rotate(315deg)}.bxc.bx-base .bx-tail-placement-bottomleft .bx-tail{top:100%;left:0;-webkit-transform:translate(-50%,-50%) rotate(45deg);-ms-transform:translate(-50%,-50%) rotate(45deg);transform:translate(-50%,-50%) rotate(45deg)}.bxc.bx-base .bx-tail-placement-topleft .bx-tail{top:0;left:0;-webkit-transform:translate(-50%,-50%) rotate(135deg);-ms-transform:translate(-50%,-50%) rotate(135deg);transform:translate(-50%,-50%) rotate(135deg)}.bxc.bx-base .bx-ally-label,.bxc.bx-base .bx-ally-tab-decoy,.bxc.bx-base .bx-ally-title{width:1px;height:1px;padding:0;border:0;overflow:hidden;opacity:0;position:fixed;z-index:-1}.bcx_middle_fix,.bxc.bx-base .bx-ally-label{position:absolute}.bxc.bx-ally .bx-close:focus,.bxc.bx-ally .bx-row-checkbox .bx-checkelem:focus+.bx-checkshape,.bxc.bx-ally .bx-row-radio .bx-radioelem:focus+.bx-radioshape{box-shadow:none}.bxc.bx-ally .bx-row-checkbox .bx-checkelem:focus+.bx-checkshape,.bxc.bx-ally .bx-row-input [type=""]:focus,.bxc.bx-ally .bx-row-input [type=color]:focus,.bxc.bx-ally .bx-row-input [type=date]:focus,.bxc.bx-ally .bx-row-input [type=datetime-local]:focus,.bxc.bx-ally .bx-row-input [type=datetime]:focus,.bxc.bx-ally .bx-row-input [type=email]:focus,.bxc.bx-ally .bx-row-input [type=month]:focus,.bxc.bx-ally .bx-row-input [type=number]:focus,.bxc.bx-ally .bx-row-input [type=password]:focus,.bxc.bx-ally .bx-row-input [type=search]:focus,.bxc.bx-ally .bx-row-input [type=tel]:focus,.bxc.bx-ally .bx-row-input [type=text]:focus,.bxc.bx-ally .bx-row-input [type=time]:focus,.bxc.bx-ally .bx-row-input [type=url]:focus,.bxc.bx-ally .bx-row-input [type=week]:focus,.bxc.bx-ally .bx-row-radio .bx-radioelem:focus+.bx-radioshape,.bxc.bx-ally .bx-row-select .bx-selectelem:focus,.bxc.bx-ally .bx-row-submit .bx-button:focus,.bxc.bx-ally .bx-row-textarea .bx-textarea:focus,.bxc.bx-ally .bx-row-video .bx-video-btn:focus,.bxc.bx-ally a:focus,.bxc.bx-ally button:focus,.bxc.bx-ally form:focus{outline:#91c7ed solid 3px}.bcx_container.bcx_overlay{top:0;left:0;overflow:hidden;width:100%;height:100%;z-index:2147483645}.bcx_middle_fix{top:0;left:0;width:100%;height:100%}.bouncex_lightbox{width:100%;height:100%;opacity:0;-webkit-transition:all .4s;-moz-transition:all .4s;transition:all .4s}.bcx_container.bcx_overlay,.bouncex_header_bottom,.bouncex_header_top{position:fixed;filter:inherit}.bouncex_header_bottom,.bouncex_header_top{width:100%;z-index:2147483644}#bcx_power{position:absolute;bottom:20px;left:20px;z-index:2147483646;color:#fff!important}#bcx_power a,#bcx_power a span{color:#fff!important;font-size:15px;text-decoration:none}#bcx_power a span{text-decoration:underline}.bouncex_header_top{top:0}.bouncex_header_bottom,.bouncex_header_top{left:0}.bouncex_header_bottom.bcx_middle,.bouncex_header_top.bcx_middle{top:50%}.bouncex_header_bottom.right,.bouncex_header_top.right{right:0;left:auto}.bouncex_header_bottom.bcx_center .bcx_inner,.bouncex_header_bottom.center .bcx_inner,.bouncex_header_top.bcx_center .bcx_inner,.bouncex_header_top.center .bcx_inner{margin:0 auto}.bouncex_header_bottom.left_content,.bouncex_header_bottom.right_content,.bouncex_header_top.left_content,.bouncex_header_top.right_content{left:50%;right:auto}.bouncex_middle{position:absolute;top:50%;left:50%;z-index:2147483645}.bcx_callout{position:absolute;z-index:2147483643}.bouncex_header_bottom{bottom:0}a.bouncex_close{width:34px;height:34px;display:block;position:absolute;right:0;top:0;z-index:2147483647;background:url(https://assets.bounceexchange.com/assets/global/images/close.png) no-repeat}a.bouncex_close span{font-size:0;visibility:hidden;color:transparent}.bouncex_close{margin:-25px}.bcx_close_overlay{margin:-15px}a.bouncex_close.bcx_close_modern{margin:.65em;padding:4px;background-size:50% 50%;background-position:50% 50%;border:1px solid transparent;box-sizing:content-box}a.bouncex_close.bcx_close_modern:after{content:url(https://assets.bounceexchange.com/assets/uploads/users/279/3zsHvZVu.png);display:none}a.bouncex_close.bcx_close_modern:hover{background-color:#e79792;border-radius:50%;background-image:url(https://assets.bounceexchange.com/assets/uploads/users/279/3zsHvZVu.png)}a.bouncex_close.size_50{width:17px;height:17px;background-image:url(https://assets.bounceexchange.com/assets/global/images/close50.png)}a.bouncex_close.size_50.bcx_close_modern{width:8.5px;height:8.5px}a.bouncex_close.size_75{width:26px;height:26px;background-image:url(https://assets.bounceexchange.com/assets/global/images/close75.png)}a.bouncex_close.size_75.bcx_close_modern{width:13px;height:13px}a.bouncex_close.size_100.bcx_close_modern{width:17px;height:17px}a.bouncex_close.size_150{width:51px;height:51px;background-image:url(https://assets.bounceexchange.com/assets/global/images/close150.png)}a.bouncex_close.size_150.bcx_close_modern{width:25.5px;height:25.5px}a.bouncex_close.size_200{width:68px;height:68px;background-image:url(https://assets.bounceexchange.com/assets/global/images/close200.png)}a.bouncex_close.bcx_close_black{background-image:url(//assets.bounceexchange.com/assets/global/images/close-black.png)}a.bouncex_close.bcx_close_fill,a.bouncex_close.bcx_close_gray{background-image:url(//assets.bounceexchange.com/assets/global/images/close-gray.png)}a.bouncex_close.bcx_close_white{background-image:url(//assets.bounceexchange.com/assets/global/images/close-white.png)}a.bouncex_close.bcx_close_fill{background-color:#e4e4e4;border-radius:50%}a.bouncex_close.size_200.bcx_close_modern{width:34px;height:34px}a.bouncex_close.bcx_close_header_bottom,a.bouncex_close.bcx_close_header_top{top:5px;right:5px;margin:0}a.bouncex_close.bcx_close_header_bottom.left,a.bouncex_close.bcx_close_header_bottom.left_content,a.bouncex_close.bcx_close_header_top.left,a.bouncex_close.bcx_close_header_top.left_content,a.bouncex_close.bcx_close_overlay.top_left{left:5px}.bcx_container{display:none}.bcx_container a,.bcx_container img{border:0}.bcx_container .bcx_inner{position:relative;width:100%;height:100%}.bcx_container .bcx_inner .bcx_ie_fix{position:absolute;top:0;left:0;width:100%;height:10px;z-index:5;background-image:url(about:blank);display:block}#bcx_form .wmode.wafter,.bcx_rslide .bcx_inner{display:none}.bcx_container .bcx_inner iframe{overflow:hidden;z-index:1;top:0;left:0;width:100%;height:100%;position:absolute}.bcx_container.bcx_overlay button,.bcx_container.bcx_overlay form,.bcx_container.bcx_overlay input,.bcx_container.bcx_overlay select{margin:0;padding:0;border:none;background:0 0}.bouncex_abs_error{position:absolute;color:#ff1919;z-index:999999;font-size:12px;font-style:normal;font-family:sans-serif;font-weight:500}.bcx_container iframe{width:100%!important;height:100%!important;padding:0!important}.bcx_el select:focus option{color:#000}#bcx_frame_body{margin:0;padding:0;overflow:hidden}#bcx_frame_body a,#bcx_frame_body img{border:none}#bcx_form{position:relative}#bcx_form .wmode{position:absolute}#bcx_form .form_slide{position:relative;width:100%;height:100%}.bcx_el.dd select option:hover{background-color:#eee!important}.bcx_el input:focus{outline:0}.bcx_el select::-webkit-scrollbar{-webkit-appearance:none}.bcx_el select::-webkit-scrollbar:vertical{width:11px}.bcx_el select::-webkit-scrollbar:horizontal{height:11px}.bcx_el select::-webkit-scrollbar-thumb{border-radius:8px;border:2px solid #fff;background-color:rgba(0,0,0,.5)}.bcx_el select::-webkit-scrollbar-track{background-color:#fff;border-radius:8px}.wmode{-webkit-transition:all .5s ease-out;-moz-transition:all .5s ease-out;-ms-transform:all .5s ease-out;transition:all .5s ease-out}.bcx_fslide .wmode{left:100%}.bcx_fslide .wmode.wbefore{left:0}.bcx_ffade .wmode{opacity:.25}.bcx_ffade .wmode.wbefore{opacity:1}.bcx_r3dbrotate,.bcx_r3dlrotate,.bcx_r3dsign,.bcx_r3dslit,.bcx_rfall,.bcx_rh3dflip,.bcx_rrotate,.bcx_rslidefall,.bcx_rv3dflip{-webkit-perspective:1300px;-moz-perspective:1300px;perspective:1300px}.bcx_rblur .bcx_outer{-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);transform:translateY(-5%);opacity:0;-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s}.bcx_r3dlrotate .bcx_outer,.bcx_rjustme .bcx_outer{-webkit-transition:all .3s;-moz-transition:all .3s}.bcx_rblur.bcx_after .bcx_outer{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);opacity:1}.bcx_r3dlrotate .bcx_outer{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:translateZ(100px) translateX(-30%) rotateY(90deg);-moz-transform:translateZ(100px) translateX(-30%) rotateY(90deg);-ms-transform:translateZ(100px) translateX(-30%) rotateY(90deg);transform:translateZ(100px) translateX(-30%) rotateY(90deg);-webkit-transform-origin:0 100%;-moz-transform-origin:0 100%;transform-origin:0 100%;opacity:0;transition:all .3s}.bcx_r3dlrotate.bcx_after .bcx_outer{-webkit-transform:translateZ(0) translateX(0) rotateY(0);-moz-transform:translateZ(0) translateX(0) rotateY(0);-ms-transform:translateZ(0) translateX(0) rotateY(0);transform:translateZ(0) translateX(0) rotateY(0);opacity:1}.bcx_r3dbrotate .bcx_outer{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:translateY(100%) rotateX(90deg);-moz-transform:translateY(100%) rotateX(90deg);-ms-transform:translateY(100%) rotateX(90deg);transform:translateY(100%) rotateX(90deg);-webkit-transform-origin:0 100%;-moz-transform-origin:0 100%;transform-origin:0 100%;opacity:0;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;transition:all .3s ease-out}.bcx_r3dbrotate.bcx_after .bcx_outer{-webkit-transform:translateY(0) rotateX(0);-moz-transform:translateY(0) rotateX(0);-ms-transform:translateY(0) rotateX(0);transform:translateY(0) rotateX(0);opacity:1}.bcx_r3dslit .bcx_outer{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:translateZ(-3000px) rotateY(90deg);-moz-transform:translateZ(-3000px) rotateY(90deg);-ms-transform:translateZ(-3000px) rotateY(90deg);transform:translateZ(-3000px) rotateY(90deg);opacity:0}.bcx_r3dslit.bcx_after .bcx_outer{-webkit-animation:slit .7s forwards ease-out;-moz-animation:slit .7s forwards ease-out;animation:slit .7s forwards ease-out}@-webkit-keyframes slit{50%{-webkit-transform:translateZ(-250px) rotateY(89deg);opacity:.5;-webkit-animation-timing-function:ease-out}100%{-webkit-transform:translateZ(0) rotateY(0);opacity:1}}@-moz-keyframes slit{50%{-moz-transform:translateZ(-250px) rotateY(89deg);opacity:.5;-moz-animation-timing-function:ease-out}100%{-moz-transform:translateZ(0) rotateY(0);opacity:1}}@keyframes slit{50%{transform:translateZ(-250px) rotateY(89deg);opacity:1;animation-timing-function:ease-in}100%{transform:translateZ(0) rotateY(0);opacity:1}}.bcx_rjustme .bcx_outer{-webkit-transform:scale(.8);-moz-transform:scale(.8);-ms-transform:scale(.8);transform:scale(.8);opacity:0;transition:all .3s;background:0 0}.bcx_r3dsign .bcx_outer,.bcx_rv3dflip .bcx_outer{-webkit-transition:all .3s;-moz-transition:all .3s}.bcx_rjustme.bcx_after .bcx_outer{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1);opacity:1}.bcx_r3dsign .bcx_outer{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:rotateX(-60deg);-moz-transform:rotateX(-60deg);-ms-transform:rotateX(-60deg);transform:rotateX(-60deg);-webkit-transform-origin:50% 0;-moz-transform-origin:50% 0;transform-origin:50% 0;opacity:0;transition:all .3s}.bcx_r3dsign.bcx_after .bcx_outer{-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-ms-transform:rotateX(0);transform:rotateX(0);opacity:1}.bcx_rv3dflip .bcx_outer{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:rotateX(-70deg);-moz-transform:rotateX(-70deg);-ms-transform:rotateX(-70deg);transform:rotateX(-70deg);transition:all .3s;opacity:0}.bcx_rv3dflip.bcx_after .bcx_outer{-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-ms-transform:rotateX(0);transform:rotateX(0);opacity:1}.bcx_rh3dflip .bcx_outer{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:rotateY(-70deg);-moz-transform:rotateY(-70deg);-ms-transform:rotateY(-70deg);transform:rotateY(-70deg);-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s;opacity:0}.bcx_rh3dflip.bcx_after .bcx_outer{-webkit-transform:rotateY(0);-moz-transform:rotateY(0);-ms-transform:rotateY(0);transform:rotateY(0);opacity:1}.bcx_rslidefall .bcx_outer{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:translate(30%) translateZ(600px) rotate(10deg);-moz-transform:translate(30%) translateZ(600px) rotate(10deg);-ms-transform:translate(30%) translateZ(600px) rotate(10deg);transform:translate(30%) translateZ(600px) rotate(10deg);opacity:0}.bcx_rslidefall.bcx_after .bcx_outer{-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in;-webkit-transform:translate(0) translateZ(0) rotate(0);-moz-transform:translate(0) translateZ(0) rotate(0);-ms-transform:translate(0) translateZ(0) rotate(0);transform:translate(0) translateZ(0) rotate(0);opacity:1}.bcx_rfall .bcx_outer{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:translateZ(600px) rotateX(20deg);-moz-transform:translateZ(600px) rotateX(20deg);-ms-transform:translateZ(600px) rotateX(20deg);transform:translateZ(600px) rotateX(20deg);opacity:0}.bcx_rfall.bcx_after .bcx_outer{-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in;-webkit-transform:translateZ(0) rotateX(0);-moz-transform:translateZ(0) rotateX(0);-ms-transform:translateZ(0) rotateX(0);transform:translateZ(0) rotateX(0);opacity:1}.bcx_rsuperscale .bcx_outer{-webkit-transform:scale(2);-moz-transform:scale(2);-ms-transform:scale(2);transform:scale(2);opacity:0;-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s}.bcx_rsuperscale.bcx_after .bcx_outer{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1);opacity:1}.bcx_rfadescale .bcx_outer{-webkit-transform:scale(.7);-moz-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7);opacity:0;-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s}.bcx_rfadescale.bcx_after .bcx_outer{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1);opacity:1}.bcx_rrslide .bcx_outer{-webkit-transform:translateX(20%);-moz-transform:translateX(20%);-ms-transform:translateX(20%);transform:translateX(20%);opacity:0;-webkit-transition:all .3s cubic-bezier(.25,.5,.5,.9);-moz-transition:all .3s cubic-bezier(.25,.5,.5,.9);transition:all .3s cubic-bezier(.25,.5,.5,.9)}.bcx_rrslide.bcx_after .bcx_outer{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);opacity:1}.bcx_rbslide .bcx_outer{-webkit-transform:translateY(20%);-moz-transform:translateY(20%);-ms-transform:translateY(20%);transform:translateY(20%);opacity:0;-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s}.bcx_rbslide.bcx_after .bcx_outer{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);opacity:1}.bcx_rnews .bcx_outer{-webkit-transform:scale(0) rotate(720deg);-moz-transform:scale(0) rotate(720deg);-ms-transform:scale(0) rotate(720deg);transform:scale(0) rotate(720deg);opacity:0;-webkit-transition:all .5s;-moz-transition:all .5s;transition:all .5s}.bcx_rgen .bcx_outer,.bcx_rscale .bcx_outer{-webkit-transition:all .3s;-moz-transition:all .3s}.bcx_rnews.bcx_after .bcx_outer{-webkit-transform:scale(1) rotate(0);-moz-transform:scale(1) rotate(0);-ms-transform:scale(1) rotate(0);transform:scale(1) rotate(0);opacity:1}.bcx_rgen .bcx_outer{opacity:0;transition:all .3s}.bcx_rgen.bcx_after .bcx_outer{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1);opacity:1}.bcx_rscale .bcx_outer{-webkit-transform:scale(4);-moz-transform:scale(2);-ms-transform:scale(2);transform:scale(2);opacity:0;transition:all .3s}.bcx_rscale.bcx_after .bcx_outer{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1);opacity:1}.bcx_rrotate .bcx_outer{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:translateZ(100px) translateX(-30%) rotateY(90deg);-moz-transform:translateZ(100px) translateX(-30%) rotateY(90deg);-ms-transform:translateZ(100px) translateX(-30%) rotateY(90deg);transform:translateZ(100px) translateX(-30%) rotateY(90deg);-webkit-transform-origin:0 100%;-moz-transform-origin:0 100%;transform-origin:0 100%;opacity:0;-webkit-transition:all .3s;-moz-transition:all .3s;transition:all .3s}.bcx_rrotate.bcx_after .bcx_inner{-webkit-transform:translateZ(0) translateX(0) rotateY(0);-moz-transform:translateZ(0) translateX(0) rotateY(0);-ms-transform:translateZ(0) translateX(0) rotateY(0);transform:translateZ(0) translateX(0) rotateY(0);opacity:1}.bcx_rslide.bcx_after .bcx_inner{display:block;animation:animationFrames ease 1s;animation-iteration-count:1;animation-fill-mode:forwards;-webkit-animation:animationFrames ease 1s;-webkit-animation-iteration-count:1;-webkit-animation-fill-mode:forwards;-moz-animation:animationFrames ease 1s;-moz-animation-iteration-count:1;-moz-animation-fill-mode:forwards;-o-animation:animationFrames ease 1s;-o-animation-iteration-count:1;-o-animation-fill-mode:forwards;-ms-animation:animationFrames ease 1s;-ms-animation-iteration-count:1;-ms-animation-fill-mode:forwards}.bcx_rrrslide .bcx_inner{display:none}.bcx_rrrslide.bcx_after .bcx_inner{display:block;animation:animationFramesRight ease 1s;animation-iteration-count:1;animation-fill-mode:forwards;-webkit-animation:animationFramesRight ease 1s;-webkit-animation-iteration-count:1;-webkit-animation-fill-mode:forwards;-moz-animation:animationFramesRight ease 1s;-moz-animation-iteration-count:1;-moz-animation-fill-mode:forwards;-o-animation:animationFramesRight ease 1s;-o-animation-iteration-count:1;-o-animation-fill-mode:forwards;-ms-animation:animationFramesRight ease 1s;-ms-animation-iteration-count:1;-ms-animation-fill-mode:forwards}@keyframes animationFrames{0%{left:-1500px;top:0;opacity:0;transform:rotate(0) scaleX(1) scaleY(1)}60%{left:30px;opacity:1}80%{left:-10px}100%{left:0;top:0;opacity:1;transform:rotate(0) scaleX(1) scaleY(1)}}@-moz-keyframes animationFrames{0%{left:-1500px;top:0;opacity:0;-moz-transform:rotate(0) scaleX(1) scaleY(1)}60%{left:30px;opacity:1}80%{left:-10px}100%{left:0;top:0;opacity:1;-moz-transform:rotate(0) scaleX(1) scaleY(1)}}@-webkit-keyframes animationFrames{0%{left:-1500px;top:0;opacity:0;-webkit-transform:rotate(0) scaleX(1) scaleY(1)}60%{left:30px;opacity:1}80%{left:-10px}100%{left:0;top:0;opacity:1;-webkit-transform:rotate(0) scaleX(1) scaleY(1)}}@-o-keyframes animationFrames{0%{left:-1500px;top:0;opacity:0;-o-transform:rotate(0) scaleX(1) scaleY(1)}60%{left:30px;opacity:1}80%{left:-10px}100%{left:0;top:0;opacity:1;-o-transform:rotate(0) scaleX(1) scaleY(1)}}@keyframes animationFramesRight{0%{right:-1500px;top:0;opacity:0;transform:rotate(0) scaleX(1) scaleY(1)}60%{right:30px;opacity:1}80%{right:-10px}100%{right:0;top:0;opacity:1;transform:rotate(0) scaleX(1) scaleY(1)}}@-moz-keyframes animationFramesRight{0%{right:-1500px;top:0;opacity:0;-moz-transform:rotate(0) scaleX(1) scaleY(1)}60%{right:30px;opacity:1}80%{right:-10px}100%{right:0;top:0;opacity:1;-moz-transform:rotate(0) scaleX(1) scaleY(1)}}@-webkit-keyframes animationFramesRight{0%{right:-1500px;top:0;opacity:0;-webkit-transform:rotate(0) scaleX(1) scaleY(1)}60%{right:30px;opacity:1}80%{right:-10px}100%{right:0;top:0;opacity:1;-webkit-transform:rotate(0) scaleX(1) scaleY(1)}}@-o-keyframes animationFramesRight{0%{right:-1500px;top:0;opacity:0;-o-transform:rotate(0) scaleX(1) scaleY(1)}60%{right:30px;opacity:1}80%{right:-10px}100%{right:0;top:0;opacity:1;-o-transform:rotate(0) scaleX(1) scaleY(1)}}', bouncex.head[0]), e(), bouncex.css_added = !0) | |
} | |
function bxBind(e, t, n, i) { | |
e = jQuery(e); | |
i && (bouncex.events[i][t] = e), e.bind(t, tryCatch(n, { | |
source: "bxBind", | |
ca_id: i | |
})) | |
} | |
function bxPassiveBind(e, t, n, i) { | |
var o = t.split(" "); | |
n = tryCatch(n, { | |
source: "bxPassiveBind", | |
ca_id: i | |
}), bouncex.passiveEventRegistry[t] = n, i && (bouncex.events[i][t] = function() { | |
bxPassiveUnbind(e, t) | |
}); | |
for (var a, r = 0, s = o.length; r < s; r++) a = o[r].split(".")[0], addEvent(e, a, n, !0) | |
} | |
function bxPassiveUnbind(e, t) { | |
for (var n = bouncex.passiveEventRegistry[t], i = t.split(" "), o = 0, a = i.length; o < a; o++) removeEvent(e, i[o].split(".")[0], n, !0) | |
} | |
function addEvent(e, t, n, i) { | |
e.addEventListener(t, n, !!i && { | |
passive: !0, | |
capture: !1 | |
}) | |
} | |
function removeEvent(e, t, n, i) { | |
e.removeEventListener(t, n, !!i && { | |
passive: !0, | |
capture: !1 | |
}) | |
} | |
function calc_delay_cvt(e) { | |
var t = 1e3 * (bouncex.cookie.cvt - getTime2() + e); | |
return 0 > t ? 0 : t | |
} | |
function fs() { | |
if (!bouncex.browser.msie) return !0; | |
if (void 0 === bouncex.fixed_supported) try { | |
bouncex.fixed_supported = isFixedSupported() | |
} catch (e) { | |
bouncex.fixed_supported = !0 | |
} | |
return bouncex.fixed_supported | |
} | |
function isFixedSupported() { | |
var e = document.body; | |
if (document.createElement && e && e.appendChild && e.removeChild) { | |
var t = document.createElement("div"); | |
if (!t.getBoundingClientRect) return null; | |
t.innerHTML = "x", t.style.cssText = "position:fixed;top:100px;", e.appendChild(t); | |
var n = e.style.height, | |
i = e.scrollTop; | |
e.style.height = "3000px", e.scrollTop = 500; | |
var o = t.getBoundingClientRect().top; | |
return e.style.height = n, e.removeChild(t), e.scrollTop = i, 100 === o | |
} | |
return null | |
} | |
function getTime2() { | |
var e = bouncex.server_client_time_diff ? bouncex.server_client_time_diff : 0; | |
return parseInt((new Date).getTime() / 1e3) + e | |
} | |
function getTimeMs() { | |
return (new Date).getTime() | |
} | |
function generateUniqueId() { | |
return getTimeMs() + Math.random() | |
} | |
function zoomDisable() {} | |
function zoomEnable() {} | |
function getStyle(e, t) { | |
if (e.currentStyle) var n = e.currentStyle[t]; | |
else if (window.getComputedStyle) n = document.defaultView.getComputedStyle(e, null).getPropertyValue(t); | |
return n | |
} | |
function queryStringToObject(e) { | |
for (var t, n = [], i = e.split("&"), o = 0; o < i.length; o++) n[(t = i[o].split("="))[0]] = t[1] ? decodeURIComponent(t[1].replace(/\+/g, " ")) : ""; | |
return n | |
} | |
function googleTrustedStoresBadgeFix(e) { | |
("conversionbar" == bouncex.campaigns[e].type || "conversioncorner" == bouncex.campaigns[e].type || "liquidscreen" == bouncex.campaigns[e].type || "nanobar" == bouncex.campaigns[e].type || "nanotab" == bouncex.campaigns[e].type || "overlay" == bouncex.campaigns[e].type || "railbar" == bouncex.campaigns[e].type) && bouncex.addCss("body > #___ratingbadge_0 { z-index: 2147483627 !important; }", bouncex.campaigns[e].obj1[0], "bx-campaign-" + e + "-gts") | |
} | |
function isDeprecatedFunction(e) { | |
var t = isDeprecatedFunction.caller && isDeprecatedFunction.caller.name; | |
bouncex.err("deprecated function: " + (t || "") + "-" + (e || "")) | |
} | |
function activateGbiCampaign(e) { | |
if (bouncex.campaigns[e].gbi.ready) return !0; | |
if (bouncex.gbi.log(e, "activate gbi campaign"), bouncex.campaigns[e].gbi.ready = !0, bouncex.campaigns[e].gbi.stack_id) { | |
var t = bouncex.campaigns[e].gbi.stack_id; | |
bouncex.gbi.stacks[t].leader_id == e && "control" == bouncex.campaigns[e].ttype || (bouncex.gbi.log(e, "a campaign in the stack is ready, processing stack..."), processGbiStack(t)) | |
} else bouncex.gbi.log(e, "activating out of stack campaign"), campaignEligible(e), activateInstruments(e) | |
} | |
function attachClickReportingToIframe(e, t) { | |
bouncex.on(e, "mouseenter.gbi_click_events_" + t, function() { | |
bouncex.on(bouncex.window, "blur.gbi_click_events_" + t, function() { | |
bouncex.report(t, "click", { | |
value: "ad" | |
}) | |
}) | |
}), bouncex.events[t].gbi_click = function() { | |
bouncex.off(bouncex.window, "blur.gbi_click_events_" + t) | |
}, bouncex.on(e, "mouseleave.gbi_click_events_" + t, bouncex.events[t].gbi_click) | |
} | |
function canShowGbi() { | |
var e = document.createElement("div"); | |
e.innerHTML = " ", e.className = bouncex.lz.decompressFromURI("IYEwzgRgNg9gxgayA"), document.body.appendChild(e); | |
var t = e.offsetHeight; | |
return document.body.removeChild(e), 0 !== t | |
} | |
function clearGbiStackCampaigns(e, t) { | |
bouncex.gbi.log(!1, "clearing other campaigns..."); | |
var n = bouncex.gbi.stacks[e].campaigns; | |
for (var i in n) | |
if (n.hasOwnProperty(i)) { | |
var o = n[i]; | |
o != t && (bouncex.gbi.cancelRequest(o), bouncex.destroy_ad(o, !0)) | |
} | |
} | |
function deactivateGbiCampaign(e) { | |
bouncex.events[e].gbiRequest && clearInterval(bouncex.events[e].gbiRequest), bouncex.gbi.log(e, "deactivate gbi campaign"), bouncex.campaigns[e].failed = !0, bouncex.campaigns[e].gbi.ready = !1 | |
} | |
function finishGbiStack(e, t) { | |
bouncex.gbi.stacks[e].failed = !1, clearInterval(bouncex.events[bouncex.gbi.stacks[e].leader_id].gbiStack), delete bouncex.events[bouncex.gbi.stacks[e].leader_id].gbiStack; | |
var n = "control" == bouncex.campaigns[bouncex.gbi.stacks[e].leader_id].ttype; | |
t || (bouncex.gbi.stacks[e].failed = !0, n && selectAdStackCampaign(bouncex.gbi.stacks[e].leader_id)), bouncex.gbi.log(!1, "done looking at stack [" + e + "] " + (bouncex.gbi.stacks[e].failed ? "failed" : "success")) | |
} | |
function initGbiStack(e, t) { | |
bouncex.gbi.log(!1, "Starting stack [" + e + "]"); | |
var n = bouncex.gbi.stacks[e]; | |
n.started = !0, bouncex.events[n.leader_id] || (bouncex.events[n.leader_id] = {}), bouncex.events[n.leader_id].gbiStack = setTimeout2(function() { | |
processGbiStack(e) || (9 < n.processCount ? (bouncex.gbi.log(!1, "stack [" + e + "]: ran out of tries"), finishGbiStack(e, !1)) : !n.finished && (bouncex.gbi.log(!1, "stack [" + e + "]: no winners yet. Trying again..."), initGbiStack(e, 1e3))) | |
}, t) | |
} | |
function processGbiStack(e) { | |
var t; | |
if ((t = bouncex.gbi.stacks[e]).finished) return bouncex.gbi.log(!1, "stack [" + e + "] already finished"), !1; | |
(t = bouncex.gbi.stacks[e]).processCount = t.processCount || 0, t.processCount++, bouncex.gbi.log(!1, "processing stack [" + e + "] (" + t.processCount + ") ..."); | |
var n = t.campaigns; | |
for (var i in t.failedCount = 0, n) | |
if (n.hasOwnProperty(i)) { | |
var o = n[i], | |
a = bouncex.campaigns[o]; | |
if (a.failed) t.failedCount++, bouncex.gbi.log(o, "has failed"); | |
else if ("control" == a.ttype && o == t.leader_id) t.failedCount++; | |
else { | |
if (!a.gbi.ready && a.gbi.config && a.gbi.config.stackWeight && a.gbi.config.stackWeight > t.processCount) return bouncex.gbi.log(o, "campaign with weight of " + a.gbi.config.stackWeight + " didn't have enough time"), !1; | |
if (a.gbi.ready) return selectAdStackCampaign(o), finishGbiStack(e, !0), !0; | |
bouncex.gbi.log(o, "not ready ") | |
} | |
} | |
return t.failedCount === n.length && (bouncex.gbi.log(!1, "stack [" + e + "]: all campaigns have failed"), finishGbiStack(e, !1), !1) | |
} | |
function selectAdStackCampaign(e) { | |
var t = bouncex.campaigns[e].gbi.stack_id; | |
bouncex.gbi.stacks[t].finished = !0, bouncex.gbi.log(e, "selected"), campaignEligible(e), initActivationInstruments(e), bouncex.gbi.stacks[t].selectedCampaign = e, clearGbiStackCampaigns(t, e) | |
} | |
function EventListeners() { | |
this.listeners = {}, this.register = function(e) { | |
var t = generateUniqueId(); | |
return this.listeners[t] = e, t | |
}, this.stop = function(e) { | |
this.listeners.hasOwnProperty(e) && (this.listeners[e].stop(), delete this.listeners[e]) | |
}, this.stopAll = function() { | |
for (var e in this.listeners) this.stop(e) | |
}, this.on = function(e, t, n, i) { | |
var o = this.register({ | |
event: t, | |
selector: i, | |
stop: function() { | |
bouncex.off(e, t + "." + o, i) | |
} | |
}); | |
return bouncex.on(e, t + "." + o, n, i), o | |
}, this.setInterval = function(e) { | |
var t = BxInterval.addTask(e); | |
return this.register({ | |
event: "bxInterval", | |
stop: function() { | |
BxInterval.stopTask(t) | |
} | |
}) | |
}, this.onTabVisible = function(e) { | |
var t = this.register({ | |
stop: function() { | |
bouncex.off(bouncex.document, "visibilitychange." + t) | |
} | |
}); | |
bouncex.on(bouncex.document, "visibilitychange." + t, function() { | |
BrowserUtil.currentTab.isVisible() && (e(), this.stop(t)) | |
}.bind(this)) | |
}, this.onTabVisibilityChange = function(e) { | |
return this.on(bouncex.document, "visibilitychange", e) | |
} | |
} | |
var _Mathround = Math.round, | |
_Mathfloor = Math.floor, | |
_StringfromCharCode = String.fromCharCode; | |
Object.defineProperty(exports, "__esModule", { | |
value: !0 | |
}), exports.wndsize = exports.wndorientation = void 0, exports.visitorTestMode = exports.updateQS = exports.unload_campaign = exports.tryCatch = exports.trigger_ad = exports.TabTalk = exports.stringify_cookie = exports.SinglePageApp = exports.show_ad = exports.shouldEnforcePolicies = exports.setTransitionEffect = exports.setTimeout2 = exports.setCampaignCalloutTargetToIndex = exports.setCalloutTarget = exports.setBounceVisitCookie = exports.setBounceCookieSingle = exports.setBounceCookieMulti = exports.setBounceCookieLocalStorage = exports.setBounceCookieFPLocalStorage = exports.setAccessibilityProperties = exports.report_submit = exports.report = exports.ReloadCampaigns = exports.Records = exports.qs = exports.placeCampaign = exports.perf = exports.parseSiteElementSelector = exports.parseJSON = exports.noteCookieAdShown = exports.next_sequence_id = exports.NativeCapture = exports.make_include_string = exports.Logger = exports.loadImages = exports.loadCouponsAndValidateForm = exports.isMissingTarget = exports.isBxInternalTraffic = exports.init_website_custom_js = exports.init_visit_cookie = exports.init_url_and_referrer = exports.init_testmode_after_cookie = exports.init_testmode_before_cookie = exports.InitSequence = exports.init_public_functions = exports.init_protocol_and_domain = exports.initPreInitCustomJs = exports.init_page_types = exports.init_ibx_tracking = exports.init_ibx = exports.init_event_tracking = exports.init_endpageview_event = exports.init_cookie_localstorage = exports.init_cookie_functions = exports.init_browser = exports.initBehavioralCriteriaInstruments = exports.initBa = exports.initActivationInstruments = exports.getUniqueInstrumentId = exports.getTimeMs = exports.getTime2 = exports.getScript = exports.getParam = exports.getBounceVisitCookie = exports.getBounceCookieSingle = exports.getBounceCookieMulti = exports.getBounceCookieLocalStorage = exports.getBounceCookieFPLocalStorage = exports.event_stream_report = exports.EventListeners = exports.event_js_eval = exports.evaluateBehavioralTriggers = exports.Debug = exports.CustomVariables = exports.Criteria = exports.createIframe = exports.CouponCodes = exports.ComplianceChecks = exports.close_ad = exports.clearBounceCookie = exports.can_show_ad = exports.can_init_post_cookie = exports.can_init = exports.campaignEligible = exports.cacheCreativeForm = exports.BxInterval = exports.buildReport = exports.BrowserUtil = exports.behavioralCriteriaComplete = exports.BehavioralCriteria = exports.bcxReady = exports.bcx_init = exports.baddjs = exports.assignDomReferencesToCampaign = exports.applyCampaignStyles = exports.addTriggerToRegistry = exports.activation_funcs = exports.ActiveTime = exports.activateInstruments = exports.activate_campaign = void 0; | |
var _recirc = __webpack_require__(6), | |
_recirc2 = _interopRequireDefault(_recirc), | |
_ads = __webpack_require__(7), | |
_ads2 = _interopRequireDefault(_ads), | |
_logger = __webpack_require__(1), | |
_logger2 = _interopRequireDefault(_logger), | |
_records = __webpack_require__(3), | |
_records2 = _interopRequireDefault(_records), | |
_sms = __webpack_require__(10), | |
_sms2 = _interopRequireDefault(_sms), | |
_trafficControl = __webpack_require__(2), | |
_trafficControl2 = _interopRequireDefault(_trafficControl), | |
_cookie = __webpack_require__(5); | |
bouncex.gbi2 = _ads2.default, bouncex.recirc = _recirc2.default, bouncex.sms = _sms2.default; | |
var InitSequence = { | |
status: { | |
preInit1Ready: !1, | |
startedInit1: !1, | |
init1Complete: !1 | |
}, | |
preInit1: { | |
entry: function() { | |
init_browser(), can_init() && (init_public_functions(), Debug.initErrorHandling(), init_protocol_and_domain(), init_url_and_referrer(), init_testmode_before_cookie(), ComplianceChecks.init(), (0, _cookie.init_cookie_check)(), init_cookie_functions(), init_visit_cookie(), !bouncex.local_storage_enabled && !bouncex.local_storage_initialized && InitSequence.preInit1.cookieReady(), init_dash()) | |
}, | |
cookieReady: function() { | |
can_init_post_cookie() && (init_cookie(), bouncex.cookieReady = !0, InitSequence.preInit1.postCookieFunctions(), InitSequence.preInit1.integrations(), InitSequence.init1.setStatus("preInitReady"), InitSequence.init1.serviceReady("preInit")) | |
}, | |
postCookieFunctions: function() { | |
init_ibx(), initBa(), initPushedData(), bouncex.website.bpush && bouncex.psh.init_supported(), "object" === _typeof(window.bxconv) && report_conversion_sync(window.bxconv), init_testmode_after_cookie(), initAds() | |
}, | |
integrations: function() { | |
initPreInitCustomJs(), ReloadCampaigns.init(), BxInterval.init(), SinglePageApp.init(), init_page_types(), CustomVariables.init() | |
} | |
}, | |
init1: { | |
serviceReady: function(e) { | |
this.log("service ready: " + e), !this.isReadyToRequest() || InitSequence.status.startedInit1 || (this.setStatus("requesting"), this._request()) | |
}, | |
isReadyToRequest: function() { | |
return ComplianceChecks.compliancePassed ? InitSequence.status.preInit1Ready ? !bouncex.website.bxidLoadFirst || bouncex.dg && bouncex.dg.softID || (this.log("bxid not ready", !0), !1) : (this.log("pre-init not ready", !0), !1) : (this.log("compliance check not ready", !0), !1) | |
}, | |
_request: function() { | |
bcxReady(function() { | |
baddjs(make_include_string()), perf.times("init1request") | |
}) | |
}, | |
setStatus: function(e) { | |
"preInitReady" === e ? (this.log("pre-init ready"), InitSequence.status.preInit1Ready = !0) : "requesting" === e ? (this.log("requesting"), InitSequence.status.startedInit1 = !0) : "complete" === e && (this.log("complete"), InitSequence.status.init1Complete = !0) | |
}, | |
log: function(e, t) { | |
InitSequence.log("init1", e, t) | |
} | |
}, | |
postInit1: { | |
entry: function() { | |
return InitSequence.status.init1Complete || InitSequence.init1.setStatus("complete"), InitSequence.postInit1.pageReady() ? (perf.times("init1"), bouncex.state.no_kinesis && InitSequence.postInit1.report(), InitSequence.postInit1.publicAssignments(), InitSequence.postInit1.editCookie(), InitSequence.postInit1.preCampaignFunctions(), InitSequence.postInit1.integrations(), InitSequence.postInit1.loadCampaigns(), void bouncex.bcxReady(function() { | |
"function" == typeof window.bxAsyncInit ? window.bxAsyncInit() : bouncex.state.rc && bouncex.report_conversion(null, "scraping") | |
})) : (setTimeout2(function() { | |
InitSequence.postInit1.entry() | |
}, 100), !1) | |
}, | |
report: function() { | |
var e; | |
if (bouncex.state.newvid) { | |
var t = bouncex.wndsize(); | |
e = { | |
"visit:useragent": navigator.userAgent, | |
"visit:referrer": bouncex.cookie.r, | |
"visit:landingpageurl": bouncex.cookie.lp, | |
"visit:resolutionx": t.width, | |
"visit:resolutiony": t.height, | |
"visit:customvariables": bouncex.varsToAPI, | |
"visit:cookie": bouncex.cookieToAPI, | |
"useragent:browser": bouncex.state.device.browser, | |
"useragent:version": bouncex.state.device.version, | |
"useragent:platform": bouncex.state.device.platform, | |
"useragent:devicetype": bouncex.state.device.device_type, | |
"customer:hasconverted": bouncex.vars.has_converted || bouncex.cookie.lc ? 1 : 0 | |
}; | |
var n = ["country_code", "country_code3", "country_name", "city", "postal_code", "continent_code", "region", "region_name"]; | |
for (var i in bouncex.state.geo) | |
if (bouncex.state.geo.hasOwnProperty(i) && -1 < n.indexOf(i) && bouncex.state.geo[i]) { | |
e["geo:" + i.replace("_", "")] = bouncex.state.geo[i] | |
} | |
event_stream_report("visit", e) | |
} | |
event_stream_report("pageview", e = { | |
"pageview:url": decodeURIComponent(bouncex.calling_url), | |
"pageview:customvariables": bouncex.varsToAPI, | |
"pageview:cookiesize": JSON.stringify(bouncex.cookie).length | |
}) | |
}, | |
pageReady: function() { | |
return !(!jQueryIsAvailable() || (InitSequence.postInit1.setupPage(), !bouncex.body || !bouncex.body.length)) | |
}, | |
setupPage: function() { | |
bouncex.window = jQuery(window).eq(0), bouncex.document = jQuery(document).eq(0), bouncex.body = jQuery("body").eq(0), bouncex.head = jQuery("head").eq(0), bouncex.html = jQuery("html").eq(0), bouncex.pa = 0 | |
}, | |
publicAssignments: function() { | |
bouncex.direction = "up", bouncex.events = {}, bouncex.overlay_visible = !1, bouncex.server_client_time_diff = bouncex.state.tn - parseInt(getTimeMs() / 1e3), 0 < bouncex.cookie.as && 0 == window.document.title.length && (window.document.title = window.location.hostname), init_post_campaign_public_function(), bouncex.timespaced = !1 | |
}, | |
editCookie: function() { | |
if (bouncex.cookie.v) | |
for (var e in bouncex.cookie.v) bouncex.vars[e] && bouncex.setv(e, bouncex.cookie.v[e]); | |
clearBounceCookie("multi_cookie" == bouncex.website.ct || "fp_local_storage" == bouncex.website.ct), bouncex.setBounceCookie() | |
}, | |
preCampaignFunctions: function() { | |
bouncex.website.dge && bouncex.dg.init(), shouldCheckDfp() && bouncex.gbi2.initDfp(), bouncex.ca = activation_funcs(), bouncex.ibx._init(), bouncex.website.bpush && bouncex.psh.init(), bouncex.sms.init(), init_endpageview_event() | |
}, | |
integrations: function() { | |
init_ibx_tracking(), init_event_tracking(), init_website_custom_js() | |
}, | |
loadCampaigns: function() { | |
bouncex.campaigns ? (bouncex.loadBounceCss(function() { | |
bouncex.loadBrandStyles(), init_activation_funcs() | |
}), bouncex.loadWebfonts()) : bouncex.usd && unhideSite() | |
} | |
}, | |
dynamic: { | |
tearDown: function() { | |
if (bouncex.campaigns) | |
for (var e in bouncex.campaigns) bouncex.campaigns.hasOwnProperty(e) && bouncex.destroy_ad(e); | |
CustomVariables.clearAll(), BxInterval.clearTasks() | |
}, | |
startUp: function() { | |
init_url_and_referrer(), incrementPageView(), InitSequence.postInit1.report(), InitSequence.preInit1.integrations(), InitSequence.postInit1.setupPage(), InitSequence.postInit1.integrations() | |
} | |
}, | |
log: function(e, t, n) { | |
var i = { | |
group: "init", | |
message: e + "-" + t | |
}; | |
n ? _logger2.default.error(i) : _logger2.default.info(i) | |
} | |
}; | |
bouncex.push = function(e) { | |
bouncex.cookieReady ? processPushedData(e[0], e[1]) : bouncex.pushedData.push(e) | |
}; | |
var SinglePageApp = { | |
init: function() { | |
if (bouncex.website.spa) { | |
if (bouncex.website.spatm && !visitorTestMode("spa")) return; | |
this._setParams(), this._pageChangeListener() | |
} | |
}, | |
setCustomParams: function(e) { | |
e.shouldCheckSpa && (this._shouldCheckSpa = e.shouldCheckSpa), e.pageChangeListener && (BxInterval.stopTask("spa default listener"), this._pageChangeListener = e.pageChangeListener), e.currentPageIdentifier && (this._currentPageIdentifier = e.currentPageIdentifier) | |
}, | |
_setParams: function() { | |
void 0 === this._shouldCheckSpa && (this._shouldCheckSpa = this._defaults.shouldCheckSpa), void 0 === this._pageChangeListener && (this._pageChangeListener = this._defaults.pageChangeListener), void 0 === this._currentPageIdentifier && (this._currentPageIdentifier = this._defaults.currentPageIdentifier) | |
}, | |
_defaults: { | |
shouldCheckSpa: function() { | |
return !0 | |
}, | |
pageChangeListener: function() { | |
this._shouldCheckSpa() && BxInterval.addTask(this._detectPageChange.bind(this), 0, "spa default listener") | |
}, | |
currentPageIdentifier: function() { | |
return window.location.pathname | |
} | |
}, | |
_detectPageChange: function() { | |
this._currentPage = this._currentPageIdentifier(), this._prevPage = this._prevPage || this._currentPage, this._prevPage !== this._currentPage && (this.dynamicPageChange(), this._prevPage = this._currentPage) | |
}, | |
dynamicPageChange: function() { | |
bouncex.log("%c ~ spa new page 🤘 ~", "color: #000FFF"), InitSequence.dynamic.tearDown(), InitSequence.dynamic.startUp(), ReloadCampaigns.addRequest("spa new page") | |
} | |
}; | |
bouncex.psh = { | |
swr: {}, | |
init: function() { | |
this.supported && (this.initialized = !0, this._clickthrough(), "sw" === this.type && "granted" === this.getCurrentPermission() && bouncex.ssl ? this.installServiceWorker().then(function() { | |
bouncex.psh.swr.pushManager.getSubscription().then(function(e) { | |
e && void 0 !== bouncex.cookie.bp && 0 !== bouncex.cookie.bp || bouncex.psh.subscribe() | |
}) | |
}) : !this.confirmCookieValue() && this.setPermission(this.getCurrentPermission())) | |
}, | |
_clickthrough: function() { | |
var e = bouncex.utils.getParam("psh_click"); | |
if (e) { | |
var t = bouncex.cookie.pcs || {}, | |
n = _Mathfloor((new Date).getTime() / 1e3); | |
t[e] = n, bouncex.cookie.pcs = t, setBounceCookie() | |
} | |
}, | |
init_supported: function() { | |
this.type = this.getType(), this.supported = !!this.type, this.supported && !this.confirmCookieValue() && this.setPermission(this.getCurrentPermission()), this.supported || this.setPermission("denied") | |
}, | |
confirmCookieValue: function() { | |
return "denied" === this.getCurrentPermission() && 0 === bouncex.cookie.bp || "default" === this.getCurrentPermission() && void 0 === bouncex.cookie.bp | |
}, | |
getCurrentPermission: function() { | |
return Notification.permission | |
}, | |
getCookiePermission: function(e) { | |
var t; | |
return "granted" == e ? t = 1 : "denied" == e && (t = 0), t | |
}, | |
getType: function() { | |
return !(bouncex.browser.edge || bouncex.browser.msie || bouncex.browser.safari) && !!bouncex.ssl && !(navigator.serviceWorker && "denied" === Notification.permission) && !!navigator.serviceWorker && "sw" | |
}, | |
setPermission: function(e, t) { | |
"default" === e ? delete bouncex.cookie.bp : (bouncex.cookie.bp = bouncex.psh.getCookiePermission(e), void 0 !== t && ("granted" === e ? bouncex.cookie.campaigns[t].bpg = getTime2() : "denied" == e && (bouncex.cookie.campaigns[t].bpd = getTime2()))), setBounceCookie() | |
}, | |
injectManifest: function() { | |
var e = document.createElement("link"); | |
e.rel = "manifest", e.href = bouncex.website.pushFilepath + "bx-manifest.json", document.head.appendChild(e) | |
}, | |
showOptinPromptIfEligible: function(e) { | |
var t = !!bouncex.campaigns[e].push_optin_json && JSON.parse(bouncex.campaigns[e].push_optin_json); | |
e && !bouncex.campaigns[e].pushOptinPromptShown && t && t.showPromptStep && t.showPromptStep === bouncex.campaigns[e].current_step && bouncex.psh.requestOptIn(e).then(function(t) { | |
bouncex.campaigns[e].pushOptinPromptShown = !0, bouncex.psh.handleRequestOptinResult(t, e) | |
}) | |
}, | |
handleRequestOptinResult: function(e, t) { | |
var n; | |
if ("default" === e) n = "close"; | |
else if ("denied" === e) n = "optin_denied"; | |
else { | |
if (!("granted" === e || "object" === _typeof(e) && e.permission && "granted" === e.permission)) return bouncex.err("Push Opt-In Error", e), !1; | |
n = "optin_granted" | |
} | |
bouncex.psh.handleOptinEvent(n, t) | |
}, | |
handleOptinEvent: function(e, t) { | |
var n = JSON.parse(bouncex.campaigns[t].push_optin_json), | |
i = !!bouncex.campaigns[t].trigger_offsite_json && JSON.parse(bouncex.campaigns[t].trigger_offsite_json); | |
"optin_granted" === e && i && i.campaignId && bouncex.push(["requestsend", { | |
campaignid: i.campaignId, | |
fcmtoken: bouncex.psh.fcmToken, | |
channel: "push", | |
testmode: visitorTestMode("bxdev") ? 1 : 0 | |
}]), bouncex.psh.fcmToken = null; | |
var o = n.eventHandlers[e]; | |
if ("next" === o.action) { | |
var a = o.prop ? o.prop : bouncex.campaigns[t].next_step; | |
bouncex.setJumpStep(t, a, !1), bouncex.nextStep(t) | |
} else bouncex.close_ad(t), "trigger" === o.action && bouncex.show_ad(o.prop) | |
}, | |
requestOptIn: function(e) { | |
return !0 === this.initialized ? this.supported && "sw" === this.type ? this.requestOptInSW(e) : Promise.resolve("denied") : Promise.resolve("Push not initialized, ensure push is enabled in website settings.") | |
}, | |
requestOptInSW: function(e) { | |
var t = bouncex.psh.getCurrentPermission(); | |
if ("default" !== t) return Promise.resolve(t); | |
var n = { | |
"notifypush:cookie": JSON.stringify(bouncex.cookie), | |
campaignid: e | |
}; | |
return bouncex.psh.report("prompt", n), Notification.requestPermission().then(function(t) { | |
return "granted" === t ? new Promise(function(t) { | |
return bouncex.psh.installServiceWorker().then(function() { | |
return bouncex.psh.subscribe(e) | |
}).then(t).catch(function(e) { | |
t(e) | |
}) | |
}) : ("denied" === t && (bouncex.psh.setPermission(t, e), bouncex.psh.report("optin_denied", { | |
"notifypush:type": "sw", | |
campaignid: e | |
})), Promise.resolve(t)) | |
}) | |
}, | |
installServiceWorker: function() { | |
return new Promise(function(e, t) { | |
bouncex.psh.injectManifest(), navigator.serviceWorker.register(bouncex.website.pushFilepath + "bx-sw.js").then(function(t) { | |
bouncex.psh.swr = t, navigator.serviceWorker.oncontrollerchange = function(e) { | |
bouncex.psh.isBxServiceWorker(e.target) && bouncex.psh.subscribe() | |
}, e() | |
}).catch(function(e) { | |
bouncex.err(e, { | |
source: "push" | |
}), t("Error installing service worker") | |
}) | |
}) | |
}, | |
isServiceWorkerReady: function() { | |
return new Promise(function(e) { | |
var t = bouncex.psh.swr.active || bouncex.psh.swr.waiting || bouncex.psh.installing; | |
if (t && "activated" === t.state) e(); | |
else { | |
var n = bouncex.psh.swr.installing || bouncex.psh.swr.waiting; | |
n && n.addEventListener("statechange", function t(n) { | |
"activated" === n.target.state && (bouncex.psh.swr.active.removeEventListener("statechange", t), e()) | |
}) | |
} | |
}) | |
}, | |
isBxServiceWorker: function(e) { | |
return e.controller && e.controller.scriptURL && /bx-sw\.js$/.test(e.controller.scriptURL) | |
}, | |
getFcmToken: function(e) { | |
var t = e.split(/\/(?:send|v1)\//); | |
return t && t[1] | |
}, | |
subscribe: function(e) { | |
return bouncex.psh.isServiceWorkerReady().then(function() { | |
return bouncex.psh.swr.pushManager.subscribe({ | |
userVisibleOnly: !0 | |
}).then(function(t) { | |
var n = bouncex.psh.getCurrentPermission(), | |
i = { | |
"notifypush:type": "sw", | |
"notifypush:subscription": JSON.stringify(t), | |
"notifypush:token": t.endpoint, | |
campaignid: e | |
}; | |
return bouncex.psh.fcmToken = bouncex.psh.getFcmToken(t.endpoint), bouncex.psh.setPermission(n, e), bouncex.psh.report("optin_granted", i), { | |
permission: n, | |
result: t | |
} | |
}, function(e) { | |
return bouncex.err(e, { | |
source: "push" | |
}), { | |
permission: bouncex.psh.getCurrentPermission(), | |
result: e | |
} | |
}) | |
}) | |
}, | |
report: function(e, t) { | |
event_stream_report(e, jQuery.extend({}, { | |
agent: "user", | |
source: "notifypush", | |
channel: "push" | |
}, t)) | |
} | |
}; | |
var Debug = { | |
initErrorHandling: function() { | |
bouncex.err = Debug.report.bind(this), bouncex.tryCatch = tryCatch; | |
var e = tryCatch(function(e) { | |
if (e.filename && -1 < e.filename.indexOf("bounceexchange") || e.error && e.error.stack && -1 < e.error.stack.indexOf("bounceexchange")) { | |
var t = -1 < bouncex.calling_url.indexOf("bounceexchange.com") ? "core app" : "window listener"; | |
e.preventDefault(), e.stopImmediatePropagation(), bouncex.err(e.error, { | |
source: t | |
}) | |
} | |
}); | |
addEvent(window, "error", e, !1) | |
}, | |
report: function(e, t) { | |
var n = this._getErrorMessage(e); | |
this._shouldLog(n) && (this._log(n), this._sendEvent(n, e, t || {})) | |
}, | |
_getErrorMessage: function(e) { | |
return e.stack ? e.stack.split("\n").filter(function(e) { | |
return -1 === e.indexOf("init1") | |
}).join("\n") : e.message ? e.message : e | |
}, | |
_shouldLog: function(e) { | |
return -1 === this._errsArr.indexOf(e) && (-1 < window.location.hostname.indexOf("bounceexchange.com") || void 0 !== bouncex.state || "development" === bouncex.env) | |
}, | |
_log: function(e) { | |
this._errsArr.push(e); | |
var t = "development" === bouncex.env ? "color: #8B008B;" : "color: #388EFA;", | |
n = "development" === bouncex.env ? "bx log (dev): " : "bx log: "; | |
bouncex.log("%c " + n + e, t) | |
}, | |
_errsArr: [], | |
_sendEvent: function(e, t, n) { | |
var i = n.liveTraffic || 5; | |
_trafficControl2.default.apply({ | |
internal: !0, | |
liveTraffic: i | |
}, function() { | |
event_stream_report("debug", { | |
"debug:code": t.name || "custom", | |
"debug:location": n.source || n.location || "", | |
"debug:message": e, | |
"debug:url": bouncex.calling_url, | |
"debug:custom_variable": n.cvar || n.custom_variable || "", | |
campaignid: n.ca_id || n.campaign_id || n.campaignId || "" | |
}) | |
}) | |
} | |
}; | |
bouncex.setTimeout2 = setTimeout2, bouncex.setInterval2 = setInterval2, bouncex.on = function(e, t, n, i) { | |
i ? delegate(e, t, tryCatch(n), i) : null == jQuery.fn.on ? e.bind(t, tryCatch(n)) : e.on(t, tryCatch(n)) | |
}, bouncex.off = function(e, t, n) { | |
n ? undelegate(e, t, n) : null == jQuery.fn.off ? e.unbind(t) : e.off(t) | |
}; | |
var CriteriaHelper = { | |
activations: { | |
page_type_criteria: function(e, t, n, i) { | |
return CriteriaHelper.compare("exactly", bouncex.website.pts, i) | |
}, | |
custom_variable_criteria: function(e, t, n, i) { | |
return CriteriaHelper.compare(e, bouncex.vars[t], i) | |
}, | |
device_type_criteria: function(e, t, n, i) { | |
return CriteriaHelper.compare("exactly", bouncex.cookie.d, i) | |
}, | |
current_page_url: function(e, t, n, i) { | |
return CriteriaHelper.compare(e, location.href, i) | |
}, | |
js: function(e, t, n, i) { | |
return CriteriaHelper.compare("js", null, i) | |
} | |
}, | |
compare: function(compareMethod, compareValue, compareTo) { | |
var compareValue = compareValue || !1 === compareValue || 0 === compareValue ? (compareValue + "").toLowerCase() : ""; | |
if (compareTo || !1 === compareTo || 0 === compareTo ? "js" == compareMethod || "regex_match" == compareMethod || "not_regex_match" == compareMethod ? compareTo += "" : "greater" == compareMethod || "less" == compareMethod || "less_equal" == compareMethod || "greater_equal" == compareMethod ? ("" !== compareValue && (compareValue = +compareValue), compareTo = +compareTo) : compareTo = (compareTo + "").toLowerCase() : compareTo = "", "contains" == compareMethod || "not_contains" == compareMethod) return -1 < compareValue.indexOf(compareTo) ? "contains" == compareMethod : "contains" != compareMethod; | |
if ("yes" == compareMethod || "no" == compareMethod) return compareValue ? "yes" == compareMethod : "no" == compareMethod; | |
if ("exactly" == compareMethod || "not_exactly" == compareMethod) return compareValue == compareTo ? "exactly" == compareMethod : "exactly" != compareMethod; | |
if ("contained_in" == compareMethod || "not_contained_in" == compareMethod) return -1 < compareTo.indexOf(compareValue) ? "contained_in" == compareMethod : "contained_in" != compareMethod; | |
if ("regex_match" == compareMethod || "not_regex_match" == compareMethod) { | |
var match = new RegExp(compareTo, "gi").test(window.location.href); | |
return match ? "regex_match" == compareMethod : "regex_match" != compareMethod | |
} | |
if ("js" == compareMethod) try { | |
var v = eval(compareTo); | |
return "boolean" == typeof v && v | |
} catch (e) { | |
bouncex.err(e, { | |
source: "evalCriteria - page_types" | |
}) | |
} else { | |
if ("greater" == compareMethod) return compareValue > compareTo; | |
if ("less" == compareMethod && "" !== compareValue) return compareValue < compareTo; | |
if ("equal" == compareMethod) return compareValue == compareTo; | |
if ("less_equal" == compareMethod && "" !== compareValue) return compareValue <= compareTo; | |
if ("greater_equal" == compareMethod) return compareValue >= compareTo; | |
if ("not_equal" == compareMethod) return compareValue != compareTo | |
} | |
return !1 | |
} | |
}, | |
perf = { | |
startTime: "undefined" != typeof performance && performance.timing && performance.timing.navigationStart ? performance.timing.navigationStart : getTimeMs(), | |
timesArr: {}, | |
times: function(e) { | |
this.timesArr.startTime || (this.timesArr.startTime = this.startTime), this.timesArr[e] = getTimeMs() - this.startTime | |
}, | |
manualTiming: function(e, t) { | |
this.timesArr[e] = t - this.startTime | |
}, | |
get: function(e) { | |
var t = "perf:" + e, | |
n = {}; | |
return n[t] = bouncex.stringify(this[e + "Arr"]), !(!n[t] || "[]" == n[t] || "{}" == n[t]) && n | |
}, | |
report: function(e) { | |
if (bouncex.cookie && "037" === bouncex.cookie.did.substr(bouncex.cookie.did.length - 3)) { | |
var t = this.get(e); | |
if (t) return t.agent = "js", event_stream_report("perf", t) | |
} | |
} | |
}, | |
ReloadCampaigns = { | |
_max: 30, | |
_taskId: "make_reload_campaigns_request", | |
init: function() { | |
this._count = 0 | |
}, | |
addRequest: function(e, t) { | |
e = e || this.addRequest.caller && this.addRequest.caller.arguments && this.addRequest.caller.arguments.length && "object" !== _typeof(this.addRequest.caller.arguments[0]) && this.addRequest.caller.arguments[0] || "custom", t = t || "manual", BxInterval.addTask(this._makeRequest.bind(this, e, t), 0, this._taskId), this._log(e + ": " + t) | |
}, | |
_reportEvent: function(e, t) { | |
event_stream_report("reloadcampaigns", { | |
"reloadcampaigns:customvariables": bouncex.varsToAPI, | |
"reloadcampaigns:name": e, | |
"reloadcampaigns:type": t | |
}) | |
}, | |
_makeRequest: function(e, t) { | |
return this._count >= this._max ? this._cancelRequest() : void(void 0 !== bouncex.state && (this._reloadCampaigns(e, t), this._completeRequest(), bouncex.state.no_kinesis && this._reportEvent(e, t))) | |
}, | |
_cancelRequest: function() { | |
BxInterval.stopTask(this._taskId), this._log("max reached") | |
}, | |
_completeRequest: function() { | |
BxInterval.stopTask(this._taskId), this._count += 1, this._log(this._count) | |
}, | |
_reloadCampaigns: function(e, t) { | |
bouncex.baddjs(bouncex.make_include_string("reloadCampaigns", t, e)) | |
}, | |
_log: function(e) { | |
_logger2.default.info({ | |
group: "reload_campaigns", | |
message: e, | |
color: "#BB8FCE" | |
}) | |
} | |
}, | |
BxInterval = { | |
init: function() { | |
clearInterval(this._masterPoll), this._tasks = {}, this._masterPoll = setInterval2(this._runTasks.bind(this), 1e3) | |
}, | |
_runTasks: function() { | |
for (var e in this._tasks) | |
if (this._tasks.hasOwnProperty(e)) { | |
var t = this._tasks[e]; | |
t.run(), t.count += 1, 0 < t.max && t.count >= t.max && this._maxedTask(e) | |
} | |
}, | |
addTask: function(e, t, n, i) { | |
var o = n || generateUniqueId(); | |
return this._tasks[o] = { | |
run: e, | |
max: t || 0, | |
count: 0, | |
maxedFn: i | |
}, o | |
}, | |
_maxedTask: function(e) { | |
this._tasks[e] && "function" == typeof this._tasks[e].maxedFn && this._tasks[e].maxedFn(), this.stopTask(e) | |
}, | |
stopTask: function(e) { | |
delete this._tasks[e] | |
}, | |
clearTasks: function() { | |
this._tasks = {} | |
} | |
}, | |
XD = { | |
postMessage: function() { | |
isDeprecatedFunction() | |
}, | |
receiveMessage: function() { | |
isDeprecatedFunction() | |
} | |
}, | |
zcCallbacks = []; | |
bouncex.caAutofill = function(e, t) { | |
for (var n in t = "object" === _typeof(t) ? t : {}) t.hasOwnProperty(n) && bouncex.campaigns[e].inputs.filter("[name=" + n + "]").val(t[n]).trigger("click") | |
}, bouncex.fb = { | |
login: function(e) { | |
e = "function" == typeof e ? e : function() {}, window.FB ? FB.login(function(t) { | |
t.authResponse ? FB.api("/me", { | |
fields: "id,email,first_name,last_name,gender,name" | |
}, function(t) { | |
if (t.error) { | |
var n = t.error && t.error.message; | |
bouncex.fb.warn("FB.api returned an error: " + n) | |
} | |
t.fname = t.first_name, t.lname = t.last_name, e(t) | |
}) : (bouncex.fb.warn("FB.login not authenticated"), e()) | |
}, { | |
scope: "email, public_profile" | |
}) : (bouncex.fb.warn("FB sdk not found"), e()) | |
}, | |
nextStep: function(e, t, n) { | |
bouncex.fb.login(function(i) { | |
return bouncex.caAutofill(e, i), bouncex.setJumpStep(e, t, n), bouncex.submitCampaignStep(e), !1 | |
}) | |
}, | |
popCa: function(e) { | |
bouncex.fb.login(function(t) { | |
var n = 0; | |
t && t.email && (bouncex.campaigns[e].inputs.filter("[name=email]").val("Autofilling from Facebook...").trigger("click"), n = 1500), setTimeout2(function() { | |
bouncex.caAutofill(e, t) | |
}, n) | |
}) | |
}, | |
warn: function(e) { | |
_logger2.default.warn({ | |
group: "bouncex.fb", | |
message: e | |
}) | |
} | |
}; | |
var ActiveTime = { | |
initialized: !1, | |
timeCount: 0, | |
events: "mousemove.bouncex_active_time_action keydown.bouncex_active_time_action DOMMouseScroll.bouncex_active_time_action mousewheel.bouncex_active_time_action mousedown.bouncex_active_time_action touchstart.bouncex_active_time_action touchmove.bouncex_active_time_action focus.bouncex_active_time_action", | |
callbacks: {}, | |
inactivityTimeout: null, | |
activityInterval: null, | |
addCallback: function(e, t) { | |
if (e = parseInt(e), !isNaN(e)) { | |
var n = generateUniqueId(); | |
return ActiveTime.callbacks[n] = { | |
seconds: e, | |
callback: t | |
}, ActiveTime.initialized || (ActiveTime.inactivityTimeout = ActiveTime._resetInactivityTimeout(), bxPassiveBind(window, ActiveTime.events, ActiveTime._handleActivity), ActiveTime.initialized = !0), n | |
} | |
}, | |
clearCallback: function(e) { | |
ActiveTime.callbacks && ActiveTime.callbacks[e] && delete ActiveTime.callbacks[e], ActiveTime._shutdownIfNoRemainingCallbacks() | |
}, | |
_increase: function() { | |
for (var e in ActiveTime.timeCount++, ActiveTime.callbacks) { | |
var t = ActiveTime.callbacks[e]; | |
t.seconds <= ActiveTime.timeCount && (t.callback(), ActiveTime.clearCallback(e)) | |
} | |
}, | |
_shutdownIfNoRemainingCallbacks: function() { | |
(!ActiveTime.callbacks || jQuery.isEmptyObject(ActiveTime.callbacks)) && (ActiveTime._clearActivityInterval(), clearTimeout(ActiveTime.inactivityTimeout), bxPassiveUnbind(window, ActiveTime.events), ActiveTime.initialized = !1) | |
}, | |
_handleActivity: function() { | |
ActiveTime.inactivityTimeout = ActiveTime._resetInactivityTimeout(), ActiveTime.activityInterval || (ActiveTime.activityInterval = setInterval2(ActiveTime._increase, 1e3)) | |
}, | |
_resetInactivityTimeout: function() { | |
return clearTimeout(ActiveTime.inactivityTimeout), setTimeout2(ActiveTime._clearActivityInterval, 5e3) | |
}, | |
_clearActivityInterval: function() { | |
clearInterval(ActiveTime.activityInterval), delete ActiveTime.activityInterval | |
} | |
}, | |
init_vars = InitSequence.preInit1.integrations, | |
bcx_init = InitSequence.preInit1.entry, | |
init_post_cookie = InitSequence.preInit1.cookieReady; | |
bouncex.log = function() { | |
var e = console.log.bind ? console.log.bind(console) : window.console.log; | |
isBxInternalTraffic() && e.apply(null, arguments) | |
}, bouncex.console = { | |
trace: function() { | |
isBxInternalTraffic() && console.trace && console.trace() | |
}, | |
group: function() { | |
var e = console.group.bind ? console.group.bind(console) : window.console.group; | |
(visitorTestMode("office") || visitorTestMode("bxdev")) && e.apply(null, arguments) | |
}, | |
groupCollapsed: function() { | |
var e = console.groupCollapsed.bind ? console.groupCollapsed.bind(console) : window.console.groupCollapsed; | |
isBxInternalTraffic() && console.groupCollapsed && e.apply(null, arguments) | |
}, | |
groupEnd: function() { | |
var e = console.groupEnd.bind ? console.groupEnd.bind(console) : window.console.groupEnd; | |
isBxInternalTraffic() && console.groupEnd && e.apply(null, arguments) | |
} | |
}, bouncex.table = function() { | |
var e = console.table.bind ? console.table.bind(console) : window.console.table; | |
("production" !== bouncex.env || visitorTestMode("office") || visitorTestMode("bxdev")) && e.apply(null, arguments) | |
}, bouncex.loaded = !0, bouncex.init1Response = tryCatch(function(e) { | |
bouncex.state = e.state, "no_consent" === bouncex.complianceFlag || "gdpr_no_consent" === bouncex.complianceFlag && bouncex.state.gdpr || (bouncex.cookie = e.cookie, bouncex.brandStyles = e.brand_styles, bouncex.webfonts = e.webfonts, bouncex.campaigns = e.campaigns, bouncex.creatives = e.creatives, bouncex.debug = e.debug, bouncex.testmode = e.testmode, bouncex.gbi.stacks = e.gbi_stacks, bouncex.website.gbi2Enabled = e.gbi2_enabled, bouncex.website.sspConfig = e.ssp_config, bouncex.website.pushFilepath = e.push_filepath, bouncex.website.smsEnabled = e.sms_enabled, bouncex.website.smsTC = e.sms_terms_conditions_link, bouncex.website.brandName = e.brand_name, bouncex.website.adsConfig = e.ads_config, setBounceCookie(), InitSequence.postInit1.entry()) | |
}); | |
var BehavioralCriteria = { | |
evaluate: function(e, t, n) { | |
this._debug.init(n); | |
for (var i, o = 0; o < t.length; o++) | |
if (i = t[o], this._debug.initCriteriaSet(i, o), !this._andCriteriaSatisfied(i, e)) return !1; | |
return !0 | |
}, | |
_andCriteriaSatisfied: function(e, t) { | |
for (var n, i = 0; i < e.length; i++) | |
if (n = e[i], this._orCriteriaSatisfied(n, t)) return this._debug.setCriteriaStatus(!0), !0; | |
return this._debug.setCriteriaStatus(!1), !1 | |
}, | |
_orCriteriaSatisfied: function(e, t) { | |
e.val = parseSiteElementSelector(e.val); | |
var n = -1 !== jQuery.inArray(getUniqueInstrumentId(e), t) ? !e.shouldBeAbsent : !!e.shouldBeAbsent; | |
return this._debug.setActivationStatus(e.activation, n), n | |
}, | |
_debug: { | |
init: function(e) { | |
this.campaignId = e, void 0 === this.shouldDebug && (this.shouldDebug = isBxInternalTraffic()) | |
}, | |
initCriteriaSet: function(e, t) { | |
this.shouldDebug && (this.failedCriteriaArr = [], this.setInfo = "behavioral criteria - criteria " + t + ": " + e.map(function(e) { | |
return e.activation | |
}).join(",")) | |
}, | |
setActivationStatus: function(e, t) { | |
this.shouldDebug && (t || this.failedCriteriaArr.push(e), bouncex.campaigns[this.campaignId].list_of_rt_activations.forEach(function(n) { | |
n.activation !== e || (n.status = t) | |
})) | |
}, | |
setCriteriaStatus: function(e) { | |
if (this.shouldDebug) { | |
var t = e ? " - passed" : " - failed (" + this.failedCriteriaArr.join(",") + ")"; | |
this.log(this.campaignId, this.setInfo + t) | |
} | |
}, | |
log: function(e, t) { | |
this.shouldDebug && _logger2.default.info({ | |
group: "rtbc", | |
message: t, | |
color: "#ff69b4", | |
campaignId: e | |
}) | |
} | |
} | |
}, | |
CustomVariables = { | |
_hasInit: !1, | |
_reloadCampaignVarNames: [], | |
_allChangedVars: [], | |
init: function() { | |
this._hasInit || (bouncex.cookie = getBounceCookie(), bouncex.vars = {}, this.varsToExpire = [], bouncex.website.vars = initTestModeParts("cvars"), this._index = {}, bouncex.website.vars.forEach(function(e, t) { | |
this._index[e.name] = t | |
}.bind(this))), this.evalVars(), this._initPolling(), setBounceCookie(), this._hasInit = !0 | |
}, | |
evalVars: function(e) { | |
e = e || "all"; | |
for (var t, n = this._filterVars(e), i = 0; i < n.length; i++) | |
if (t = n[i], void 0 === bouncex.vars[t.name] && this._initVar(t), this._canEvalVar(t)) { | |
var o = this.evalVarAndReload(t.name); | |
"visit" !== t.persist || bouncex.state || o.success || this.varsToExpire.push({ | |
name: t.name, | |
default: t.default | |
}) | |
} | |
}, | |
_filterVars: function(e) { | |
return this._filter = this._filter || {}, this._filter[e] ? this._filter[e] : "all" === e ? this._filter[e] = bouncex.website.vars : "devicegraph" === e ? this._filter[e] = bouncex.website.vars.filter(function(e) { | |
return "devicegraph" === e.persist | |
}) : "polling" === e ? this._filter[e] = bouncex.website.vars.filter(function(e) { | |
return "none" !== e.polling | |
}) : "persist" === e ? this._filter[e] = bouncex.website.vars.filter(function(e) { | |
return "no" !== e.persist | |
}) : [] | |
}, | |
_initVar: function(e) { | |
var t = "no" !== e.persist && bouncex.cookie.v && void 0 !== bouncex.cookie.v[e.name] ? bouncex.cookie.v[e.name] : e.default; | |
this.setVar(e.name, t) | |
}, | |
_canEvalVar: function(e) { | |
if (e.page_types.length && (!bouncex.website.pts || -1 === e.page_types.indexOf(bouncex.website.pts))) return !1; | |
if ("devicegraph" === e.persist) { | |
if (!bouncex.dg || !bouncex.dg.store) return !1; | |
if ("number" != typeof bouncex.vars[e.name]) return !1 | |
} | |
return "event" !== e.trigger | |
}, | |
_evalVar: function(e, t) { | |
var n = {}; | |
"function" != typeof e.code && (e.code = this._makeFunc(e.code)); | |
try { | |
var i = t ? e.code.bind(t) : e.code; | |
n = this.setVar(e.name, i()) | |
} catch (t) { | |
bouncex.err(t, { | |
source: "eval cvar", | |
cvar: e.name | |
}) | |
} | |
return n | |
}, | |
setVar: function(e, t) { | |
var n = bouncex.website.vars[this._index[e]], | |
i = { | |
success: !1, | |
changed: !1 | |
}, | |
o = this._formatVar(t); | |
return i.success = this._validVar(o), i.success && bouncex.vars[n.name] !== o && (i.changed = !0, i.oldVal = bouncex.vars[n.name], bouncex.vars[n.name] = o, "no" !== n.persist && (bouncex.cookie.v = bouncex.cookie.v || {}, bouncex.cookie.v[n.name] = o, bouncex.dg && bouncex.dg.store && "devicegraph" === n.persist && (bouncex.dg.store.v = bouncex.dg.store.v || {}, bouncex.dg.store.v[n.name] = o))), i | |
}, | |
getVar: function(e) { | |
return bouncex.website.vars[this._index[e]] | |
}, | |
_reactToChange: function(e, t) { | |
t.changed && ("vars" !== e.polling && this._reloadCampaignVarNames.push(e.name), "no" !== e.persist && bouncex.setBounceCookie(), "devicegraph" === e.persist && bouncex.dg.updateDeviceGraphCookie(), this._allChangedVars.push({ | |
name: e.name, | |
oldVal: t.oldVal | |
})) | |
}, | |
evalVarAndReload: function(e, t) { | |
var n = bouncex.website.vars[this._index[e]], | |
i = this._evalVar(n, t); | |
return this._reactToChange(n, i), i | |
}, | |
setVarAndReload: function(e, t) { | |
var n = bouncex.website.vars[this._index[e]], | |
i = this.setVar(n.name, t); | |
this._reactToChange(n, i) | |
}, | |
_makeFunc: function(code) { | |
var f = function() { | |
return null | |
}, | |
str = "f = (function(){return " + encodeURI(code.toString().replace("\n", " ")) + "});"; | |
try { | |
eval(decodeURI(str)) | |
} catch (e) { | |
bouncex.err("bad cvar expression " + code) | |
} | |
return f | |
}, | |
_validVar: function(e) { | |
return "number" == typeof e && !isNaN(e) || "string" == typeof e || "boolean" == typeof e | |
}, | |
_formatVar: function(e) { | |
switch (!0) { | |
case "true" === e: | |
return !0; | |
case "false" === e: | |
return !1; | |
case "string" == typeof e && !!e.match(/^[0-9]+$/): | |
return parseInt(e); | |
case "string" == typeof e && !!e.match(/^[0-9]+\.[0-9]+$/): | |
return parseFloat(e); | |
default: | |
return e | |
} | |
}, | |
_initPolling: function() { | |
this._reloadCampaignVarNames = [], BxInterval.addTask(this._pollingVars.bind(this), 0, "eval_polling_vars"), BxInterval.addTask(this._cvarChangeEvent.bind(this), 0, "emit_change_event") | |
}, | |
_pollingVars: function() { | |
this.evalVars("polling"), this._reloadCampaignVarNames.length && (bouncex.reload_campaigns("variable", this._reloadCampaignVarNames.join(",")), this._reloadCampaignVarNames = []), this._allChangedVars.length && 2 == bouncex.website.ete && bouncex.et.evalAllUIEvents() | |
}, | |
_cvarChangeEvent: function() { | |
this._allChangedVars.length && bouncex.window && (bouncex.window.trigger("bxVarsChange", [this._allChangedVars]), this._allChangedVars = []) | |
}, | |
clearAll: function() { | |
this._hasInit = !1, bouncex.vars = {} | |
} | |
}, | |
BrowserUtil = { | |
viewport: { | |
getVisibleElements: function(e, t) { | |
return jQuery(e).toArray().reduce(function(e, n, i) { | |
return this.elementEdgeInViewport(n, t) && e.push({ | |
element: n, | |
index: i | |
}), e | |
}.bind(this), []) | |
}, | |
elementEdgeInViewport: function(e, t) { | |
if ("string" == typeof e && (e = jQuery(e).get(0)), !e) return !1; | |
var n = this._getVerticalPosition(e, t); | |
return this.isInVerticalViewport(n) | |
}, | |
isInVerticalViewport: function(e) { | |
return 0 <= e && e <= (window.innerHeight || document.documentElement.clientHeight) | |
}, | |
_getVerticalPosition: function(e, t, n) { | |
var i = e.getBoundingClientRect(); | |
return n = parseInt(n) || 0, "before" === t || "prepend" === t ? i.top - n : i.bottom + n | |
}, | |
distanceToBottom: function(e, t, n) { | |
var i = this._getVerticalPosition(e, t, n); | |
return (window.innerHeight || document.documentElement.clientHeight) - i | |
} | |
}, | |
currentTab: { | |
isVisible: function() { | |
return "visible" === document.visibilityState | |
} | |
} | |
}; | |
bouncex.utils = { | |
addNamespace: function(e, t) { | |
var n = {}; | |
for (var i in e) | |
if (e.hasOwnProperty(i)) { | |
var o = i; - 1 === i.indexOf(":") && (o = t + ":" + i), n[o] = e[i] | |
} | |
return n | |
}, | |
getOrigin: function() { | |
return window.location.origin || window.location.protocol + "//" + window.location.hostname + (window.location.port ? ":" + window.location.port : "") | |
}, | |
doAjaxRequest: function(e) { | |
e.crossDomain = !0, e.global = !1; | |
var t = jQuery.fn.jquery.split("."); | |
return e.xhrFields = { | |
withCredentials: !0 | |
}, 1 >= parseInt(t[0]) && 5 >= parseInt(t[1]) && (e.beforeSend = function(e) { | |
e.withCredentials = !0 | |
}, e.xhr = function() { | |
var e = jQuery.ajaxSettings.xhr(), | |
t = e.setRequestHeader; | |
return e.setRequestHeader = function(e, n) { | |
"X-Requested-With" == e || t.call(this, e, n) | |
}, e | |
}), jQuery.ajax(e) | |
}, | |
gtmLookup: function(e, t) { | |
if (!(t = t || this.url.getParam("id", jQuery('script[src*="googletagmanager"]').attr("src")))) return !1; | |
try { | |
return google_tag_manager[t].dataLayer.get(e) | |
} catch (e) { | |
return bouncex.err(e, { | |
source: "gtmLookup" | |
}), "" | |
} | |
}, | |
getNestedProp: function(e, t, n) { | |
var i = void 0 === n ? window : n, | |
o = void 0 === t ? void 0 : t, | |
a = e; | |
if ("string" == typeof e) { | |
if (/[^A-z0-9\[\].]/.test(e)) return bouncex.log("getNestedProp given bad value: " + e), o; | |
a = e.split(/[.\[]/).map(function(e) { | |
return e.replace(/[\]]/g, "") | |
}) | |
} | |
for (var r, s = 0; s < a.length; s++) { | |
if (void 0 === i[r = a[s]]) return o; | |
i = i[r] | |
} | |
return i | |
}, | |
cookies: { | |
create: function(e) { | |
if (defaults = { | |
name: "", | |
value: "", | |
domain: !1, | |
days: 14 | |
}, !(e = jQuery.extend(defaults, e)).name) return !1; | |
var t = new Date; | |
t.setTime(t.getTime() + 24 * e.days * 60 * 60 * 1e3); | |
var n = "; expires=" + t.toGMTString(), | |
i = e.name + "=" + e.value + n + "; path=/;"; | |
e.domain && (i += "domain=" + e.domain + ";"), document.cookie = i | |
}, | |
destroy: function(e) { | |
return this.create({ | |
name: e, | |
days: -1 | |
}) | |
}, | |
read: function(e) { | |
for (var t, n = e + "=", i = document.cookie.split(";"), o = 0; o < i.length; o++) { | |
for (t = i[o]; | |
" " == t.charAt(0);) t = t.substring(1, t.length); | |
if (0 == t.indexOf(n)) return t.substring(n.length, t.length) | |
} | |
return null | |
} | |
}, | |
records: { | |
getRecords: function(e) { | |
if (isBxInternalTraffic()) return _records2.default.getRecords(e) | |
}, | |
printRecords: function(e) { | |
if (isBxInternalTraffic()) return _records2.default.printRecords(e) | |
} | |
}, | |
url: { | |
allowParams: function(e, t) { | |
var n = (t = t || window.location.href).split(/([\?\#])/); | |
if (!e) return n[0]; | |
for (var i = 1; i < n.length; i++) "?" !== n[i] && "#" !== n[i] && (n[i] = this.filterParams(n[i], function(t) { | |
return -1 < e.indexOf(t) | |
})); | |
return n.join("").replace(/([\?\#](?=[\?\#])|[\?\#]+$)/g, "") | |
}, | |
generateQuerystring: function(e, t) { | |
var n = t || ""; | |
for (var i in e) e.hasOwnProperty(i) && (n += i + "=" + e[i] + "&"); | |
return n.substring(0, n.length - 1) | |
}, | |
queryStringToObject: function(e) { | |
return (e = "?" === (e = void 0 === e ? window.location.search : e).charAt(0) ? e.substring(1) : e).split("&").reduce(function(e, t) { | |
var n = t.split("="), | |
i = decodeURIComponent(n[0]), | |
o = decodeURIComponent(n[1]); | |
return e[i] = o, e | |
}, {}) | |
}, | |
filterParams: function(e, t) { | |
for (var n = e.replace(/[\?\#]/, "").split("&"), i = "", o = 0; o < n.length; o++) t(n[o].split("=")[0].replace(/[\[]/, "").replace(/[\]]/, "")) && (i += "&" + n[o]); | |
return i.replace("&", "") | |
}, | |
formatReferrer: function(e) { | |
return e ? encodeURIComponent(e.split("/")[2]) : "" | |
}, | |
getParam: function(e, t) { | |
var n = t ? "?" + t : window.location.href; | |
e = e.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); | |
var i = new RegExp("[\\?&#]" + e + "=([^&#]*)").exec(n); | |
return null == i ? "" : decodeURIComponent(i[1]) | |
}, | |
removeParams: function(e, t) { | |
t = t || window.location.href, e = ["_ke", "bxid", "cid", "email", "et_rid", "gclid", "ibx_source", "mc_cid", "mc_eid", "pid", "RIID", "spUserID", "sfmc_sub", "ueh", "utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"].concat(e); | |
for (var n = t.split(/([\?\#])/), i = 1; i < n.length; i++) "?" !== n[i] && "#" !== n[i] && (n[i] = this.filterParams(n[i], function(t) { | |
return -1 === e.indexOf(t) | |
})); | |
return n.join("").replace(/([\?\#](?=[\?\#])|[\?\#]+$)/g, "") | |
} | |
}, | |
validate: { | |
email: function(e) { | |
return /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e) | |
}, | |
integer: function(e) { | |
return !isNaN(parseInt(e)) | |
}, | |
url: function(e) { | |
return /^(https?):\/\/[^\s\/$.?#].[^\s]*$/.test(e) | |
} | |
}, | |
isObject: function(e) { | |
return null !== e && "object" === _typeof(e) && !Array.isArray(e) | |
} | |
}, bouncex.utils.getParam = bouncex.utils.url.getParam, bouncex.vst = { | |
_init: { | |
buildVastEnv: function(e, t) { | |
var n, i; | |
bouncex.vst._internal.groupCollapsed(e, "init vast parser", !1), n = bouncex.campaigns[e], bouncex.vst.campaignId = e, n.video.vast = { | |
handlingWrapper: !1, | |
wrapperLevel: 0, | |
tracking: {} | |
}, i = bouncex.vst._helpers.isVastOrTag(t), bouncex.vst._init.kickoffVastParse(e, i, t) | |
}, | |
kickoffVastParse: function(e, t, n) { | |
return "tag" === t ? this.extractVastData(e, n) : "vastxml" === t ? bouncex.vst._response.vastResponse(n) : void 0 | |
}, | |
extractVastData: function(e, t) { | |
bouncex.video.log(e, "extract vast url: " + t, "vast"); | |
var n = bouncex.vst._validations.checkVastUrl(t); | |
bouncex.vst._http.call(e, n, "GET", null, bouncex.vst._response.vastResponse) | |
} | |
}, | |
_http: { | |
call: function(e, t, n, i, o, a) { | |
bouncex.video.log(e, "making HTTP request", "vast"), bouncex.vst._validations.checkHttpRequest(e, t, o); | |
var r = bouncex.vst._http.createXMLRequest(); | |
r.onreadystatechange = function() { | |
if (4 == r.readyState) | |
if (200 === r.status) o && o(this, r); | |
else if (a) { | |
if (0 !== r.status) return bouncex.video.fail(e, "XML request to parse vast data failed"), !1 | |
} else bouncex.vst && bouncex.vst._http.call(e, t, n, i, o, !0) | |
}, r.open(n, bouncex.vst._validations.checkUrl(t).href, !0), a && (r.withCredentials = !0); | |
try { | |
i ? r.send(i) : r.send() | |
} catch (r) { | |
var s = !0 === a ? " on second try" : "."; | |
bouncex.video.fail(e, "VAST [httpCall]: XHR request failed" + s + r.message), a || bouncex.vst._http.call(e, t, n, i, o, !0, "vast") | |
} | |
}, | |
success: function(e) { | |
return 200 <= e && 300 > e | |
}, | |
createXMLRequest: function() { | |
var e; | |
return window.XMLHttpRequest ? e = new XMLHttpRequest : window.ActiveXObject && (e = new ActiveXObject("Microsoft.XMLHTTP")), e | |
} | |
}, | |
_response: { | |
vastResponse: function(e) { | |
var t, n, i = bouncex.vst.campaignId, | |
o = bouncex.campaigns[i]; | |
if (0 < o.video.vast.wrapperLevel && !o.video.vast.handlingWrapper) { | |
var a = o.video.vast.wrapperLevel; | |
bouncex.vst._internal.groupCollapsed(i, "re-init vast parser, wrapper found - on loop: " + a, !1) | |
} else bouncex.video.log(i, "init vast parser", "vast"); | |
t = bouncex.vst._validations.checkXml(e), n = o.video.vast, bouncex.vst._processVastData.getAd(i, t, e), !o.failed && n.vpaidUrl ? (bouncex.video.log(i, " -> Found VPAID", "vast"), bouncex.vst._loadPlayer.vpaidMedia(i, n)) : !o.failed && (bouncex.video.log(i, "vast parse complete", "vast"), !o.video.vast.handlingWrapper && bouncex.vst._loadPlayer.vastMedia(i, n)), o.video.vast.handlingWrapper || bouncex.vst._internal.groupEnd(i, "exit vast parser", !1) | |
} | |
}, | |
_xml: { | |
convertStringToXML: function(e) { | |
if (!_typeof(window.DOMParser)) { | |
var t = new ActiveXObject("Microsoft.XMLDOM"); | |
return t.loadXML(e), t | |
} | |
var n, i = new DOMParser; | |
try { | |
(!(n = i.parseFromString(e, "application/xml")) || "" === n || this.parsingError(n)) && bouncex.log("error parsing XML string") | |
} catch (e) { | |
bouncex.log("error parsing XML string") | |
} | |
return n | |
}, | |
parsingError: function(e) { | |
try { | |
var t = (new DOMParser).parseFromString("INVALID", "text/xml").getElementsByTagName("parsererror")[0].namespaceURI; | |
return 0 < e.getElementsByTagNameNS(t, "parsererror").length | |
} catch (e) { | |
bouncex.log("xml parsing error: ", e) | |
} | |
}, | |
parseXmlText: function(e) { | |
return /^\s*$/.test(e) ? null : /^(?:true|false)$/i.test(e) ? "true" === e.toLowerCase() : e.trim() | |
}, | |
elementParsers: { | |
init: function(e, t, n, i) { | |
var o, a, r, s, c, u, b, l; | |
o = bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "Impression", 1), a = bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "Tracking", 1), r = bouncex.vst._xml.nodeParsers.getXmlNode(e, n, "Wrapper", 0), s = null !== bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "InLine", 0) && bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "InLine", 0), c = bouncex.vst._xml.nodeParsers.getXmlNode(e, s, "Linear", 0) || bouncex.vst._xml.nodeParsers.getXmlNode(e, s, "Video", 0), b = bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "Error", 1), c || s || (l = bouncex.vst._xml.nodeParsers.getXmlNode(e, s, "NonLinear", 0), u = bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "Companion", 0)), u && bouncex.video.log(e, "SKIP -> [parseVastElements]: companion ads not currently supported", "warning"), l && bouncex.video.log(e, "SKIP -> [parseVastElements]: nonlinear ads not currently supported", "warning"), b && bouncex.vst._tracking.recordErrorPixels(e, i, b), o && bouncex.vst._tracking.recordImpressionPixels(i, o), a && bouncex.vst._tracking.recordEventPixels(i, a), r && (bouncex.vst._xml.elementParsers.handleWrapper(e, r), bouncex.campaigns[e].video.vast.handlingWrapper = !1, bouncex.campaigns[e].video.vast.wrapperLevel += 1), c && this.handleVideo(e, i, c) | |
}, | |
handleVideo: function(e, t, n) { | |
bouncex.vst._tracking.recordVideoClickTrackingPixels(e, t, n), this.handleDuration(e, t, n), this.handleMediaFiles(e, t, n) | |
}, | |
handleDuration: function(e, t, n) { | |
var i, o, a = bouncex.vst._xml.nodeParsers.getXmlNode(e, n, "Duration", 0); | |
null !== a && (bouncex.vst._xml.nodeParsers.nodeExists(a) && "string" != typeof a && (a = bouncex.vst._xml.nodeParsers.getNodeValue(a)), i = (a = a.split(".")[0]).split(":"), o = parseInt(60 * i[0] * 60) + parseInt(i[2]), t.duration = o, bouncex.video.log(e, "media duration -> " + t.duration + "s", "vast")) | |
}, | |
handleMediaFiles: function(e, t, n) { | |
var i, o = bouncex.vst._xml.nodeParsers.getXmlNode(e, n, "MediaFile", 1), | |
a = null, | |
r = !1; | |
if ((null === o || 0 === o.length) && bouncex.video.log(e, "0 media files found", "error"), o && o.length) { | |
for (var s = 0; s < o.length; s++) { | |
if (t.width = o[s].getAttribute("width"), t.height = o[s].getAttribute("height"), t.aspectRatio = t.height / t.width * 100, t.apiFramework = o[s].getAttribute("apiFramework") || !1, t.type = o[s].getAttribute("type"), t.aspectRatio = bouncex.vst._helpers.calculateAspectRatioData(t.width, t.height), t.isVPAID = !(!t.apiFramework || "vpaid" !== t.apiFramework.toLowerCase() || "application/javascript" !== t.type), t.offsetAspectRatio = bouncex.campaigns[e].video.player.offsetHeight / bouncex.campaigns[e].video.player.offsetWidth * 100, i = null === bouncex.vst._xml.nodeParsers.getNodeValue(o[s]) ? this.handleUrlSources(e) : bouncex.vst._xml.nodeParsers.getNodeValue(o[s]), -1 < t.type.toLowerCase().indexOf("mp4")) { | |
t.src = i, r = !0; | |
break | |
} | |
if (-1 < t.type.toLowerCase().indexOf("application/javascript")) return bouncex.vst._loadPlayer.handleVPAID(e, t, n, i); | |
a = { | |
path: i, | |
type: t.type | |
}, t.src = a.path, t.type = a.type, t.vpaidUrl = !1 | |
} | |
0 != r || t.vpaidUrl || null === a || (t.src = a.path, t.type = a.type, t.vpaidUrl = !1) | |
} | |
}, | |
handleUrlSources: function(e) { | |
var t, n = bouncex.vst._xml.nodeParsers.getXmlNode(e, video, "URL", 1); | |
if (n) | |
for (var i = 0; i < n.length; i++) t = bouncex.vst._xml.nodeParsers.getNodeValue(n[i]); | |
return t | |
}, | |
handleWrapper: function(e, t) { | |
var n, i; | |
bouncex.vst._tracking.processWrapperEventPixels(e, t), (i = (n = bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "VASTAdTagURL", 0) || bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "VASTAdTagURI", 0)).firstChild.nodeValue && "" !== n.firstChild.nodeValue.trim() ? n.firstChild.nodeValue.trim() : !(!n.firstChild.constructor || !n.firstChild.constructor.name || "Text" != n.firstChild.constructor.name) && n.firstChild.wholeText.trim()) ? (bouncex.campaigns[e].video.vast.handlingWrapper = !0, bouncex.vst._init.extractVastData(e, i)) : bouncex.video.fail(e, "failed to extract a VAST URL node from the XML Wrapper element") | |
} | |
}, | |
nodeParsers: { | |
getXmlNode: function(e, t, n, i) { | |
var o, a, r, s; | |
return null == t || 1 > t.length ? (bouncex.video.log(e, "Failed to extract node -> " + n + ". XML is null. Searched node: " + n, "warning"), null) : null === (o = "object" === _typeof(t) && t.getElementsByTagName(n)) || 1 > o.length ? ("Companion" !== n && "NonLinear" !== n && bouncex.video.log(e, "Failed to find node -> " + n, "vast"), null) : 0 === i ? (bouncex.video.log(e, "Extracted first occurrence of node -> " + n, "vast"), o[0]) : 1 === i ? (a = 1 < o.length ? "Extracted " + o.length + " occurrences of node -> " + n : "Extracted " + o.length + " occurrence of node -> " + n, bouncex.video.log(e, a, "vast"), o) : (r = o.length - 1, s = _Mathround(Math.random() * r), bouncex.video.log(e, "Extracted random element[" + s + "] out of " + o.length + " " + n + " nodes", "vast"), o[s]) | |
}, | |
parseNodeText: function(e) { | |
return e && (e.textContent || e.text) | |
}, | |
nodeExists: function(e) { | |
return null !== e && null !== e.firstChild | |
}, | |
getNodeValue: function(e) { | |
var t = !(!e || !e.firstChild), | |
n = !!t && e.firstChild; | |
if ("MediaFile" === e.nodeName && e && e.childNodes && 1 < e.childNodes.length && "#text" === n.nodeName) | |
for (var i = 0; i < e.childNodes.length; i++) "URL" === e.childNodes[i].nodeName && (n = e.childNodes[i], t = !0); | |
if (t) { | |
if (n.nodeValue && "" !== n.nodeValue.trim()) return n.nodeValue; | |
if (n.nextSibling && n.nextSibling.data && "" !== n.nextSibling.data.trim()) return n.nextSibling.data; | |
if (n.wholeText && "" !== n.wholeText && "" !== n.wholeText.trim()) return n.wholeText.trim() | |
} | |
return null | |
} | |
} | |
}, | |
_tracking: { | |
recordEventPixels: function(e, t) { | |
for (var n, i, o = 0; o < t.length; o++) i = t[o], bouncex.vst._xml.nodeParsers.nodeExists(i) && (i = bouncex.vst._xml.nodeParsers.getNodeValue(i), n = t[o].getAttribute("event"), e.tracking[n] = e.tracking[n] || [], -1 === e.tracking[n].indexOf(i) && e.tracking[n].push(i)) | |
}, | |
recordVideoClickTrackingPixels: function(e, t, n) { | |
var i, o, a, r = bouncex.vst._xml.nodeParsers.getXmlNode(e, n, "VideoClicks", 0); | |
null !== r && (null !== (a = bouncex.vst._xml.nodeParsers.getXmlNode(e, r, "ClickThrough", 0)) && null !== a.firstChild && (t.clickThrough = bouncex.vst._xml.nodeParsers.getNodeValue(a)), o = (i = bouncex.vst._xml.nodeParsers.getXmlNode(e, r, "ClickTracking", 0)) ? bouncex.vst._xml.nodeParsers.getNodeValue(i) : null, t.tracking.clickTracking = t.tracking.clickTracking || [], o && -1 === t.tracking.clickTracking.indexOf(o) && t.tracking.clickTracking.push(o)) | |
}, | |
recordErrorPixels: function(e, t) { | |
for (var n, i = 0; i < t.length; i++) n = t[i], bouncex.vst._xml.nodeParsers.nodeExists(n) && (n = bouncex.vst._xml.nodeParsers.getNodeValue(n), e.tracking.error = e.tracking.error || [], null !== n && -1 === e.tracking.error.indexOf(n) && e.tracking.error.push(n)) | |
}, | |
recordImpressionPixels: function(e, t) { | |
for (var n, i = 0; i < t.length; i++) n = t[i], bouncex.vst._xml.nodeParsers.nodeExists(n) && (n = bouncex.vst._xml.nodeParsers.getNodeValue(n), e.tracking.impression = e.tracking.impression || [], null !== n && -1 === e.tracking.impression.indexOf(n) && e.tracking.impression.push(n)) | |
}, | |
processWrapperEventPixels: function(e, t) { | |
bouncex.video.log(e, "WRAPPER: init extraction", "vast"); | |
var n = bouncex.campaigns[e].video.vast, | |
i = bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "Impression", 1), | |
o = bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "Tracking", 1), | |
a = bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "Linear", 0), | |
r = bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "Error", 1); | |
i && (bouncex.video.log(e, "WRAPPER: handling impressions", "vast"), bouncex.vst._tracking.recordImpressionPixels(n, i)), r && (bouncex.video.log(e, "WRAPPER: handling error pixels", "vast"), bouncex.vst._tracking.recordErrorPixels(e, n, r)), o && (bouncex.video.log(e, "WRAPPER: handling tracking events", "vast"), bouncex.vst._tracking.recordEventPixels(n, o)), a && (bouncex.video.log(e, "WRAPPER: handling inline ad click tracking", "vast"), bouncex.vst._xml.elementParsers.handleVideo(e, n, a)) | |
} | |
}, | |
_processVastData: { | |
getAd: function(e, t, n) { | |
var i = t.getElementsByTagName("MediaFile"), | |
o = this.addMetaData(e, t), | |
a = bouncex.campaigns[e].video.vast; | |
bouncex.vst._validations.checkMediaExists(e, t, i, n), bouncex.vst._xml.elementParsers.init(e, o, t, a) | |
}, | |
addMetaData: function(e, t) { | |
var n = bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "Ad", 2), | |
i = {}; | |
return null !== n && (i.adId = n.getAttribute("id") || null, i.type = n.nodeName || null, i.system = bouncex.vst._xml.nodeParsers.parseNodeText(n.getElementsByTagName("AdSystem")[0]) || !1, i.title = bouncex.vst._xml.nodeParsers.parseNodeText(n.getElementsByTagName("AdTitle")[0]) || !1, i.description = bouncex.vst._xml.nodeParsers.parseNodeText(n.getElementsByTagName("Description")[0]) || !1, i.system = bouncex.vst._xml.nodeParsers.parseNodeText(n.getElementsByTagName("AdSystem")[0]) || !1, i.title = bouncex.vst._xml.nodeParsers.parseNodeText(n.getElementsByTagName("AdTitle")[0]) || !1, i.description = bouncex.vst._xml.nodeParsers.parseNodeText(n.getElementsByTagName("Description")[0]) || !1, i.advertiser = bouncex.vst._xml.nodeParsers.parseNodeText(n.getElementsByTagName("Advertiser")[0]) || !1, i.pricing = bouncex.vst._xml.nodeParsers.parseNodeText(n.getElementsByTagName("Pricing")[0]) || !1, i.category = bouncex.vst._xml.nodeParsers.parseNodeText(n.getElementsByTagName("Category")[0]) || !1, 0 === bouncex.campaigns[e].video.vast.wrapperLevel && (bouncex.campaigns[e].video.vast.metaData = i), n) | |
} | |
}, | |
_validations: { | |
checkMediaExists: function(e, t, n) { | |
if (null === n || 1 > n.length) { | |
var i = bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "Wrapper", 0), | |
o = bouncex.vst._xml.nodeParsers.getXmlNode(e, t, "status", 0); | |
o && "NO_AD" === o.innerHTML && bouncex.video.fail(e, "vastResponse with no ad - status: " + o.innerHTML + ", campaign failed."), null === i && bouncex.video.fail(e, "vastResponse without video, campaign failed") | |
} | |
}, | |
checkVastUrl: function(e) { | |
var t = bouncex.vst._validations.checkUrl(e), | |
n = t.href || null; | |
return "https:" === window.location.protocol && "https" !== t.protocol && (n = "https:" + n.substring(5)), n | |
}, | |
checkHttpRequest: function(e, t, n) { | |
"function" != typeof n && bouncex.video.fail(e, "VAST [validateHttpCall]: callback is not a function", !0), "string" != typeof t && bouncex.video.fail(e, "VAST [validateHttpCall]: not a valid url", !0) | |
}, | |
checkUrl: function(e) { | |
var t = document.documentMode, | |
n = document.createElement("a"); | |
return t && (n.setAttribute("href", e), e = n.href), n.setAttribute("href", e), { | |
href: n.href, | |
protocol: n.protocol ? n.protocol.replace(/:$/, "") : "", | |
hostname: n.hostname, | |
path: "/" === n.pathname.charAt(0) ? n.pathname : "/" + n.pathname | |
} | |
}, | |
checkXml: function(e) { | |
var t; | |
if ("string" == typeof e) { | |
t = bouncex.vst._xml.convertStringToXML(e) | |
} else { | |
if (null === e && null === e.responseXML && null === e.responseText) { | |
var n = e ? { | |
url: encodeURIComponent(e.responseURL) | |
} : {}; | |
return bouncex.video.log(campaignId, "vast url returned null response | " + n, "error"), !1 | |
} | |
var i = e.responseXML || e.responseText || e.response; | |
if ("string" == typeof i) try { | |
t = bouncex.vst._xml.convertStringToXML(e.responseText) | |
} catch (e) { | |
return bouncex.video.log(campaignId, "vastResponse returned null from url " + n, "error"), !1 | |
} else t = i | |
} | |
return t | |
} | |
}, | |
_loadPlayer: { | |
vastMedia: function(e, t) { | |
if (bouncex.video.canPlayMedia(e)) { | |
var n = t.src && "string" != typeof t.src ? JSON.stringify(t.src) : t.src ? t.src : ""; | |
bouncex.video.log(e, "found compatible media file (" + n + ")", "vast"), bouncex.campaigns[e].video.status.vastDataLoaded = !0, bouncex.video.configPlayer(e) | |
} | |
}, | |
vpaidMedia: function(e, t) { | |
bouncex.campaigns[e].video.status.vastDataLoaded = !0; | |
var n = document.createElement("SCRIPT"); | |
n.type = "text/javascript", n.src = t.vpaidUrl, n.onload = function() { | |
bouncex.vpd.generateVPAIDManager(e) | |
}, window.top.document.body.appendChild(n) | |
}, | |
handleVPAID: function(e, t, n, i) { | |
var o = bouncex.vst._xml.nodeParsers.getXmlNode(e, n, "AdParameters", 0); | |
t.vpaidWidth = jQuery("#bx-creative-" + e + " .bx-video-wrapper").css("width").replace(/[^0-9.]/g, ""), t.vpaidHeight = jQuery("#bx-creative-" + e + " .bx-video-wrapper").css("height").replace(/[^0-9.]/g, ""), t.vpaidUrl = "https:" === window.location.protocol && 0 === i.indexOf("http:") ? "https:" + i.substring(5) : i, t.isVPAID = !0, bouncex.campaigns[e].video.isVPAID = !0, o && (o = bouncex.vst._xml.nodeParsers.getNodeValue(o), t.vpaidAdParams = o) | |
} | |
}, | |
_helpers: { | |
isVastOrTag: function(e) { | |
return /^[\s]*<VAST/i.test(e) ? "vastxml" : "tag" | |
}, | |
toCamelCase: function(e) { | |
return e.charAt(0).toLowerCase() + e.slice(1) | |
}, | |
calculateAspectRatioData: function(e, t) { | |
var n = {}, | |
i = parseInt(e) / parseInt(t); | |
return i == 4 / 3 ? n.paddingTop = "75%" : 1.5 == i ? n.paddingTop = "66.66666666666667%" : i == 16 / 9 ? n.paddingTop = "56.25%" : 1 == i ? n.paddingTop = !1 : 1.6 == i && (n.paddingTop = "62.5%"), n.ratio = i, n | |
} | |
}, | |
_internal: { | |
groupCollapsed: function(e, t, n) { | |
var i = e ? "(" + e + ")" : ""; | |
bouncex.console.groupCollapsed("%c vast parser " + i + ": " + t, "color: " + (n ? "#FF0000" : "#09AF59")) | |
}, | |
groupEnd: function(e, t, n) { | |
var i = e ? "(" + e + ")" : ""; | |
bouncex.console.groupEnd("%c vast parser " + i + ": " + t, "color: " + (n ? "#FF0000" : "#09AF59")) | |
} | |
} | |
}, bouncex.video = { | |
init: function(e, t, n, i) { | |
bouncex.campaigns[e].video = bouncex.campaigns[e].video || {}, bouncex.video.buildEnv(e, n, i); | |
try { | |
bouncex.vst._init.buildVastEnv(e, t) | |
} catch (t) { | |
bouncex.video.fail(e, t) | |
} | |
}, | |
buildEnv: function(e, t, n) { | |
var i = bouncex.campaigns[e].video; | |
i.player = document.getElementById("bx-video-player-" + e), i.uniqueEventPixels = [], i.vast = {}, i.vpaid = {}, i.integrations = {}, i.integrations.moatApiReference = {}, i.config = {}, i.config.provider = t, i.creative = {}, i.creative.requestWidth = n.width, i.creative.requestHeight = n.height, i.status = { | |
ready: !1, | |
qOne: !1, | |
midpoint: !1, | |
qThree: !1, | |
vastDataLoaded: !1, | |
stopped: !1 | |
} | |
}, | |
canPlayMedia: function(e) { | |
var t = document.createElement("VIDEO"), | |
n = bouncex.campaigns[e].video.vast.type; | |
if ("maybe" === t.canPlayType(n) || "probably" === t.canPlayType(n)) return bouncex.video.log(e, "media file supported", "player"), !0; | |
var i = bouncex.campaigns[e].video.vast.wrapperLevel || !1; | |
bouncex.vst._internal.groupEnd(e, "vast parser exit", !1), i && !n ? bouncex.video.log(e, "no media found on wrapper level " + i, "warning") : bouncex.video.log(e, "video player does not support " + n, "error") | |
}, | |
bxPlayerPop: function(e, t) { | |
var n = bouncex.video.getPlayerSnapshot(e, bouncex.campaigns[e].video.player); | |
report(e, "pop", { | |
"pop:activation": t, | |
video_type: n.isVPAID ? "VPAID" : "VAST", | |
media_type: n.type, | |
media_size: n.dimensions.videoWidth + "x" + n.dimensions.videoHeight | |
}) | |
}, | |
onPlay: function(e) { | |
var t = bouncex.campaigns[e], | |
n = t.video.player, | |
i = t.video.config.provider, | |
o = -1 < bouncex.campaigns[e].video.config.src.indexOf("/demo/ads_demo_video.mp4"), | |
a = bouncex.video.getPlayerSnapshot(e, n); | |
bouncex.off(jQuery(n), "onplay"), t.video.videoResponseLoaded = !0, "aqbx" === i && o && bouncex.video.aqbxStyleFix(e, n); | |
try { | |
n.play() | |
} catch (t) { | |
bouncex.video.log(e, "error: " + t, "error") | |
} | |
bouncex.video.report(e, "video_play"), bouncex.video.fireTrackingEvents(e, "start"); | |
var r = this._integrations.moat.getDispatchEventParams("AdVideoStart", a.volume); | |
t.video.integrations.moatApiReference.dispatchEvent(r, e) | |
}, | |
play: function(e) { | |
var t = bouncex.campaigns[e], | |
n = bouncex.video.getPlayerSnapshot(e, t.video.player); | |
n.isVPAID && n.ready && t.video.videoResponseLoaded ? t.video.vpaid.ad.startAd() : !n.playing && n.ready && t.video.videoResponseLoaded && t.video.player.play() | |
}, | |
playVideoBeforeImpression: function(e, t) { | |
var n = bouncex.campaigns[t]; | |
this._integrations.moat.init(t, n.video.vast); | |
var i = n.video.player, | |
o = bouncex.video.getPlayerSnapshot(t, n.video.player), | |
a = this._integrations.moat.apiReference; | |
n.video.integrations.moatApiReference = bouncex.video._integrations.moat.initMoatTracking(a.container, a.ids, a.duration, a.partnerCode, a.url), o.isVPAID ? bouncex.vpd.playVPAIDBeforeImpression(e, t) : (bouncex.on(jQuery(i), "onplay", bouncex.video.onPlay(t)), bouncex.on(jQuery(i), "onerror", function(e) { | |
jQuery(i).off("onerror"), i.pause(), bouncex.campaigns[t].video.status.stopped = !0, bouncex.video.fail(t, e.message ? e.message : "error loading video response") | |
}), n.video.videoResponseLoaded && (show_ad(e, t), bouncex.video.report(t, "video_impression"), bouncex.video.fireTrackingEvents(t, "impression"))) | |
}, | |
configPlayer: function(e) { | |
var t = bouncex.campaigns[e], | |
n = t.video.config || {}, | |
i = t.video.vast, | |
o = bouncex.video.getPlayerSnapshot(e, t.video.player); | |
if (o.isVPAID || (n.src = i.src || "//" + bouncex.website.biu + "/assets/global/videos/pub/demo/ads_demo_video.mp4", n.clickThroughUrl = i.clickThrough || !1), n.aspectRatio = i.aspectRatio, n.offsetAspectRatio = i.offsetAspectRatio, o.isVPAID ? (n.width = i.vpaidWidth, n.height = i.vpaidHeight) : (n.width = i.width, n.height = i.height), bouncex.video.stylePlayer(e), !o.isVPAID) { | |
var a = document.getElementById("bx-video-player-" + e); | |
jQuery(a).attr("src", bouncex.campaigns[e].video.config.src), bouncex.video.setClickThroughUrl(e, n.clickThroughUrl), bouncex.video.addVideoEventTrackingListeners(e) | |
} | |
t.video.config = n | |
}, | |
setClickThroughUrl: function(e, t) { | |
var n = bouncex.campaigns[e].video.player; | |
"" !== t && !1 !== t && jQuery(n).attr("href", t) | |
}, | |
clickThroughHelper: function(e, t) { | |
window.open(t, "_blank").focus() | |
}, | |
toggleMute: function(e) { | |
var t = bouncex.campaigns[e].video.player; | |
jQuery(".bx-video-wrapper").toggleClass("bx-video-player-unmuted"), t.muted = !t.muted || !t.muted | |
}, | |
playPausePlayer: function(e) { | |
var t = bouncex.campaigns[e].video, | |
n = t.player; | |
n.paused || n.ended ? (n.play(), t.manuallyPaused = !1) : (n.pause(), t.manuallyPaused = !0) | |
}, | |
playPauseVisibility: function(e) { | |
var t = bouncex.campaigns[e].video, | |
n = t.player; | |
BrowserUtil.currentTab.isVisible() ? !t.manuallyPaused && (n.paused || n.ended) && n.play() : n.pause() | |
}, | |
updateProgressPlayer: function(e) { | |
var t = document.getElementById("bx-video-progress-wrapper-" + e).getElementsByClassName("bx-video-progress-time-total"), | |
n = document.getElementById("bx-video-progress-wrapper-" + e).getElementsByClassName("bx-video-progress-time-left"), | |
i = bouncex.video.getPlayerSnapshot(e, bouncex.campaigns[e].video.player), | |
o = !1 === i.time.inSeconds ? 0 : i.time.inSeconds, | |
a = _Mathfloor(i.time.durationRounded), | |
r = bouncex.video.getFormattedTime(o), | |
s = bouncex.video.getFormattedTime(a); | |
jQuery(n).text(r), jQuery(t).text(s) | |
}, | |
toMinutes: function(e) { | |
return (e / 60).toFixed(2).replace(".", ":") | |
}, | |
toSeconds: function(e) { | |
return 10 > e && (e = ("0" + e).slice(-2)), e = "0:" + e | |
}, | |
getFormattedTime: function(e) { | |
return 60 > e ? bouncex.video.toSeconds(e) : bouncex.video.toMinutes(e) | |
}, | |
canPlay: function(e) { | |
if (!bouncex.campaigns[e].video.isVPAID) { | |
var t = bouncex.campaigns[e].video.status; | |
t.ready = !0, t.canPlayEvent = !0, bouncex.video.playerReady(e), jQuery(bouncex.campaigns[e].video.player).unbind("canplay.bx-" + e) | |
} | |
}, | |
ready: function(e) { | |
var t = bouncex.campaigns[e]; | |
return t.video.status && t.video.status.ready && !t.video.videoResponseLoaded | |
}, | |
playerReady: function(e) { | |
bouncex.campaigns[e].video.status.ready ? (!bouncex.campaigns[e].video.isVPAID && bouncex.video.updateProgressPlayer(e), bouncex.gbi2._activateCampaign(e)) : bouncex.video.log(e, "player not ready", "player") | |
}, | |
getPlayerSnapshot: function(e, t) { | |
var n = bouncex.campaigns[e].video.vast, | |
i = t.duration || n.duration, | |
o = _Mathfloor(.25 * i), | |
a = _Mathfloor(2 * o), | |
r = _Mathfloor(3 * o), | |
s = bouncex.campaigns[e].video.status, | |
c = bouncex.campaigns[e].video.vast, | |
u = bouncex.campaigns[e].video.creative; | |
return { | |
ended: t.ended, | |
playing: !t.paused, | |
paused: t.paused, | |
type: t.currentType || n.type, | |
src: t.currentSrc || c.vpaidUrl, | |
clickThroughUrl: n.clickThrough, | |
muted: t.muted, | |
volume: t.volume, | |
ready: s.ready || !1, | |
playbackRate: t.playbackRate, | |
seeking: t.seeking, | |
isVPAID: bouncex.campaigns[e].video.vast.isVPAID, | |
vastDataLoaded: s.vastDataLoaded, | |
dimensions: { | |
offsetWidth: t.offsetWidth, | |
offsetHeight: t.offsetHeight, | |
videoWidth: t.videoWidth || n.vpaidWidth, | |
videoHeight: t.videoHeight || n.vpaidHeight, | |
requestWidth: u.requestWidth, | |
requestHeight: u.requestHeight | |
}, | |
time: { | |
duration: i, | |
durationRounded: _Mathfloor(i), | |
currentUnformatted: t.currentTime || !1, | |
inSeconds: parseInt(t.currentTime % 60) || !1, | |
firstQuartile: { | |
value: o, | |
passed: s.qOne || !1 | |
}, | |
midpoint: { | |
value: a, | |
passed: s.midpoint || !1 | |
}, | |
thirdQuartile: { | |
value: r, | |
passed: s.qThree || !1 | |
} | |
} | |
} | |
}, | |
stylePlayer: function(e) { | |
var t = bouncex.campaigns[e].video.creative; | |
t.dynamicHeight = bouncex.campaigns[e].obj1.find(".bx-creative-" + e + " .bx-row-video").width(), t.dynamicWidth = bouncex.campaigns[e].obj1.find(".bx-creative-" + e + " .bx-row-video").height(), jQuery(".bxc.bx-campaign-" + e).addClass("bx-width-full-content"), jQuery("body").on("focus", "#bx-video-btns-" + e + " .bx-video-btn", function() { | |
jQuery("#bx-video-wrapper-" + e).addClass("bx-video-wrapper-has-focus") | |
}).on("blur", "#bx-video-btns-" + e + " .bx-video-btn", function() { | |
jQuery(".bx-video-wrapper-" + e).removeClass("bx-video-wrapper-has-focus") | |
}), bouncex.campaigns[e].video.vast.isVPAID || bouncex.video.adjustAspectRatio(e) | |
}, | |
adjustAspectRatio: function(e) { | |
var t = bouncex.campaigns[e].video, | |
n = t.vast.aspectRatio.paddingTop, | |
i = t.vast.aspectRatio.ratio, | |
o = t.creative.dynamicWidth, | |
a = t.creative.dynamicHeight, | |
r = -1 < t.config.src.indexOf("/demo/ads_demo_video.mp4") && "aqbx" === bouncex.campaigns[e].video.config.provider, | |
s = "300" === t.config.height && "400" === t.config.width && "75%" === n; | |
!n || i === o / a || r || s || (jQuery("#bx-video-wrapper-" + e).addClass("bx-video-aspectRatio-fix-" + e), jQuery(".bx-video-aspectRatio-fix-" + e).css("padding-top", n)) | |
}, | |
aqbxStyleFix: function(e, t) { | |
var n = jQuery(t)[0].videoHeight, | |
i = jQuery(t)[0].videoWidth, | |
o = (+jQuery(".bx-creative-" + e + " .bx-row-video").css("width").split("px")[0] / (i / n)).toString() + "px"; | |
jQuery(".bx-creative-" + e + " .bx-video-wrapper").css("height", o) | |
}, | |
detectVideoProgress: function(e, t, n, i) { | |
var o, a = bouncex.campaigns[e].video.status, | |
r = bouncex.video.getPlayerSnapshot(e, bouncex.campaigns[e].video.player), | |
s = r.time.inSeconds; | |
t !== s || r.time.firstQuartile.passed ? n !== s || r.time.midpoint.passed ? i === s && !r.time.thirdQuartile.passed && (o = this._integrations.moat.getDispatchEventParams("AdVideoThirdQuartile", r.volume), bouncex.video.report(e, "video_play_third_quartile"), bouncex.video.fireTrackingEvents(e, "thirdQuartile"), a.qThree = !0) : (o = this._integrations.moat.getDispatchEventParams("AdVideoMidpoint", r.volume), bouncex.video.report(e, "video_play_midpoint"), bouncex.video.fireTrackingEvents(e, "midpoint"), a.midpoint = !0) : (o = this._integrations.moat.getDispatchEventParams("AdVideoFirstQuartile", r.volume), bouncex.video.report(e, "video_play_first_quartile"), bouncex.video.fireTrackingEvents(e, "firstQuartile"), a.qOne = !0), o && bouncex.campaigns[e].video.integrations.moatApiReference.dispatchEvent(o, e) | |
}, | |
addVideoEventTrackingListeners: function(e) { | |
var t = document.getElementById("bx-video-player-" + e); | |
bouncex.campaigns[e].video.player = t, bxBind(t, " volumechange.bx-" + e + " canplay.bx-" + e + " durationchange.bx-" + e + " ended.bx-" + e + " pause.bx-" + e + " play.bx-" + e + " playing.bx-" + e + " timeupdate.bx-" + e + " loadeddata.bx-" + e + " error.bx-" + e + " click.bx-" + e + " canplaythrough.bx-" + e + " touchend.bx-" + e + " onplay.bx-" + e + " loadedmetadata.bx-" + e, function(n) { | |
bouncex.video.handleVideoEvents(e, t, n) | |
}), this.handleVideoClose(e) | |
}, | |
handleVideoEvents: function(t, n, i) { | |
var o = i.type, | |
a = bouncex.campaigns[t].video.status, | |
r = bouncex.video.getPlayerSnapshot(t, n); | |
if ("canplaythrough" !== o || a.canPlayEvent) | |
if ("loadedmetadata" === o && bouncex.browser.ios) n.setAttribute("playsinline", ""), bouncex.video.canPlay(t); | |
else if ("loadeddata" === o) bouncex.video.report(t, "video_load"); | |
else if ("canplay" === o) bouncex.video.canPlay(t); | |
else if ("play" === o) this.handlePlayEvent(t, r); | |
else if ("volumechange" === o) this.handleVolumechangeEvent(t, r, n); | |
else if ("timeupdate" !== o || r.isVPAID) | |
if ("pause" !== o || bouncex.campaigns[t].video.status.stopped || bouncex.campaigns[t].video.player.ended) | |
if ("ended" === o) this.handleEndEvent(t, r); | |
else if ("error" === o) { | |
var s = e.data && e.data.message ? e.data.message : "an error has occurred, campaign failed"; | |
bouncex.video.fail(t, s) | |
} else("click" === o || "touchend" === o) && this.handleClickEvent(t, r); | |
else this.handlePauseEvent(t, r); | |
else this.handleTimeUpdateEvent(t, r); | |
else bouncex.video.canPlay(t) | |
}, | |
handleVideoClose: function(e) { | |
var t = document.getElementById("bx-video-player-" + e), | |
n = document.getElementById("bx-creative-" + e).getElementsByClassName("bx-close-link"); | |
bouncex.campaigns[e].video.player = t, jQuery(n).on("click.bx-" + e, function() { | |
var n = bouncex.video.getPlayerSnapshot(e, t), | |
i = bouncex.video._integrations.moat.getDispatchEventParams("AdStopped", n.volume); | |
!1 === bouncex.campaigns[e].video.vast.isVPAID && (bouncex.campaigns[e].video.status.stopped = !0, t.pause()), t.ended = !0, bouncex.campaigns[e].video.integrations.moatApiReference.dispatchEvent(i, e) | |
}) | |
}, | |
handlePlayEvent: function(e, t) { | |
var n = this._integrations.moat.getDispatchEventParams("AdPlaying", t.volume); | |
jQuery(".bx-creative-" + e + " .bx-video-wrapper").toggleClass("bx-video-player-paused"), bouncex.campaigns[e].video.integrations.moatApiReference.dispatchEvent(n, e) | |
}, | |
handleVolumechangeEvent: function(e, t, n) { | |
var i = this._integrations.moat.getDispatchEventParams("AdVolumeChange", t.volume); | |
n.muted && bouncex.video.fireTrackingEvents(e, "mute"), bouncex.campaigns[e].video.integrations.moatApiReference.dispatchEvent(i, e) | |
}, | |
handleTimeUpdateEvent: function(e, t) { | |
bouncex.video.updateProgressPlayer(e), bouncex.video.detectVideoProgress(e, t.time.firstQuartile.value, t.time.midpoint.value, t.time.thirdQuartile.value) | |
}, | |
handlePauseEvent: function(e, t) { | |
var n = bouncex.video._integrations.moat.getDispatchEventParams("AdPaused", t.volume); | |
jQuery(".bx-creative-" + e + " .bx-video-wrapper").toggleClass("bx-video-player-paused"), bouncex.video.report(e, "video_pause"), bouncex.campaigns[e].video.integrations.moatApiReference.dispatchEvent(n, e) | |
}, | |
handleClickEvent: function(e, t) { | |
t.clickThroughUrl && bouncex.video.clickThroughHelper(e, t.clickThroughUrl), bouncex.video.fireTrackingEvents(e, "click") | |
}, | |
handleEndEvent: function(e, t) { | |
var n = this._integrations.moat.getDispatchEventParams("AdVideoComplete", t.volume); | |
bouncex.video.report(e, "video_play_complete"), bouncex.video.fireTrackingEvents(e, "complete"), bouncex.campaigns[e].video.integrations.moatApiReference.dispatchEvent(n, e), bouncex.off(bouncex.window, " volumechange.bx-" + e + " canplay.bx-" + e + " durationchange.bx-" + e + " ended.bx-" + e + " pause.bx-" + e + " play.bx-" + e + " playing.bx-" + e + " timeupdate.bx-" + e + " loadeddata.bx-" + e + " error.bx-" + e + " click.bx-" + e + " canplaythrough.bx-" + e + "touchend.bx-" + e + "onplay.bx-" + e) | |
}, | |
getEventUrls: function(e, t) { | |
var n; | |
return (n = bouncex.campaigns[e].video.vast.vpaidUrl ? bouncex.campaigns[e].video.vpaid.vastConfig.tracking[t] : bouncex.campaigns[e].video.vast.tracking[t]) && 0 !== n.length && ("string" == typeof n && (n = [n]), n) | |
}, | |
fireTrackingEvents: function(e, t) { | |
var n = !1, | |
i = bouncex.campaigns[e].video.uniqueEventPixels || [], | |
o = this.getEventUrls(e, t); | |
if (o) | |
for (var a, r = 0; r < o.length; r++) | |
if (!(null == (a = o[r]) || 1 > a.length || -1 === a.indexOf("http"))) { | |
if (i.includes(a)) { | |
n = !0; | |
continue | |
} | |
i.push(a), bouncex.video.log(e, n ? "already fired event pixel for " + t : "firing event pixel " + a + " for " + t, "eventpixel"), document.createElement("img").src = a | |
} | |
}, | |
_integrations: { | |
moat: { | |
apiReference: {}, | |
init: function(e, t) { | |
bouncex.video.log(e, "init moat integration", "moat"), bouncex.video._integrations.moat.apiReference = this.getMoatApiReference(e, t) | |
}, | |
initMoatTracking: function(e, t, n, i, o) { | |
var a, r, s = document.createElement("script"), | |
c = []; | |
t = { | |
adData: { | |
ids: t, | |
duration: n, | |
url: o | |
}, | |
dispatchEvent: function(e, t) { | |
t && bouncex.video.log(t, e.type, "moat"), this.sendEvent ? (c && (c.push(e), e = c, c = !1), this.sendEvent(e)) : c.push(e) | |
} | |
}, n = "_moatApi" + _Mathfloor(1e8 * Math.random()); | |
try { | |
r = (a = e.ownerDocument).defaultView || a.parentWindow | |
} catch (e) { | |
a = document, r = window | |
} | |
return r[n] = t, s.type = "text/javascript", e && e.insertBefore(s, e.childNodes[0] || null), s.src = "https://z.moatads.com/" + i + "/moatvideo.js#" + n, t | |
}, | |
getMoatApiReference: function(e, t) { | |
var n = bouncex.campaigns[e]; | |
return { | |
partnerCode: "bouncexjsvideo854426616072", | |
container: bouncex.campaigns[e].video.player, | |
url: t.src, | |
duration: t.duration, | |
ids: { | |
level1: window.location.host + "(" + bouncex.website.id + ")", | |
level2: bouncex.gbi2.getDeploymentType(e), | |
level3: t.isVPAID ? "VPAID" : "VAST", | |
level4: "video", | |
slicer1: bouncex.state.mobile ? "mobile" : "desktop", | |
slicer2: n.trigger | |
} | |
} | |
}, | |
getDispatchEventParams: function(e, t) { | |
return { | |
type: e, | |
adVolume: t | |
} | |
} | |
} | |
}, | |
report: function(e, t, n) { | |
bouncex.video.log(e, 'reporting event "' + t + '"', "player"); | |
var i = bouncex.video.getPlayerSnapshot(e, bouncex.campaigns[e].video.player); | |
(n = n || {}).source = "ads", n.agent = "js", n.video_type = i.isVPAID ? "VPAID" : "VAST", n.media_type = i.type, n.media_size = i.dimensions.videoWidth + "x" + i.dimensions.videoHeight, n.video_length = i.time.duration, "video_pause" === t && (n.pause_location = i.time.currentUnformatted), buildReport(e, t, n) | |
}, | |
log: function(e, t, n) { | |
var i, o = e ? "[" + e + "]" : "", | |
a = "(" + (bouncex.campaigns[e] ? bouncex.campaigns[e].video.config.provider || "no provider" : "stack") + ")", | |
r = "error" === n ? "#FF0000" : "#00F"; | |
switch (_records2.default.addRecord({ | |
group: "video", | |
campaignId: e, | |
message: t, | |
isError: r | |
}), n) { | |
case "vast": | |
i = "#09AF59"; | |
break; | |
case "vpaid": | |
i = "#226666"; | |
break; | |
case "player": | |
i = "#8E29D4"; | |
break; | |
case "moat": | |
i = "#A13647"; | |
break; | |
case "error": | |
i = "#FF0000", bouncex.video.report(e, "video_error", t); | |
break; | |
case "warning": | |
i = "#F67917"; | |
break; | |
case "eventpixel": | |
i = "#956843"; | |
break; | |
default: | |
i = "#8E29D4" | |
} | |
"vast" === n ? bouncex.log("%c [vast]: " + t, "color: " + i) : bouncex.log("%c video [" + n + "] " + o + a + ": " + t, "color: " + i) | |
}, | |
fail: function(e, t) { | |
bouncex.campaigns[e].failed = !0, bouncex.video.log(e, t, "error") | |
} | |
}, bouncex.vpd = { | |
generateVPAIDManager: function(e) { | |
bouncex.video.configPlayer(e), bouncex.campaigns[e].video.vpaid = bouncex.campaigns[e].vpaid || {}, bouncex.vpd.campaignId = e; | |
try { | |
bouncex.video.log(e, "getVPAIDAd() called", "vpaid"), bouncex.campaigns[e].video.vpaid.ad = getVPAIDAd(), this._versionCheck(e) | |
} catch (t) { | |
bouncex.campaigns[e].video.vpaid.ad = document.getVPAIDAd() | |
} | |
this._init(e) | |
}, | |
_versionCheck: function(e) { | |
var t = bouncex.campaigns[e].video.vpaid.ad.handshakeVersion("2.0"); | |
if (t && "2.0" !== t) return bouncex.video.log(e, "generateVPAIDManager -> Ad VPAID version (" + t + ") is not supported", "error"), !1 | |
}, | |
_buildVpaidEnv: function(e, t, n, i) { | |
bouncex.video.log(e, "building VPAID environment", "vpaid"); | |
var o = t; | |
return o.ad = bouncex.campaigns[e].video.vpaid.ad, o.vastConfig = bouncex.campaigns[e].video.vast, o.config = {}, o.callbacks = { | |
AdClickThru: this.onAdClickThru, | |
AdDurationChange: this.onAdDurationChange, | |
AdError: this.onAdError, | |
AdImpression: this.onAdImpression, | |
AdLoaded: this.onAdLoaded, | |
AdPaused: this.onAdPaused, | |
AdPlaying: this.onAdPlaying, | |
AdSizeChange: this.onAdSizeChange, | |
AdSkippableStateChange: this.onAdSkippableStateChange, | |
AdSkipped: this.onAdSkipped, | |
AdStarted: this.onAdStarted, | |
AdStopped: this.onAdStopped, | |
AdUserAcceptInvitation: this.onAdUserAcceptInvitation, | |
AdUserClose: this.onAdUserClose, | |
AdUserMinimize: this.onAdUserMinimize, | |
AdVideoComplete: this.onAdVideoComplete, | |
AdVideoFirstQuartile: this.onAdVideoFirstQuartile, | |
AdVideoMidpoint: this.onAdVideoMidpoint, | |
AdVideoStart: this.onAdVideoStart, | |
AdVideoThirdQuartile: this.onAdVideoThirdQuartile, | |
AdVolumeChange: this.onAdVolumeChange | |
}, o.adUnit = { | |
lastVolume: "" | |
}, o.config.creativeData = {}, o.config.environmentVars = {}, o.config.viewMode = "normal", o.config.desiredBitrate = -1, o.config.environmentVars.slot = i, o.config.environmentVars.videoSlot = n, o.config.environmentVars.autoPlay = !1, o.config.environmentVars.videoSlotCanAutoPlay = !0, o | |
}, | |
_init: function(e) { | |
bouncex.video.log(e, "init VPAID", "vpaid"); | |
var t = bouncex.document[0].getElementById("bx-video-player-" + e), | |
n = bouncex.document[0].getElementById("bx-video-wrapper-" + e), | |
i = this._buildVpaidEnv(e, bouncex.campaigns[e].video.vpaid, t, n), | |
o = i.ad; | |
for (var a in n.removeChild(n.childNodes[3]), i.callbacks) o.subscribe(i.callbacks[a], a); | |
i.vastConfig.vpaidAdParams && (i.config.creativeData = { | |
AdParameters: i.vastConfig.vpaidAdParams | |
}), bouncex.vpd._validateVPAID(o) || bouncex.video.log(e, "_validateVPAID Error: VPAID interface check failed", "error"), bouncex.vpd._adjustCreativeForVpaid(e), o.initAd(i.vastConfig.vpaidWidth, i.vastConfig.vpaidHeight, i.config.viewMode, i.config.desiredBitrate, i.config.creativeData, i.config.environmentVars) | |
}, | |
_validateVPAID: function(e) { | |
return !!(e.handshakeVersion && "function" == typeof e.handshakeVersion && e.initAd && "function" == typeof e.initAd && e.startAd && "function" == typeof e.startAd && e.stopAd && "function" == typeof e.stopAd && e.skipAd && "function" == typeof e.skipAd && e.resizeAd && "function" == typeof e.resizeAd && e.pauseAd && "function" == typeof e.pauseAd && e.resumeAd && "function" == typeof e.resumeAd && e.expandAd && "function" == typeof e.expandAd && e.collapseAd && "function" == typeof e.collapseAd && e.subscribe && "function" == typeof e.subscribe && e.unsubscribe && "function" == typeof e.unsubscribe) | |
}, | |
_adjustCreativeForVpaid: function(e) { | |
var t = bouncex.campaigns[e].video.vast, | |
n = 2 * jQuery("#bx-creative-" + e + " .bx-wrap").css("padding-left").replace(/[^0-9]/g, ""); | |
jQuery("#bx-creative-" + e).css("max-width", parseInt(t.vpaidWidth) + n + "px") | |
}, | |
_fireVpaidTrackingEvents: function(e, t) { | |
var n = bouncex.campaigns[bouncex.vpd.campaignId].video.uniqueEventPixels || [], | |
i = bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.ad, | |
o = !1; | |
if (null != t && 0 != t.length && !bouncex.video.disableTrackingEvents) { | |
"string" == typeof t && (t = [t]); | |
for (var a, r = 0; r < t.length; r++) | |
if (!(null === (a = t[r]) || 1 > a.length || -1 === a.indexOf("http"))) { | |
if (n.includes(a)) { | |
o = !0; | |
continue | |
} | |
n.push(a), ("true" === i.allowCacheBusting || !0 === i.allowCacheBusting) && (-1 < a.indexOf("?") ? a += "&rnd=" + Math.random() : a += "?rnd=" + Math.random()), bouncex.video.log(bouncex.vpd.campaignId, o ? "already fired event pixel for " + e : "firing event pixel " + a + " for " + e, "eventpixel"), document.createElement("img").src = a | |
} | |
} | |
}, | |
playVPAIDBeforeImpression: function(e, t) { | |
var n = bouncex.campaigns[t].video; | |
n.videoResponseLoaded = !0, n.triggerType = e, n.vpaid.ad.startAd() | |
}, | |
_adLoaded: function(e) { | |
bouncex.video.report(e, "video_load"), bouncex.campaigns[e].video.status.ready = !0, bouncex.video.playerReady(e) | |
}, | |
_adStarted: function(e) { | |
bouncex.campaigns[e].video.videoResponseLoaded && show_ad(bouncex.campaigns[e].video.triggerType, e) | |
}, | |
_currentAdVolume: function() { | |
return bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.ad.getAdVolume() | |
}, | |
onAdLoaded: function() { | |
var e = bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid; | |
bouncex.vpd._adLoaded(bouncex.vpd.campaignId, e), bouncex.vpd._fireVpaidTrackingEvents("AdLoaded", e.vastConfig.tracking.loaded), e.ad.unsubscribe(e.callbacks.onAdLoaded, "AdLoaded") | |
}, | |
onAdStarted: function() { | |
var e = bouncex.vpd._currentAdVolume(); | |
bouncex.vpd._fireVpaidTrackingEvents("AdStarted", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.creativeView), bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.adUnit.lastVolume = e, bouncex.vpd._adStarted(bouncex.vpd.campaignId) | |
}, | |
onAdUserClose: function() { | |
bouncex.vpd._fireVpaidTrackingEvents("AdUserClose", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.close) | |
}, | |
onAdUserMinimize: function() { | |
bouncex.vpd._fireVpaidTrackingEvents("AdUserMinimize", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.collapse) | |
}, | |
onAdUserAcceptInvitation: function() { | |
bouncex.vpd._fireVpaidTrackingEvents("AdUserAcceptInvitation", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.acceptInvitation) | |
}, | |
onAdSkippableStateChange: function() { | |
bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.ad.getAdSkippableState() | |
}, | |
onAdStopped: function() { | |
var e = bouncex.vpd._currentAdVolume(); | |
bouncex.campaigns[bouncex.vpd.campaignId].video.status.stopped = !0, bouncex.close_ad(bouncex.vpd.campaignId), bouncex.vpd._moatDispatch("AdStopped", e) | |
}, | |
onAdPaused: function() { | |
var e = bouncex.vpd._currentAdVolume(); | |
bouncex.video.manuallyPaused = !0, bouncex.vpd._fireVpaidTrackingEvents("AdPaused", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.pause), bouncex.video.report(bouncex.vpd.campaignId, "video_pause"), bouncex.vpd._moatDispatch("AdPaused", e) | |
}, | |
onAdPlaying: function() { | |
var e = bouncex.vpd._currentAdVolume(); | |
bouncex.video.manuallyPaused = !1, bouncex.vpd._fireVpaidTrackingEvents("AdPlaying", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.resume), bouncex.vpd._moatDispatch("AdPlaying", e) | |
}, | |
onAdVolumeChange: function() { | |
var e = bouncex.vpd._currentAdVolume(), | |
t = bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.adUnit.lastVolume; | |
0 === e && 0 < t ? bouncex.vpd._fireVpaidTrackingEvents("AdVolumeChange", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.mute, "volumechange") : 0 < e && 0 === t && bouncex.vpd._fireVpaidTrackingEvents("AdVolumeChange", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.unmute, "volumechange"), bouncex.vpd._moatDispatch("AdVolumeChange", e), bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.adUnit.lastVolume = e | |
}, | |
onAdImpression: function() { | |
bouncex.vpd._fireVpaidTrackingEvents("AdImpression", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.impression), bouncex.video.report(bouncex.vpd.campaignId, "video_impression") | |
}, | |
onAdVideoStart: function() { | |
var e = bouncex.vpd._currentAdVolume(); | |
bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.adUnit.started = !0, bouncex.vpd._fireVpaidTrackingEvents("AdVideoStart", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.start), bouncex.video.report(bouncex.vpd.campaignId, "video_play"), bouncex.vpd._moatDispatch("AdVideoStart", e) | |
}, | |
onAdSkipped: function() { | |
bouncex.vpd._fireVpaidTrackingEvents("AdSkipped", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.skip), bouncex.close_ad(bouncex.vpd.campaignId) | |
}, | |
onAdVideoFirstQuartile: function() { | |
var e = bouncex.vpd._currentAdVolume(); | |
bouncex.vpd._fireVpaidTrackingEvents("AdVideoFirstQuartile", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.firstQuartile), bouncex.campaigns[bouncex.vpd.campaignId].video.status.qOne = !0, bouncex.vpd._moatDispatch("AdVideoFirstQuartile", e), bouncex.video.report(bouncex.vpd.campaignId, "video_play_first_quartile") | |
}, | |
onAdVideoMidpoint: function() { | |
var e = bouncex.vpd._currentAdVolume(); | |
bouncex.vpd._fireVpaidTrackingEvents("AdVideoMidpoint", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.midpoint), bouncex.campaigns[bouncex.vpd.campaignId].video.status.midpoint = !0, bouncex.vpd._moatDispatch("AdVideoMidpoint", e), bouncex.video.report(bouncex.vpd.campaignId, "video_play_midpoint") | |
}, | |
onAdVideoThirdQuartile: function() { | |
var e = bouncex.vpd._currentAdVolume(); | |
bouncex.vpd._fireVpaidTrackingEvents("AdVideoThirdQuartile", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.thirdQuartile), bouncex.campaigns[bouncex.vpd.campaignId].video.status.qThree = !0, bouncex.vpd._moatDispatch("AdVideoThirdQuartile", e), bouncex.video.report(bouncex.vpd.campaignId, "video_play_third_quartile") | |
}, | |
onAdClickThru: function(e, t, n) { | |
bouncex.campaigns[bouncex.vpd.campaignId].video.vast.clickThrough = e, void 0 !== n && 1 == n && (e ? window.open(e) : bouncex.campaigns[bouncex.vpd.campaignId].video.vast.clickThrough && window.open(bouncex.campaigns[bouncex.vpd.campaignId].video.vast.clickThrough)), bouncex.vpd._fireVpaidTrackingEvents("AdClickThru", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.clickTracking) | |
}, | |
onAdDurationChange: function() { | |
bouncex.vpd._fireVpaidTrackingEvents("AdDurationChange", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.durationchange) | |
}, | |
onAdSizeChange: function() { | |
(document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || document.fullscreenElement) && bouncex.vpd._fireVpaidTrackingEvents("AdSizeChange", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.fullscreen) | |
}, | |
onAdVideoComplete: function() { | |
bouncex.vpd._fireVpaidTrackingEvents("AdVideoComplete", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.complete), bouncex.video.report(bouncex.vpd.campaignId, "video_play_complete"), bouncex.vpd._moatDispatch("AdVideoComplete", bouncex.vpd._currentAdVolume()) | |
}, | |
onAdError: function() { | |
bouncex.vpd._fireVpaidTrackingEvents("AdError", bouncex.campaigns[bouncex.vpd.campaignId].video.vpaid.vastConfig.tracking.error), bouncex.video.report(bouncex.vpd.campaignId, "video_error") | |
}, | |
_moatDispatch: function(e, t) { | |
bouncex.campaigns[bouncex.vpd.campaignId].video.integrations.moatApiReference.dispatchEvent({ | |
type: e, | |
adVolume: t | |
}, bouncex.vpd.campaignId) | |
} | |
}; | |
var ComplianceChecks = { | |
init: function() { | |
this.onFailure = bouncex.destroyAll, this.onSuccess = InitSequence.init1.serviceReady.bind(InitSequence.init1, "compliance check"), this._checkComplianceIntegrations() | |
}, | |
_checkComplianceIntegrations: function() { | |
for (var e in this._finished = !1, this._integrations) | |
if (this._integrations.hasOwnProperty(e)) { | |
var t = this._integrations[e]; | |
this._setIntegrationActions(t.name), this._initIntegration(t) | |
} | |
}, | |
_hasFailingIntegration: function() { | |
for (var e in this._integrations) | |
if (this._integrations.hasOwnProperty(e)) { | |
if (!this._integrations[e].passed) return !0 | |
} | |
return !1 | |
}, | |
_initIntegration: function(e) { | |
delete e.passed, e.init() | |
}, | |
_integrationPassed: function() { | |
this._finished || this._hasFailingIntegration() || (this.compliancePassed = !0, this._finished = !0, this.onSuccess()) | |
}, | |
_integrationFailed: function(e) { | |
this.compliancePassed = !1, this._finished = !0, this.onFailure(e) | |
}, | |
_setIntegrationActions: function(e) { | |
var t = this._integrations[e]; | |
for (var n in this._integrationActions) t[n] = this._integrationActions[n].bind(this, t) | |
}, | |
_integrationActions: { | |
log: function(e, t) { | |
this._log(e.name, t) | |
}, | |
failsCheckInEU: function(e, t) { | |
return bouncex.state && bouncex.state.gdpr ? e.failsCheck(t) : (bouncex.complianceFlag = bouncex.complianceFlag || "gdpr_no_consent", void e.passesCheck(t)) | |
}, | |
passesCheck: function(e, t) { | |
e.passed = !0, this._log(e.name, t, !1), this._integrationPassed() | |
}, | |
failsCheck: function(e, t) { | |
bouncex.complianceFlag = "no_consent", e.passed = !1, this._log(e.name, t, !0), this._integrationFailed(e.name) | |
} | |
}, | |
_integrations: { | |
iab_cmp: { | |
name: "iab_cmp", | |
bxVendorId: 256, | |
bxPurposeIds: [1], | |
init: function() { | |
return "function" == typeof window.__cmp ? (this.pingTimeout = setTimeout2(function() { | |
this.failsCheckInEU("ping timed out") | |
}.bind(this), 200), this.getVendorConsents(), void this.pingCMP()) : this.passesCheck("no __cmp") | |
}, | |
pingCMP: function() { | |
window.__cmp("ping", null, tryCatch(function(e, t) { | |
if (clearTimeout(this.pingTimeout), !this.getVendorConsentsCalled) return e && e.cmpLoaded ? void 0 : t ? (this.firstTime = this.firstTime || getTimeMs(), this.currentTime = getTimeMs(), 2e3 <= this.currentTime - this.firstTime ? this.passesCheck("cmp not loaded in time") : void setTimeout2(this.pingCMP.bind(this), 200)) : this.failsCheckInEU("ping success false") | |
}.bind(this))) | |
}, | |
getVendorConsents: function() { | |
window.__cmp("getVendorConsents", [this.bxVendorId], tryCatch(function(e, t) { | |
if (clearTimeout(this.pingTimeout), this.getVendorConsentsCalled = !0, !t) return this.failsCheckInEU("success false"); | |
if (!0 === e.gdprApplies || "true" === e.gdprApplies) { | |
if (!this.consentPasses(e.vendorConsents[this.bxVendorId])) return; | |
for (var n, i = 0; i < this.bxPurposeIds.length; i++) | |
if (n = this.bxPurposeIds[i], !this.consentPasses(e.purposeConsents[n])) return | |
} | |
this.passesCheck("checks passed") | |
}.bind(this))) | |
}, | |
consentPasses: function(e) { | |
return !(!0 !== e && (!1 === e ? this.failsCheck("fails consent") : this.failsCheckInEU("unexpected response"), 1)) | |
} | |
} | |
}, | |
_log: function(e, t, n) { | |
var i = { | |
group: "compliance", | |
message: e + "-" + t | |
}; | |
n ? _logger2.default.error(i) : _logger2.default.info(i) | |
} | |
}, | |
CouponCodes = { | |
insertCodesInCurrentStep: function(e) { | |
var t = { | |
campaignId: e, | |
getPlaceholders: this._step.getPlaceholders, | |
populateCoupon: this._step.populatePlaceholderWithCode, | |
insertLoadingMsg: this._step.insertLoadingMsg | |
}; | |
this.log(t, "init visible coupons"), this._loadCoupons(t) | |
}, | |
insertCodesInFormAndSubmit: function(e, t) { | |
var n = { | |
campaignId: e, | |
getPlaceholders: this._form.getPlaceholders, | |
populateCoupon: this._form.populatePlaceholderWithCode, | |
callback: t | |
}; | |
this.log(n, "init hidden coupons"), this._loadCoupons(n) | |
}, | |
_step: { | |
getPlaceholders: function(e) { | |
var t = bouncex.campaigns[e.campaignId], | |
n = ".bx-step-" + t.current_step + ' .bx-cpn-not-loaded[data-cpn-set]:not([data-cpn-set=""])'; | |
return Array.prototype.slice.call(t.obj1[0].querySelectorAll(n)).map(function(e, i) { | |
return { | |
campaign: e, | |
clone: t.obj2[1] ? t.obj2[1].querySelectorAll(n)[i] : null | |
} | |
}) | |
}, | |
populatePlaceholderWithCode: function(e) { | |
[e.placeholder, e.clone].map(function(t) { | |
t && (t.innerText = e.code ? e.code : e.errorMsg, t.classList.remove("bx-cpn-not-loaded")) | |
}), CouponCodes._checkIsFinished(e) | |
}, | |
insertLoadingMsg: function(e) { | |
[e.placeholder, e.clone].map(function(e) { | |
e && (e.innerText = "loading...") | |
}) | |
} | |
}, | |
_form: { | |
getPlaceholders: function(e) { | |
var t = bouncex.campaigns[e.campaignId]; | |
return Array.prototype.slice.call(t.jform[0].querySelectorAll('[value="bx-cpn-not-loaded"][data-cpn-set]:not([data-cpn-set=""])')).map(function(e) { | |
return { | |
campaign: e | |
} | |
}) | |
}, | |
populatePlaceholderWithCode: function(e) { | |
e.placeholder.value = e.code || "false", CouponCodes._checkIsFinished(e) | |
} | |
}, | |
_loadCoupons: function(e) { | |
var t = e.getPlaceholders(e); | |
return 0 === t.length ? (this.log(e, "no coupons found"), this._finishedLoading(e)) : void t.forEach(function(t) { | |
var n = { | |
campaignId: e.campaignId, | |
populateCoupon: e.populateCoupon, | |
getPlaceholders: e.getPlaceholders, | |
callback: e.callback, | |
setName: t.campaign.getAttribute("data-cpn-set"), | |
placeholder: t.campaign, | |
clone: t.clone, | |
insertLoadingMsg: e.insertLoadingMsg | |
}; | |
this._loadCoupon(n) | |
}.bind(this)) | |
}, | |
_finishedLoading: function(e) { | |
this.log(e, "finished"), "function" == typeof e.callback && e.callback() | |
}, | |
_loadCoupon: function(e) { | |
var t = this._getCouponStatus(e.setName); | |
return this.log(e, "coupon status: " + t), "cookied" === t ? (e.code = this._getCookiedCode(e.setName), this._populateCoupon(e)) : "untracked" === t ? this._requestCoupon(e) : "requesting" === t ? setTimeout2(this._loadCoupon.bind(this, e), 200) : bouncex.err("unexpected coupon status", { | |
source: "coupon code" | |
}) | |
}, | |
_requestCoupon: function(e) { | |
this.log(e, "requesting coupon"); | |
var t = { | |
type: "GET", | |
url: "https://" + bouncex.website.bau + "/bounce/fetch_coupon", | |
data: { | |
setName: e.setName, | |
websiteId: bouncex.website.id, | |
visitId: bouncex.cookie.vid, | |
deviceId: bouncex.cookie.did, | |
campaignId: e.campaignId, | |
requestToken: bouncex.state.request_token | |
}, | |
success: this._onSuccessHandler.bind(this, e), | |
error: this._onErrorHandler.bind(this, e) | |
}; | |
this._pendingCoupons[e.setName] = !0, "function" == typeof e.insertLoadingMsg && e.insertLoadingMsg(e), jQuery.ajax(t) | |
}, | |
_onSuccessHandler: function(e, t) { | |
return t && t.error ? this._onErrorHandler(e, null, t.error) : t && t.code ? (e.code = t.code, this._completeRequest(e, "successful"), void this.report({ | |
campaignId: e.campaignId, | |
couponId: t.id, | |
couponCode: t.code | |
})) : this._onErrorHandler(e, null, "unexpected response") | |
}, | |
_onErrorHandler: function(e, t, n) { | |
var i = this._getDefaultCode(e.placeholder); | |
i ? e.code = i : e.errorMsg = this._getErrorMsg(n); | |
var o = []; | |
t && "number" == typeof t.status && o.push("xhr status " + t.status), n && o.push(n); | |
var a = "failed: " + o.join(","); | |
bouncex.err({ | |
name: "coupon error", | |
message: a | |
}, { | |
liveTraffic: 100, | |
campaignId: e.campaignId | |
}), this._completeRequest(e, a) | |
}, | |
_getErrorMsg: function(e) { | |
return "no coupon found" === e ? "COUPON ERROR 0" : "COUPON ERROR 1" | |
}, | |
_completeRequest: function(e, t) { | |
this.log(e, "request status: " + t), e.code && this._cookieCoupon(e.setName, e.code), this._populateCoupon(e), delete this._pendingCoupons[e.setName] | |
}, | |
_cookieCoupon: function(e, t) { | |
bouncex.cookie.cpn = bouncex.utils.isObject(bouncex.cookie.cpn) ? bouncex.cookie.cpn : {}, bouncex.cookie.cpn[e] = t, setBounceCookie() | |
}, | |
_populateCoupon: function(e) { | |
this.log(e, "populating code: " + e.code), this._triggerCouponFetchedEvent(e), e.populateCoupon(e) | |
}, | |
_triggerCouponFetchedEvent: function(e) { | |
bouncex.window && bouncex.window.trigger("bxCouponFetched", [{ | |
setName: e.setName, | |
code: e.code, | |
campaignId: e.campaignId | |
}]) | |
}, | |
_pendingCoupons: {}, | |
_getCouponStatus: function(e) { | |
return bouncex.cookie.cpn && bouncex.cookie.cpn[e] ? "cookied" : this._pendingCoupons[e] ? "requesting" : "untracked" | |
}, | |
_getCookiedCode: function(e) { | |
return bouncex.cookie.cpn && bouncex.cookie.cpn[e] | |
}, | |
_getDefaultCode: function(e) { | |
return e.getAttribute("data-cpn-default") | |
}, | |
_checkIsFinished: function(e) { | |
this._hasPlaceholders(e) || this._finishedLoading(e) | |
}, | |
_hasPlaceholders: function(e) { | |
return 0 < e.getPlaceholders(e).length | |
}, | |
log: function(e, t) { | |
e = { | |
shouldLog: visitorTestMode("coupons"), | |
group: "coupons", | |
campaignId: e.campaignId || "", | |
message: (e.setName ? e.setName + ": " : "") + t | |
}; | |
_logger2.default.info(e) | |
}, | |
report: function(e) { | |
bouncex.report(e.campaignId, "coupon", { | |
"coupon:id": e.couponId, | |
"coupon:code": e.couponCode | |
}) | |
} | |
}; | |
bouncex.dg = { | |
init: function() { | |
bouncex.website.dgp && (this.dg_timeout = setTimeout2(function() { | |
CustomVariables.evalVars("devicegraph"), bouncex.err("dg timeout") | |
}, 3e3)), this.initPostDeviceGraph(null) | |
}, | |
initPostDeviceGraph: function(e, t) { | |
null === e && (void 0 !== t && t.IDs && (this.idTime = getTimeMs(), this.json = t, this.softID = t.IDs.deviceID, this.hardID = t.IDs.cookieID, t.info.firstLoad && this.previousCustomerLookup(), InitSequence.init1.serviceReady("graph callback")), void 0 === bouncex.state || void 0 === this.json || (t = this.json, bouncex.perf.manualTiming("bxid", this.idTime), bouncex.website.dgp && (clearTimeout(this.dg_timeout), this.store = bouncex.parseJSON(t.cookie), this._replenishCookie(), CustomVariables.evalVars("devicegraph")))) | |
}, | |
getAdsOptStatus: function(e, t) { | |
if (null === e) { | |
var n = t.deviceID || t.IDs.deviceID; | |
window.bouncex.gbi.deviceOptedStatus = n || "" | |
} | |
}, | |
previousCustomerLookup: function() { | |
perf.times("pd-start2"); | |
var e = "https://pd.cdnwidget.com/lookup?deviceID=" + this.softID + "&cookieID=" + this.hardID + "&bxwid=" + bouncex.website.id; | |
jQuery.ajax({ | |
url: e, | |
type: "GET" | |
}).always(function() { | |
perf.times("pd-stop2") | |
}) | |
}, | |
_replenishCookie: function() { | |
var e = [], | |
t = bouncex.stringify(bouncex.cookie.v); | |
if (this.store && this.store.v) | |
for (var n in this.store.v) | |
if (this.store.v.hasOwnProperty(n) && bouncex.cookie.v[n] !== this.store.v[n]) { | |
if (void 0 === CustomVariables.getVar(n)) { | |
delete this.store.v[n]; | |
continue | |
} | |
e.push(n), bouncex.setv(n, this.store.v[n]) | |
} | |
e.length && (setBounceCookie(), reload_campaigns("device_graph_hydration", e.join(",")), event_stream_report("device_graph_hydration", { | |
hydrated_deviceid: this.store.did, | |
hydrated_visitid: this.store.vid, | |
hydrated_cookie: bouncex.stringify(this.store), | |
cookie: bouncex.stringify(bouncex.cookie), | |
hydrated_cvar: bouncex.stringify(this.store.v), | |
previous_cvar: t | |
})) | |
}, | |
updateDeviceGraphCookie: function() { | |
this.store.did = bouncex.cookie.did, this.store.vid = bouncex.cookie.vid; | |
var e = { | |
bxwid: bouncex.website.id, | |
deviceID: this.softID, | |
obj: encodeURIComponent(bouncex.stringify(this.store)) | |
}; | |
jQuery.ajax({ | |
type: "GET", | |
url: "https://ids.cdnwidget.com/u?" + qs(e), | |
error: function() { | |
bouncex.err("device graph update failed") | |
} | |
}) | |
} | |
}, bouncex.et = { | |
init: function() { | |
this.stopAll(); | |
try { | |
eval(bouncex.website.etjs), this.evalAllUIEvents(!0) | |
} catch (e) { | |
bouncex.err(e, { | |
source: "event tracking js" | |
}) | |
} | |
}, | |
evalAllUIEvents: function(e) { | |
if (2 === bouncex.website.ete && bouncex.website.etjson) | |
for (var t = 0; t < bouncex.website.etjson.length; t++)(e || !bouncex.website.etjson[t].criteriaPassed) && (bouncex.website.etjson[t].criteriaPassed = this.evalUIEvent(bouncex.website.etjson[t])) | |
}, | |
evalUIEvent: function(e) { | |
var t = new Criteria(e.type.val, e.evaluation, "UI event").evaluate(); | |
if (t) { | |
var n = e.trigger; | |
switch (n.activation) { | |
case "onActiveTime": | |
var i = n.val; | |
bouncex.et.onActiveTime(i, function() { | |
bouncex.et.makeUIEvent(e) | |
}); | |
break; | |
case "onClick": | |
var o = bouncex.website.els[n.val]; | |
o && bouncex.et.on(bouncex.body, "click", function() { | |
var t = jQuery(this); | |
bouncex.et.makeUIEvent(e, t) | |
}, o); | |
break; | |
case "onCartEmpty": | |
bouncex.et.onCartEmpty(function() { | |
bouncex.et.makeUIEvent(e) | |
}); | |
break; | |
case "onHover": | |
case "onVisible": | |
bouncex.et[n.activation](bouncex.website.els[n.val], function(t) { | |
bouncex.et.makeUIEvent(e, t) | |
}); | |
break; | |
case "delay": | |
var a = 1e3 * n.val; | |
bouncex.setTimeout2(function() { | |
bouncex.et.makeUIEvent(e) | |
}, a); | |
break; | |
case "default": | |
default: | |
this.makeUIEvent(e) | |
} | |
} | |
return t | |
}, | |
makeUIEvent: function(e, t) { | |
var n = e.type.val, | |
i = e.data_fields[0].reduce(function(e, n) { | |
if ("default" !== n.activation) { | |
var i = CustomVariables.getVar(n.val); | |
i && "event" === i.trigger && CustomVariables.evalVarAndReload(n.val, t), e["custom" === n.activation ? n.val : n.activation] = bouncex.vars[n.val] | |
} | |
return e | |
}, {}); | |
bouncex.push([n, i]) | |
}, | |
hoverTime: 1e3, | |
log: function(e) { | |
_logger2.default.info({ | |
group: "et log", | |
message: e, | |
color: "#4b0082" | |
}) | |
}, | |
on: function(e, t, n, i) { | |
var o = this.register({ | |
event: t, | |
selector: i, | |
stop: function() { | |
bouncex.off(e, t + "." + o, i) | |
} | |
}); | |
return bouncex.on(e, t + "." + o, n, i), o | |
}, | |
onActiveTime: function(e, t) { | |
var n = ActiveTime.addCallback(e, t); | |
return this.register({ | |
event: "active time", | |
stop: function() { | |
ActiveTime.clearCallback(n) | |
} | |
}) | |
}, | |
onCartEmpty: function(e) { | |
var t = bouncex.et.cart.config ? bouncex.et.cart.config.cartCountVariable : "cart_qty"; | |
this.onVarChange(t, function(t, n) { | |
0 < t && 0 === n && e() | |
}) | |
}, | |
onAnyVarChange: function(e) { | |
return this.on(bouncex.window, "bxVarsChange", function() { | |
var t = arguments[1]; | |
e(t) | |
}) | |
}, | |
onVarChange: function(e, t) { | |
return this.onAnyVarChange(function(n) { | |
for (var i = 0; i < n.length; i++) | |
if (n[i].name == e) return t(n[i].oldVal, bouncex.vars[e]) | |
}) | |
}, | |
onHover: function(e, t) { | |
var n, i = this.hoverTime, | |
o = this.register({ | |
event: "hover", | |
selector: e, | |
stop: function() { | |
bouncex.off(bouncex.body, "mouseenter." + o, e), bouncex.off(bouncex.body, "mouseleave." + o, e), clearTimeout(n) | |
} | |
}); | |
bouncex.on(bouncex.body, "mouseenter." + o, function() { | |
var e = jQuery(this); | |
clearTimeout(n), e.attr("data-bxhover-" + o) || (n = setTimeout(function() { | |
e.attr("data-bxhover-" + o, !0), bouncex.tryCatch(t)(e) | |
}, i)) | |
}, e), bouncex.on(bouncex.body, "mouseleave." + o, function() { | |
clearTimeout(n) | |
}, e) | |
}, | |
onTrue: function(e, t, n) { | |
var i = 0; | |
if (n = n || 5, e()) t(); | |
else var o = bouncex.et.setInterval(function() { | |
e() ? (bouncex.et.stop(o), t()) : i > n && bouncex.et.stop(o), i++ | |
}) | |
}, | |
onVisible: function(e, t) { | |
function n() { | |
i = jQuery(e).is(":visible"), !o && i && bouncex.tryCatch(t)(jQuery(e)), o = i | |
} | |
var i, o = !1; | |
return n(), this.setInterval(n) | |
}, | |
register: function(e) { | |
var t = generateUniqueId(); | |
return bouncex.listeners = bouncex.listeners || {}, bouncex.listeners[t] = e, t | |
}, | |
setInterval: function(e) { | |
var t = BxInterval.addTask(e); | |
return this.register({ | |
event: "bxInterval", | |
stop: function() { | |
BxInterval.stopTask(t) | |
} | |
}) | |
}, | |
stop: function(e) { | |
bouncex.listeners.hasOwnProperty(e) && (bouncex.listeners[e].stop(), delete bouncex.listeners[e]) | |
}, | |
stopAll: function() { | |
for (var e in bouncex.listeners) this.stop(e) | |
}, | |
cart: { | |
init: function(e) { | |
var t = { | |
storeCartVariable: "cart", | |
cartCountVariable: "cart_qty", | |
maxVariableSize: bouncex.local_storage_enabled ? 1500 : 400, | |
storeValues: ["count", "items"], | |
maxItems: 10 | |
}; | |
e = jQuery.extend(t, e), this.config = e, this.replenish = e.replenish || this.replenish, this.validateReplenishment = e.validateReplenishment || this.validateReplenishment, this.reportReplenishment = e.reportReplenishment || this.reportReplenishment, this.replenishmentComplete = e.replenishmentComplete || bouncex.utils.getParam("bx_replen"), this.replenishmentType = e.replenishmentType || "unknown", this.replenishmentSuccessful = e.replenishmentSuccessful || this.replenishmentSuccessful, this.tryReplenishment(), this.reportReplenishment() | |
}, | |
setReplenishmentReportingStatus: function(e) { | |
var t = { | |
BX_CART_VALID: { | |
code: 0 | |
}, | |
BX_CART_MALFORMED: { | |
code: 1, | |
message: "bx_cart malformed" | |
}, | |
BX_CART_ITEMS_ALREADY_IN_CART: { | |
code: 2, | |
message: "Items already in cart" | |
}, | |
BX_CART_MISSING_DATA: { | |
code: 3, | |
message: "Missing value, token or items" | |
}, | |
BX_CART_REJECTED_UNKNOWN_REASON: { | |
code: 4, | |
message: "Aborted for unknown reason" | |
}, | |
BX_REPLEN_FAILURE: { | |
code: 9, | |
message: "Could not replenish cart" | |
}, | |
BX_REPLEN_SUCCESS: { | |
code: 10 | |
} | |
}[e]; | |
t && (this.returnCode = t.code, t.message && (this.failureMessage = t.message)) | |
}, | |
getCart: function() { | |
return this.state ? this.state : this.config.storeCartVariable && bouncex.vars[this.config.storeCartVariable] ? (this.state = JSON.parse(bouncex.vars[this.config.storeCartVariable]), this.state) : {} | |
}, | |
getCount: function() { | |
return bouncex.vars[this.config.cartCountVariable] | |
}, | |
inferCount: function(e) { | |
if (bouncex.utils.validate.integer(e.count)) return parseInt(e.count); | |
if (e.items) { | |
for (var t = 0, n = 0; n < e.items.length; n++) t += parseInt(e.items[n].qty) || 1; | |
return t | |
} | |
return bouncex.utils.validate.integer(this.getCount()) ? parseInt(this.getCount()) : 0 | |
}, | |
parseCartParam: function(e) { | |
return "{" !== e.charAt(0) && (e = atob(e)), JSON.parse(e) | |
}, | |
tryReplenishment: function() { | |
var e = bouncex.utils.getParam("bx_cart"), | |
t = {}; | |
if (this.replenishing = !1, !e) return !1; | |
try { | |
t = this.parseCartParam(e) | |
} catch (e) { | |
return bouncex.err(e), this.setReplenishmentReportingStatus("BX_CART_MALFORMED"), !1 | |
} | |
return this.validateReplenishment(t) ? (this.save(t), this.replenishing = !0, this.setReplenishmentReportingStatus("BX_CART_VALID"), this.replenish(t)) : (void 0 === this.returnCode && this.setReplenishmentReportingStatus("BX_CART_REJECTED_UNKNOWN_REASON"), !1) | |
}, | |
replenish: function() { | |
return bouncex.et.log("Replenish function not defined"), null | |
}, | |
replenishmentSuccessful: function() { | |
return 0 < this.getCount() | |
}, | |
save: function(e) { | |
if (!e) return !1; | |
this.state = e; | |
var t = jQuery.extend(!0, {}, e); | |
if (this.config.storeCartVariable) { | |
var n = {}; | |
if (0 === t.count) n = { | |
count: 0 | |
}; | |
else | |
for (var i, o = 0; o < this.config.storeValues.length; o++) i = this.config.storeValues[o], t.hasOwnProperty(i) && (n[i] = t[i]); | |
this.saveToVariable(n) | |
} | |
}, | |
saveToVariable: function(e) { | |
var t = JSON.stringify(e); | |
if (t.length <= this.config.maxVariableSize) bouncex.setv(this.config.storeCartVariable, t), setBounceCookie(); | |
else if (e.items && e.items.length) { | |
JSON.stringify(e.items[e.items.length - 1]).length >= this.config.maxVariableSize ? e.items.pop() : e.items.shift(), this.saveToVariable(e) | |
} | |
}, | |
track: function(e) { | |
var t = jQuery.extend({}, e); | |
t.items && (t.items = JSON.stringify(t.items)), t.ids && (t.ids = t.ids.join(",")), t = bouncex.utils.addNamespace(t, "cart"), bouncex.push(["cart", t]) | |
}, | |
update: function(e) { | |
if (this.replenishing) return !1; | |
if (e.newItem) { | |
var t = this.getCart().items || []; | |
t.push(e.newItem), e.items = t | |
} | |
if (this.config.maxItems && e.items && e.items.length > this.config.maxItems && (e.items = e.items.slice(e.items.length - this.config.maxItems)), e.count = this.inferCount(e), !e.ids && e.items) { | |
for (var n = [], i = 0; i < e.items.length; i++) e.items[i].id && n.push(e.items[i].id); | |
n.length && (e.ids = n) | |
}(e.newItem || e.addToCart) && bouncex.push(["add to cart", {}]), delete e.newItem, delete e.addToCart, this.save(e), this.track(e) | |
}, | |
validateReplenishment: function(e) { | |
var t = this.getCount(); | |
return bouncex.utils.validate.integer(t) && 0 < t ? (this.setReplenishmentReportingStatus("BX_CART_ITEMS_ALREADY_IN_CART"), !1) : e ? !!(e.value || e.token || e.items) || (this.setReplenishmentReportingStatus("BX_CART_MISSING_DATA"), !1) : (this.setReplenishmentReportingStatus("BX_CART_MALFORMED"), !1) | |
}, | |
reportReplenishment: function() { | |
var e = this.getCart(), | |
t = bouncex.utils.getParam("bx_cart"); | |
if (t) try { | |
e = this.parseCartParam(t) | |
} catch (e) { | |
bouncex.err(e) | |
} | |
var n = { | |
"cart:replentype": this.replenishmentType | |
}; | |
if (e.ids && (n["cart:ids"] = e.ids), e.date && (n["cart:date"] = e.date), e.items && (n["cart:items"] = JSON.stringify(e.items)), e.eid && (n["cart:eventid"] = e.eid), t) n["cart:returncode"] = this.returnCode, n["cart:count"] = this.getCount(), 0 < this.returnCode ? (this.failureMessage && (n["cart:failuremessage"] = this.failureMessage), bouncex.push(["cart replenish abort", n])) : bouncex.push(["cart replenish attempt", n]); | |
else if (this.replenishmentComplete) { | |
setTimeout(function() { | |
n["cart:success"] = this.replenishmentSuccessful(), n["cart:count"] = this.getCount(), n["cart:success"] ? this.setReplenishmentReportingStatus("BX_REPLEN_SUCCESS") : this.setReplenishmentReportingStatus("BX_REPLEN_FAILURE"), this.failureMessage && (n["cart:failuremessage"] = this.failureMessage), n["cart:returncode"] = this.returnCode, bouncex.push(["cart replenish", n]) | |
}.bind(this), 1100) | |
} | |
} | |
}, | |
item: { | |
requirements: [{ | |
name: "id" | |
}, { | |
name: "copy" | |
}, { | |
name: "url", | |
tests: [function(e) { | |
return bouncex.utils.validate.url(e) | |
}] | |
}, { | |
name: "imageurl", | |
tests: [function(e) { | |
return bouncex.utils.validate.url(e) | |
}] | |
}], | |
requireImageLoad: !0, | |
validate: function(e) { | |
for (var t, n = 0; n < this.requirements.length; n++) { | |
if (!e["item:" + (t = this.requirements[n]).name]) return bouncex.et.log("Invalid Item. " + t.name + " empty"), !1; | |
if (t.tests) | |
for (var i = 0; i < t.tests.length; i++) { | |
var o = t.tests[i], | |
a = e["item:" + t.name]; | |
if ("function" == typeof o && !o(a)) return bouncex.et.log("Invalid Item. The following " + t.name + " failed " + o.name + " test: " + a), !1 | |
} | |
} | |
return !0 | |
} | |
} | |
}, bouncex.gbi = { | |
wrapContentInIframe: function(e, t, n) { | |
var i, o = bouncex.campaigns[n], | |
a = o.gbi && (o.gbi.config.shrinkToFit || o.gbi.config.shrinkToFitWindow), | |
r = "-webkit-transform-origin: 0 0; transform-origin: 0 0; max-width: 100%; max-height: 100%;", | |
s = (o.gbi.provider, 1); | |
if (e.find("iframe").remove(), a && ("overlay" === o.type || "agilityzone" === o.type)) { | |
var c = bouncex.gbi.getResizeData(n); | |
1 > (s = c.scaleRatio) && (r += "-webkit-transform: scale(" + s + "); transform: scale(" + s + ");", e.css({ | |
width: c.scaledWidth + "px", | |
height: c.scaledHeight + "px" | |
})) | |
} | |
var u = createIframe({ | |
target: "_blank", | |
class: "bx-gbi-frame", | |
frameborder: "0", | |
horizontalscrolling: "no", | |
verticalscrolling: "no", | |
width: "100%", | |
height: "100%", | |
vspace: "0", | |
hspace: "0", | |
marginwidth: "0", | |
marginheight: "0", | |
scrolling: "no", | |
allowTransparency: "true" | |
}); | |
e.append(u); | |
try { | |
(i = u.contentWindow.document).open(), i.write('<html><head><base target="_blank"/></head><body marginwidth="0" marginheight="0" style="' + r + '">' + t + "</body>"), i.close() | |
} catch (e) { | |
bouncex.gbi.log(n, "error creating gbi frame: " + e) | |
} | |
return i | |
}, | |
init: function(e) { | |
bouncex.campaigns[e].gbi.impressionPixels = [], bouncex.campaigns[e].gbi.clickPixels = [] | |
}, | |
fail: function(e, t) { | |
bouncex.campaigns[e].failed = !0, this.clearRequestAssets(e), this.log(e, t, !0) | |
}, | |
log: function(e, t, n) { | |
var i = e ? "(" + e + ")" : "", | |
o = "(" + (bouncex.campaigns[e] ? bouncex.campaigns[e].gbi.provider || "no provider" : "stack") + ")"; | |
bouncex.log("%c gbi " + i + o + ": " + t, "color: " + (n ? "#FF0000" : "#00F")) | |
}, | |
request: function(e) { | |
bouncex.gbi.init(e); | |
var t = bouncex.gbi.providerApi[bouncex.campaigns[e].gbi.provider]; | |
t || bouncex.gbi.fail(e, "undefined provider " + bouncex.campaigns[e].gbi.provider); | |
try { | |
t.initDemoAd ? t.initDemoAd(e) : t.request ? t.request(e) : bouncex.gbi.fetch(e) | |
} catch (t) { | |
bouncex.gbi.fail(e, t) | |
} | |
}, | |
fetch: function(e) { | |
var t = bouncex.gbi.providerApi[bouncex.campaigns[e].gbi.provider]; | |
return bouncex.gbi.doAjaxRequest(e, t.getFetchOptions(e)) | |
}, | |
doAjaxRequest: function(e, t) { | |
bouncex.campaigns[e].gbi.ajaxRequest = bouncex.utils.doAjaxRequest(t) | |
}, | |
report: function(e, t, n) { | |
bouncex.gbi.log(e, 'reporting event "' + t + '"'); | |
n = n || {}; | |
if (bouncex.campaigns[e].gbi.provider) { | |
var i = ""; | |
if ("pop" == t ? bouncex.campaigns[e].gbi.impressionPixels && 0 < bouncex.campaigns[e].gbi.impressionPixels.length && (i += bouncex.campaigns[e].gbi.impressionPixels.join("")) : "click" == t && (bouncex.campaigns[e].gbi.clickPixels && 0 < bouncex.campaigns[e].gbi.clickPixels.length && (i += bouncex.campaigns[e].gbi.clickPixels.join("")), !n.value && (n.value = "nonad")), i) | |
if ("oubr" == bouncex.campaigns[e].gbi.provider) { | |
var o = bouncex.campaigns[e].gbi.config, | |
a = { | |
url: bouncex.campaigns[e].gbi.impressionPixels[0], | |
method: "GET", | |
timeout: 15e3, | |
beforeSend: function(e) { | |
e.setRequestHeader("Authorization", "API_KEY " + o.API_KEY) | |
}, | |
success: function() { | |
bouncex.gbi.log(e, 'reporting provider pixel for "' + t + '"') | |
}, | |
error: function() { | |
bouncex.gbi.log(e, 'error for reporting provider pixel for "' + t + '"') | |
} | |
}; | |
bouncex.gbi.doAjaxRequest(e, a) | |
} else jQuery(i).hide().appendTo(bouncex.body), bouncex.gbi.log(e, 'reporting provider pixel for "' + t + '"') | |
} | |
var r = bouncex.campaigns[e].gbi.stack_id; | |
if (!r || "eligible" != t && "pop" != t) buildReport(e, t, n); | |
else { | |
var s = bouncex.gbi.stacks[r], | |
c = s.campaigns; | |
bouncex.campaigns[s.leader_id].ttype; | |
for (var u in c) { | |
var b = c[u], | |
l = b == e, | |
d = b == bouncex.gbi.stacks[r].leader_id; | |
if ("pop" == t && !l && d && noteCookieAdShown(b), ("eligible" == t && (l || d) || "pop" == t && l) && buildReport(b, t, n), "pop" == t) { | |
var p = {}; | |
p["trypop:provider"] = bouncex.campaigns[b].gbi.provider || "none", n && n["pop:activation"] && (p.activation = n["pop:activation"]), buildReport(b, "trypop", p) | |
} | |
if (l) break | |
} | |
} | |
}, | |
requestCompleteMultiple: function(e, t, n) { | |
var i = bouncex.campaigns[e]; | |
bouncex.gbi.log(e, "have a bid with multiple units"), bouncex.gbi.providerApi[i.gbi.provider].buildHTML(e, i.gbi.lastResponse), loadImages(i.images, function() { | |
bouncex.gbi.log(e, "images loaded"), activateGbiCampaign(e), n && n() | |
}) | |
}, | |
requestCompleteSingle: function(e, t, n) { | |
bouncex.gbi.log(e, "have a bid with a single unit"); | |
var i = bouncex.campaigns[e], | |
o = i.obj1.find(".bx-step-" + (i.gbi.step || 1)).find(".bx-group-placeholder").eq(0), | |
a = i.gbi.provider; | |
("index" == a || "pbm" == a || "dfphtml" == a) && (t += bouncex.gbi.integrations.moat.display.getScriptTag({ | |
website: window.location.host + " (" + bouncex.website.id + ")", | |
deviceType: bouncex.state.mobile ? "mobile" : "desktop", | |
trigger: i.trigger, | |
adSize: i.gbi.config.units && i.gbi.config.units[0] || "unknown", | |
placement: "overlay" === i.type ? i.type : i.subtype | |
})); | |
var r = bouncex.gbi.wrapContentInIframe(o, t, e); | |
return r ? (attachClickReportingToIframe(o, e), void loadImages(jQuery(r).find("img").filter(":visible"), function() { | |
bouncex.gbi.log(e, "image loaded"), activateGbiCampaign(e), n && n() | |
})) : bouncex.gbi.fail(e, "failed to wrap content in iframe: check for missing placeholder group") | |
}, | |
requestCompleteSingleVideo: function(e, t) { | |
bouncex.gbi.log(e, "have a bid with a single vast unit"); | |
var n = bouncex.campaigns[e], | |
i = bouncex.gbi.getPlayerConfig(e, t), | |
o = n.obj1.find(".bx-step-" + (n.gbi.step || 1)).find(".bx-group-placeholder").eq(0), | |
a = n.gbi.config.shrinkToFit || n.gbi.config.shrinkToFitWindow, | |
r = "overlay" === n.type || "agilityzone" === n.type; | |
if (a && r) { | |
var s = bouncex.gbi.getResizeData(e); | |
1 > s.scaleRatio && (i.width = s.scaledWidth, i.height = s.scaledHeight, o.css({ | |
width: s.scaledWidth, | |
height: s.scaledHeight | |
})) | |
} | |
bouncex.gbi.initVideoFrame(e, o, i) | |
}, | |
initVideoFrame: function(e, t, n) { | |
var i, o, a, r = bouncex.campaigns[e], | |
s = "//" + bouncex.website.biu + "/assets/global/plugins/jwplayer/8.3.0/jwplayer.js", | |
c = bouncex.gbi.integrations.moat, | |
u = t.width(), | |
b = t.height(); | |
t.empty(), o = createIframe({ | |
class: "bx-gbi-frame", | |
style: "border: 0; width: " + u + "px; height: " + b + "px;" | |
}), n.width = u, n.height = b, t.append(o), a = o.contentWindow, bouncex.browser.firefox && (a.oldGetComputedStyle = a.getComputedStyle, a.getComputedStyle = function(e, t) { | |
var n = a.oldGetComputedStyle(e, t); | |
return null === n ? {} : n | |
}), a.document.write('<html><body style="margin: 0px; overflow: hidden;"><div id="bx-video"></div></body></html>'), (i = a.document.createElement("script")).setAttribute("src", s), i.onload = function() { | |
bouncex.gbi.log(e, "jwplayer script loaded"), a.jwplayer ? (bouncex.gbi.log(e, "jwplayer executed"), a.jwplayer.key = "o8z/iG2QyTbuWcdH2vCzMM0waC0nOAeJ9/gVcpFiPZ+tv1+5", a.player = r.gbi.player = a.jwplayer("bx-video"), r.gbi.player.setup(n), r.gbi.player.on("adClick", function() { | |
bouncex.report(e, "click", { | |
value: "ad" | |
}) | |
}), r.gbi.player.on("adError", function(t) { | |
bouncex.gbi.log(e, t.message ? "ad error: " + t.message : "ad error") | |
}), r.gbi.contentLoaded = !0, c.video.loadPlugin(e)) : bouncex.gbi.fail(e, "jwplayer failed to execute") | |
}, i.onerror = function() { | |
!0, bouncex.gbi.fail(e, "jwplayer script failed to load") | |
}, a.document.body.appendChild(i) | |
}, | |
getPlayerConfig: function(e, t) { | |
var n = bouncex.campaigns[e], | |
i = n.gbi.config.videoPlayerConfig || {}, | |
o = /^[\s]*<VAST/i.test(t) ? "vastxml" : "tag", | |
a = n.obj1.find(".bx-group-placeholder").eq(0); | |
return i.file = "//" + bouncex.website.biu + "/assets/global/plugins/jwplayer/blank.mp4", i.advertising = i.advertising || {}, i.advertising.client = "vast", i.advertising.vpaidcontrols = !0, i.advertising[o] = t, i.mute = !0, i.width = i.width || a.width(), i.height = i.height || a.height(), n.gbi.config.playOnImpression = !0, n.gbi.config.videoPlayerConfig = i, i | |
}, | |
addFullVideoSupport: function(e) { | |
return e.video ? (e.video.mimes = e.video.mimes || [], -1 === e.video.mimes.indexOf("video/mp4") && e.video.mimes.push("video/mp4"), -1 === e.video.mimes.indexOf("application/javascript") && e.video.mimes.push("application/javascript"), e) : e | |
}, | |
cancelRequest: function(e) { | |
var t = bouncex.campaigns[e]; | |
t.gbi.ajaxRequest && (bouncex.gbi.log(e, "cancelling request"), t.gbi.ajaxRequest.abort()), bouncex.gbi.init(e) | |
}, | |
clearRequestAssets: function(e) { | |
bouncex.events[e].gbiRequest && (clearInterval(bouncex.events[e].gbiRequest), delete bouncex.events[e].gbiRequest) | |
}, | |
getResizeDataForV2: function(e) { | |
return bouncex.gbi.getResizeData(e) | |
}, | |
getResizeData: function(e) { | |
var t, n = bouncex.campaigns[e], | |
i = bouncex.campaigns[e].gbi.config, | |
o = 2 * ((parseInt(n.obj1.find(".bx-wrap").css("padding-left"), 10) || 0) + (parseInt(n.obj1.find(".bx-align").css("padding-left"), 10) || 0)), | |
a = 1; | |
if (t = n.gbi.isVideo ? { | |
w: i.videoPlayerConfig.width, | |
h: i.videoPlayerConfig.height | |
} : i.imp[0].banner, "agilityzone" === n.type && n.calloutTarget.length) a = (n.calloutTarget.width() - o) / t.w; | |
else if ("overlay" === n.type) { | |
var r = (bouncex.wndsize().width - o) / t.w, | |
s = (bouncex.wndsize().height - o) / t.h; | |
a = r > s ? s : r | |
} | |
return { | |
scaleRatio: a, | |
scaledWidth: t.w * a, | |
scaledHeight: t.h * a | |
} | |
}, | |
getCreativeDimensions: function(e) { | |
var t = jQuery("#bx-creative-" + e); | |
return t.css("max-width", "none"), { | |
width: t.width(), | |
height: t.height() | |
} | |
}, | |
shrinkToFitWindow: function(e) { | |
var t = bouncex.gbi.getCreativeDimensions(e), | |
n = bouncex.wndsize(); | |
n.width -= 12, n.height -= 12; | |
var i = t.width > n.width ? n.width / t.width : 1, | |
o = t.height > n.height ? n.height / t.height : 1, | |
a = i > o ? o : i; | |
1 > a && bouncex.campaigns[e].obj1.find(".bx-slab").css({ | |
width: t.width + 12 + "px", | |
height: t.height + 12 + "px", | |
overflow: "visible", | |
top: "50%", | |
left: "50%", | |
transform: "scale(" + a + ") translate(-50%, -50%)", | |
transformOrigin: "0 0" | |
}) | |
}, | |
shrinkToFitParent: function(e) { | |
var t = bouncex.gbi.getCreativeDimensions(e), | |
n = bouncex.campaigns[e].obj1.parent().width(), | |
i = t.width > n ? n / t.width : 1; | |
1 > i && bouncex.campaigns[e].obj1.find(".bx-slab").css({ | |
width: t.width * i + "px", | |
height: t.height * i + "px", | |
transform: "scale(" + i + ")", | |
transformOrigin: "0 0" | |
}) | |
}, | |
populateTemplate: function(ca_id, response, unitJsonPath, imageJsonPath) { | |
for (var creative = jQuery("#bx-creative-" + ca_id), creativeClone = creative.clone(!0), templateGroups = creativeClone.find(".bx-group-placeholder"), groupLength = templateGroups.length, k = 0; k < groupLength; k += 1) { | |
var unit = eval(unitJsonPath + "[k];"), | |
templateGroup = jQuery(templateGroups[k]); | |
if (templateGroup.length) | |
if (unit) { | |
var image = eval("unit." + imageJsonPath); | |
templateGroup.find(".bx-lineshape").css("background-image", "url(" + image + ")"), bouncex.campaigns[ca_id].images.push(image); | |
var html = templateGroup.html(); | |
html = html.replace(/{(.*?)}/gi, function(query, keyword) { | |
var content = eval("unit." + keyword); | |
if (void 0 !== content) return content | |
}), templateGroup.html(html) | |
} else templateGroup.remove() | |
} | |
var html = creativeClone.html(); | |
html = html.replace(/{(.*?)}/gi, function(query, keyword) { | |
try { | |
return eval("response." + keyword) | |
} catch (e) { | |
return keyword | |
} | |
}), creativeClone.html(html), creative.replaceWith(creativeClone) | |
}, | |
generateDynamicRequestUrlParams: function(ca_id) { | |
var config = bouncex.campaigns[ca_id].gbi.config, | |
dynamicQueryStr = "", | |
dynamicParams = config.dynamic_request_params; | |
if (dynamicParams) | |
for (var param in dynamicParams) try { | |
dynamicQueryStr += "&" + param + "=" + encodeURIComponent(eval(dynamicParams[param])) | |
} catch (e) { | |
bouncex.gbi.log("invalid dynamic request param " + param + " must have valid javascript as value") | |
} | |
return dynamicQueryStr | |
}, | |
requestAndRefreshRequest: function(e) { | |
var t = bouncex.campaigns[e], | |
n = bouncex.gbi.providerApi[t.gbi.provider]; | |
t.gbi.requestNum = 1, n.fetch(e), bouncex.events[e].gbiRequest = setInterval2(function() { | |
return can_show_ad(e) || bouncex.campaigns[e].failed ? (bouncex.gbi.init(e), t.gbi.requestNum++, void n.fetch(e)) : (clearInterval(bouncex.events[e].gbiRequest), void bouncex.gbi.log(e, "clearing interval")) | |
}, t.gbi.config.reload || 18e4) | |
}, | |
playVideoBeforeImpression: function(e, t) { | |
var n = bouncex.campaigns[t], | |
i = n.gbi.player; | |
i.on("adImpression", function() { | |
i.off("adImpression"), i.off("adError"), bouncex.gbi.log(t, "video response detected"), n.gbi.videoResponseLoaded = !0, show_ad(e, t) | |
}), i.on("adError", function(e) { | |
i.off("adImpression"), i.off("adError"), i.stop(), bouncex.gbi.fail(t, e.message ? e.message : "error loading response") | |
}), i.play() | |
} | |
}, bouncex.gbi.integrations = { | |
moat: { | |
display: { | |
scriptSrc: document.location.protocol + "//z.moatads.com/bounceexchangedisplay18031701869/moatad.js", | |
getScriptTag: function(e) { | |
if (shouldEnforcePolicies({ | |
gdpr: !0 | |
})) return bouncex.log("GDPR: MOAT script blocked"), ""; | |
var t = qs({ | |
moatClientLevel1: e.website, | |
moatClientLevel2: e.deviceType, | |
moatClientLevel3: e.trigger, | |
moatClientLevel4: e.adSize, | |
zMoatPlacement: e.placement | |
}); | |
return '<script src="' + this.scriptSrc + "?" + t + '" type="text/javascript"><\/script>' | |
} | |
}, | |
video: { | |
scriptSrc: document.location.protocol + "//z.moatads.com/jwplayerplugin0938452/moatplugin.js", | |
partnerCode: "bouncexjsvideojwplayer997111196347", | |
loadPlugin: function(e) { | |
if (shouldEnforcePolicies({ | |
gdpr: !0 | |
})) return bouncex.log("GDPR: MOAT script blocked"), ""; | |
var t = this; | |
getScript(t.scriptSrc, function() { | |
t.addImpressionListener(e) | |
}) | |
}, | |
addImpressionListener: function(e) { | |
var t = bouncex.campaigns[e], | |
n = this; | |
t.gbi.player.on("adImpression", function(e) { | |
moatjw.add({ | |
partnerCode: n.partnerCode, | |
player: this, | |
adImpressionEvent: e, | |
ids: { | |
level1: window.location.host + " (" + bouncex.website.id + ")", | |
level2: bouncex.state.mobile ? "mobile" : "desktop", | |
level3: t.trigger, | |
level4: "video", | |
slicer1: "overlay" === t.type ? t.type : t.subtype | |
}, | |
duration: 30 | |
}) | |
}) | |
} | |
} | |
}, | |
tag: { | |
intermediaryId: "869cff86d1c453c1", | |
generateId: function() { | |
return this.intermediaryId + ":" + bouncex.website.id | |
} | |
} | |
}, bouncex.gbi.providerApi = { | |
aqbx: { | |
initDemoAd: function(e) { | |
var t; | |
try { | |
t = bouncex.campaigns[e].gbi.config.imp[0] | |
} catch (t) { | |
bouncex.gbi.fail(e, "no creative dimensions have been set for this ad!") | |
} | |
if (void 0 !== t.video) { | |
var n = '<VAST version="2.0"><Ad><InLine><AdSystem>Acudeo Compatible</AdSystem><AdTitle>VAST 2.0 AQBX</AdTitle><Description>VAST 2.0 AQBX</Description><Creatives><Creative><Linear><Duration>00:00:21</Duration><MediaFiles><MediaFile delivery="progressive" type="video/mp4" bitrate="500" width="400" height="300" scalable="true" maintainAspectRatio="true">https://' + bouncex.website.biu + "/assets/global/videos/pub/demo/ads_demo_video.mp4</MediaFile></MediaFiles></Linear></Creative></Creatives></InLine></Ad></VAST>"; | |
bouncex.campaigns[e].gbi.isVideo = !0, bouncex.gbi.requestCompleteSingleVideo(e, n), bouncex.gbi.log(e, "aqbx video ad loaded"), activateGbiCampaign(e) | |
} else { | |
var i = t.banner, | |
o = i.w, | |
a = i.h, | |
r = "https://" + bouncex.website.biu + "/assets/global/images/pub/demo" + o + "x" + a + ".gif"; | |
bouncex.campaigns[e].gbi.html = '<a><img height="' + a + '" width="' + o + '" src="' + r + '"/></a>', activateGbiCampaign(e) | |
} | |
} | |
}, | |
an: { | |
getFetchOptions: function(e) { | |
var t = this, | |
n = bouncex.campaigns[e].gbi.config; | |
return { | |
url: n.request_url, | |
type: "POST", | |
dataType: "json", | |
processData: !1, | |
timeout: n.timeout || 255, | |
success: function(n) { | |
var i = t.processResponse(e, n); | |
return i ? void bouncex.gbi.requestCompleteSingle(e, i) : bouncex.gbi.fail(e, "no bid") | |
}, | |
error: function(t, n) { | |
return bouncex.gbi.fail(e, n) | |
} | |
} | |
}, | |
processResponse: function(e, t) { | |
if (t && "ok" == t.status) try { | |
var n = t.native.length; | |
if (0 < n) { | |
for (var i = "", o = 0; o < n; o++) { | |
bouncex.campaigns[e].gbi.clickPixels.push('<img src="' + t.native[o].click_trackers + '"/>'); | |
var a = t.native[o].impression_trackers.length; | |
if (0 < a) | |
for (var r = 0; r < a; r++) bouncex.campaigns[e].gbi.impressionPixels.push('<img src="' + t.native[o].impression_trackers[r] + '"/>'); | |
i += '<a href="' + t.native[o].click_url + '"><img height="100%" width="100%" title="', i += t.native[o].title + '" src="' + t.native[o].main_media[0].url + '"/></a>' | |
} | |
return i | |
} | |
} catch (t) { | |
bouncex.gbi.fail(e, t) | |
} | |
return "" | |
} | |
}, | |
dfpi: { | |
getFetchOptions: function(e) { | |
var t = bouncex.campaigns[e].gbi.config, | |
n = this; | |
return { | |
url: t.request_url + "&c=" + getTime2() + bouncex.gbi.generateDynamicRequestUrlParams(e), | |
type: "GET", | |
dataType: "json", | |
processData: !1, | |
timeout: t.timeout || 1e3, | |
success: function(t) { | |
var i = n.processResponse(e, t); | |
return i ? void bouncex.gbi.requestCompleteSingle(e, i) : bouncex.gbi.fail(e, "no bid") | |
}, | |
error: function() { | |
return bouncex.gbi.fail(e, "timed out") | |
} | |
} | |
}, | |
processResponse: function(e, t) { | |
if (t && t.main_media) try { | |
var n = t.impression_trackers.length; | |
if (0 < n) | |
for (var i = 0; i < n; i++) bouncex.campaigns[e].gbi.impressionPixels.push('<img src="' + t.impression_trackers[i] + '"/>'); | |
var o = t.click_trackers.length; | |
if (0 < o) | |
for (i = 0; i < o; i++) bouncex.campaigns[e].gbi.clickPixels.push('<img src="' + t.click_trackers[i] + '"/>'); | |
var a = t.main_media.length; | |
if (0 < a) { | |
var r = ""; | |
for (i = 0; i < a; i++) r += '<a href="' + t.click_url + '"><img height="100%" width="100%" title="', r += t.title + '" src="' + t.main_media[i].url + '"/></a>'; | |
return r | |
} | |
} catch (t) { | |
bouncex.gbi.fail(e, t) | |
} | |
return "" | |
} | |
}, | |
dfps: { | |
getFetchOptions: function(e) { | |
var t = bouncex.campaigns[e].gbi.config, | |
n = this; | |
return { | |
url: t.request_url + "&c=" + getTime2() + bouncex.gbi.generateDynamicRequestUrlParams(e), | |
type: "GET", | |
dataType: "json", | |
processData: !1, | |
timeout: t.timeout || 1e3, | |
success: function(t) { | |
var i = n.processResponse(e, t); | |
return i ? void bouncex.gbi.requestCompleteSingle(e, i) : bouncex.gbi.fail(e, "no bid") | |
}, | |
error: function() { | |
return bouncex.gbi.fail(e, "timed out") | |
} | |
} | |
}, | |
processResponse: function(e, t) { | |
if (t && t.main_media) try { | |
var n = t.impression_trackers.length; | |
if (0 < n) | |
for (var i = 0; i < n; i++) bouncex.campaigns[e].gbi.impressionPixels.push('<img src="' + t.impression_trackers[i] + '"/>'); | |
var o = t.main_media.length; | |
if (0 < o) { | |
var a = ""; | |
for (i = 0; i < o; i++) a += t.main_media[i].url; | |
return a | |
} | |
} catch (t) { | |
bouncex.gbi.fail(e, t) | |
} | |
return "" | |
} | |
}, | |
dfphtml: { | |
getFetchOptions: function(e) { | |
var t = bouncex.campaigns[e].gbi.config; | |
return { | |
url: t.request_url + "&c=" + getTime2() + bouncex.gbi.generateDynamicRequestUrlParams(e), | |
method: "GET", | |
global: !1, | |
processData: !1, | |
timeout: t.timeout || 1e3, | |
complete: function(t, n) { | |
if ("success" != n) return bouncex.gbi.fail(e, n + " " + t.status); | |
if (200 === t.status) { | |
var i = t.responseText; | |
if (!i) return bouncex.gbi.fail(e, "no bid"); | |
bouncex.campaigns[e].gbi.html = i, activateGbiCampaign(e) | |
} else bouncex.gbi.fail(e, "response status " + t.status) | |
} | |
} | |
} | |
}, | |
crit: { | |
getFetchOptions: function(e) { | |
var t = this, | |
n = bouncex.campaigns[e].gbi.config; | |
return { | |
url: n.endpoint + "/recommendations.get", | |
data: n, | |
dataType: "jsonp", | |
method: "GET", | |
timeout: 15e3, | |
success: function(n) { | |
t.processResponse(e, n) && activateGbiCampaign(e) | |
}, | |
error: function() { | |
return bouncex.gbi.fail(e, "timed out") | |
} | |
} | |
}, | |
processResponse: function(e, t) { | |
if (!t || 0 !== t.response_status) return t && t.status_message ? bouncex.gbi.fail(e, "Bad response: " + t.status_message) : bouncex.gbi.fail(e, "No bid"), !1; | |
try { | |
return this.populatePixel(e, t) && this.populateCreative(e, t) | |
} catch (t) { | |
bouncex.gbi.fail(e, t) | |
} | |
}, | |
populatePixel: function(e, t) { | |
for (var n = t.impression_pixels, i = n.length, o = 0; o < i; o += 1) bouncex.campaigns[e].gbi.impressionPixels.push('<img src="' + n[o].url + '"/>'); | |
return !0 | |
}, | |
populateCreative: function(e, t) { | |
return bouncex.gbi.populateTemplate(e, t, "response.products", "image.url"), !0 | |
} | |
}, | |
tabr: { | |
getFetchOptions: function(e) { | |
var t = this, | |
n = bouncex.campaigns[e].gbi.config; | |
return n["source.id"] = window.location.pathname, n["source.url"] = window.location.href, n["rec.visible"] = !1, n["user.session"] = "init", n["app.type"] = "desktop", { | |
url: n.endpoint_domain + "/1.1/json/" + n["publisher-name"] + "/recommendations.get", | |
data: n, | |
dataType: "json", | |
method: "GET", | |
timeout: 15e3, | |
success: function(n) { | |
t.processResponse(e, n) && activateGbiCampaign(e) | |
}, | |
error: function() { | |
return bouncex.gbi.fail(e, "timed out") | |
} | |
} | |
}, | |
processResponse: function(e, t) { | |
if (!(t && t.id && 0 < t.list.length)) return bouncex.gbi.fail(e, "no bid"); | |
try { | |
return t.list ? (bouncex.campaigns[e].gbi.lastResponse = t, this.getPixels(e, t), !0) : bouncex.gbi.fail(e, "no bid") | |
} catch (t) { | |
bouncex.gbi.fail(e, t) | |
} | |
}, | |
buildHTML: function(e, t) { | |
bouncex.gbi.populateTemplate(e, t, "response.list", "thumbnail[0].url") | |
}, | |
getPixels: function(e, t) { | |
var n = bouncex.campaigns[e].gbi.config, | |
i = n.endpoint_domain + "/1.1/json/" + n["publisher-name"] + "/recommendations.notify-visible?"; | |
i += "response.id=" + t.id + "&response.session=" + t.session, i += "&app.type=" + (bouncex.state.mobile ? "mobile" : "desktop") + "&app.apikey=" + n["app.apikey"], bouncex.campaigns[e].gbi.impressionPixels.push('<img src="' + i + '"/>') | |
} | |
}, | |
oubr: { | |
getFetchOptions: function(e) { | |
var t = this, | |
n = bouncex.campaigns[e].gbi.config; | |
return { | |
url: n[n.environment + "_endpoint"] + "/recommendations/documents", | |
dataType: "json", | |
method: "GET", | |
data: n.data, | |
timeout: 15e3, | |
beforeSend: function(e) { | |
e.setRequestHeader("Authorization", "API_KEY " + n.API_KEY) | |
}, | |
success: function(n) { | |
t.processResponse(e, n) && activateGbiCampaign(e) | |
}, | |
error: function() { | |
return bouncex.gbi.fail(e, "timed out") | |
} | |
} | |
}, | |
processResponse: function(e, t) { | |
if (!(t && t.requestId && t.items && 0 < t.items.length)) return bouncex.gbi.fail(e, "no bid"); | |
try { | |
return bouncex.campaigns[e].gbi.lastResponse = t, this.getPixels(e, t) && this.populateCreative(e, t) | |
} catch (t) { | |
bouncex.gbi.fail(e, t) | |
} | |
}, | |
populateCreative: function(e, t) { | |
return bouncex.gbi.populateTemplate(e, t, "response.items", "thumbnail"), !0 | |
}, | |
getPixels: function(e, t) { | |
bouncex.campaigns[e].gbi.config; | |
var n = t._actions.reportViewed; | |
return bouncex.campaigns[e].gbi.impressionPixels.push(n), !0 | |
} | |
}, | |
index: { | |
request: function(e) { | |
bouncex.gbi.init(e); | |
try { | |
bouncex.gbi.requestAndRefreshRequest(e) | |
} catch (t) { | |
bouncex.gbi.fail(e, t) | |
} | |
}, | |
isMultiBidRequest: function(e) { | |
var t = bouncex.campaigns[e].gbi.config; | |
return 1 < t.imp.length || t.jsonp | |
}, | |
getRequestData: function(ca_id) { | |
var campaign = bouncex.campaigns[ca_id], | |
config = campaign.gbi.config, | |
pageUrl = document.location.protocol + "//" + document.location.hostname + document.location.pathname, | |
multiBidParams = this.isMultiBidRequest(ca_id) && config.params && config.params.length ? "&" + config.params : "", | |
urlWithParams = updateQS(pageUrl, "deployment", campaign.type, "device", bouncex.state.mobile ? "mobile" : "desktop") + multiBidParams; | |
if (config.imp && config.imp.length) | |
for (var i = 0; i < config.imp.length; i++) config.imp[i].video && (config.imp[i] = bouncex.gbi.addFullVideoSupport(config.imp[i])); | |
var requestData = { | |
id: getTime2(), | |
imp: config.imp, | |
site: { | |
page: urlWithParams, | |
ref: bouncex.referrer, | |
mobile: bouncex.state.mobile ? 1 : 0 | |
} | |
}; | |
return config.dynamic_site_page && (requestData.site.page = document.location.protocol + "//" + document.location.hostname + "/" + eval(config.dynamic_site_page)), requestData.source = { | |
pchain: bouncex.gbi.integrations.tag.generateId() | |
}, requestData | |
}, | |
getFetchOptions: function(e) { | |
for (var t = this, n = bouncex.campaigns[e], i = n.gbi.config, o = t.getRequestData(e), a = n.subtype || ("overlay" === n.type ? "overlay" : "none"), r = bouncex.ssl ? "https://as-sec" : "http://as", s = !1 === i.production ? "http://astest" : r, c = { | |
partner: n.gbi.provider, | |
partner_site_id: i.s, | |
request_number: n.gbi.requestNum, | |
deployment: a, | |
requested_ad_units: i.units ? i.units.join(", ") : "", | |
request_timestamp: getTimeMs(), | |
deal_id: "NA", | |
price: "NA" | |
}, u = { | |
url: s + ".casalemedia.com/cygnus", | |
data: { | |
v: "7", | |
cb: getTimeMs(), | |
s: i.s, | |
r: bouncex.stringify(o) | |
}, | |
dataType: "text", | |
contentType: "application/x-www-form-urlencoded", | |
global: !1, | |
crossDomain: !0, | |
xhrFields: { | |
withCredentials: !0 | |
}, | |
timeout: i.timeout || 1e3, | |
complete: function(n, i) { | |
t.handleResponse(e, n, i, c) | |
} | |
}, b = 0; b < o.imp.length; b++) | |
if (o.imp[b].video) { | |
n.gbi.isVideo = !0, u.data.v = "8.8", u.data.fn = "jsonp"; | |
break | |
} | |
return u | |
}, | |
handleResponse: function(e, t, n, i) { | |
var o = bouncex.campaigns[e], | |
a = "bid_error"; | |
if ("success" === n && 200 === t.status && t.responseText) { | |
var r = t.responseText, | |
s = r.substring(r.indexOf("(") + 1, r.lastIndexOf(")")), | |
c = this.processResponse(e, s), | |
u = c && c.ext && c.ext.dealid; | |
u && (i.deal_id = u), c && c.ext && c.ext.pricelevel && (i.price = this.convertPrice(c.ext.pricelevel, u)), a = c ? "bid_fill" : "bid_none" | |
} else "success" !== n || t.responseText ? 0 === t.status && (a = "bid_cancel") : a = "bid_empty"; | |
if (bouncex.gbi.report(e, a, i), "bid_fill" == a) o.gbi.isVideo ? (o.gbi.vastUrl = c.ext && c.ext.vasturl, bouncex.gbi.requestCompleteSingleVideo(e, o.gbi.vastUrl)) : o.gbi.html = c.adm, o.gbi.step = this.isMultiBidRequest(e) ? +c.impid : 1, bouncex.gbi.log(e, "using step " + o.gbi.step), activateGbiCampaign(e); | |
else { | |
if ("bid_empty" == a) return bouncex.gbi.fail(e, "empty response"); | |
if ("bid_none" == a) return bouncex.gbi.fail(e, "no bid"); | |
if ("bid_error" == a) return bouncex.gbi.fail(e, n + " " + t.status) | |
} | |
}, | |
fetch: function(e) { | |
bouncex.gbi.doAjaxRequest(e, this.getFetchOptions(e)) | |
}, | |
processResponse: function(e, t) { | |
if (t) try { | |
var n = (t = bouncex.parseJSON(t)).seatbid[0].bid[0]; | |
if (this.isMultiBidRequest(e)) | |
for (var i = 0; i < t.seatbid.length; i++) | |
for (var o = 0; o < t.seatbid[i].bid.length; o++) | |
if (t.seatbid[i].bid[o].ext.pricelevel) { | |
+t.seatbid[i].bid[o].ext.pricelevel.substring(1) > +n.ext.pricelevel.substring(1) && (n = t.seatbid[i].bid[o]) | |
} | |
return n | |
} catch (e) {} | |
return !1 | |
}, | |
getRatio: function(e) { | |
var t = bouncex.campaigns[e].gbi.config.imp[0].banner, | |
n = bouncex.wndsize(), | |
i = 1, | |
o = 1; | |
return t.w > n.width && (i = n.width / t.w), t.h > n.height && (o = n.height / t.h), i > o ? o : i | |
}, | |
convertPrice: function(e, t) { | |
var n = e.length - 2, | |
i = e.split(""); | |
i.splice(n, 0, "."); | |
var o = i.join("").replace(/[^0-9.]/g, ""); | |
return (t ? +o : +o / .85).toFixed(5) | |
} | |
}, | |
pbm: { | |
request: function(e) { | |
bouncex.gbi.init(e); | |
try { | |
this.userSynced() ? bouncex.gbi.requestAndRefreshRequest(e) : this.syncUser(e) | |
} catch (t) { | |
bouncex.gbi.fail(e, t) | |
} | |
}, | |
syncUser: function(e) { | |
var t = bouncex.campaigns[e].gbi.config, | |
n = createIframe({ | |
style: "display: none;", | |
src: "//" + t.user_sync_endpoint + "?p=" + t.publisher_id | |
}); | |
n.onload = function() { | |
sessionStorage.setItem("bxpbmsynced", "true"), bouncex.gbi.requestAndRefreshRequest(e) | |
}, document.body.appendChild(n) | |
}, | |
userSynced: function() { | |
return !!sessionStorage.getItem("bxpbmsynced") | |
}, | |
getTagId: function(e, t) { | |
var n = bouncex.campaigns[e]; | |
return n.subtype ? { | |
masthead: "Masthead", | |
endcap: "End_Cap", | |
encore: "Encore", | |
middleofarticle: "Middle_of_Article", | |
skyline: "Skyline" | |
}[n.subtype] + "_" + t : "overlay" === n.type ? "Overlay_" + t : "" | |
}, | |
getRequestData: function(e) { | |
var t = bouncex.campaigns[e].gbi.config, | |
n = (bouncex.state.mobile ? t.mobile_id : t.desktop_id).toString(), | |
i = bouncex.cookie.vid + "_" + bouncex.cookie.sid, | |
o = t.isLegacy ? t.requestData : {}, | |
a = t.isLegacy ? t.requestData.imp : t.imp, | |
r = this.getTagId(e, n); | |
if (a && a.length) | |
for (var s = 0; s < a.length; s++) a[s].video && (a[s] = bouncex.gbi.addFullVideoSupport(a[s])); | |
jQuery.extend(o, { | |
id: i, | |
site: { | |
id: n, | |
name: window.location.hostname, | |
ref: decodeURIComponent(bouncex.referrer), | |
page: decodeURIComponent(bouncex.calling_url), | |
publisher: { | |
id: t.publisher_id | |
} | |
}, | |
device: { | |
ua: navigator.userAgent, | |
ip: bouncex.state.vip | |
}, | |
imp: a.map(function(e, t) { | |
return e.id = getTimeMs().toString() + t, e.secure = bouncex.ssl ? 1 : 0, e.tagid = r, e | |
}), | |
at: 1, | |
tmax: 200 | |
}); | |
var c = this.getExtraIds(); | |
return c && (o.user = { | |
eids: c | |
}), o.source = { | |
pchain: bouncex.gbi.integrations.tag.generateId() | |
}, o | |
}, | |
getExtraIds: function() { | |
var e = window.bouncex.gbi.deviceOptedStatus; | |
if (e) return [{ | |
source: "bxid", | |
uids: [{ | |
id: e, | |
atype: 1 | |
}] | |
}] | |
}, | |
getFetchOptions: function(e) { | |
for (var t = this, n = bouncex.campaigns[e], i = n.gbi.config, o = t.getRequestData(e), a = (bouncex.ssl ? "https://" : "http://") + i.endpoint, r = o.imp.length, s = n.subtype || ("overlay" === n.type ? "overlay" : "none"), c = !!(o.user && o.user.eids && o.user.eids[0] && o.user.eids[0].uids && o.user.eids[0].uids[0] && o.user.eids[0].uids[0].id), u = 0; u < r; u++) | |
if (o.imp[u].video) { | |
n.gbi.isVideo = !0; | |
break | |
} | |
var b = { | |
partner: n.gbi.provider, | |
partner_site_id: o.site.id, | |
request_number: n.gbi.requestNum, | |
deployment: s, | |
requested_ad_units: i.units ? i.units.join(", ") : "", | |
request_timestamp: getTimeMs(), | |
device_id_included: c, | |
deal_id: "NA", | |
price: "NA" | |
}; | |
return { | |
url: a, | |
data: bouncex.stringify(o), | |
method: "POST", | |
type: "POST", | |
dataType: "json", | |
timeout: i.timeout || 2e3, | |
complete: function(n, i) { | |
t.handleResponse(e, n, i, b) | |
} | |
} | |
}, | |
handleResponse: function(e, t, n, i) { | |
var o = bouncex.campaigns[e], | |
a = "bid_error"; | |
if ("success" === n && 200 === t.status) { | |
var r = this.processResponse(e, t.responseText); | |
r && r.dealid && (i.deal_id = r.dealid), r && r.price && (i.price = r.price), a = r ? "bid_fill" : "bid_none" | |
} else "nocontent" === n && 204 === t.status ? a = "bid_empty" : 0 === t.status && (a = "bid_cancel"); | |
if (bouncex.gbi.report(e, a, i), "bid_fill" == a) o.gbi.isVideo ? bouncex.gbi.requestCompleteSingleVideo(e, r.adm) : o.gbi.html = r.adm, activateGbiCampaign(e); | |
else { | |
if ("bid_empty" == a) return bouncex.gbi.fail(e, "empty bid response"); | |
if ("bid_none" == a) return bouncex.gbi.fail(e, "no bid"); | |
if ("bid_error" == a) return bouncex.gbi.fail(e, "status " + t.status + ": " + n) | |
} | |
}, | |
fetch: function(e) { | |
bouncex.gbi.doAjaxRequest(e, this.getFetchOptions(e)) | |
}, | |
processResponse: function(e, t) { | |
return !!t && (t = bouncex.parseJSON(t)).seatbid[0].bid[0] | |
} | |
}, | |
rcl: { | |
request: function(e) { | |
bouncex.gbi.init(e); | |
try { | |
this.init(e) | |
} catch (t) { | |
bouncex.gbi.fail(e, t) | |
} | |
}, | |
init: function(e) { | |
var t = bouncex.campaigns[e]; | |
t.gbi.isVideo = !0, t.gbi.playBeforeImpression = !0, bouncex.gbi.requestCompleteSingleVideo(e, this.getVastUrl(e)), activateGbiCampaign(e) | |
}, | |
getVastUrl: function(e) { | |
var t = bouncex.campaigns[e].gbi.config, | |
n = t.requestUrl, | |
i = t.requestData; | |
for (var o in i.PAGE_URL = bouncex.calling_url, i.cb = getTime2(), i) n = updateQS(n, o, i[o]); | |
return n | |
} | |
} | |
}; | |
var NativeCapture = { | |
_captureContexts: [], | |
_hasSentEvent: !1, | |
_inputExclusionIdentifiers: ["[type=button]", "[type=submit]", "[type=reset]", "[type=hidden]", "[type=radio]", "[type=checkbox]", "[type=image]", "[type=password]"], | |
_submitIdentifiers: [ | |
["[type=submit]", "[class*=submit]", "[id*=submit]"], | |
["[type=button]", "[class*=button]", "button"], | |
["a"] | |
], | |
_addCaptureListeners: function() { | |
this._log("adding capture context listeners"); | |
var e = this; | |
this._captureContexts.forEach(function(t) { | |
var n = tryCatch(function() { | |
e._log("submit detected; checking input value"); | |
var n = t.input.value; | |
n && bouncex.utils.validate.email(n) ? (e._log("email detected"), e._trackUser(n, t.input.id)) : e._log("no email detected") | |
}); | |
t.submit.addEventListener("click", n), t.input.addEventListener("keydown", function(e) { | |
("Enter" === e.code || 13 === e.keyCode) && n() | |
}) | |
}) | |
}, | |
_addCustomCaptureContexts: function() { | |
var e = bouncex.website.els, | |
t = {}, | |
n = this._getExclusionIdentifiers(bouncex.website.ibx.miw_exclude); | |
if (e && 0 < Object.keys(e).length) | |
for (key in e) { | |
if (-1 < key.indexOf("native_capture_input")) { | |
var i = e[key] + ":not(" + n + ")", | |
o = jQuery(i).get(0); | |
t[a = this._customElemObjKey(key, "native_capture_input")] = t[a] ? t[a] : {}, t[a].input = o | |
} | |
if (-1 < key.indexOf("native_capture_submit")) { | |
var a, r = jQuery(e[key]).get(0); | |
t[a = this._customElemObjKey(key, "native_capture_submit")] = t[a] ? t[a] : {}, t[a].submit = r | |
} | |
} | |
for (pair in t) t[pair].input && t[pair].submit && this._captureContexts.push({ | |
input: t[pair].input, | |
submit: t[pair].submit | |
}) | |
}, | |
_customElemObjKey: function(e, t) { | |
return e.replace(t, "") + "_" | |
}, | |
_getExclusionIdentifiers: function(e) { | |
var t = this._inputExclusionIdentifiers.slice(); | |
return e ? t.concat(e.split(",").map(function(e) { | |
return e.trim() | |
})) : t | |
}, | |
_getInputSelector: function() { | |
var e = "input"; | |
return this._getExclusionIdentifiers(bouncex.website.ibx.miw_exclude).forEach(function(t) { | |
e += ":not(" + t + ")" | |
}), e | |
}, | |
_initCaptureContexts: function(e) { | |
for (var t = 0; t < e.length; t++) e: for (var n = 0; n < this._submitIdentifiers.length; n++) | |
for (var i, o = this._submitIdentifiers[n].join(","), a = e[t].parentNode, r = 0; r < 10 && a; r++) { | |
if (i = a.querySelector(o)) { | |
this._captureContexts.push({ | |
input: e[t], | |
submit: i | |
}); | |
break e | |
} | |
a = a.parentNode | |
} | |
}, | |
_log: function(e) { | |
_logger2.default.info({ | |
group: "capture", | |
message: e | |
}) | |
}, | |
_trackUser: function(e, t) { | |
if (this._hasSentEvent) return !1; | |
this._log("sending user event"); | |
var n = { | |
email: e, | |
source: "input_submission" | |
}; | |
t && (n.input_id = t), bouncex.push(["user", n]), this._hasSentEvent = !0 | |
}, | |
init: function() { | |
this._log("initializing native capture"), this._addCustomCaptureContexts(); | |
var e = this._getInputSelector(), | |
t = jQuery(e).get(); | |
return this._captureContexts.length || t.length ? (this._log("searching for capture contexts"), this._initCaptureContexts(t), void(this._captureContexts.length ? (this._log("found " + this._captureContexts.length + " capture contexts"), this._addCaptureListeners()) : this._log("no capture contexts found"))) : (this._log("no input fields found"), !1) | |
} | |
}; | |
bouncex.osr = { | |
init: function(e, t) { | |
try { | |
bouncex.osr.log(e, t ? "init OSR on product page, excluding item #" + t : "init OSR", !1), this._getOsrParamsJson(e, bouncex.campaigns[e].osr_params_json), this._getItems(e, t) | |
} catch (e) { | |
bouncex.err(e, { | |
source: "osr js" | |
}) | |
} | |
}, | |
_getItems: function(e, t) { | |
bouncex.osr.log(e, "getting items", !1); | |
var n = bouncex.campaigns[e].osr.config.endpoint; | |
t && (n = n + "," + t); | |
var i = { | |
url: n, | |
method: "GET", | |
timeout: 4e3, | |
dataType: "json", | |
complete: function(t) { | |
if (bouncex.osr._handleResponse(e, t) && (bouncex.osr.log(e, "tracked items successfully loaded", !1), cacheCreativeForm(e, 1), bouncex.osr.activateCampaign(e)), !bouncex.campaigns[e].osrItems) return bouncex.osr.fail(e, "no items returned, OSR campaign " + e + " is ineligible") | |
} | |
}; | |
bouncex.utils.doAjaxRequest(i) | |
}, | |
_getOsrParamsJson: function(e, t) { | |
var n, i = bouncex.parseJSON(t); | |
bouncex.campaigns[e].osr = {}, bouncex.campaigns[e].osr.config = {}, n = i.sortBy + "," + i.minProducts + "," + i.maxProducts, i.endpoint = "https://" + bouncex.website.osru + "?website_id=" + bouncex.website.id + "&device_id=" + bouncex.cookie.did + "&visit_id=" + bouncex.cookie.vid + "&osr_params=" + n, bouncex.campaigns[e].osr.config = i | |
}, | |
_handleResponse: function(e, t) { | |
if (t && 200 === t.status) try { | |
var n = t.responseText; | |
if (n.trim() && 0 !== n.length) return bouncex.campaigns[e].osrItems = bouncex.parseJSON(n).items, bouncex.osr._populateCreative(e, bouncex.campaigns[e].osrItems); | |
bouncex.osr.fail(e, "empty response") | |
} catch (t) { | |
bouncex.osr.fail(e, t) | |
} else if (t && 202 === t.status) try { | |
-1 < t.responseText.indexOf("Not enough 'view item' events") && bouncex.osr.fail(e, "OSR campaign's minimum # of products is greater than the user's history of 'view item' events.") | |
} catch (t) { | |
bouncex.osr.fail(e, t) | |
} | |
return !1 | |
}, | |
_populateCreative: function(e, t) { | |
if (bouncex.campaigns[e].control) return !0; | |
var n = document.getElementById("bx-campaign-" + e), | |
i = n.cloneNode(!0); | |
return n.innerHTML = this._populateClonedCreativeTemplate(bouncex.campaigns[e].numSteps, i, t, bouncex.campaigns[e].osr.config, e), !0 | |
}, | |
_populateClonedCreativeTemplate: function(e, t, n, i, o) { | |
var a = 0; | |
this._adjustLocalItemsObject(o, n, i), this._populateOsrItemNumberElements(this._getOsrItemNumberElements(t), bouncex.campaigns[o].osrItems.length), ("development" === bouncex.env || "staging" === bouncex.env) && n.length > bouncex.campaigns[o].osrItems.length && (n = bouncex.campaigns[o].osrItems); | |
for (var r, s = 1; s <= e; s++) { | |
r = this._getOsrGroups(s, t); | |
for (var c = 0; c < r.length; c++) { | |
var u = n[c], | |
b = r[c]; | |
b && u ? b.innerHTML = bouncex.osr._populateClonedCreativeGroups(b, u, i) : b.parentNode.removeChild(b) | |
} | |
r.length && (a = r.length) | |
} | |
return bouncex.campaigns[o].osr.config.inconsistentMaxParamToCreativeMax && 0 < a && a !== n.length && (bouncex.campaigns[o].osrItems = n.slice(0, a), this._populateOsrItemNumberElements(this._getOsrItemNumberElements(t), a)), t.innerHTML | |
}, | |
_adjustLocalItemsObject: function(e, t, n) { | |
var i = []; | |
if (t.length > n.maxProducts) { | |
for (var o in bouncex.campaigns[e].osr.config.inconsistentMaxParamToCreativeMax = !0, t)(i.length < n.maxProducts || void 0 === i.length) && i.push(t[o]); | |
bouncex.campaigns[e].osrItems = i | |
} | |
}, | |
_populateClonedCreativeGroups: function(e, t, n, i) { | |
var o, a, r = bouncex.osr._setLinkBehavior(n.linkBehavior), | |
s = e.querySelectorAll("[data-bx-osr]", i); | |
for ("true" === n.disableGroupLinks ? bouncex.osr._setOsrAttributes(e, { | |
style: "cursor:default !important" | |
}) : bouncex.osr._setOsrAttributes(e, { | |
href: t.url, | |
"data-click": "hyperlink", | |
target: r, | |
"data-click-report": "default" | |
}), i = 0; i < s.length; i++) a = (o = s[i]).getAttribute("data-bx-osr"), bouncex.osr._populateItemProperties(o, a, t, n, r); | |
return e.innerHTML | |
}, | |
_populateItemProperties: function(e, t, n, i, o) { | |
"imageurl" === t ? bouncex.osr._populateImages(e, n[t]) : "price" === t ? bouncex.osr._populatePrice(e, i.currency, n[t]) : "url" === t ? bouncex.osr._populateUrl(e, o, n[t]) : e.firstChild.textContent = n[t] | |
}, | |
_getOsrGroups: function(e, t) { | |
return t.querySelectorAll(".bx-step-" + e + ' [data-bx-osr="group"]') | |
}, | |
_getOsrItemNumberElements: function(e) { | |
return e.querySelectorAll('[data-bx-osr="numitems"]') | |
}, | |
_populateOsrItemNumberElements: function(e, t) { | |
for (var n = 0; n < e.length; n++) { | |
var i, o = e[n]; | |
o && 0 < t && (i = o.textContent.replace(o.textContent, t), o.textContent = i) | |
} | |
}, | |
_setOsrAttributes: function(e, t) { | |
for (var n in t) e.setAttribute(n, t[n]) | |
}, | |
_populateUrl: function(e, t, n) { | |
0 < e.getElementsByTagName("button").length && (e = e.getElementsByTagName("button")[0]), this._setOsrAttributes(e, { | |
href: n, | |
"data-click": "hyperlink", | |
target: t, | |
"data-click-report": "default" | |
}), e.classList.add("bx-osr-preventclicks") | |
}, | |
_populatePrice: function(e, t, n) { | |
var i = this._getFormattedCurrency(t, n); | |
e.firstChild.textContent = i | |
}, | |
_populateImages: function(e, t) { | |
"DIV" === e.firstChild.tagName ? e.firstChild.setAttribute("style", "background-image:url('" + t + "')") : e.firstChild.setAttribute("src", t) | |
}, | |
_getFormattedCurrency: function(e, t) { | |
return "USD" === e ? "$" + t : "EU" === e ? "€" + t : "$" + t | |
}, | |
_setLinkBehavior: function(e) { | |
return "newTab" === e ? "_blank" : "currTab" === e ? "_self" : "_blank" | |
}, | |
activateCampaign: function(e) { | |
bouncex.osr.log(e, "activating OSR campaign", !1), activate_campaign(e) | |
}, | |
log: function(e, t, n) { | |
var i = { | |
group: "osr", | |
campaignId: e, | |
message: t | |
}; | |
n ? _logger2.default.error(i) : _logger2.default.info(i) | |
}, | |
fail: function(e, t) { | |
bouncex.campaigns[e].failed = !0, this.log(e, t, !0) | |
} | |
}; | |
var TabTalk = { | |
_flashTitle: function(e, t) { | |
var n = this, | |
i = bouncex.campaigns[e]; | |
t = t || 5, this.cancelTitleUpdate(e), | |
function o() { | |
i.custom_tab_title.flashOn ? (i.custom_tab_title.flashOn = !1, i.custom_tab_title.formattedTitle && (document.title = bouncex.originalTitle), n.changeFavicon(e, !0)) : (i.custom_tab_title.flashOn = !0, i.custom_tab_title.formattedTitle && (document.title = i.custom_tab_title.formattedTitle), n.changeFavicon(e, !1)), 0 < --t && (bouncex.events[e].effect_timeout = setTimeout2(o, 2e3)) | |
}() | |
}, | |
_scrollTitle: function(e, t) { | |
var n = bouncex.campaigns[e]; | |
n.custom_tab_title.formattedTitle && (t = t || 0, this.cancelTitleUpdate(e), function i() { | |
var o = n.custom_tab_title.formattedTitle + " "; | |
t > o.length && (t = 0), document.title = o.substr(t) + o.substr(0, t), t += 3, bouncex.events[e].effect_timeout = setTimeout2(i, 1e3) | |
}()) | |
}, | |
cancelTitleUpdate: function(e) { | |
clearTimeout(bouncex.events[e].effect_timeout), document.title = bouncex.originalTitle ? bouncex.originalTitle : "", delete bouncex.campaigns[e].custom_tab_title.flashOn | |
}, | |
changeFavicon: function(e, t) { | |
var n = bouncex.campaigns[e]; | |
if (n.custom_tab_title.favicon_url) { | |
jQuery('link[rel~="icon"]').remove(); | |
var i = document.createElement("link"); | |
i.type = t ? "image/x-icon" : n.linkType, i.rel = "icon", i.href = t ? n.originalFavicon : n.custom_tab_title.favicon_url, document.getElementsByTagName("head")[0].appendChild(i) | |
} | |
}, | |
updateTitle: function(e) { | |
var t = bouncex.campaigns[e]; | |
bouncex.originalTitle = bouncex.originalTitle || document.title; | |
var n = jQuery('link[rel~="icon"]'); | |
t.originalFavicon = n && n.attr("href") || "/favicon.ico", t.linkType = t.custom_tab_title.favicon_type || "image/x-icon"; | |
var i = t.custom_tab_title.effect, | |
o = "flashForever" === i ? 1 / 0 : 1; | |
"scroll" === i ? this._scrollTitle(e) : this._flashTitle(e, 2 * o - 1), this.changeFavicon(e, !1) | |
} | |
}; | |
exports.activate_campaign = activate_campaign, exports.activateInstruments = activateInstruments, exports.ActiveTime = ActiveTime, exports.activation_funcs = activation_funcs, exports.addTriggerToRegistry = addTriggerToRegistry, exports.applyCampaignStyles = applyCampaignStyles, exports.assignDomReferencesToCampaign = assignDomReferencesToCampaign, exports.baddjs = baddjs, exports.bcx_init = bcx_init, exports.bcxReady = bcxReady, exports.BehavioralCriteria = BehavioralCriteria, exports.behavioralCriteriaComplete = behavioralCriteriaComplete, exports.BrowserUtil = BrowserUtil, exports.buildReport = buildReport, exports.BxInterval = BxInterval, exports.cacheCreativeForm = cacheCreativeForm, exports.campaignEligible = campaignEligible, exports.can_init = can_init, exports.can_init_post_cookie = can_init_post_cookie, exports.can_show_ad = can_show_ad, exports.clearBounceCookie = clearBounceCookie, exports.close_ad = close_ad, exports.ComplianceChecks = ComplianceChecks, exports.CouponCodes = CouponCodes, exports.createIframe = createIframe, exports.Criteria = Criteria, exports.CustomVariables = CustomVariables, exports.Debug = Debug, exports.evaluateBehavioralTriggers = evaluateBehavioralTriggers, exports.event_js_eval = event_js_eval, exports.EventListeners = EventListeners, exports.event_stream_report = event_stream_report, exports.getBounceCookieFPLocalStorage = getBounceCookieFPLocalStorage, exports.getBounceCookieLocalStorage = getBounceCookieLocalStorage, exports.getBounceCookieMulti = getBounceCookieMulti, exports.getBounceCookieSingle = getBounceCookieSingle, exports.getBounceVisitCookie = getBounceVisitCookie, exports.getParam = getParam, exports.getScript = getScript, exports.getTime2 = getTime2, exports.getTimeMs = getTimeMs, exports.getUniqueInstrumentId = getUniqueInstrumentId, exports.initActivationInstruments = initActivationInstruments, exports.initBa = initBa, exports.initBehavioralCriteriaInstruments = initBehavioralCriteriaInstruments, exports.init_browser = init_browser, exports.init_cookie_functions = init_cookie_functions, exports.init_cookie_localstorage = init_cookie_localstorage, exports.init_endpageview_event = init_endpageview_event, exports.init_event_tracking = init_event_tracking, exports.init_ibx = init_ibx, exports.init_ibx_tracking = init_ibx_tracking, exports.init_page_types = init_page_types, exports.initPreInitCustomJs = initPreInitCustomJs, exports.init_protocol_and_domain = init_protocol_and_domain, exports.init_public_functions = init_public_functions, exports.InitSequence = InitSequence, exports.init_testmode_before_cookie = init_testmode_before_cookie, exports.init_testmode_after_cookie = init_testmode_after_cookie, exports.init_url_and_referrer = init_url_and_referrer, exports.init_visit_cookie = init_visit_cookie, exports.init_website_custom_js = init_website_custom_js, exports.isBxInternalTraffic = isBxInternalTraffic, exports.isMissingTarget = isMissingTarget, exports.loadCouponsAndValidateForm = loadCouponsAndValidateForm, exports.loadImages = loadImages, exports.Logger = _logger2.default, exports.make_include_string = make_include_string, exports.NativeCapture = NativeCapture, exports.next_sequence_id = next_sequence_id, exports.noteCookieAdShown = noteCookieAdShown, exports.parseJSON = parseJSON, exports.parseSiteElementSelector = parseSiteElementSelector, exports.perf = perf, exports.placeCampaign = placeCampaign, exports.qs = qs, exports.Records = _records2.default, exports.ReloadCampaigns = ReloadCampaigns, exports.report = report, exports.report_submit = report_submit, exports.setAccessibilityProperties = setAccessibilityProperties, exports.setBounceCookieFPLocalStorage = setBounceCookieFPLocalStorage, exports.setBounceCookieLocalStorage = setBounceCookieLocalStorage, exports.setBounceCookieMulti = setBounceCookieMulti, exports.setBounceCookieSingle = setBounceCookieSingle, exports.setBounceVisitCookie = setBounceVisitCookie, exports.setCalloutTarget = setCalloutTarget, exports.setCampaignCalloutTargetToIndex = setCampaignCalloutTargetToIndex, exports.setTimeout2 = setTimeout2, exports.setTransitionEffect = setTransitionEffect, exports.shouldEnforcePolicies = shouldEnforcePolicies, exports.show_ad = show_ad, exports.SinglePageApp = SinglePageApp, exports.stringify_cookie = stringify_cookie, exports.TabTalk = TabTalk, exports.trigger_ad = trigger_ad, exports.tryCatch = tryCatch, exports.unload_campaign = unload_campaign, exports.updateQS = updateQS, exports.visitorTestMode = visitorTestMode, exports.wndorientation = wndorientation, exports.wndsize = wndsize | |
}, function(e, t, n) { | |
function i(e) { | |
if (e.shouldLog) { | |
c.default.addRecord(e); | |
var t = "%c "; | |
e.type && (t += "[".concat(e.type.toUpperCase(), "] ")), e.group && (t += "(".concat(e.group, ") ")), e.campaignId && (t += "(#".concat(e.campaignId, ") ")), t += e.message, bouncex.log(t, "color: ".concat(e.color)) | |
} | |
} | |
function o(e, t) { | |
var n = "string" == typeof e ? { | |
message: e | |
} : e; | |
for (var i in void 0 !== n.shouldLog && (n.shouldLog = n.shouldLog || t.shouldLog), t) void 0 === n[i] && (n[i] = t[i]); | |
return n | |
} | |
Object.defineProperty(t, "__esModule", { | |
value: !0 | |
}); | |
var a, r = n(0), | |
s = n(3), | |
c = (a = s) && a.__esModule ? a : { | |
default: a | |
}; | |
t.default = { | |
info: function(e) { | |
i(o(e, { | |
shouldLog: (0, r.visitorTestMode)("log"), | |
type: "info", | |
color: "#5d59e8" | |
})) | |
}, | |
warn: function(e) { | |
i(o(e, { | |
shouldLog: (0, r.visitorTestMode)("log") || (0, r.visitorTestMode)("log:warn"), | |
type: "warn", | |
color: "#dd7300" | |
})) | |
}, | |
debug: function(e) { | |
i(o(e, { | |
shouldLog: (0, r.visitorTestMode)("log") || (0, r.visitorTestMode)("log:warn"), | |
type: "debug", | |
color: "#9500dd" | |
})) | |
}, | |
error: function(e) { | |
i(o(e, { | |
shouldLog: (0, r.visitorTestMode)("log") || (0, r.visitorTestMode)("log:warn") || (0, r.visitorTestMode)("log:error"), | |
type: "error", | |
color: "#dd0000" | |
})) | |
} | |
} | |
}, function(e, t, n) { | |
function i(e) { | |
if (e.internal && (0, a.isBxInternalTraffic)()) return !0; | |
if (e.liveTraffic) switch (e.type) { | |
case "canary": | |
return t = e.liveTraffic, r < t; | |
case "device": | |
default: | |
return o(e.liveTraffic) | |
} | |
var t; | |
return !1 | |
} | |
function o(e) { | |
var t = bouncex.cookie && bouncex.cookie.did; | |
return !!t && +t.substr(t.length - 2) < e | |
} | |
Object.defineProperty(t, "__esModule", { | |
value: !0 | |
}), t._setPageId = function(e) { | |
r = e | |
}; | |
var a = n(0), | |
r = Math.floor(100 * Math.random()); | |
t.default = { | |
apply: function(e, t) { | |
i(e) && t() | |
} | |
} | |
}, function(e, t, n) { | |
function i(e) { | |
return "function" == typeof e ? r.filter(e) : r | |
} | |
Object.defineProperty(t, "__esModule", { | |
value: !0 | |
}); | |
var o = n(0), | |
a = 500, | |
r = []; | |
t.default = { | |
addRecord: function(e) { | |
if (!(0, o.isBxInternalTraffic)()) return !1; | |
r.length >= a && r.shift(); | |
var t = bouncex.utils.isObject(e) ? e : {}; | |
"string" == typeof e && (t.message = e), t.group = t.group || !1, t.message = t.message || "", t.isError = !!t.isError, t.timestamp = (0, o.getTimeMs)(), r.push(t) | |
}, | |
clearRecords: function() { | |
r = [] | |
}, | |
getRecords: i, | |
printRecords: function(e) { | |
var t, n, o; | |
i(e).forEach(function(e) { | |
n = new Date(e.timestamp).toLocaleTimeString(), o = e.isError ? "#FF0000" : "#00F", t = "%c ", e.group && (t += "(".concat(e.group, ") ")), e.campaignId && (t += "(".concat(e.campaignId, ") ")), t += "(".concat(n, ") "), t += e.message, bouncex.log(t, "color: ".concat(o)) | |
}) | |
} | |
} | |
}, function(e, t) { | |
Object.defineProperty(t, "__esModule", { | |
value: !0 | |
}), t.default = { | |
reload: function() { | |
bouncex.reload_campaigns() | |
} | |
} | |
}, function(e, t) { | |
function n() { | |
return !(bouncex.browser.ios && bouncex.browser.chrome || !+bouncex.website.aco.local_storage) | |
} | |
function i() { | |
return "multi_cookie" == bouncex.website.ct && bouncex.website.aco.disable_first_party || !(6e3 < document.cookie.length) | |
} | |
Object.defineProperty(t, "__esModule", { | |
value: !0 | |
}), t.can_local_store = n, t.checkCookieEligibility = i, t.init_cookie_check = function() { | |
bouncex.local_storage_enabled = n(), bouncex.cookie_too_large = !1, bouncex.local_storage_enabled || "multi_cookie" == bouncex.website.ct || i() || (bouncex.cookie_too_large = !0) | |
} | |
}, function(e, t, n) { | |
Object.defineProperty(t, "__esModule", { | |
value: !0 | |
}); | |
var i, o = n(1), | |
a = (i = o) && i.__esModule ? i : { | |
default: i | |
}; | |
t.default = { | |
_articles: [], | |
_constants: { | |
selectors: { | |
group: ".bx-group-custom", | |
image: ".bx-row-line", | |
headline: ".bx-row-text-subheadline" | |
} | |
}, | |
_getArticles: function() { | |
return this._articles | |
}, | |
_getRequestOptions: function() { | |
var e = this; | |
return { | |
url: e._settings.feedUrl, | |
dataType: e._settings.feedFormat, | |
complete: function(t, n) { | |
e._handleResponse(t, n) | |
} | |
} | |
}, | |
_getStorageKey: function() { | |
return "bx-recirc-" + bouncex.website.id | |
}, | |
_getStoredArticles: function() { | |
var e = this._getStorageKey(), | |
t = window.sessionStorage.getItem(e); | |
return bouncex.parseJSON(t, []) | |
}, | |
_getValidArticles: function(e) { | |
for (var t = [], n = 0; n < e.length; n++) this._isValidArticle(e[n]) && t.push(e[n]); | |
return t | |
}, | |
_getValidGroups: function(e) { | |
for (var t = e.querySelectorAll(this._constants.selectors.group), n = [], i = 0; i < t.length; i++) this._isValidGroup(t[i]) && n.push(t[i]); | |
return n | |
}, | |
_handleResponse: function(e, t) { | |
if ("error" === t) return this.error(null, "error response from article feed"); | |
this.log(null, "parsing feed response"); | |
var n = this._parseArticles(e); | |
if (!n) return this.error(null, "no articles found while parsing feed response"); | |
var i = this._getValidArticles(n); | |
return i.length ? (this.log(null, i.length + "/" + n.length + " articles passed validation"), this._setArticles(i), void this._storeArticles(i)) : this.error(null, "all articles failed validation") | |
}, | |
_isValidGroup: function(e) { | |
var t = 1 === e.querySelectorAll(this._constants.selectors.image).length, | |
n = 1 === e.querySelectorAll(this._constants.selectors.headline).length, | |
i = 1 === e.querySelectorAll("a").length; | |
return t && n && i | |
}, | |
_requestFeed: function(e) { | |
this.log(null, "requesting articles from " + e.url), jQuery.ajax(e) | |
}, | |
_setArticles: function(e) { | |
this._articles = e | |
}, | |
_storeArticles: function(e) { | |
this.log(null, "storing articles in session storage"); | |
var t = this._getStorageKey(); | |
try { | |
window.sessionStorage.setItem(t, JSON.stringify(e)) | |
} catch (e) { | |
this.error(null, e) | |
} | |
}, | |
_isValidArticle: function(e) { | |
if (!e) return !1; | |
var t = !(!e.link || !bouncex.utils.validate.url(e.link)), | |
n = !(!e.image || !bouncex.utils.validate.url(e.image)), | |
i = !!e.headline; | |
return t && n && i | |
}, | |
_parseArticles: function(e) { | |
switch (this._settings.feedFormat) { | |
case "xml": | |
return this._settings.responseParser(e.responseXML); | |
case "json": | |
return this._settings.responseParser(e.responseJSON); | |
default: | |
return this.error(null, "unrecognized feed format type"), !1 | |
} | |
}, | |
_populateGroup: function(e, t, n) { | |
try { | |
var i = t.querySelectorAll(this._constants.selectors.image)[0].firstChild, | |
o = t.querySelectorAll(this._constants.selectors.headline)[0].firstChild, | |
a = t.querySelector("a"); | |
i.style.backgroundImage = "url(" + n.image + ")", i.style.backgroundSize = "cover", o.textContent = n.headline, a.setAttribute("href", n.link) | |
} catch (t) { | |
this.error(e, t) | |
} | |
}, | |
_settings: {}, | |
_validateSettings: function() { | |
return !!(this._settings.feedFormat && this._settings.feedUrl && this._settings.responseParser && "function" == typeof this._settings.responseParser) | |
}, | |
addSettings: function(e) { | |
for (var t in e) bouncex.recirc._settings[t] = e[t] | |
}, | |
articlesAvailable: function() { | |
return 0 < this._articles.length | |
}, | |
error: function(e, t) { | |
this.log(e, t, !0) | |
}, | |
init: function() { | |
if (this.isEnabled() && !this.articlesAvailable()) { | |
if (!this._validateSettings()) return this.log(null, "settings failed validation"); | |
var e = this._getStoredArticles(); | |
e && e.length ? (this.log(null, "retrieving articles from session storage"), this._setArticles(e)) : (this.log(null, "no articles found in storage; requesting from feed"), this._requestFeed(this._getRequestOptions())) | |
} | |
}, | |
isEnabled: function() { | |
return !!this._settings.enabled | |
}, | |
log: function(e, t, n) { | |
var i = { | |
group: "recirc", | |
campaignId: e, | |
message: t | |
}; | |
n ? a.default.error(i) : a.default.info(i) | |
}, | |
populateCreative: function(e) { | |
if (!this.isEnabled()) return !1; | |
if (!this.articlesAvailable()) return !1; | |
var t = document.getElementById("bx-campaign-" + e); | |
if (!t) return this.error(e, "no creative found"); | |
var n = this._getValidGroups(t), | |
i = this._getArticles(); | |
if (n.length && n.length <= i.length) { | |
this.log(e, "populating article groups"); | |
for (var o = 0; o < n.length; o++) this._populateGroup(e, n[o], i[o]) | |
} else n.length && this.log(e, "not enough articles to populate creative") | |
} | |
} | |
}, function(e, t, n) { | |
function i(e) { | |
return e && e.__esModule ? e : { | |
default: e | |
} | |
} | |
Object.defineProperty(t, "__esModule", { | |
value: !0 | |
}); | |
var o = n(0), | |
a = i(n(8)), | |
r = (i(n(2)), { | |
_activateBehavioralTriggers: function(e) { | |
(0, o.activateInstruments)(e) | |
}, | |
_activateCampaign: function(e) { | |
this.log(e, "activating campaign"); | |
var t = bouncex.campaigns[e], | |
n = this; | |
t.gbi.ready = !0, t.gbi.hasActivatedOnce || ((0, o.event_js_eval)(e, "activation"), t.gbi.hasActivatedOnce = !0), (0, o.setTimeout2)(function() { | |
t.ad_shown || t.failed || (n._deactivateCampaign(e), n.initCampaign(e)) | |
}, 5e4) | |
}, | |
_activateCreative: function(e, t) { | |
this.log(e, "activating creative"); | |
var n = bouncex.campaigns[e], | |
i = bouncex.creatives[t], | |
a = /{bpcid}/g; | |
return n.html = i.html.replace(a, e), n.styles = i.styles.replace(a, e), (0, o.setCalloutTarget)(n), (0, o.isMissingTarget)(n) ? (bouncex.gbi2.error(e, "no anchor found"), this._failCampaign(e)) : ((0, o.placeCampaign)(e), (0, o.assignDomReferencesToCampaign)(e), (0, o.cacheCreativeForm)(e, 1), (0, o.setAccessibilityProperties)(e), (0, o.setTransitionEffect)(e), void(0, o.applyCampaignStyles)(e)) | |
}, | |
_activatePlacement: function(e, t) { | |
var n = bouncex.campaigns[e], | |
i = t.placementId, | |
o = n.gbi.placements[i], | |
a = this; | |
if (this.log(e, "activating placement #" + i), n.activePlacementId = i, n.activeAdUnitId = o.adUnitId, this._activateCreative(e, o.creativeId), bouncex.recirc.populateCreative(e), "display" == o.mediaType) n.onImpression = function(i) { | |
a._populateDisplayAd(e, { | |
trigger: n.trigger, | |
content: t.adHtml, | |
width: o.width, | |
height: o.height, | |
deployment: o.deployment, | |
onReady: i | |
}) | |
}, this._activateCampaign(e); | |
else if ("video" == o.mediaType) { | |
var r = { | |
vast: t.vastData, | |
width: o.width, | |
height: o.height | |
}, | |
s = n.obj1.find('video[id*="bx-video-player"]'); | |
s && 0 < s.length ? (n.gbi.isVideo = !0, bouncex.video.init(e, r.vast, t.provider, o)) : this._prepareVideo(e, r, function() { | |
a._activateCampaign(e) | |
}) | |
} | |
}, | |
_adjustPosition: function(e) { | |
if ("masthead" === this._getDeploymentType(e)) { | |
var t = bouncex.campaigns[e]; | |
bouncex.window.scrollTop(t.obj1.offset().top) | |
} | |
}, | |
_allRequestsAreComplete: function(e) { | |
for (var t = bouncex.campaigns[e].gbi.requests, n = !0, i = 0; i < t.length; i++) t[i].endTime || (n = !1); | |
return n | |
}, | |
_attachClickReporting: function(e, t) { | |
bouncex.on(t, "mouseenter.gbi_click_events_" + e, function() { | |
bouncex.on(bouncex.window, "blur.gbi_click_events_" + e, function() { | |
bouncex.report(e, "click", { | |
value: "ad" | |
}) | |
}) | |
}), bouncex.events[e].gbi_click = function() { | |
bouncex.off(bouncex.window, "blur.gbi_click_events_" + e) | |
}, bouncex.on(t, "mouseleave.gbi_click_events_" + e, bouncex.events[e].gbi_click) | |
}, | |
_bidFilters: { | |
isPerformanceBid: function(e) { | |
var t = []; | |
return e.forEach(function(e) { | |
"perf" === e.provider && t.push(e) | |
}), t.length ? t : e | |
}, | |
hasDealId: function(e) { | |
var t = []; | |
return e.forEach(function(e) { | |
e.dealId && t.push(e) | |
}), t.length ? t : e | |
}, | |
hasHighestPrice: function(e) { | |
var t = [], | |
n = 0; | |
return e.forEach(function(e) { | |
e.price > n ? (n = e.price, t = [e]) : e.price == n && t.push(e) | |
}), t.length ? t : e | |
}, | |
arrivedFirst: function(e) { | |
var t = [], | |
n = 0; | |
return e.forEach(function(e) { | |
0 === n || e.arrivalTime < n ? (n = e.arrivalTime, t = [e]) : e.arrivalTime == n && t.push(e) | |
}), t.length ? t : e | |
} | |
}, | |
_compose: function() { | |
var e = Array.prototype.slice.call(arguments), | |
t = {}; | |
return e.forEach(function(e) { | |
for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) | |
}), t | |
}, | |
_constants: { | |
auctionDelayInMilliseconds: 2e3, | |
bidEvents: { | |
fill: "bid_fill", | |
none: "bid_none", | |
empty: "bid_empty", | |
error: "bid_error", | |
cancelled: "bid_cancel", | |
selected: "bid_selected" | |
}, | |
targetSelector: ".bx-group-placeholder:eq(0)" | |
}, | |
_createAndSendRequests: function(e, t) { | |
this.log(e, "sending bid requests"); | |
var n = []; | |
for (var i in t) | |
if (t.hasOwnProperty(i)) { | |
var o = t[i]; | |
o.providers.forEach(function(t) { | |
var a = this._createBidRequest(t, { | |
campaignId: e, | |
placementId: i, | |
adUnitId: o.adUnitId, | |
type: o.mediaType, | |
width: o.width, | |
height: o.height, | |
deployment: o.deployment | |
}); | |
n.push(a), a.init() | |
}.bind(this)) | |
} | |
return n | |
}, | |
_createBid: function(e) { | |
return { | |
provider: e.provider, | |
campaignId: e.campaignId, | |
placementId: e.placementId, | |
adUnitId: e.adUnitId, | |
price: e.price, | |
adHtml: e.adHtml, | |
vastData: e.vastData, | |
dealId: e.dealId, | |
arrivalTime: e.arrivalTime, | |
targeting: e.targeting | |
} | |
}, | |
_createBidRequest: function(e, t) { | |
return this._requestIndex[e](t) | |
}, | |
_createDisplayFrame: function() { | |
return (0, o.createIframe)({ | |
target: "_blank", | |
class: "bx-gbi-frame", | |
frameborder: "0", | |
horizontalscrolling: "no", | |
verticalscrolling: "no", | |
width: "100%", | |
height: "100%", | |
vspace: "0", | |
hspace: "0", | |
marginwidth: "0", | |
marginheight: "0", | |
scrolling: "no", | |
allowTransparency: "true" | |
}) | |
}, | |
_customizations: { | |
anchor: { | |
updateDynamicAnchor: function(e) { | |
var t = bouncex.campaigns[e]; | |
if (t.dynamic_anchor && !t.gbi.contentLoaded) { | |
var n = (0, o.parseSiteElementSelector)(t.callout_t); | |
t.visibleAnchors = o.BrowserUtil.viewport.getVisibleElements(n, t.dom_placement_method), 0 < t.visibleAnchors.length && ((0, o.setCampaignCalloutTargetToIndex)(e, t.visibleAnchors[0].index), (0, o.placeCampaign)(e)) | |
} | |
}, | |
passesViewabilityTest: function(e) { | |
var t = bouncex.campaigns[e], | |
n = this._getMinimumHeight(t) || 250; | |
return o.BrowserUtil.viewport.distanceToBottom(t.calloutTarget[0], t.dom_placement_method, t.callout_voffset) > n | |
}, | |
_getMinimumHeight: function(e) { | |
var t = this._getBidDimensions(e); | |
return ("prepend" === e.dom_placement_method || "append" === e.dom_placement_method ? e.calloutTarget.innerWidth() : e.calloutTarget.parent().innerWidth()) * (t.height / t.width) / 2 | |
}, | |
_getBidDimensions: function(e) { | |
var t = e.gbi.placements[e.winningBid.placementId]; | |
return { | |
height: +t.height, | |
width: +t.width | |
} | |
} | |
} | |
}, | |
_deactivateCampaign: function(e) { | |
this.log(e, "deactivating campaign"); | |
var t = bouncex.campaigns[e]; | |
t.obj1.remove(), t.gbi.ready = !1 | |
}, | |
_endAllRequests: function(e) { | |
bouncex.campaigns[e].gbi.requests.forEach(function(e) { | |
e.end() | |
}) | |
}, | |
_exceedsFrequencyCap: function() { | |
var e = bouncex.website.adsConfig; | |
if (!e) return !1; | |
if (!e.freqCapEnabled) return !1; | |
if (!e.freqCapImpressions) return !1; | |
switch (e.freqCapInterval) { | |
case "pageview": | |
return this._pageImpressions >= e.freqCapImpressions; | |
case "visit": | |
return bouncex.cookie.pci >= e.freqCapImpressions | |
} | |
return !1 | |
}, | |
_failCampaign: function(e) { | |
this.log(e, "campaign failed"); | |
var t = bouncex.campaigns[e], | |
n = this._getDeploymentType(e); | |
this._failedDeployments.push(n), t.failed = !0, t.gbi.ready = !1 | |
}, | |
_failedDeployments: [], | |
_getAdUnitIds: function(e) { | |
var t = bouncex.campaigns[e], | |
n = t.gbi && t.gbi.placements; | |
return Object.keys(n).map(function(e) { | |
return n[e].adUnitId | |
}) | |
}, | |
_getDeploymentType: function(e) { | |
var t = bouncex.campaigns[e], | |
n = t.gbi && t.gbi.placements; | |
if (n) | |
for (var i in n) | |
if (n.hasOwnProperty(i)) return n[i].deployment; | |
return "" | |
}, | |
_getProviderConfig: function(e, t) { | |
var n = bouncex.website.sspConfig; | |
return n && n[e] && n[e][t] | |
}, | |
_getReportablePrice: function(e) { | |
return (+e).toFixed(5) | |
}, | |
_getResizeData: function(e, t) { | |
t.width = +t.width, t.height = +t.height; | |
var n = bouncex.campaigns[e], | |
i = n.obj1, | |
o = 1, | |
a = 2 * ((parseInt(i.find(".bx-wrap").css("padding-left"), 10) || 0) + (parseInt(i.find(".bx-align").css("padding-left"), 10) || 0)); | |
if ("agilityzone" === n.type && n.calloutTarget.length) o = (n.calloutTarget.width() - a) / t.width; | |
else if ("overlay" === n.type) { | |
var r = (bouncex.wndsize().width - a) / t.width, | |
s = (bouncex.wndsize().height - a) / t.height; | |
o = r > s ? s : r | |
} | |
return { | |
scaleRatio: o, | |
scaledWidth: t.width * o, | |
scaledHeight: t.height * o | |
} | |
}, | |
_incrementImpressionCounters: function() { | |
"number" == typeof this._pageImpressions ? this._pageImpressions++ : this._pageImpressions = 1, "number" == typeof bouncex.cookie.pci ? bouncex.cookie.pci++ : bouncex.cookie.pci = 1, setBounceCookie() | |
}, | |
_initAuction: function(e) { | |
this.log(e, "initializing auction"); | |
var t = bouncex.campaigns[e].gbi.bids, | |
n = [this._bidFilters.isPerformanceBid, this._bidFilters.hasDealId, this._bidFilters.hasHighestPrice, this._bidFilters.arrivedFirst]; | |
if (0 == t.length) return this.log(e, "no bids were returned"), this._failCampaign(e); | |
if (1 == t.length) return this._selectWinningBid(e, t[0]); | |
for (var i = 0; i < n.length; i++) | |
if (1 == (t = (0, n[i])(t)).length) return this._selectWinningBid(e, t[0]); | |
return 0 < t.length ? this._selectWinningBid(e, t[0]) : (this.error(e, "there was an error while selecting a bid"), void this._failCampaign(e)) | |
}, | |
_initRequests: function(e, t) { | |
var n = bouncex.campaigns[e], | |
i = n.gbi.placements; | |
n.gbi.hasBegunAuction = !0, n.gbi.bids = [], this._isForceTest(e) && !t ? this._prefetchBids(e, "aqbx", i) : bouncex.vars.perf_ads_prefetch && !t ? this._prefetchBids(e, "perf", i) : (n.gbi.requests = this._createAndSendRequests(e, i), this._setAuctionTimeout(e)) | |
}, | |
_integrations: { | |
tag: { | |
intermediaryId: "869cff86d1c453c1", | |
generateId: function() { | |
return this.intermediaryId + ":" + bouncex.website.id | |
} | |
}, | |
moat: { | |
display: { | |
scriptSrc: document.location.protocol + "//z.moatads.com/bounceexchangedisplay18031701869/moatad.js", | |
getScriptTag: function(e) { | |
if ((0, o.shouldEnforcePolicies)({ | |
gdpr: !0 | |
})) return bouncex.log("GDPR: MOAT script blocked"), ""; | |
var t = (0, o.qs)({ | |
moatClientLevel1: e.website, | |
moatClientLevel2: e.deviceType, | |
moatClientLevel3: e.trigger, | |
moatClientLevel4: e.adSize, | |
zMoatPlacement: e.placement | |
}); | |
return '<script src="' + this.scriptSrc + "?" + t + '" type="text/javascript"><\/script>' | |
} | |
}, | |
video: { | |
scriptSrc: document.location.protocol + "//z.moatads.com/jwplayerplugin0938452/moatplugin.js", | |
partnerCode: "bouncexjsvideojwplayer997111196347", | |
loadPlugin: function(e) { | |
if ((0, o.shouldEnforcePolicies)({ | |
gdpr: !0 | |
})) return bouncex.log("GDPR: MOAT script blocked"), ""; | |
var t = this; | |
(0, o.getScript)(t.scriptSrc, function() { | |
t.addImpressionListener(e) | |
}) | |
}, | |
addImpressionListener: function(e) { | |
var t = bouncex.campaigns[e], | |
n = this; | |
t.gbi.player.on("adImpression", function(e) { | |
moatjw.add({ | |
partnerCode: n.partnerCode, | |
player: this, | |
adImpressionEvent: e, | |
ids: { | |
level1: window.location.host + " (" + bouncex.website.id + ")", | |
level2: bouncex.state.mobile ? "mobile" : "desktop", | |
level3: t.trigger, | |
level4: "video", | |
slicer1: "overlay" === t.type ? t.type : t.subtype | |
}, | |
duration: 30 | |
}) | |
}) | |
} | |
} | |
}, | |
jwplayer: { | |
key: "o8z/iG2QyTbuWcdH2vCzMM0waC0nOAeJ9/gVcpFiPZ+tv1+5", | |
createPlayerConfig: function(e) { | |
var t = /^[\s]*<VAST/i.test(e.vastData) ? "vastxml" : "tag", | |
n = {}; | |
return n.file = "//" + bouncex.website.biu + "/assets/global/plugins/jwplayer/blank.mp4", n.mute = !0, n.width = e.width, n.height = e.height, n.advertising = {}, n.advertising.client = "vast", n.advertising.vpaidcontrols = !0, n.advertising[t] = e.vastData, n | |
}, | |
createPlayerInstance: function(e, t, n, i) { | |
bouncex.gbi2.log(e, "creating video player instance"); | |
var a = "//" + bouncex.website.biu + "/assets/global/plugins/jwplayer/8.3.0/jwplayer.js", | |
r = (0, o.createIframe)({ | |
class: "bx-gbi-frame", | |
style: "border: 0; width: " + t.width() + "px; height: " + t.height() + "px;" | |
}), | |
s = this; | |
t.append(r); | |
var c = r.contentWindow; | |
bouncex.browser.firefox && (c.oldGetComputedStyle = c.getComputedStyle, c.getComputedStyle = function(e, t) { | |
var n = c.oldGetComputedStyle(e, t); | |
return null === n ? {} : n | |
}), c.document.write('<html><body style="margin: 0px; overflow: hidden;"><div id="bx-video"></div></body></html>'); | |
var u = c.document.createElement("script"); | |
u.setAttribute("src", a), u.onload = function() { | |
bouncex.gbi2.log(e, "jwplayer script loaded"), c.jwplayer ? (bouncex.gbi2.log(e, "jwplayer executed"), c.jwplayer.key = s.key, c.player = c.jwplayer("bx-video"), c.player.setup(n), c.player.on("adClick", function() { | |
bouncex.gbi2.report(e, "click", { | |
value: "ad" | |
}) | |
}), c.player.on("adError", function(t) { | |
bouncex.gbi2.error(e, t.message ? "video error: " + t.message : "video error") | |
}), i(c.player)) : (bouncex.gbi2.error(e, "jwplayer failed to execute"), bouncex.gbi2._failCampaign(e)) | |
}, u.onerror = function() { | |
bouncex.gbi2.error(e, "jwplayer script failed to load"), bouncex.gbi2._failCampaign(e) | |
}, c.document.body.appendChild(u) | |
} | |
} | |
}, | |
_isForceTest: function(e) { | |
return -1 < bouncex.calling_url.indexOf("aqbxtest" + e) | |
}, | |
_populateDisplayAd: function(e, t) { | |
this.log(e, "populating display ad"); | |
var n = bouncex.campaigns[e].obj1.find(bouncex.gbi2._constants.targetSelector), | |
i = bouncex.gbi2._integrations.moat.display, | |
a = this._createDisplayFrame(), | |
r = t.content, | |
s = t.onReady, | |
c = "-webkit-transform-origin: 0 0; transform-origin: 0 0; max-width: 100%; max-height: 100%;"; | |
if (0 === n.length) return bouncex.gbi2.error(e, "creative is missing an ad stack placeholder group"), bouncex.gbi2._failCampaign(e), !1; | |
var u = bouncex.gbi2._getResizeData(e, { | |
width: t.width, | |
height: t.height | |
}); | |
1 > u.scaleRatio && (c += "-webkit-transform: scale(" + u.scaleRatio + "); transform: scale(" + u.scaleRatio + ");", n.css({ | |
width: u.scaledWidth + "px", | |
height: u.scaledHeight + "px" | |
})), n.append(a), r += i.getScriptTag({ | |
website: window.location.host + " (" + bouncex.website.id + ")", | |
deviceType: bouncex.state.mobile ? "mobile" : "desktop", | |
trigger: t.trigger, | |
adSize: t.width + "x" + t.height, | |
placement: t.deployment | |
}); | |
try { | |
var b = a.contentWindow.document; | |
b.open(), b.write('<html><head><base target="_blank"/></head><body marginwidth="0" marginheight="0" style="' + c + '">' + r + "</body>"), b.close() | |
} catch (t) { | |
return bouncex.gbi2.error(e, "error populating ad: " + t), bouncex.gbi2._failCampaign(e), !1 | |
} | |
this._attachClickReporting(e, n), (0, o.loadImages)(jQuery(b).find("img").filter(":visible"), function() { | |
bouncex.gbi2.log(e, "images loaded successfully"), s && s() | |
}) | |
}, | |
_prefetchBids: function(e, t, n) { | |
this.log(e, "prefetching " + t); | |
var i = bouncex.campaigns[e], | |
a = {}; | |
for (var r in n) n.hasOwnProperty(r) && (a[r] = this._compose(n[r]), a[r].providers = [t]); | |
i.gbi.requests = this._createAndSendRequests(e, a), (0, o.setTimeout2)(function() { | |
this._endAllRequests(e), 0 < i.gbi.bids.length ? this._initAuction(e) : this._initRequests(e, !0) | |
}.bind(this), 1e3) | |
}, | |
_prepareVideo: function(e, t, n) { | |
this.log(e, "preparing video ad"); | |
var i = bouncex.campaigns[e], | |
o = i.obj1.find(bouncex.gbi2._constants.targetSelector), | |
a = bouncex.gbi2._integrations.jwplayer, | |
r = o.width(), | |
s = o.height(), | |
c = bouncex.gbi2._getResizeData(e, { | |
width: r, | |
height: s | |
}); | |
1 > c.scaleRatio && (r = c.scaledWidth, s = c.scaledHeight, o.css({ | |
width: r + "px", | |
height: s + "px" | |
})); | |
var u = a.createPlayerConfig({ | |
vastData: t.vast, | |
width: r, | |
height: s | |
}); | |
a.createPlayerInstance(e, o, u, function(t) { | |
i.gbi.player = t, i.gbi.isVideo = !0, i.gbi.config = i.gbi.config || {}, i.gbi.config.playOnImpression = !0, bouncex.gbi2._integrations.moat.video.loadPlugin(e), i.gbi.contentLoaded = !0, n() | |
}) | |
}, | |
_requestIndex: { | |
sharedBehaviors: { | |
gbi: function() { | |
return { | |
fetch: function(e) { | |
this.startTime = (0, o.getTimeMs)(), this.request = bouncex.utils.doAjaxRequest(e) | |
}, | |
done: function() { | |
this.endTime = (0, o.getTimeMs)(), this.duration = this.endTime - this.startTime | |
}, | |
reportResult: function(e, t) { | |
bouncex.gbi2.report(this.campaignId, e, t) | |
}, | |
end: function() { | |
this.request && this.request.abort() | |
} | |
} | |
}, | |
rtb: function() { | |
return { | |
createDisplayImpression: function(e, t, n) { | |
var i = { | |
id: 1, | |
banner: { | |
w: e = +e, | |
h: t = +t | |
} | |
}; | |
return bouncex.gbi2._compose(i, n) | |
}, | |
createVideoImpression: function(e, t, n) { | |
var i = { | |
id: 1, | |
video: { | |
mimes: ["video/mp4", "application/javascript"], | |
minduration: 3, | |
maxduration: 150, | |
protocols: [2, 3, 5, 6], | |
linearity: 1, | |
ext: { | |
playertype: 1 | |
} | |
} | |
}; | |
return e && (i.video.w = +e), t && (i.video.h = +t), bouncex.gbi2._compose(i, n) | |
}, | |
getExtraIds: function() { | |
var e = window.bouncex.gbi.deviceOptedStatus; | |
return e ? [{ | |
source: "bxid", | |
uids: [{ | |
id: e, | |
atype: 1 | |
}] | |
}] : [] | |
} | |
} | |
} | |
}, | |
aqbx: function(e) { | |
var t = bouncex.gbi2._requestIndex.sharedBehaviors.gbi; | |
return bouncex.gbi2._compose(e, t(), { | |
init: function() { | |
this.startTime = (0, o.getTimeMs)(), this.done(), this.handleResponse() | |
}, | |
handleResponse: function() { | |
var e = bouncex.campaigns[this.campaignId], | |
t = bouncex.gbi2._createBid({ | |
provider: "aqbx", | |
campaignId: this.campaignId, | |
placementId: this.placementId, | |
adUnitId: this.adUnitId, | |
price: 0, | |
adHtml: this.getDisplayHtml(this.width, this.height), | |
vastData: this.getVastXml(), | |
arrivalTime: this.endTime | |
}); | |
e.gbi.bids.push(t), bouncex.gbi2.log(this.campaignId, "bid simulated for force testing") | |
}, | |
getDisplayHtml: function(e, t) { | |
return '<a><img src="' + ("https://" + bouncex.website.biu) + "/assets/global/images/pub/demo" + e + "x" + t + '.gif" width="' + e + '" height="' + t + '"/></a>' | |
}, | |
getVastXml: function() { | |
return '<VAST version="2.0"><Ad><InLine><AdSystem>Acudeo Compatible</AdSystem><AdTitle>VAST 2.0 AQBX</AdTitle><Description>VAST 2.0 AQBX</Description><Creatives><Creative><Linear><Duration>00:00:21</Duration><MediaFiles><MediaFile delivery="progressive" type="video/mp4" bitrate="500" width="400" height="300" scalable="true" maintainAspectRatio="true">https://' + bouncex.website.biu + "/assets/global/videos/pub/demo/ads_demo_video.mp4</MediaFile></MediaFiles></Linear></Creative></Creatives></InLine></Ad></VAST>" | |
} | |
}) | |
}, | |
perf: function(e) { | |
var t = bouncex.gbi2._requestIndex.sharedBehaviors.gbi; | |
return bouncex.gbi2._compose(e, t(), { | |
provider: "perf", | |
fetch: function(e) { | |
this.startTime = (0, o.getTimeMs)(), this.request = jQuery.ajax(e) | |
}, | |
init: function() { | |
var e = this, | |
t = { | |
url: bouncex.gbi2._getProviderConfig("perf", "endpoint"), | |
data: e.getRequestData(), | |
complete: function(t, n) { | |
e.done(), e.handleResponse(t, n) | |
} | |
}; | |
this.fetch(t) | |
}, | |
getRequestData: function() { | |
return { | |
bxid: bouncex.dg.softID || "none", | |
w: this.width, | |
h: this.height | |
} | |
}, | |
handleResponse: function(e) { | |
var t = bouncex.campaigns[this.campaignId], | |
n = bouncex.gbi2._constants.bidEvents, | |
i = n.error, | |
o = { | |
partner: "perf", | |
deployment: this.deployment || "unknown", | |
requested_ad_units: this.width + "x" + this.height, | |
request_timestamp: this.startTime, | |
deal_id: "NA", | |
price: "NA", | |
auction_number: t.gbi.auctionCount, | |
ad_unit_id: this.adUnitId | |
}, | |
a = e.responseJSON; | |
if (200 !== e.status) 0 === e.status && (i = n.cancelled); | |
else if (a && a.adHtml) { | |
i = n.fill, bouncex.gbi2.log(this.campaignId, "placement #" + this.placementId + " received a bid from performance ads"); | |
var r = bouncex.gbi2._createBid({ | |
provider: "perf", | |
campaignId: this.campaignId, | |
placementId: this.placementId, | |
adUnitId: this.adUnitId, | |
adHtml: a.adHtml, | |
arrivalTime: this.endTime, | |
targeting: a.targeting | |
}); | |
t.gbi.bids.push(r) | |
} else i = n.none; | |
this.reportResult(i, o) | |
} | |
}) | |
}, | |
bsw: function(e) { | |
var t = bouncex.gbi2._requestIndex.sharedBehaviors.gbi; | |
return bouncex.gbi2._compose(e, t(), { | |
provider: "bsw", | |
init: function() { | |
var e = this, | |
t = { | |
url: bouncex.gbi2._getProviderConfig("bsw", "endpoint"), | |
data: bouncex.stringify(e.getRequestData()), | |
dataType: "json", | |
method: "POST", | |
timeout: 5e3, | |
complete: function(t, n) { | |
e.done(), e.handleResponse(t, n) | |
} | |
}; | |
this.fetch(t) | |
}, | |
getRequestData: function() { | |
var e = { | |
code: this.deployment | |
}; | |
return e["display" === this.type ? "banner" : "video"] = { | |
sizes: [{ | |
w: +this.width, | |
h: +this.height | |
}] | |
}, { | |
publisher_id: +bouncex.gbi2._getProviderConfig("bsw", "site_id") || 0, | |
placements: [e] | |
} | |
}, | |
handleResponse: function(e) { | |
var t = bouncex.campaigns[this.campaignId], | |
n = bouncex.gbi2._constants.bidEvents, | |
i = n.error, | |
o = { | |
partner: this.provider, | |
partner_site_id: bouncex.gbi2._getProviderConfig("bsw", "site_id") || "NA", | |
deployment: this.deployment || "unknown", | |
requested_ad_units: this.width + "x" + this.height, | |
request_timestamp: this.startTime, | |
deal_id: "NA", | |
price: "NA", | |
auction_number: t.gbi.auctionCount, | |
ad_unit_id: this.adUnitId | |
}, | |
a = e.responseJSON && e.responseJSON.placement_bid; | |
if (200 !== e.status) 0 === e.status && (i = n.cancelled); | |
else if (a && a.length) { | |
i = n.fill, bouncex.gbi2.log(this.campaignId, "placement #" + this.placementId + " received a bid from bidswitch"); | |
var r = a[0]; | |
o.deal_id = r.dealid, o.price = bouncex.gbi2._getReportablePrice(r.price); | |
var s = bouncex.gbi2._createBid({ | |
provider: this.provider, | |
campaignId: this.campaignId, | |
placementId: this.placementId, | |
adUnitId: this.adUnitId, | |
arrivalTime: this.endTime, | |
adHtml: r.adm, | |
vastData: r.adm, | |
dealId: r.dealid, | |
price: r.price | |
}); | |
t.gbi.bids.push(s) | |
} else i = n.none; | |
this.reportResult(i, o) | |
} | |
}) | |
}, | |
index: function(e) { | |
var t = bouncex.gbi2._requestIndex.sharedBehaviors.gbi, | |
n = bouncex.gbi2._requestIndex.sharedBehaviors.rtb; | |
return bouncex.gbi2._compose(e, t(), n(), { | |
provider: "index", | |
init: function() { | |
var e = this.getRequestData(), | |
t = this, | |
n = bouncex.gbi2._getProviderConfig("index", bouncex.campaigns[this.campaignId].qbxtest ? "qa_site_id" : "s"), | |
i = { | |
url: bouncex.ssl ? "https://as-sec.casalemedia.com/cygnus" : "http://as.casalemedia.com/cygnus", | |
data: { | |
v: "7", | |
cb: (0, o.getTimeMs)(), | |
s: n, | |
r: bouncex.stringify(e) | |
}, | |
dataType: "text", | |
contentType: "application/x-www-form-urlencoded", | |
global: !1, | |
crossDomain: !0, | |
xhrFields: { | |
withCredentials: !0 | |
}, | |
timeout: 5e3, | |
complete: function(e, n) { | |
t.done(), t.handleResponse(e, n) | |
} | |
}; | |
"video" === this.type && (i.data.v = "8.8", i.data.fn = "jsonp"), this.fetch(i) | |
}, | |
getRequestData: function() { | |
var e, t = bouncex.campaigns[this.campaignId], | |
n = document.location.protocol + "//" + document.location.hostname + document.location.pathname, | |
i = bouncex.state.mobile ? "mobile" : "desktop", | |
a = bouncex.updateQS(n, "deployment", t.type, "device", i); | |
return "display" == this.type ? e = this.createDisplayImpression(this.width, this.height) : "video" == this.type && (e = this.createVideoImpression()), { | |
id: (0, o.getTime2)(), | |
imp: [e], | |
site: { | |
page: a, | |
ref: bouncex.referrer, | |
mobile: bouncex.state.mobile ? 1 : 0 | |
}, | |
source: { | |
pchain: bouncex.gbi2._integrations.tag.generateId() | |
} | |
} | |
}, | |
handleResponse: function(e, t) { | |
var n = bouncex.campaigns[this.campaignId], | |
i = bouncex.gbi2._constants.bidEvents, | |
o = i.error, | |
a = { | |
partner: "index", | |
partner_site_id: bouncex.gbi2._getProviderConfig("index", "s"), | |
deployment: this.deployment || "unknown", | |
requested_ad_units: "display" === this.type ? this.width + "x" + this.height : "video", | |
request_timestamp: this.startTime, | |
deal_id: "NA", | |
price: "NA", | |
auction_number: n.gbi.auctionCount, | |
ad_unit_id: this.adUnitId | |
}; | |
if ("success" === t && 200 === e.status) { | |
var r = this.getBidFromResponse(e.responseText); | |
if (r) { | |
o = i.fill, bouncex.gbi2.log(this.campaignId, "placement #" + this.placementId + " received a bid from index exchange"); | |
var s = r.ext && r.ext.dealid, | |
c = r.ext && r.ext.pricelevel, | |
u = 0; | |
s && (a.deal_id = s), c && (u = this.convertPrice(r.ext.pricelevel, s), a.price = bouncex.gbi2._getReportablePrice(u)); | |
var b = bouncex.gbi2._createBid({ | |
provider: "index", | |
campaignId: this.campaignId, | |
placementId: this.placementId, | |
adUnitId: this.adUnitId, | |
price: +u, | |
adHtml: r.adm, | |
vastData: r.ext && r.ext.vasturl, | |
dealId: s, | |
arrivalTime: this.endTime | |
}); | |
n.gbi.bids.push(b) | |
} else o = i.none | |
} else "success" !== t || e.responseText ? 0 === e.status && (o = i.cancelled) : o = i.empty; | |
this.reportResult(o, a) | |
}, | |
getBidFromResponse: function(e) { | |
try { | |
var t = e.substring(e.indexOf("(") + 1, e.lastIndexOf(")")), | |
n = bouncex.parseJSON(t); | |
return n.seatbid && n.seatbid[0] && n.seatbid[0].bid && n.seatbid[0].bid[0] | |
} catch (e) { | |
return !1 | |
} | |
}, | |
convertPrice: function(e, t) { | |
var n = e.length - 2, | |
i = e.split(""); | |
i.splice(n, 0, "."); | |
var o = i.join("").replace(/[^0-9.]/g, ""); | |
return (t ? +o : +o / .85).toFixed(5) | |
} | |
}) | |
}, | |
pbm: function(e) { | |
var t = bouncex.gbi2._requestIndex.sharedBehaviors.gbi, | |
n = bouncex.gbi2._requestIndex.sharedBehaviors.rtb; | |
return bouncex.gbi2._compose(e, t(), n(), { | |
provider: "pbm", | |
init: function() { | |
if (!this.userSynced()) return this.syncUser(); | |
var e = this.getRequestData(), | |
t = this, | |
n = { | |
url: document.location.protocol + "//" + bouncex.gbi2._getProviderConfig("pbm", "endpoint"), | |
data: bouncex.stringify(e), | |
method: "POST", | |
type: "POST", | |
dataType: "json", | |
timeout: 5e3, | |
complete: function(e, n) { | |
t.done(), t.handleResponse(e, n) | |
} | |
}; | |
this.fetch(n) | |
}, | |
getRequestData: function() { | |
bouncex.campaigns[this.campaignId]; | |
var e, t = bouncex.cookie.vid + "_" + bouncex.cookie.sid, | |
n = bouncex.gbi2._getProviderConfig("pbm", bouncex.state.mobile ? "mobile_id" : "desktop_id"), | |
i = this.getTagId(n, this.placementId), | |
a = bouncex.gbi2._integrations; | |
return "display" === this.type ? e = this.createDisplayImpression(this.width, this.height, { | |
id: (0, o.getTimeMs)().toString(), | |
secure: bouncex.ssl ? 1 : 0, | |
tagid: i | |
}) : "video" === this.type && (e = this.createVideoImpression(this.width, this.height)), { | |
id: t, | |
site: { | |
id: n, | |
name: window.location.hostname, | |
ref: decodeURIComponent(bouncex.referrer), | |
page: decodeURIComponent(bouncex.calling_url), | |
publisher: { | |
id: bouncex.gbi2._getProviderConfig("pbm", "publisher_id") | |
} | |
}, | |
device: { | |
ua: navigator.userAgent, | |
ip: bouncex.state.vip | |
}, | |
imp: [e], | |
source: { | |
pchain: a.tag.generateId() | |
}, | |
user: { | |
eids: this.getExtraIds() | |
}, | |
at: 1, | |
tmax: 200 | |
} | |
}, | |
handleResponse: function(e, t) { | |
var n = bouncex.campaigns[this.campaignId], | |
i = bouncex.gbi2._constants.bidEvents, | |
o = i.error, | |
a = { | |
partner: "pbm", | |
partner_site_id: bouncex.gbi2._getProviderConfig("pbm", bouncex.state.mobile ? "mobile_id" : "desktop_id"), | |
deployment: this.deployment || "unknown", | |
requested_ad_units: "display" === this.type ? this.width + "x" + this.height : "video", | |
request_timestamp: this.startTime, | |
price: "NA", | |
deal_id: "NA", | |
auction_number: n.gbi.auctionCount, | |
ad_unit_id: this.adUnitId | |
}; | |
if ("success" === t && 200 === e.status) { | |
var r = this.getBidFromResponse(e.responseText); | |
if (r) { | |
o = i.fill, bouncex.gbi2.log(this.campaignId, "placement #" + this.placementId + " received a bid from pubmatic"), r.dealid && (a.deal_id = r.dealid), r.price && (a.price = bouncex.gbi2._getReportablePrice(r.price)); | |
var s = bouncex.gbi2._createBid({ | |
provider: "pbm", | |
campaignId: this.campaignId, | |
placementId: this.placementId, | |
adUnitId: this.adUnitId, | |
price: r.price, | |
adHtml: r.adm, | |
vastData: r.adm, | |
dealId: r.dealid, | |
arrivalTime: this.endTime | |
}); | |
n.gbi.bids.push(s) | |
} else o = i.none | |
} else "nocontent" === t && 204 === e.status ? o = i.empty : 0 === e.status && (o = i.cancelled); | |
this.reportResult(o, a) | |
}, | |
getBidFromResponse: function(e) { | |
try { | |
var t = bouncex.parseJSON(e); | |
return t.seatbid && t.seatbid[0] && t.seatbid[0].bid && t.seatbid[0].bid[0] | |
} catch (e) { | |
return !1 | |
} | |
}, | |
userSynced: function() { | |
return !!sessionStorage.getItem("bxpbmsynced") | |
}, | |
syncUser: function() { | |
var e = bouncex.gbi2._getProviderConfig("pbm", "user_sync_endpoint"), | |
t = bouncex.gbi2._getProviderConfig("pbm", "publisher_id"); | |
if (!e) return bouncex.gbi2.error(this.campaignId, "no endpoint found for pubmatic user sync"); | |
if (!t) return bouncex.gbi2.error(this.campaignId, "no publisher id found for pubmatic user sync"); | |
var n = (0, o.createIframe)({ | |
style: "display: none;", | |
src: "//" + e + "?p=" + t | |
}), | |
i = this; | |
n.onload = function() { | |
sessionStorage.setItem("bxpbmsynced", "1"), i.init() | |
}, document.body.appendChild(n) | |
}, | |
getTagId: function(e, t) { | |
var n = bouncex.campaigns[this.campaignId].gbi.placements[t]; | |
return n && n.deployment ? { | |
overlay: "Overlay", | |
masthead: "Masthead", | |
endcap: "End_Cap", | |
encore: "Encore", | |
middleofarticle: "Middle_of_Article", | |
skyline: "Skyline", | |
infeed: "Infeed" | |
}[n.deployment] + "_" + e : "" | |
} | |
}) | |
} | |
}, | |
_selectWinningBid: function(e, t) { | |
this.log(e, "selecting bid from " + t.provider); | |
var n = bouncex.campaigns[e], | |
i = n.gbi.placements[t.placementId], | |
o = bouncex.gbi2._constants.bidEvents, | |
a = { | |
partner: t.provider, | |
deployment: i.deployment, | |
deal_id: t.dealId || "NA", | |
price: bouncex.gbi2._getReportablePrice(t.price), | |
auction_number: n.gbi.auctionCount, | |
ad_unit_id: t.adUnitId | |
}; | |
n.winningBid = t, this.report(e, o.selected, a), this._activatePlacement(e, t) | |
}, | |
_setAuctionTimeout: function(e) { | |
var t = this._constants.auctionDelayInMilliseconds, | |
n = this; | |
(0, o.setTimeout2)(function() { | |
0 < bouncex.campaigns[e].gbi.bids.length || n._allRequestsAreComplete(e) ? (n.log(e, "one or more bids received, or all requests have resolved; ending wait period"), n._endAllRequests(e), n._initAuction(e)) : (n.log(e, "no bids after first wait period; some requests still pending; trying again"), (0, o.setTimeout2)(function() { | |
n.log(e, "ending wait period"), n._endAllRequests(e), n._initAuction(e) | |
}, t)) | |
}, t) | |
}, | |
canShowPubCampaign: function(e, t) { | |
var n = bouncex.campaigns[t]; | |
if (!this._isForceTest(t) && this._exceedsFrequencyCap()) return !1; | |
if (n.dynamic_anchor) { | |
if (this._customizations.anchor.updateDynamicAnchor(t), 0 === n.visibleAnchors.length) return this.log(t, "dynamic anchor - no visible anchors", !0), !1; | |
if (!this._customizations.anchor.passesViewabilityTest(t)) return this.log(t, "dynamic anchor - fails visibility test", !0), !1 | |
} | |
return bouncex.gbi2.tryPop(t, e), n.gbi.ready ? (this.log(t, "passes canShow criteria"), !0) : (this.log(t, "gbi.ready is false", !0), !1) | |
}, | |
error: function(e, t) { | |
this.log(e, t, !0) | |
}, | |
getDeploymentType: function(e) { | |
return this._getDeploymentType(e) | |
}, | |
getFailedDeployments: function() { | |
return this._failedDeployments | |
}, | |
initCampaign: function(e) { | |
this.log(e, "initializing campaign"); | |
var t = bouncex.campaigns[e]; | |
13 < t.gbi.auctionCount && this._failCampaign(e), t.activated || (this.report(e, "eligible"), t.listeners = new o.EventListeners, (0, o.event_js_eval)(e, "preactivation"), this.log(e, "activating behavioral triggers"), this._activateBehavioralTriggers(e), t.activated = !0), t.gbi.auctionCount ? t.gbi.auctionCount++ : t.gbi.auctionCount = 1, this._initRequests(e) | |
}, | |
initDfp: function() { | |
a.default.init() | |
}, | |
getDfpLineItemIds: function() { | |
return a.default.lineItems.getAll() | |
}, | |
handleImpression: function(e) { | |
this._adjustPosition(e), this._incrementImpressionCounters() | |
}, | |
log: function(e, t, n) { | |
var i = { | |
group: "gbi", | |
message: t, | |
campaignId: e | |
}; | |
n ? o.Logger.error(i) : o.Logger.info(i) | |
}, | |
report: function(e, t, n) { | |
if (0 === t.indexOf("bid_") && bouncex.vars.block_bid_events) return !1; | |
this.log(e, 'reporting event "' + t + '"'); | |
var i = bouncex.campaigns[e]; | |
switch (n = n || {}, t) { | |
case "pop": | |
var a = i.winningBid; | |
n.ad_unit_id = i.activeAdUnitId || 0, a ? (n.targeting = "perf" === a.provider ? a.targeting : "NA", n.partner = a.provider, n.deal_id = a.dealId, n.price = this._getReportablePrice(a.price), n.deployment = this._getDeploymentType(e), n.auction_number = i.gbi.auctionCount) : this.error(e, 'unable to find bid data to report on "pop"'); | |
break; | |
case "trypop": | |
n.ad_units = this._getAdUnitIds(e).join(","); | |
break; | |
case "click": | |
n.value = n.value || "nonad"; | |
break; | |
case "eligible": | |
n.ad_units = this._getAdUnitIds(e).join(",") | |
} | |
n.source = "ads", (0, o.buildReport)(e, t, n) | |
}, | |
tryPop: function(e, t) { | |
var n = bouncex.campaigns[e]; | |
if (!n.trypopTriggered) { | |
if ("overlay" !== this._getDeploymentType(e) && !n.dynamic_anchor) { | |
var i = (0, o.parseSiteElementSelector)(n.callout_t); | |
if (!(!!i && !!jQuery(i).length)) return | |
} | |
this.report(e, "trypop", { | |
activation: t | |
}), n.trypopTriggered = !0 | |
} | |
} | |
}); | |
t.default = r | |
}, function(e, t, n) { | |
function i(e) { | |
return e && e.__esModule ? e : { | |
default: e | |
} | |
} | |
function o(e, t) { | |
for (var n, i = 0; i < t.length; i++)(n = t[i]).enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n) | |
} | |
function a() { | |
return "https://dfp.bouncex.net/pub/".concat(bouncex.website.id, "?li=").concat(m.formatAll("|")) | |
} | |
function r() { | |
d.default.apply({ | |
type: "canary", | |
liveTraffic: 10, | |
internal: !0 | |
}, function() { | |
b.default.get({ | |
url: a() | |
}) | |
}) | |
} | |
function s() { | |
g || (m.collectFromPage(), 0 < m.count() && (r(), l.default.reload(), u("dfp ids found: ".concat(m.formatAll(", "))), g = !0)) | |
} | |
function c() { | |
u("dfp max attempts") | |
} | |
function u(e) { | |
p.default.info({ | |
group: "dfp", | |
message: e, | |
color: "#ffa500" | |
}) | |
} | |
Object.defineProperty(t, "__esModule", { | |
value: !0 | |
}); | |
var b = i(n(9)), | |
l = i(n(4)), | |
d = i(n(2)), | |
p = i(n(1)), | |
x = n(0), | |
g = !1, | |
m = new(function() { | |
function e() { | |
(function(e, t) { | |
if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") | |
})(this, e), this._lineItems = [] | |
} | |
return t = e, (n = [{ | |
key: "clear", | |
value: function() { | |
this._lineItems = [] | |
} | |
}, { | |
key: "count", | |
value: function() { | |
return this._lineItems.length | |
} | |
}, { | |
key: "add", | |
value: function(e) { | |
isNaN(+e) || this._lineItems.push(e) | |
} | |
}, { | |
key: "getAll", | |
value: function() { | |
return this._lineItems | |
} | |
}, { | |
key: "formatAll", | |
value: function(e) { | |
return e = e || ",", this._lineItems.join(e) | |
} | |
}, { | |
key: "collectFromPage", | |
value: function() { | |
var e = this; | |
window.googletag && "function" == typeof window.googletag.pubads && window.googletag.pubads().getSlots().forEach(function(t) { | |
var n = t.getResponseInformation(); | |
!n || "number" != typeof n.lineItemId || -1 < e.getAll().indexOf(n.lineItemId) || e.add(n.lineItemId) | |
}) | |
} | |
}]) && o(t.prototype, n), i && o(t, i), e; | |
var t, n, i | |
}()); | |
t.default = { | |
lineItems: m, | |
getRequestUrl: a, | |
report: r, | |
initDetection: s, | |
init: function() { | |
x.BxInterval.addTask(s, 30, "dfp_detection", c) | |
}, | |
onFailure: c | |
} | |
}, function(e, t) { | |
Object.defineProperty(t, "__esModule", { | |
value: !0 | |
}), t.default = { | |
get: function(e) { | |
return e.type = "GET", jQuery.ajax(e) | |
} | |
} | |
}, function(e, t, n) { | |
Object.defineProperty(t, "__esModule", { | |
value: !0 | |
}); | |
var i, o = n(0), | |
a = n(1), | |
r = (i = a) && i.__esModule ? i : { | |
default: i | |
}; | |
t.default = { | |
_constants: { | |
sc: "29143", | |
product: "sms", | |
optInMessage: "Send for automated, recurring <BrandName> marketing texts to this # per terms. Consent not a condition of purchase.", | |
params: { | |
source: "sms_source", | |
click: "sms_click" | |
} | |
}, | |
init: function() { | |
return this._supported() ? (this.initialized = !0, void this._clickthrough()) : (this.initialized = !1, !1) | |
}, | |
_supported: function() { | |
return !!bouncex.website.smsEnabled && (bouncex.website.brandName && bouncex.website.smsTC ? (this.log(null, "sms supported", !1), !0) : (this.log(null, "missing settings: brand name and website t&c link are required", !0), !1)) | |
}, | |
_clickthrough: function() { | |
var e = bouncex.utils.url.getParam(this._constants.params.click); | |
if (e) { | |
var t = bouncex.cookie.sms || {}, | |
n = Math.floor((new Date).getTime() / 1e3); | |
t[e] = n, bouncex.cookie.sms = t, setBounceCookie(), this.report("click", { | |
campaignid: e, | |
"sms:slug": bouncex.utils.getParam(this._constants.params.source) | |
}) | |
} | |
}, | |
_getOptInSlug: function(e) { | |
return "YES-" + bouncex.website.id + "-" + e + "-" + bouncex.cookie.did | |
}, | |
_getOptInMessage: function() { | |
var e = this._constants.optInMessage.replace("<BrandName>", bouncex.website.brandName); | |
return encodeURIComponent(e + "\n") | |
}, | |
_getOptInURI: function(e) { | |
return "sms://" + this._constants.sc + "?&body=" + this._getOptInMessage() + this._getOptInSlug(e) | |
}, | |
_triggerOptIn: function(e) { | |
bouncex.close_ad(e), window.location.href = this._getOptInURI(e) | |
}, | |
optInMobile: function(e) { | |
return this.initialized ? (this.report("prompt", { | |
campaignid: e | |
}), void(0, o.setTimeout2)(this._triggerOptIn.call(this, e), 300)) : (this.log(e, "sms not initialized. check that sms is enabled and required website settings are valid.", !0), !1) | |
}, | |
report: function(e, t) { | |
var n = { | |
agent: "user", | |
source: this._constants.product | |
}; | |
for (var i in t) t.hasOwnProperty(i) && (n[i] = t[i]); | |
(0, o.event_stream_report)(e, n) | |
}, | |
log: function(e, t, n) { | |
var i = { | |
group: this._constants.product, | |
campaignId: e, | |
message: t | |
}; | |
n ? r.default.error(i) : r.default.info(i) | |
} | |
} | |
}, function(e, t, n) { | |
var i = n(0); | |
bouncex.website && (i.perf.times("tag"), 0 < bouncex.website.sd && !bouncex.website.fbe ? (0, i.setTimeout2)(i.InitSequence.preInit1.entry, bouncex.website.sd) : (0, i.tryCatch)(i.InitSequence.preInit1.entry)()) | |
}, function(e, t, n) { | |
n(4), n(5), n(0), n(11), n(7), n(8), n(6), n(10), n(9), n(1), n(3), e.exports = n(2) | |
}]) | |
}(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment