var tealium_script_loader = function(o) {
var a, b, c, l;
a = document;
if (o.type === "iframe") {
b = a.createElement("iframe");
b.setAttribute("height", "1");
b.setAttribute("width", "1");
b.setAttribute("style", "display:none");
b.setAttribute("src", o.src);
} else if (o.type === "img") {
b = new Image();
b.src = o.src;
return;
} else {
b = a.createElement("script");
b.language = "javascript";
b.type = "text/javascript";
b.async = 1;
b.charset = "utf-8";
b.src = o.src;
}
if (o.id) {
b.id = o.id;
}
l = o.loc || "head";
c = a.getElementsByTagName(l)[0];
if (c) {
if (l === "script") {
c.parentNode.insertBefore(b, c);
} else {
c.appendChild(b);
}
}
};
/*
################################
### SINGLE PAGE APP HANDLING ###
################################
Author : roshan@tealium.com
Notes
=====
- This extension will handle single page apps if declared in the universal data object (UDO)
- Must be scoped to PRE-LOADER
*/
// JS Code in Preloader Extension
window.utag_data = window.utag_data || {};
window.utag_cfg_ovrd = window.utag_cfg_ovrd || {};
if(utag_data.site_type === "single page"){window.utag_cfg_ovrd.noview = true;} // stops first page load happening
// SCOPE TO TAG TO ENSURE COMPATIBLE ON OLDER UTAG VERSIONS
// author : roshan@tealium.com
if (!utag.ut.pad) {
utag.ut.pad = function(a, b, c, d) {
a = "" + ((a - 0).toString(16));
d = '';
if (b > a.length) {
for (c = 0; c < (b - a.length); c++) {
d += '0'
}
}
return "" + d + a
}
}
if (!utag.ut.vi){utag.ut.vi = function(t, a, b) {
if (!utag.v_id) {
a = this.pad(t, 12);
b = "" + Math.random();
a += this.pad(b.substring(2, b.length), 16);
try {
a += this.pad((navigator.plugins.length ? navigator.plugins.length : 0), 2);
a += this.pad(navigator.userAgent.length, 3);
a += this.pad(document.URL.length, 4);
a += this.pad(navigator.appVersion.length, 3);
a += this.pad(screen.width + screen.height + parseInt((screen.colorDepth) ? screen.colorDepth : screen.pixelDepth), 5)
} catch (e) {
utag.DB(e);
a += "12345"
};
utag.v_id = a;
}
return utag.v_id
}
}
if(!utag.ut.hasOwn){utag.ut.hasOwn = function(o, a) {
return o != null && Object.prototype.hasOwnProperty.call(o, a)
}
}
if(!utag.ut.isEmptyObject){utag.ut.isEmptyObject = function(o, a) {
for (a in o) {
if (utag.ut.hasOwn(o, a)) return false
}
return true
}
}
if(!utag.ut.isEmpty){utag.ut.isEmpty = function(o) {
var t = utag.ut.typeOf(o);
if (t == "number") {
return isNaN(o)
} else if (t == "boolean") {
return false
} else if (t == "string") {
return o.length === 0
} else return utag.ut.isEmptyObject(o)
}
}
if(!utag.ut.typeOf){utag.ut.typeOf = function(e) {
return ({}).toString.call(e).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
}
}
if(!utag.ut.flatten){utag.ut.flatten = function(o) {
// stop when arriving at a string, array, boolean, number (float or integer)
var a = {};
function r(c, p) {
if (Object(c) !== c || c instanceof Array) {
a[p] = c;
} else {
if (utag.ut.isEmptyObject(c)) {
//a[p] = {};
} else {
for (var d in c) {
r(c[d], p ? p + "." + d : d);
}
}
}
}
r(o, "");
return a;
}
}
if(!utag.merge){utag.ut.merge = function(a, b, c, d) {
if (c) {
for (d in utag.loader.GV(b)) {
a[d] = b[d]
}
} else {
for (d in utag.loader.GV(b)) {
if (typeof a[d] == "undefined") a[d] = b[d]
}
}
}
}
if(!utag.ut.decode){utag.ut.decode = function(a, b) {
b = "";
try {
b = decodeURIComponent(a)
} catch (e) {
utag.DB(e)
};
if (b == "") {
b = unescape(a)
};
return b
}
}
exampleString.replace(/\r\n|\s{2,}/gm,"");
/*
###########################################
### TEALIUM COLLECT : DIP DATA STRIPPER ###
###########################################
Author : roshan@tealium.com
Notes:
This extension:
- Should ALWAYS be scoped to the DIP Tealium Collect Pixel
- Will remove any data sources without the relevant reserved prefix (e.g. "dip_")
- You can configure the reserved prefixes below
- There are DIP specific prefixes declared in the 'dip_prefixes' array
- There are Tealium specific prefixes required for Tealium Collect to function correctly in the 'tealium_functional_prefixes' array
*/
// Configuration
var dip_prefixes = ["cp.dip", "dip_"]; // these are DIP specific data sources
var tealium_functional_prefixes = ["cp.trace","cp.utag", "_t_","dom.","ut."]; // these are required for Tealium to function correctly
// ### DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING ###
var reserved_prefixes = dip_prefixes.concat(tealium_functional_prefixes);
for (varName in b) {
var keep_var = false;
for (var i = 0; i < reserved_prefixes.length; i++) {
if (varName.indexOf(reserved_prefixes[i]) === 0) {
var keep_var = true;
}
};
if (keep_var === false){
if(utag.ut.typeOf(b[varName]) === "array"){
b[varName] === b[varName].slice(0);
}
delete b[varName];
}
}