{"product_id":"tasse-ausweichtrikot-25-26","title":"Tasse Ausweichtrikot 25/26","description":"<p>Farbe: weiß/blau<br><script>var AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\"advertiser\":{\"config\":{\"advertiserId\":\"40626\",\"campaignId\":\"10292\",\"pagetype\":\"product\",\"identifier\":\"UB11 - Tassen, Gläser, Keramik\",\"category\":\"Küche & Lebensmittel\",\"accessConfig\":{\"location\":false,\"referrer\":false,\"sale\":true,\"basket\":true,\"zxParams\":[\"pagetype\",\"products\",\"category\",\"identifier\"]}}},\"plugin\":{\"publisherId\":\"\",\"advertiserId\":41734,\"protocol\":\"https://\",\"zxParams\":{},\"basket\":[]}};AWIN.pluginName = \"ReachGroup\";</script><script>var AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t// only one of the two can be set\n\t\tif (sScriptSrc && sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t// only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t// set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t// attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t// send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t// append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t// AWIN.Tracking.hideElement(iframe); // not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t// AWIN.Tracking.hideElement(image); // not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '&';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('&');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t// if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t// start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t// map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t */\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t */\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t */\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t */\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t */\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t */\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t */\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t// prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}&gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t// cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData && success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '&gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t// functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t// Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, // can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, // can be added without configuration\n\n\t\t// new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net/retarget';\n\n(function ($r) {\n  if ($r.terminate === true) {\n    return;\n  }\n\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i < products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i < products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '&version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '&' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '&' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '&' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '&' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '&' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n</script><script>var AWIN = AWIN || {};AWIN.Tracking = AWIN.Tracking || {};AWIN.payload = {\"advertiser\":{\"config\":{\"advertiserId\":\"40626\",\"campaignId\":\"10292\",\"pagetype\":\"product\",\"identifier\":\"UB11 - Tassen, Gläser, Keramik\",\"category\":\"Küche & Lebensmittel\",\"accessConfig\":{\"location\":false,\"referrer\":false,\"sale\":true,\"basket\":true,\"zxParams\":[\"pagetype\",\"products\",\"category\",\"identifier\"]}}},\"plugin\":{\"publisherId\":\"\",\"advertiserId\":41734,\"protocol\":\"https://\",\"zxParams\":{},\"basket\":[]}};AWIN.pluginName = \"ReachGroup\";</script><script>var AWIN = AWIN || {};\nAWIN.iScriptCount = 0;\n\nAWIN.Tracking = (function (pluginName, payload) {\n\tvar fetchZxParam = function (name) {\n\t\treturn payload.plugin.zxParams[name] || null;\n\t};\n\tvar scriptAppend = function (sScriptSrc, sScriptContent, onLoadCallback, oScriptTagParams, tcfVendorId) {\n\t\t// only one of the two can be set\n\t\tif (sScriptSrc && sScriptContent) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// create script node\n\t\tvar scriptNode = document.createElement('script');\n\t\tscriptNode.type = 'text/javascript';\n\t\tscriptNode.id = '_aw_script_' + AWIN.iScriptCount++;\n\n\t\t// only add if param was passed\n\t\tif (sScriptSrc) {\n\t\t\tscriptNode.src = sScriptSrc;\n\t\t} else if (sScriptContent) {\n\t\t\tscriptNode.text = sScriptContent;\n\t\t}\n\n\t\t// set optional parameters\n\t\tif (oScriptTagParams) {\n\t\t\tfor (var name in oScriptTagParams) {\n\t\t\t\tscriptNode[name] = oScriptTagParams[name];\n\t\t\t}\n\t\t}\n\n\t\t// attach an event handler\n\t\tif (onLoadCallback) {\n\t\t\t// send Debug EVent when onLoadCallback is not a function. TODO This is temporary change, should be removed after analysis\n\t\t\tif (typeof onLoadCallback !== 'function') {\n\t\t\t\tAWIN.Tracking.sendDebugEvent({\n\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\tsource: { app: 'AMT', category: 'scriptAppend' },\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tmessage: 'onLoadCallback is not a function in mastertag-sb.',\n\t\t\t\t\t\turl: sScriptSrc || 'inline script',\n\t\t\t\t\t\tadvertiserId: AWIN.Tracking.iMerchantId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// for IE\n\t\t\tscriptNode.onreadystatechange = function () {\n\t\t\t\tif (scriptNode.readyState == 'complete' || scriptNode.readyState == 'loaded') {\n\t\t\t\t\tonLoadCallback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// for everything elses\n\t\t\tscriptNode.onload = onLoadCallback;\n\t\t}\n\n\t\t// append node\n\t\tif (sScriptSrc) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(scriptNode.src),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tscriptNode.src += gdprAppends;\n\t\t\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tAWIN.Tracking.getScriptAppendNode().appendChild(scriptNode);\n\t\t}\n\n\t\treturn scriptNode;\n\t};\n\tvar frameAppend = function (sFrameSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sFrameSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsFrameSrc += gdprAppends;\n\n\t\t\t\t\tvar iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tiframe.src = sFrameSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(iframe);\n\t\t\t\t\t// AWIN.Tracking.hideElement(iframe); // not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar pixelAppend = function (sImageSrc, tcfVendorId) {\n\t\tif (document.getElementsByTagName('body')[0]) {\n\t\t\tAWIN.Tracking.Consent.getGdprAppends(\n\t\t\t\ttcfVendorId,\n\t\t\t\tAWIN.Tracking.getQueryParameterDelimiter(sImageSrc),\n\t\t\t\tfunction (gdprAppends) {\n\t\t\t\t\tsImageSrc += gdprAppends;\n\n\t\t\t\t\tvar image = document.createElement('img');\n\t\t\t\t\timage.setAttribute('aria-hidden', 'true');\n\t\t\t\t\timage.src = sImageSrc;\n\t\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(image);\n\t\t\t\t\t// AWIN.Tracking.hideElement(image); // not needed, iframe is hidden already\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\tvar getQueryParameterDelimiter = function (currentUrl) {\n\t\treturn currentUrl.indexOf('?') === -1 ? '?' : '&';\n\t};\n\tvar buildQueryString = function (params) {\n\t\tvar bits = [];\n\t\tfor (var name in params) {\n\t\t\tif (params.hasOwnProperty(name)) {\n\t\t\t\tbits.push(name + '=' + encodeURIComponent(params[name]));\n\t\t\t}\n\t\t}\n\t\treturn bits.join('&');\n\t};\n\tvar getScriptAppendNode = function () {\n\t\treturn document.body;\n\t};\n\tvar getBasketData = function () {\n\t\treturn payload.plugin.basket || [];\n\t};\n\tvar getAffiliateId = function () {\n\t\treturn payload.plugin.publisherId;\n\t};\n\tvar _getAWCValue = function () {\n\t\treturn payload.plugin.awc;\n\t};\n\n\tvar Consent = {};\n\n\t(function (awinTrackingConsent) {\n\t\t// if we locate the CMP iframe we will reference it with this\n\t\tvar cmpFrame;\n\n\t\t(function () {\n\t\t\t// start here at our window\n\t\t\tvar frame = window;\n\n\t\t\t// map of calls\n\t\t\tvar cmpCallbacks = {};\n\t\t\twhile (frame) {\n\t\t\t\ttry {\n\t\t\t\t\t/**\n\t\t\t\t\t * throws a reference error if no frames exist\n\t\t\t\t\t */\n\t\t\t\t\tif (frame.frames['__tcfapiLocator']) {\n\t\t\t\t\t\tcmpFrame = frame;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (ignore) {}\n\t\t\t\tif (frame === window.top) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tframe = frame.parent;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Set up a __tcfapi proxy method to do the postMessage and map the callback.\n\t\t\t * From the caller's perspective, this function behaves identically to the\n\t\t\t * CMP API's __tcfapi call\n\t\t\t */\n\t\t\twindow.__tcfapi = function (cmd, version, callback, arg) {\n\t\t\t\tif (!cmpFrame) {\n\t\t\t\t\tcallback({ msg: 'CMP not found' }, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar callId = Math.random() + '';\n\t\t\t\t\tvar msg = {\n\t\t\t\t\t\t__tcfapiCall: {\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\tparameter: arg,\n\t\t\t\t\t\t\tversion: version,\n\t\t\t\t\t\t\tcallId: callId,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t/**\n\t\t\t\t\t * map the callback for lookup on response\n\t\t\t\t\t */\n\t\t\t\t\tcmpCallbacks[callId] = callback;\n\t\t\t\t\tcmpFrame.postMessage(msg, '*');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction postMessageHandler(event) {\n\t\t\t\t/**\n\t\t\t\t * when we get the return message, call the mapped callback\n\t\t\t\t */\n\t\t\t\tvar json = {};\n\n\t\t\t\ttry {\n\t\t\t\t\t/**\n\t\t\t\t\t * if this isn't valid JSON then this will throw an error\n\t\t\t\t\t */\n\t\t\t\t\tjson = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n\t\t\t\t} catch (ignore) {}\n\n\t\t\t\tvar payload = json.__tcfapiReturn;\n\t\t\t\tif (payload) {\n\t\t\t\t\t/**\n\t\t\t\t\t * messages we care about will have a payload\n\t\t\t\t\t */\n\t\t\t\t\tif (typeof cmpCallbacks[payload.callId] === 'function') {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * call the mapped callback and then remove the reference\n\t\t\t\t\t\t */\n\n\t\t\t\t\t\tcmpCallbacks[payload.callId](payload.returnValue, payload.success);\n\t\t\t\t\t\tcmpCallbacks[payload.callId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.addEventListener('message', postMessageHandler, false);\n\t\t})();\n\n\t\tawinTrackingConsent.isCmpPresentOnPage = function () {\n\t\t\treturn typeof cmpFrame !== 'undefined';\n\t\t};\n\n\t\tawinTrackingConsent.getGdprAppends = function (tcfVendorId, delimiter, callback) {\n\t\t\tif (tcfVendorId) {\n\t\t\t\t// prepare for no CMP and errors\n\t\t\t\tvar fallbackAppend = delimiter + 'gdpr=${GDPR}&gdpr_consent=${GDPR_CONSENT_' + tcfVendorId + '}';\n\n\t\t\t\t// cmp found, asking __tcfapi for a consent string for this vendorId\n\t\t\t\tif (AWIN.Tracking.Consent.isCmpPresentOnPage()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t__tcfapi(\n\t\t\t\t\t\t\t'getTCData',\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\tfunction (tcData, success) {\n\t\t\t\t\t\t\t\tvar appends = delimiter;\n\t\t\t\t\t\t\t\tif (tcData && success) {\n\t\t\t\t\t\t\t\t\tif (typeof tcData.gdprApplies !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (tcData.gdprApplies) {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=1';\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tappends += 'gdpr=0';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tappends += '&gdpr_consent=' + tcData.tcString;\n\t\t\t\t\t\t\t\t\t\tcallback(appends);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// no data, no success or missing tcData.gdprApplies\n\t\t\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[tcfVendorId]\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// no CMP found\n\t\t\t\t\tcallback(fallbackAppend);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// no vendorId provided\n\t\t\t\tcallback('');\n\t\t\t}\n\t\t};\n\t})(Consent);\n\n\tvar publicObject = {\n\t\t// functions\n\t\tfetchZxParam: fetchZxParam,\n\t\tscriptAppend: scriptAppend,\n\t\tframeAppend: frameAppend,\n\t\tpixelAppend: pixelAppend,\n\t\tgetQueryParameterDelimiter: getQueryParameterDelimiter,\n\t\tbuildQueryString: buildQueryString,\n\t\tgetScriptAppendNode: getScriptAppendNode,\n\t\tgetBasketData: getBasketData,\n\t\tgetAffiliateId: getAffiliateId,\n\t\t_getAWCValue: _getAWCValue,\n\t\tConsent: Consent,\n\n\t\t// Awin properties\n\t\tSale: payload.plugin.sale,\n\t\tiMerchantId: payload.plugin.advertiserId, // can be added without configuration\n\t\tsProtocol: payload.plugin.protocol, // can be added without configuration\n\n\t\t// new access property\n\t\tcontext: {\n\t\t\tplugin: payload.plugin,\n\t\t\tadvertiser: payload.advertiser,\n\t\t\tlocation: payload.plugin.location,\n\t\t},\n\t};\n\n\tAWIN.sProtocol = payload.plugin.protocol;\n\tpublicObject[pluginName] = payload.advertiser.config;\n\treturn publicObject;\n})(AWIN.pluginName, AWIN.payload);\n\nAWIN.Tracking.ReachGroup = AWIN.Tracking.ReachGroup || {};\nAWIN.Tracking.ReachGroup.url = AWIN.Tracking.ReachGroup.url || AWIN.sProtocol + 'hal9000.redintelligence.net/retarget';\n\n(function ($r) {\n  if ($r.terminate === true) {\n    return;\n  }\n\n  if ('undefined' === typeof $r.advertiserId || 'undefined' === typeof $r.campaignId) {\n    return;\n  }\n\n  var pagetype = $r.pagetype || AWIN.Tracking.fetchZxParam('pagetype');\n\n  if (AWIN.Tracking.Sale) {\n    pagetype = 'checkout';\n  } else if ('checkout' === pagetype.toLowerCase()) {\n    AWIN.Tracking.Sale = {};\n  }\n\n  $r.combineProducts = function (products) {\n    if (typeof products === 'string') {\n      products = JSON.parse(products);\n    }\n\n    var output = '';\n    var sep = '';\n\n    for (var i = 0; i < products.length; i++) {\n      output += sep + products[i].identifier + '|' + products[i].quantity;\n      sep = ',';\n    }\n\n    return output;\n  };\n\n  $r.fetchBasketData = function () {\n    var products = AWIN.Tracking.getBasketData();\n    for (var i = 0; i < products.length; i++) {\n      products[i].identifier = products[i].id;\n      delete products[i].id;\n    }\n    return products;\n  };\n\n  var url = $r.url + '?a=' + $r.advertiserId + '&version=1';\n\n  switch (pagetype.toLowerCase()) {\n    case 'basket':\n      url += '&' + AWIN.Tracking.buildQueryString({\n        event: 'basket',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'category':\n      url += '&' + AWIN.Tracking.buildQueryString({\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category')\n      });\n      break;\n    case 'checkout':\n      url += '&' + AWIN.Tracking.buildQueryString({\n        event: 'transaction',\n        cat: $r.campaignId,\n        items: $r.combineProducts(AWIN.Tracking.fetchZxParam('products') || $r.fetchBasketData()),\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category') || ''\n      });\n      break;\n    case 'search':\n      url += '&' + AWIN.Tracking.buildQueryString({\n        segment: 'suchergebnisse'\n      });\n      break;\n    case 'product':\n      url += '&' + AWIN.Tracking.buildQueryString({\n        event: 'view',\n        cat: $r.campaignId,\n        segment: $r.category || AWIN.Tracking.fetchZxParam('category'),\n        items: $r.identifier || AWIN.Tracking.fetchZxParam('identifier')\n      });\n      break;\n    case 'registration':\n      return;\n    case 'generic':\n    case 'home':\n      break;\n    default:\n      return;\n  }\n\n  AWIN.Tracking.frameAppend(url);\n})(AWIN.Tracking.ReachGroup);\n</script><span>Volumen: 0,3l</span><br></p>","brand":"Booh Outfit Merchandise & Textildruck GmbH","offers":[{"title":"Default Title","offer_id":56391805665661,"sku":"UB112513","price":12.95,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"//cdn.shopify.com/s/files/1/0825/6271/1893/files/image_fill_Tasse25_THIRD_BACK_MU.webp?v=1756197962","url":"https://www.fanartikel-union-zeughaus.com/products/tasse-ausweichtrikot-25-26","provider":"Union Zeughaus","version":"1.0","type":"link"}