{"version":3,"sources":["tla.js"],"names":["tlaInit","window","createGuid","s4","Math","floor","random","toString","substring","getTlaQuery","key","URLSearchParams","location","search","get","e","getTlaUserFp","localStorage","existingFp","getItem","tlaUserFp","newFp","setItem","_tla","ee","getTlaSessionId","tlaUsid","sessionStorage","tlaSessionId","sessionId","execFunction","obj","args","shift","apply","checkProp","propId","test","getHostUrl","isIframe","hostUrl","document","href","refUrl","referrer","length","checkVisible","elementName","cont","getElementById","override","querySelector","isInViewport","hasParenWithClass","el","cls","parentNode","className","RegExp","addZoneClickTracker","container","respJson","zoneId","selfTrackingClick","addEventListener","tla","updateZoneViewStatus","setInterval","templateId","productId","campaignLineItemId","contentSetVersionId","campaignDeliveryTypeIds","join","elm","target","srcElement","aar","getElementsByTagName","j","processQueue","queue","execFnc","itm","Array","prototype","slice","call","ex","fnWrap","callback","getByXhr","uri","targetContainer","Xhr","XMLHttpRequest","request","open","withCredentials","setRequestHeader","onreadystatechange","readyState","status","responseText","send","postByXhr","data","sendByBeacon","navigator","sendBeacon","headers","type","blob","Blob","postData","ImpressionTracker","setData","a","b","self","this","userSession","propertyId","timestamp","currPage","Date","getTimezoneOffset","product","appName","version","platform","characterSet","language","userAgent","body","clientWidth","clientHeight","screen","width","height","compatMode","colorDepth","pixelDepth","tlaServiceUri","scrollStop","Object","event","clientY","isScrolling","clearTimeout","setTimeout","elem","bounding","getBoundingClientRect","top","left","bottom","innerHeight","documentElement","right","innerWidth","domReady","arguments","tracker","multiFrame","fp","parent","viewedZones","initiated","context","initialise","tlaObject","tlaTs","create","track","iframe","getContent","setContext","templateContentClick","conversion","clientConversion","propOk","action","JSON","stringify","et","usid","pid","ts","url","tz","hn","hostname","hp","port","pt","protocol","hr","rf","cta","prid","cli","csv","zn","cdtv","isArray","arg1","val","valt","arg2","value","arg","receiveContent","response","parse","content","cntr","innerHTML","scripts","i","script","eval","tlaSelfTracking","encodeURI","eventType","tgt","id","nodeName","fid","fc","init"],"mappings":"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","file":"tla.js","sourcesContent":["var tlaInit = (function (window) {\r\n\r\n var tlaServiceUri = \"#{AppSettings.PublisherServiceUrl}api/v1/\";\r\n var tlaUserFp = \"tlaUserFp\";\r\n var tlaSessionId = \"tlaSessionId\";\r\n\r\n //Create new GUID for local/session storage\r\n function createGuid() {\r\n function s4() {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n }\r\n\r\n return s4() + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + s4() + s4();\r\n }\r\n\r\n function getTlaQuery(key) {\r\n try {\r\n var urlParams = new URLSearchParams(window.location.search);\r\n return urlParams.get(key);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n // Get the tlaUserFp\r\n function getTlaUserFp() {\r\n //// First check the query string.\r\n //var tlaFp = getTlaQuery('tlaFp');\r\n\r\n //if (tlaFp) {\r\n // try {\r\n // localStorage.setItem(tlaUserFp, tlaFp);\r\n // } catch (e) {\r\n // console.log(e);\r\n // }\r\n\r\n // return tlaFp;\r\n //}\r\n\r\n if (typeof localStorage !== \"undefined\") {\r\n try {\r\n var existingFp = localStorage.getItem(tlaUserFp);\r\n if (existingFp === null) {\r\n // Generate new fp\r\n var newFp = createGuid();\r\n localStorage.setItem(tlaUserFp, newFp);\r\n _tla(\"track\", \"fp\", newFp);\r\n\r\n return newFp;\r\n } else {\r\n return existingFp;\r\n }\r\n\r\n } catch (ee) {\r\n void 0;\r\n // localStorage is disabled\r\n return null;\r\n }\r\n } else {\r\n void 0;\r\n return null;\r\n }\r\n }\r\n\r\n //Read tlaSessionId GUID\r\n function getTlaSessionId() {\r\n // First check the query string.\r\n var tlaUsid = getTlaQuery('tlaUsid');\r\n\r\n if (tlaUsid) {\r\n try {\r\n sessionStorage.setItem(tlaSessionId, tlaUsid);\r\n } catch (e) {\r\n void 0;\r\n }\r\n\r\n return tlaUsid;\r\n }\r\n\r\n if (typeof sessionStorage !== \"undefined\") {\r\n try {\r\n var sessionId = sessionStorage.getItem(tlaSessionId);\r\n if (sessionId === null) {\r\n sessionId = createGuid();\r\n sessionStorage.setItem(tlaSessionId, sessionId);\r\n void 0;\r\n }\r\n return sessionId;\r\n\r\n } catch (e) {\r\n // sessionStorage is disabled\r\n }\r\n } else {\r\n void 0;\r\n }\r\n\r\n return createGuid();\r\n }\r\n\r\n function execFunction(obj, args) {\r\n //remove first argument as always key. Pass remaining args to function\r\n var key = args.shift();\r\n\r\n //if named function exists then apply it\r\n if (obj[key]) {\r\n //apply function listed in key\r\n obj[key].apply(obj, args);\r\n }\r\n }\r\n\r\n function checkProp(propId) {\r\n //Requires network-publisher-site\r\n var pattern = /^[a-z]{3}[0-9]{2}-[0-9a-f]{7}-[0-9a-f]{3}$/i;\r\n\r\n if (pattern.test(propId)) {\r\n void 0;\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function getHostUrl(isIframe) {\r\n void 0;\r\n void 0;\r\n void 0;\r\n\r\n var hostUrl = document.location.href;\r\n\r\n if (isIframe) {\r\n // Use Referrer to ge parent URL\r\n var refUrl = document.referrer;\r\n if (refUrl.length > 0) {\r\n hostUrl = refUrl;\r\n }\r\n }\r\n\r\n return hostUrl;\r\n }\r\n\r\n var scrollStop = function (callback) {\r\n // Make sure a valid callback was provided\r\n if (!callback || Object.prototype.toString.call(callback) !== '[object Function]') return;\r\n\r\n document.addEventListener('mouseout', function (event) {\r\n\r\n // Set an internal to run after \r\n setInterval(function () {\r\n if (event.clientY <= 0) {\r\n // Run the callback\r\n callback();\r\n }\r\n }, 66);\r\n });\r\n\r\n // Setup scrolling variable\r\n var isScrolling;\r\n\r\n // Listen for scroll events\r\n window.addEventListener('scroll', function (event) {\r\n\r\n // Clear our timeout throughout the scroll\r\n window.clearTimeout(isScrolling);\r\n\r\n // Set a timeout to run after scrolling ends\r\n isScrolling = setTimeout(function () {\r\n\r\n // Run the callback\r\n callback();\r\n\r\n }, 66);\r\n\r\n }, false);\r\n\r\n };\r\n\r\n // Check if a given element is vivible in the viewport.\r\n var isInViewport = function (elem) {\r\n var bounding = elem.getBoundingClientRect();\r\n\r\n // Ensure element has height.\r\n if (bounding.height < 1) {\r\n return false;\r\n }\r\n\r\n return (\r\n bounding.top >= 0 &&\r\n bounding.left >= 0 &&\r\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\r\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\r\n );\r\n };\r\n\r\n // Check if a given zone element is visible in the viewport.\r\n function checkVisible(elementName) {\r\n // Cross domain iframe functionality not implemented yet. Will always return visible for IFrame currently.\r\n var cont = document.getElementById(elementName);\r\n var override = cont.querySelector(\".tla-zv\");\r\n\r\n if (override === null) {\r\n return isInViewport(cont);\r\n } else {\r\n return isInViewport(override);\r\n }\r\n }\r\n\r\n // Check if a given element is has parent with a given class.\r\n function hasParenWithClass(el, cls) {\r\n // If we are here we didn't find the searched class in any parents node\r\n if (!el.parentNode) {\r\n return false;\r\n }\r\n\r\n // If the current node has the class return true, otherwise we will search\r\n // it in the parent node\r\n if (el.className && new RegExp(\"(\\\\s|^)\" + cls + \"(\\\\s|$)\").test(el.className)) {\r\n return true;\r\n }\r\n\r\n return hasParenWithClass(el.parentNode, cls);\r\n }\r\n\r\n // Add click event tracker on the zone container.\r\n function addZoneClickTracker(container, respJson, zoneId, selfTrackingClick) {\r\n var cont = document.getElementById(container);\r\n cont.addEventListener(\"click\", function (e) {\r\n tla.updateZoneViewStatus(container, respJson, zoneId);\r\n setInterval(function () { tla.updateZoneViewStatus(container, respJson, zoneId); }, 300);\r\n\r\n _tla(\"templateContentClick\", \"KeyPress\", e, respJson.templateId, respJson.productId, respJson.campaignLineItemId, respJson.contentSetVersionId, zoneId, respJson.campaignDeliveryTypeIds.join(\",\"));\r\n\r\n var elm = e.target || e.srcElement;\r\n if (!selfTrackingClick && hasParenWithClass(elm, \"tla-zc\")) {\r\n _tla(\"templateContentClick\", \"Click\", e, respJson.templateId, respJson.productId, respJson.campaignLineItemId, respJson.contentSetVersionId, zoneId, respJson.campaignDeliveryTypeIds.join(\",\"));\r\n }\r\n });\r\n\r\n var aar = cont.getElementsByTagName(\"a\");\r\n for (var j = 0; j < aar.length; j++) {\r\n aar[j].addEventListener(\"click\", function (e) {\r\n if (!selfTrackingClick) {\r\n _tla(\"templateContentClick\", \"Click\", e, respJson.templateId, respJson.productId, respJson.campaignLineItemId, respJson.contentSetVersionId, zoneId, respJson.campaignDeliveryTypeIds.join(\",\"));\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Picks items off the global queue and executes them\r\n function processQueue(obj, queue, execFnc) {\r\n try {\r\n\r\n while (queue.length > 0) {\r\n //get the first item from the queue\r\n var itm = queue.shift();\r\n\r\n execFnc(obj, Array.prototype.slice.call(itm));\r\n\r\n } //loop\r\n } catch (ex) {\r\n void 0;\r\n }\r\n }\r\n\r\n // Add function to list\r\n function fnWrap(key, obj, callback) {\r\n //assign function to list \r\n obj[key] = callback;\r\n }\r\n\r\n // Get Content by AJAX.\r\n function getByXhr(uri, callback, targetContainer, zoneId) {\r\n var Xhr = window.XMLHttpRequest;\r\n void 0;\r\n if (!Xhr) return false;\r\n\r\n var request = new Xhr;\r\n\r\n if (!(\"withCredentials\" in request)) return false;\r\n\r\n request.open(\"GET\", uri, true);\r\n\r\n request.withCredentials = false;\r\n //Send as plain text rather than JSON to prevent preflight call\r\n //Also, senBeacon sends as plain text so consistent.\r\n request.setRequestHeader(\"Content-Type\", \"text/plain\");\r\n\r\n request.onreadystatechange = function () {\r\n if (4 === request.readyState && 200 === request.status) {\r\n callback(request.responseText, targetContainer, zoneId);\r\n request = null;\r\n }\r\n };\r\n\r\n request.send();\r\n\r\n return true;\r\n }\r\n\r\n // Send by AJAX.\r\n function postByXhr(uri, data) {\r\n var Xhr = window.XMLHttpRequest;\r\n void 0;\r\n if (!Xhr)\r\n return false;\r\n\r\n var request = new Xhr;\r\n\r\n if (!(\"withCredentials\" in request))\r\n return false;\r\n\r\n request.open(\"POST\", uri, true);\r\n\r\n request.withCredentials = false;\r\n //Send as plain text rather than JSON to prevent preflight call\r\n //Also, senBeacon sends as plain text so consistent.\r\n request.setRequestHeader(\"Content-Type\", \"text/plain\");\r\n request.onreadystatechange = function () {\r\n 4 === request.readyState && (request = null);\r\n };\r\n request.send(data);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Send using sendBeacon.\r\n *\r\n * Method to asynchronously transfer small HTTP data from\r\n * the User Agent to a web server.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon\r\n */\r\n function sendByBeacon(uri, data) {\r\n if (window.navigator.sendBeacon) {\r\n void 0;\r\n var headers = {\r\n type: \"text/plain\"\r\n };\r\n var blob = new Blob([data], headers);\r\n\r\n //sends as text/plain. Can load into Blob to send JSON but that leads to browser issues etc\r\n var request = window.navigator.sendBeacon(uri, blob);\r\n if (request) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // Post the given data to the service API.\r\n function postData(uri, data) {\r\n //Try sending by each method\r\n if (8192 >= data.length) {\r\n void 0;\r\n // IE6/7 will have issues while the other major browsers are safe.\r\n // http://caniuse.com/#search=sendBeacon\r\n // if (!sendByBeacon(uri, data))\r\n postByXhr(uri, data);\r\n }\r\n }\r\n\r\n var domReady = function (callback) {\r\n document.readyState === \"interactive\" || document.readyState === \"complete\" ? callback() : document.addEventListener(\"DOMContentLoaded\", callback);\r\n };\r\n\r\n // BEGIN TLA OBJECT\r\n var tla = function () {\r\n void 0;\r\n //execute function request\r\n execFunction(tla, Array.prototype.slice.call(arguments));\r\n };\r\n\r\n tla.timestamp = 0; //var to hold timestamp passed in from publisher page. We can use this to compare against further timestamps for load speed etc\r\n tla.tracker; //object to hold tracking data for page impression recording\r\n tla.multiFrame = false; //used to prevent re-running setup/tracking where we have multipe IFrame instances on a page (multiple zones). Other than this, IFrame instances will not know about each other\r\n\r\n tla.propertyId = \"\"; //'PropertyId' represents a publisher property - format is NETWORK-PUBLISHER-WEBSITE [a-z]{3}[0-9]{2}-[0-9a-f]{7}-[0-9a-f]{3}\r\n tla.fp; // a GUID generated user Id\r\n tla.userSession; // a GUID for the user session generated here\r\n tla.isIframe = !(window === window.parent); //returns whether IFrame\r\n tla.currPage = getHostUrl(tla.isIframe); //returns the current URL/parent URL when IFrame\r\n\r\n tla.viewedZones = {}; //Dictionary object\r\n\r\n tla.initiated = false; //used to test if TLA object has already been assigned to _tla\r\n tla.context = \"\"; //Var to hold publisher context data if passed in\r\n\r\n tla.initialise = function () {\r\n //_tla is the global object name created in the page script that holds the command queue\r\n var tlaObject = window[\"_tla\"];\r\n\r\n //check for new instance - no need to do this if not\r\n if (!tlaObject.initiated) {\r\n //add intial page script vars to TLA object\r\n tla.queue = tlaObject.queue;\r\n\r\n var tlaTs = getTlaQuery('tlaTs');\r\n if (tlaTs) {\r\n tla.timestamp = tlaTs;\r\n } else {\r\n tla.timestamp = tlaObject.timestamp;\r\n }\r\n\r\n //Create array of client functions (so we can refer to by key later)\r\n fnWrap(\"create\", tla, tla.create);\r\n fnWrap(\"track\", tla, tla.track);\r\n fnWrap(\"iframe\", tla, tla.iframe);\r\n fnWrap(\"getContent\", tla, tla.getContent);\r\n fnWrap(\"setContext\", tla, tla.setContext);\r\n fnWrap(\"templateContentClick\", tla, tla.templateContentClick);\r\n fnWrap(\"conversion\", tla, tla.conversion);\r\n fnWrap(\"clientConversion\", tla, tla.clientConversion);\r\n //assign TLA to global obj\r\n window[\"_tla\"] = tla;\r\n //console.log(_tla.queue.length);\r\n\r\n //Now process the queue to handle commands set while js file was loading async\r\n processQueue(tla, tla.queue, execFunction);\r\n\r\n void 0;\r\n }\r\n };\r\n\r\n //Create - function sets up tracker\r\n tla.create = function (propId) {\r\n void 0;\r\n if (!tla.initiated && checkProp(propId)) {\r\n void 0;\r\n tla.propertyId = propId;\r\n tla.propOk = true;\r\n\r\n var userSession = getTlaSessionId();\r\n var fp = getTlaUserFp();\r\n //check if user id exists(multiple zones!-new uid could have been created but not yet stored) then read user localStorage GUID to get user id.\r\n tla.fp = tla.fp || fp || \"\";\r\n //check if user session exists, then read user sessionStorage GUID to get the user session id \r\n tla.userSession = tla.userSession || userSession || \"\";\r\n\r\n void 0;\r\n void 0;\r\n\r\n //##TODO - what else do we need to do here? ##\r\n\r\n tla.initiated = true;\r\n }\r\n };\r\n\r\n\r\n //Track - gathers tracking data into TLA object\r\n tla.track = function (action, args) {\r\n void 0;\r\n void 0;\r\n if (tla.propOk) {\r\n switch (action) {\r\n case \"event\":\r\n postData(tlaServiceUri + \"post/\", JSON.stringify(args));\r\n void 0;\r\n break;\r\n case \"page\":\r\n if (!tla.multiFrame) {\r\n void 0;\r\n var data = {\r\n et: \"Page\",\r\n fp: tla.fp,\r\n usid: tla.userSession,\r\n pid: tla.propertyId,\r\n ts: tla.timestamp,\r\n url: tla.currPage,\r\n tz: (new Date()).getTimezoneOffset() / 60,\r\n hn: document.location.hostname,\r\n hp: document.location.port,\r\n pt: document.location.protocol,\r\n hr: document.location.href,\r\n rf: document.referrer\r\n };\r\n //Send impression track to API\r\n postData(tlaServiceUri + \"post/\", JSON.stringify(data));\r\n }\r\n break;\r\n case \"fp\":\r\n void 0;\r\n tla.tracker = new ImpressionTracker(tla, args);\r\n //Send impression track to API\r\n postData(tlaServiceUri + \"post/\", JSON.stringify(tla.tracker.data));\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n };\r\n\r\n tla.updateZoneViewStatus = function (container, respJson, zoneId) {\r\n void 0;\r\n if (tla.viewedZones[zoneId] === false && (checkVisible(container) || tla.isIframe)) {\r\n setTimeout(function () {\r\n if (tla.viewedZones[zoneId] === false && (checkVisible(container) || tla.isIframe)) {\r\n //fire content viewed event\r\n void 0;\r\n tla.viewedZones[zoneId] = true;\r\n\r\n if (respJson.templateId) {\r\n var data = {\r\n et: \"AdvertView\",\r\n fp: tla.fp,\r\n usid: tla.userSession,\r\n pid: tla.propertyId,\r\n ts: tla.timestamp,\r\n url: tla.currPage,\r\n tz: (new Date()).getTimezoneOffset() / 60,\r\n cta: respJson.templateId,\r\n prid: respJson.productId,\r\n cli: respJson.campaignLineItemId,\r\n csv: respJson.contentSetVersionId,\r\n zn: zoneId,\r\n cdtv: respJson.campaignDeliveryTypeIds.join(\",\")\r\n };\r\n _tla(\"track\", \"event\", data);\r\n }\r\n }\r\n }, 300);\r\n }\r\n };\r\n\r\n tla.setContext = function () {\r\n tla.context = Array.prototype.slice.call(arguments);\r\n };\r\n\r\n tla.clientConversion = function (obj) {\r\n\t // Array = \r\n\t // 0 = Use query string vars\r\n\t // 1 = cta,\r\n\t // 2 = csv\r\n\t // 3 = zn\r\n\t // 4 = type\r\n\t // 5 = value\r\n var isObjArray = Array.isArray(obj);\r\n\r\n if (isObjArray) {\r\n\t var arg1 = {\r\n\t\t et: \"ClientConversion\",\r\n\t\t fp: tla.fp,\r\n\t\t usid: tla.userSession,\r\n\t\t pid: tla.propertyId,\r\n\t\t ts: tla.timestamp,\r\n\t\t url: tla.currPage,\r\n\t\t tz: (new Date()).getTimezoneOffset() / 60,\r\n cta: obj[1],\r\n csv: obj[2],\r\n zn: obj[3],\r\n val: obj[5],\r\n valt: obj[4]\r\n\t };\r\n\r\n\t _tla(\"track\", \"event\", arg1);\r\n } else {\r\n\t // Check the data is in the query string.\r\n\t var cta = getTlaQuery(\"tlaCta\"),\r\n\t\t csv = getTlaQuery(\"tlaCsv\"),\r\n\t\t zn = getTlaQuery(\"tlaZn\");\r\n\r\n\t if (cta && csv && zn) {\r\n\t\t var arg2 = {\r\n\t\t\t et: \"ClientConversion\",\r\n\t\t\t fp: tla.fp,\r\n\t\t\t usid: tla.userSession,\r\n\t\t\t pid: tla.propertyId,\r\n\t\t\t ts: tla.timestamp,\r\n\t\t\t url: tla.currPage,\r\n\t\t\t tz: (new Date()).getTimezoneOffset() / 60,\r\n\t\t\t cta: cta,\r\n\t\t\t csv: csv,\r\n\t\t\t zn: zn,\r\n\t\t\t val: tla.currPage,\r\n\t\t\t valt: type\r\n\t\t };\r\n\r\n\t\t _tla(\"track\", \"event\", arg2);\r\n\t }\r\n }\r\n };\r\n\r\n tla.conversion = function (type, value, cta, csv, zn) {\r\n var arg = {\r\n et: \"Conversion\",\r\n fp: tla.fp,\r\n usid: tla.userSession,\r\n pid: tla.propertyId,\r\n ts: tla.timestamp,\r\n url: tla.currPage,\r\n tz: (new Date()).getTimezoneOffset() / 60,\r\n cta: cta,\r\n csv: csv,\r\n zn: zn,\r\n val: value,\r\n valt: type\r\n };\r\n\r\n _tla(\"track\", \"event\", arg);\r\n };\r\n\r\n tla.receiveContent = function (response, container, zoneId) {\r\n void 0;\r\n var respJson = JSON.parse(response);\r\n if (respJson && respJson.content) {\r\n var cntr = document.getElementById(container);\r\n cntr.innerHTML = respJson.content;\r\n\r\n var scripts = cntr.getElementsByTagName(\"script\");\r\n for (var i = 0; i < scripts.length; ++i) {\r\n var script = scripts[i];\r\n eval(script.innerHTML);\r\n }\r\n\r\n if (respJson.templateId) {\r\n tla.viewedZones[zoneId] = false;\r\n\r\n var tlaSelfTracking = cntr.querySelector('input[name=\"tlaSelfTracking\"]') != null ? true : false;\r\n \r\n addZoneClickTracker(container, respJson, zoneId, tlaSelfTracking);\r\n\r\n var data = {\r\n et: \"AdvertLoad\",\r\n fp: tla.fp,\r\n usid: tla.userSession,\r\n pid: tla.propertyId,\r\n ts: tla.timestamp,\r\n url: tla.currPage,\r\n tz: (new Date()).getTimezoneOffset() / 60,\r\n cta: respJson.templateId,\r\n zn: zoneId,\r\n prid: respJson.productId,\r\n cli: respJson.campaignLineItemId,\r\n csv: respJson.contentSetVersionId,\r\n cdtv: respJson.campaignDeliveryTypeIds.join(\",\")\r\n };\r\n _tla(\"track\", \"event\", data);\r\n\r\n void 0;\r\n scrollStop(function () {\r\n tla.updateZoneViewStatus(container, respJson, zoneId);\r\n });\r\n\r\n if (tla.isIframe) {\r\n tla.updateZoneViewStatus(container, respJson, zoneId);\r\n }\r\n }\r\n }\r\n };\r\n\r\n tla.getContent = function (zoneId, container) {\r\n if (tla.propOk) {\r\n //##TODO: need to add check for no specified container in which case output HTML to parent element\r\n\r\n var fp = tla.fp;\r\n var uri = tlaServiceUri + \"content/?propertyid=\" + tla.propertyId + \"&fp=\" + fp + \"&zoneid=\" + zoneId + \"&ts=\" + tla.timestamp + \"&url=\" + encodeURI(tla.currPage) + \"&clientwidth=\" + document.body.clientWidth + \"&context=\" + encodeURI(tla.context);\r\n\r\n getByXhr(uri, tla.receiveContent, container, zoneId);\r\n }\r\n };\r\n\r\n tla.iframe = function (zoneId, multiFrame, top) {\r\n tla.multiFrame = multiFrame;\r\n void 0;\r\n };\r\n\r\n tla.templateContentClick = function (eventType, e, templateId, productId, campaignLineItemId, contentSetVersionId, zoneId, campaignDeliveryTypeIds) {\r\n e = e || window.event;\r\n var elm = e.target || e.srcElement;\r\n var cls = elm.className;\r\n if (typeof cls !== \"string\") {\r\n cls = \"\";\r\n }\r\n\r\n var arg = {\r\n et: eventType,\r\n fp: tla.fp,\r\n usid: tla.userSession,\r\n pid: tla.propertyId,\r\n ts: tla.timestamp,\r\n url: tla.currPage,\r\n tz: (new Date()).getTimezoneOffset() / 60,\r\n cta: templateId,\r\n prid: productId,\r\n cli: campaignLineItemId,\r\n csv: contentSetVersionId,\r\n zn: zoneId,\r\n tgt: elm.href || elm.id || cls || elm.nodeName,\r\n fid: elm.id || cls || elm.nodeName,\r\n fc: elm.nodeName,\r\n cdtv: campaignDeliveryTypeIds\r\n };\r\n _tla(\"track\", \"event\", arg);\r\n return true;\r\n };\r\n\r\n tla.propOk = false;\r\n //END TLA OBJECT\r\n\r\n //OTHER FUNCTIONS\r\n function ImpressionTracker(obj, args) {\r\n var self = this;\r\n\r\n function setData(a, b) {\r\n self.data[a] = b;\r\n }\r\n\r\n self.data = {};\r\n setData(\"et\", 8),\r\n setData(\"fp\", args),\r\n setData(\"usid\", obj.userSession),\r\n setData(\"pid\", obj.propertyId),\r\n setData(\"ts\", obj.timestamp),\r\n setData(\"url\", obj.currPage),\r\n setData(\"tz\", (new Date()).getTimezoneOffset() / 60),\r\n setData(\"pd\", navigator.product),\r\n setData(\"an\", navigator.appName),\r\n setData(\"vs\", navigator.version),\r\n setData(\"plt\", navigator.platform),\r\n setData(\"cs\", navigator.characterSet),\r\n setData(\"lg\", navigator.language),\r\n setData(\"ag\", navigator.userAgent),\r\n setData(\"cw\", document.body.clientWidth),\r\n setData(\"ch\", document.body.clientHeight),\r\n setData(\"sw\", screen.width),\r\n setData(\"sh\", screen.height),\r\n setData(\"cm\", document.compatMode),\r\n setData(\"cc\", screen.colorDepth),\r\n setData(\"pxd\", screen.pixelDepth);\r\n }\r\n\r\n return {\r\n init: function () {\r\n void 0;\r\n domReady(function () {\r\n var t = tla.initialise;\r\n t.apply();\r\n });\r\n\r\n //##TODO - need to add check for document visible and add listener so we don't try running tracking etc without document loaded.\r\n void 0;\r\n }\r\n };\r\n})(window);\r\n\r\ntlaInit.init();"]}