{"version":3,"sources":["../../../../../build/tmp/javascript/kenshoo.js"],"names":["Kenshoo_Helpers","createCORSRequest","url","xhr","XMLHttpRequest","open","XDomainRequest","setKenshooDomainCookie","value","setDomainCookie","name","createUUID","date","Date","setTime","getTime","expires","toGMTString","document","cookie","s4","Math","floor","random","toString","substring","loadPixel","onloadCallback","protocol","location","indexOf","img","Image","onload","src","getParameter","window","href","index","params","split","i","length","val","generateUUID","getCookie","callback","fromParam","this","fromDomain","getDomainCookie","status","remoteCookie","responseText","onerror","send","nameEQ","ca","c","charAt","createDomainCookie","expiryInMillis","createRandomDomainCookie","paramsToString","pathSeparator","keyPrefix","prefix","res","key","isEmptyString","param","undefined","isString","trim","isNumber","str","replace","findGroupForCookie","ratio","experiment","uid","charCodeAt","abs","sum","mod","groupSum","group","String","fromCharCode","getDomain","host","getRandomNumber","minValue","maxValue","makeCORSRequest","withCredentials","kenshoo","helper","downloadKenshooPixel","subdomain","downloadPixel","token","downloadRLSAPixel","conversionId","downloadOCPMPixelWithConvTypeMapping","typeMappings","type","currency","id","downloadOCPMPixel","trackClickIfManagedByKenshoo","profile","affcode","k_user_id","prof","trackConversion","trackClick","trackRLSA","trackRLSAExperiment","experimentId","kenshoo_experiment","kenshoo_group","trackOCPM","trackOCPMWithConversionTypeMapping","match","Uds_Pixel","matchAndSync","KID_RESOURCE_URL","concat","User_Match","shouldPerformMatch","User_Sync","shouldPerformSync","kenshooCookie","sync","MATCH_COOKIE_NAME","udsMatchUrl","subDomain","RAND_URL_PARAM","tapadConfig","syncCookieName","cookieExpiry","crosswiseConfig","vendors","vendorUrl","randomNumber","shouldPerformSyncForVendor","cookieName","syncVendor","vendor"],"mappings":"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","file":"kenshoo.js","sourcesContent":["var Kenshoo_Helpers = function() {\n\n var createCORSRequest = function(url){\n var xhr = new XMLHttpRequest();\n if (\"withCredentials\" in xhr){\n xhr.open('GET', url, true);\n } else if (typeof XDomainRequest != \"undefined\"){\n xhr = new XDomainRequest();\n xhr.open('GET', url);\n } else {\n xhr = null;\n }\n return xhr;\n };\n\n var setKenshooDomainCookie = function(value) {\n return setDomainCookie(\"k_user_id\", value);\n };\n\n var setDomainCookie = function(name, value) {\n if (!value) {\n value = createUUID();\n }\n if (!name) {\n return;\n }\n var date = new Date();\n date.setTime(date.getTime()+(31536000000)); // 1 year\n var expires = \"; expires=\"+date.toGMTString();\n document.cookie = name+\"=\"+value+expires+\"; path=/\";\n return value;\n };\n\n var createUUID = function() {\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n };\n\n var s4 = function() {\n return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n };\n\n\treturn {\n\t\tloadPixel: function(url, onloadCallback) {\n\t\t\tvar protocol = document.location.protocol;\n if (protocol.indexOf(\"http\") !== 0) {\n protocol = \"https:\";\n }\n\t\t\tvar img = new Image(1,1);\n\t\t\timg.onload = onloadCallback;\n\t\t\timg.src = protocol + \"//\" + url;\n return img;\n\t\t},\n\n\t\tgetParameter: function(name, url) {\n\t\t\tif (!url) {\n\t\t\t\turl = window.location.href;\n\t\t\t}\n\t\t\tvar index = url.indexOf('?');\n\t\t\tif (index == -1) {\n\t\t\t\treturn null;\n\t\t\t}\t\t\t\n\t\t\tvar params = url.substring(index+1).split(\"&\");\t \t \n\n\t\t\tfor (var i=0; i < params.length; i++) {\n\t\t\t\tvar val = params[i].split(\"=\");\n\t\t\t\tif (val[0] === name) {\n\t\t\t\t\treturn val[1];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\n generateUUID: function() {\n return createUUID();\n },\n\n\t\tgetCookie: function(callback) {\n\t\t\tvar fromParam = this.getParameter(\"k_user_id\");\n\t\t\tif (fromParam) {\n\t\t\t\treturn callback(fromParam);\n\t\t\t}\n\n var fromDomain = this.getDomainCookie();\n if (fromDomain) {\n return callback(fromDomain);\n }\n\n var xhr = createCORSRequest(\"https://services.xg4ken.com/kid\");\n if (xhr){\n xhr.onload = function(){\n if (xhr.status == 200) {\n var remoteCookie = xhr.responseText;\n setKenshooDomainCookie(remoteCookie);\n callback(remoteCookie);\n }\n else if (xhr.status == 404) {\n setKenshooDomainCookie();\n callback(null);\n }\n };\n xhr.onerror = function() {\n setKenshooDomainCookie();\n callback(null);\n };\n xhr.send();\n }\n\t\t},\n\n getDomainCookie: function(name) {\n if (!name) {\n name = \"k_user_id\";\n }\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n for(var i=0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0)==' ') c = c.substring(1,c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length,c.length);\n }\n return null;\n },\n\n createDomainCookie: function (name, value, expiryInMillis) {\n if (!name) {\n return;\n }\n if (!value) {\n value = createUUID();\n }\n if (!expiryInMillis) {\n expiryInMillis = 31536000000; //Default is 1 year\n }\n var date = new Date();\n date.setTime(date.getTime() + (expiryInMillis));\n var expires = \"; expires=\" + date.toGMTString();\n document.cookie = name + \"=\" + value + expires + \"; path=/\";\n return value;\n },\n\n createRandomDomainCookie: function (name, expiryInMillis) {\n return this.createDomainCookie(name, \"\", expiryInMillis);\n },\n\n paramsToString: function(params, pathSeparator, keyPrefix) {\n var prefix = (!keyPrefix) ? '' : keyPrefix;\n var res = \"\";\n if (params !== null) {\n for (var key in params) {\n if (res !== \"\") {\n res += '&';\n }\n res += prefix + key + '=' + params[key];\n }\n if (res !== \"\") {\n res = pathSeparator + res;\n }\n }\n return res;\n },\n\n isEmptyString: function(param) {\n if (param === undefined || param === null) {\n return true;\n }\n if (Kenshoo_Helpers.isString(param)) {\n return Kenshoo_Helpers.trim(param) === \"\";\n }\n if (Kenshoo_Helpers.isNumber(param)) {\n return false;\n }\n return true;\n },\n\n isNumber: function(param) {\n return typeof(param) === \"number\";\n },\n\n isString: function(param) {\n return typeof(param) === \"string\";\n },\n\n trim: function(str) {\n return str.replace(/^\\s+|\\s+$/g,\"\");\n },\n\n findGroupForCookie: function(ratio, experiment) {\n if (!experiment) {\n experiment = \"\";\n }\n var uid = this.getDomainCookie(\"k_rlsa\");\n if (!uid) {\n uid = setDomainCookie(\"k_rlsa\");\n }\n uid += \"_\"+experiment;\n\n //convert the cookie id string into a string by summing up its cahracter values\n var val = 0;\n for (var i = 0 ; i < uid.length ; i++) {\n val += uid.charCodeAt(i);\n }\n val = Math.abs(val);\n\n //calculate which group the cookie should fall into\n if (!ratio) {\n ratio = [1, 1];\n }\n var sum = 0;\n for (i = 0; i < ratio.length; i++) {\n sum += 1*ratio[i];\n }\n var mod = val % sum;\n\n var groupSum = 0;\n for (i = 0; i < ratio.length; i++) {\n groupSum += ratio[i];\n if (mod < groupSum) {\n var group = String.fromCharCode(97 + i);\n return group;\n }\n }\n\n return null;\n },\n\n getDomain: function() {\n return window.location.host;\n },\n\n getRandomNumber: function (minValue, maxValue) {\n return Math.floor(Math.random() * (maxValue + 1) + minValue);\n },\n makeCORSRequest : function(url, callback){\n var xhr = new XMLHttpRequest();\n if (\"withCredentials\" in xhr){\n xhr.open('GET', url, true);\n xhr.withCredentials = true;\n } else if (typeof XDomainRequest != \"undefined\"){\n xhr = new XDomainRequest();\n xhr.open('GET', url);\n } else {\n xhr = null;\n }\n\n if (xhr){\n xhr.onload = function(){\n if (xhr.status == 200) {\n callback(xhr.responseText);\n }\n else if (xhr.status == 404) {\n callback(null);\n }\n };\n xhr.onerror = function() {\n callback(null);\n };\n\n xhr.send();\n }\n }\n\n\t};\n\n}();;var kenshoo = function () {\n\n var helper = Kenshoo_Helpers;\n\n var downloadKenshooPixel = function (subdomain, params) {\n var url = subdomain + '.xg4ken.com/media/redir.php';\n url += helper.paramsToString(params, \"?\");\n helper.loadPixel(url);\n };\n\n var downloadPixel = function (subdomain, token, params) {\n\n var url = subdomain + '.xg4ken.com/pixel/v1?track=1&token=' + token ;\n\n url += helper.paramsToString(params, \"&\");\n helper.loadPixel(url);\n };\n\n var downloadRLSAPixel = function (conversionId, params) {\n var url = \"googleads.g.doubleclick.net/pagead/viewthroughconversion/\" + conversionId + \"/?value=0&guid=ON&script=0\";\n url += helper.paramsToString(params, \"&\", \"data.\");\n url += \"&random=\" + new Date().getTime();\n helper.loadPixel(url);\n };\n\n\n var downloadOCPMPixelWithConvTypeMapping = function (typeMappings, type, value, currency) {\n var id = typeMappings[type];\n downloadOCPMPixel(id, value, currency);\n };\n\n var downloadOCPMPixel = function (id, value, currency) {\n if (id) {\n var url = \"www.facebook.com/tr/?ev=\" + id;\n if (value) {\n url += \"&cd[value]=\" + value;\n }\n if (currency) {\n url += \"&cd[currency]=\" + currency;\n }\n url += \"&noscript=1\";\n helper.loadPixel(url);\n }\n };\n\n var trackClickIfManagedByKenshoo = function () {\n helper.getCookie(function (uid) {\n var subdomain = helper.getParameter('ken_ks');\n var profile = helper.getParameter('ken_prf');\n var affcode = helper.getParameter('ken_cid');\n if (uid && subdomain && profile && affcode) {\n downloadKenshooPixel(subdomain, {\n k_user_id: uid,\n prof: profile,\n affcode: affcode,\n url: 'http://' + subdomain + '.xg4ken.com' //empty redirect url\n });\n }\n });\n };\n\n return {\n /**\n * Tracks a conversion in Kenshoo\n * @param subdomain - the proxy subdomain to use for this request\n * @param token - the profile token for this request\n * @param params - a map of parameters to send with this conversion, e.g. {revenue: 1, currency: 'USD'}\n */\n trackConversion: function (subdomain, token, params) {\n downloadPixel(subdomain, token, params);\n },\n\n /**\n * Tracks a click in Kenshoo.\n * Click will be tracked only if the following parameters are in the URL:\n * ken_ks - the xg4ken subdomain to be used for tracking\n * ken_prf - the profile id\n * ken_cid - the affcode\n *\n * Click will tracked even if there was another click that was tracked via a redirect through xg4ken.\n */\n trackClick: function () {\n trackClickIfManagedByKenshoo();\n },\n\n /**\n * Fire a Google RLSA pixel with optional parameters\n * @param conversionId - The RLSA conversion id\n * @param params - an optional map of parameters to send with this conversion, e.g. {flight_destid: \"SFO\", flight_pagetype: \"search\", flight_totalvalue: 200 }\n * @see https://support.google.com/adwords/answer/3103357\n */\n trackRLSA: function (conversionId, params) {\n downloadRLSAPixel(conversionId, params);\n },\n\n /**\n * Fire a Google RLSA pixel with a custom parameter that identifies a user as beloging to a group that can in turned be used for A/B testing\n * @param conversionId - The RLSA conversion id\n * @param experimentId - The experiment id will be traslated into a custom parameter for RLSA which you'd be able to segment by in AdWords\n * @param ratio - An optional array of integers that set the number of groups and their sizes. For instance ratio=[1, 1] will create two groups of equal size.\n * ratio=[1, 3] will create two groups, one with 25% of the population and the other with 75%\n * ratio=[1, 2, 3, 4] will create 4 groups, one with 10% of the population, one with 20%, one with 30% and one with 40%\n * More formaly, ratio=[n1, ..., nm] will create m groups, each containing nx/sum(n1..nm) of the population\n */\n trackRLSAExperiment: function (conversionId, experimentId, ratio) {\n var group = helper.findGroupForCookie(ratio, experimentId);\n if (conversionId && experimentId && group !== null) {\n downloadRLSAPixel(conversionId, {kenshoo_experiment: experimentId, kenshoo_group: group});\n }\n },\n\n /**\n * Fire a Facebook oCPM pixel\n * @param id - the Facebook conversion pixel id\n * @param value - The conversion value\n * @param currency - The conversion currency\n * @see https://developers.facebook.com/docs/reference/ads-api/offsite-pixels/v2.2\n */\n trackOCPM: function (id, value, currency) {\n downloadOCPMPixel(id, value, currency);\n },\n\n /**\n * Fire a Facebook oCPM pixel while allowing to map between Kenshoo conversion types to Facebook conversion ids\n * @param typeMappings - a mapping of Kenshoo conversion types to Facebook conversion ids, e.g. { 'sale': 1234567890, 'booking': 987654321 }\n * @param type - The Kenshoo conversion type\n * @param value - The conversion value\n * @param currency - The conversion currency\n * @see https://developers.facebook.com/docs/reference/ads-api/offsite-pixels/v2.2\n */\n trackOCPMWithConversionTypeMapping: function (typeMappings, type, value, currency) {\n downloadOCPMPixelWithConvTypeMapping(typeMappings, type, value, currency);\n },\n\n /**\n * Fire a user for match and sync\n * @param uid a unique identifier representing the user.\n */\n match: function (uid) {\n Uds_Pixel.matchAndSync(uid);\n }\n\n };\n\n}();\n\n;var Uds_Pixel = function () {\n var helper = Kenshoo_Helpers;\n var KID_RESOURCE_URL = 'https://web.archive.org./web/20170201043354/https://services.xg4ken.com/kid?client_domain='.concat(helper.getDomain());\n\n var matchAndSync = function (uid) {\n if (User_Match.shouldPerformMatch(uid) || User_Sync.shouldPerformSync()) {\n helper.makeCORSRequest(KID_RESOURCE_URL, function (kenshooCookie) {\n User_Match.match(uid, kenshooCookie);\n User_Sync.sync(kenshooCookie);\n });\n }\n };\n\n return {\n matchAndSync: function (uid) {\n matchAndSync(uid);\n }\n };\n}();\n;var MATCH_COOKIE_NAME = 'kenshoo_id_match';\n\nvar User_Match = function () {\n var helper = Kenshoo_Helpers;\n\n var udsMatchUrl = function (subDomain, kenshooCookie, uid) {\n return 'services.xg4ken.com/services/uds/match?source=' + subDomain + '&ken_id=' + kenshooCookie + '&partner_uid=' + uid + '&hmac=';\n };\n\n return {\n match: function (uid, kenshooCookie) {\n if (this.shouldPerformMatch(uid) &&\n ! helper.isEmptyString(kenshooCookie)) {\n var url = udsMatchUrl(helper.getDomain(), kenshooCookie, uid);\n\n helper.loadPixel(url, function () {\n helper.createRandomDomainCookie(MATCH_COOKIE_NAME, 604800000); //1 week expiry\n });\n }\n },\n\n shouldPerformMatch: function(uid) {\n return helper.isEmptyString(helper.getDomainCookie(MATCH_COOKIE_NAME)) && !helper.isEmptyString(uid);\n }\n };\n}();\n;var RAND_URL_PARAM = '&_rand=';\n\nvar User_Sync = function () {\n var helper = Kenshoo_Helpers;\n\n var tapadConfig = {\n prefix: 'tapestry.tapad.com/tapestry/1?ta_partner_id=2049&ta_format=png&ta_partner_did=',\n syncCookieName: 'kenshoo_tapad_id_sync',\n cookieExpiry: 86400000 //1 day expiry\n };\n\n //var drawbridgeConfig = {\n // prefix: 'p.adsymptotic.com/d/px/?_pid=12330&_psign=5cb0dcdf064bbf8b209f15056b22aa54&_puuid=',\n // syncCookieName: 'kenshoo_drawbridge_id_sync',\n // cookieExpiry: 604800000 //1 week expiry\n //};\n\n var crosswiseConfig = {\n prefix: 'p.univide.com/t.gif?pid=50&pidt=0&pdid=',\n syncCookieName: 'kenshoo_crosswise_id_sync',\n cookieExpiry: 86400000 //1 day expiry\n };\n\n var vendors = [tapadConfig, crosswiseConfig];\n\n var vendorUrl = function (prefix, kenshooCookie, randomNumber) {\n return prefix + kenshooCookie + RAND_URL_PARAM + randomNumber;\n };\n\n var shouldPerformSyncForVendor = function(cookieName) {\n return helper.isEmptyString(helper.getDomainCookie(cookieName));\n };\n\n var syncVendor = function (vendor, kenshooCookie) {\n if (shouldPerformSyncForVendor(vendor.syncCookieName)) {\n var randomNumber = helper.getRandomNumber(1, 10000);\n var url = vendorUrl(vendor.prefix, kenshooCookie, randomNumber);\n\n helper.loadPixel(url, function() {\n helper.createRandomDomainCookie(vendor.syncCookieName, vendor.cookieExpiry);\n });\n }\n };\n\n return {\n sync: function (kenshooCookie) {\n for (var i = 0; i < vendors.length; i++) {\n syncVendor(vendors[i], kenshooCookie);\n }\n },\n\n shouldPerformSync: function() {\n for (var i = 0; i < vendors.length; i++) {\n if (shouldPerformSyncForVendor(vendors[i].syncCookieName)) {\n return true;\n }\n }\n return false;\n }\n };\n}();\n"]}