if(aff_masterTag == null){ var aff_masterTag = true;
// masterTag regenerated on 2022-09-30 09:35
/****************************************************************************************************************
* Master TAG
****************************************************************************************************************/
var AffUtils = AffUtils || {
Link: {
/**
* Checks if 2 domains are different in order to get to know if a link is external
*
* @param link
* @returns {boolean}
*/
isExternalLink: function (link) {
var pagedomain = AffUtils.Domain.getHostNameFromURL(document.location.href);
var linkdomain = AffUtils.Domain.getHostNameFromURL(link);
return (linkdomain !== pagedomain);
},
/**
* Checks if one URL is having parameters
*
* @param link
* @returns {boolean}
*/
containsQueryString: function (link) {
return (link.indexOf('?') > -1);
},
/**
* Adds one parameter to one link
*
* @param link
* @param propagateParam
* @param paramName
* @returns {string|*}
*/
injectParameters: function (link, propagateParam, paramName) {
if (propagateParam === '' || link.indexOf(paramName + '=') > -1) {
return link;
}
var separator;
if (AffUtils.Link.containsQueryString(link)) {
separator = '&';
} else {
separator = '?';
}
/* Check internal anchors in the URL */
var anchor = '';
var anchorposition = link.indexOf('#');
var getParamsPosition = link.indexOf('?');
if (anchorposition > -1) {
anchor = link.substr(anchorposition);
link = link.substr(0, anchorposition);
}
var result = '';
// In case that there is anchor (#) in url,
// we're making sure if parameters are located before or after the anchor,
// So we'll append our parameters always after their parameters
if (anchorposition > -1 && anchorposition < getParamsPosition) {
result = link + anchor + separator + propagateParam;
}else{
result = link + separator + propagateParam + anchor;
}
return result;
},
/**
* Check if the string is a link
*
* @param url
* @returns {boolean}
*/
isLink: function (url) {
url = url.toLowerCase();
if (url.substring(0, 7) === 'http://') {
return true;
} else if (url.substring(0, 8) === 'https://') {
return true;
} else if (url.substring(0, 2) === '//') {
return true;
} else if (url.substring(0, 1) === '/') {
return true;
}
return false;
}
},
Cookie: {
/**
* Gets the value of a cookie if exists
*
* @param cookieName
* @returns {string|null}
*/
get: function (cookieName) {
var value = '; ' + document.cookie;
var parts = value.split('; ' + cookieName + '=');
if (parts.length === 2) {
return parts.pop().split(';').shift();
}
return null;
},
/**
* Sets the cookie
*
* @param name
* @param value
* @param expires
* @param domain
*/
set: function (name, value, expires, domain) {
value = value.replace(/;/g, "%3B");
document.cookie = name + '=' + value + '; expires = ' + expires + ';domain=.' + domain + ';path=/;SameSite=Lax'
},
/**
* Get cookie remaining time to expiry date
*
* @param cookieCreatedTime
* @param cookieLife
* @returns {number|null}
*/
getRemainingTime: function (cookieCreatedTime, cookieLife) {
var cookie_expiry_time = parseInt(cookieCreatedTime) + parseInt(cookieLife);
var d = new Date();
var nowms = Math.round(d / 1000);
var remainingTime = parseInt(cookie_expiry_time) - parseInt(nowms);
return remainingTime ? remainingTime : cookieLife;
},
/**
* Calculate cookie expiry date time by using remaining time
*
* @param remainingTime
* @returns {number}
*/
getExpiryDateTime : function (remainingTime) {
return (Math.round(new Date().getTime())) + (remainingTime * 1000);
},
/**
* Calculate cookie created timestamp using remaining time
*
* @param cookieLife
* @param remainingTime
* @returns {number|null}
*/
getCreatedDateTime : function (cookieLife, remainingTime) {
var days_passed = parseInt(cookieLife) - parseInt(remainingTime);
var now = Math.round(new Date().getTime()) / 1000;
var created_timestamp = parseInt(now) - parseInt(days_passed);
return created_timestamp ? created_timestamp : null;
}
},
Domain: {
/**
* Extracts the complete hostName from a url
*
* @param url
* @returns {null|*}
*/
getHostNameFromURL: function (url) {
var match = url.match(/:\/\/(www[0-9]?\.)?(.[^/:]+)/i);
if (match != null && match.length > 2 && typeof match[2] === 'string' && match[2].length > 0) {
return match[2];
} else {
return null;
}
},
/**
* Gets the main domain without the subdomain from a string
*
* @param domain
* @returns {*}
*/
getDomainWithoutSubdomainsFromDomain: function (domain) {
// http://rossscrivener.co.uk/blog/javascript-get-domain-exclude-subdomain
var i = 0;
var p = domain.split('.');
var s = '_gd' + (new Date()).getTime();
while (i < (p.length - 1) && document.cookie.indexOf(s + '=' + s) === -1) {
domain = p.slice(-1 - (++i)).join('.');
document.cookie = s + '=' + s + ';domain=' + domain + ';';
}
document.cookie = s + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=' + domain + ';';
return domain;
},
/**
* Extracts the domain from a string (removes protocol, routes, etc)
*
* @param string
* @returns {*}
*/
extractDomainFromString: function (string) {
var hostname;
//find & remove protocol (http, ftp, etc.) and get hostname
if (string.indexOf('//') > -1) {
hostname = string.split('/')[2];
} else {
hostname = string.split('/')[0];
}
//find & remove port number
hostname = hostname.split(':')[0];
//find & remove '?'
hostname = hostname.split('?')[0];
hostname = hostname.replace('www.', '');
return hostname;
},
/**
* Checks if a domain is blackListed (social media)
*
* @param externalURL
* @returns {boolean}
*/
inBlackList: function (externalURL) {
var blacklist = ['facebook.com', 'twitter.com', 'youtube.com', 'instagram.com', 'pinterest.com', 'pinterest.es', 'es.pinterest.com', 'vimeo.com', 'plus.google.com', 'linkedin.com', 'tripadvisor.com'];
var domainURL = AffUtils.Domain.extractDomainFromString(externalURL.toLowerCase());
return (blacklist.indexOf(domainURL) > -1);
}
},
Event: {
eventWrapper: function (element, event, funct) {
try {
element.addEventListener ? element.addEventListener(event, funct) : element.attachEvent && element.attachEvent('on' + event, funct);
} catch (e) {
AffUtils.log('AffMLC exception:' + e.message, false);
}
},
wrap: function (object, method, wrapper) {
var fn = object[method];
return object[method] = function(){
if(arguments.length > 0){
return wrapper.apply(this, [fn.bind(this)].concat(Array.prototype.slice.call(arguments)));
}else{
return fn.apply();
}
};
},
unwrap: function (object, method, orginalFn) {
object[method] = orginalFn;
}
},
log: function (note, debug) {
if (debug) {
console.log(note);
}
},
group: function (groupName, debug) {
if (debug) {
console.group(groupName);
}
},
groupEnd: function (debug) {
if (debug) {
console.groupEnd();
}
}
};
/****************************************************************************************************************
* DENOMATIC PIXEL
****************************************************************************************************************/
if(aff_denomatic == null){
var aff_denomatic = true;
/* Denomatic pixel */
! function() {
var x = document.createElement("script");
x.type = "text/javascript", x.async = !0, x.src = "https://cdn.denomatic.com/drs/346-982f361f013c.js?rnd=20220224";
var z = document.getElementsByTagName("head")[0];
if (z) z.appendChild(x, z);
else {
var z = document.getElementsByTagName("script")[0];
z.parentNode.insertBefore(x, z)
}
}();
}
/**************************************************
* AFFILIRED MERCHANT LOCAL COOKIES
*
* Note: Adding the variable into the browser console "window.affilireddebug=1" will enable the log feature
*
**************************************************/
var AffMLC = AffMLC || {};
(function ($xd) {
$xd.AffLocalCookieName = ""; // initialized in init, so it's not concatenating itself with ACD
$xd.COOKIELIFE = 30 * 24 * 60 * 60;
$xd.getPlatformType = function () {
if(navigator.userAgent.match(/mobile/i)) {
// 'Mobile';
return 2;
} else if (navigator.userAgent.match(/iPad|Android|Touch/i)) {
// 'Tablet';
return 3;
} else if (navigator.userAgent.match(/tv/i)) {
// 'SmartTV';
return 4;
} else {
// 'Desktop';
return 1;
}
};
$xd.createPropagateParam = function (network, affiliate, remainingTime, tracking_reference, clickid, referrer) {
var propagate_param = '_affclk=' + network + ':' + affiliate + ':';
if (remainingTime != null) {
propagate_param += remainingTime;
}
propagate_param += ':';
if (tracking_reference != null) {
propagate_param += tracking_reference;
}
propagate_param += ':';
if (clickid != null) {
propagate_param += clickid;
}
propagate_param += ':';
if(referrer !== null){
propagate_param += referrer;
}
return propagate_param;
};
$xd.isExternalLink = function (link) {
var pagedomain = $xd.getHostName(document.location.href);
var linkdomain = $xd.getHostName(link);
return (linkdomain != pagedomain);
};
$xd.linkContainsQueryString = function (link) {
if (link.indexOf('?') > -1) {
return true;
} else {
return false;
}
};
$xd.injectParametersToLink = function (_link, propagate_param) {
if (propagate_param == '' || _link.indexOf('_affclk=') > -1) {
return _link;
}
var separator;
if ($xd.linkContainsQueryString(_link)) {
separator = "&";
} else {
separator = "?";
}
/* Check internal anchors in the URL */
var anchor = '';
var anchorposition = _link.indexOf('#');
var getParamsPosition = _link.indexOf('?');
if (anchorposition > -1) {
anchor = _link.substr(anchorposition);
_link = _link.substr(0, anchorposition);
}
var result = '';
if (anchorposition > -1 && anchorposition < getParamsPosition) {
result = _link + anchor + separator + propagate_param;
}else{
result = _link + separator + propagate_param + anchor;
}
return result;
};
$xd.getHostName = function (url) {
var match = url.match(/:\/\/(www[0-9]?\.)?(.[^/:]+)/i);
if (match != null && match.length > 2 && typeof match[2] === 'string' && match[2].length > 0) {
return match[2];
} else {
return null;
}
};
$xd.getAffLocalCookie = function () {
var value = "; " + document.cookie;
var parts = value.split("; " + this.AffLocalCookieName + "=");
if (parts.length == 2) {
return parts.pop().split(";").shift();
} else {
return null;
}
};
$xd.setAffLocalCookie = function (network, tracking_ref, affiliate, funnel, referrer, clickTime, acd_sale, clickid, device, expires, domain) {
if (tracking_ref==null) {
tracking_ref = '';
}
if (clickid==null) {
clickid = '';
}
/*
* NORMALIZED COOKIE FORMAT:
* network | tracking_ref | affiliate_ref | affiliate_ref_old | referrer | cookieTime | acd_sale | clickId | device
*
*/
var content = network + "|" + tracking_ref + "|" + affiliate + "|" + funnel + "|" + referrer + "|" + clickTime + "|" + acd_sale + "|" + clickid + "|" + device;
content = content.replace(/;/g, "%3B");
document.cookie = this.AffLocalCookieName + "=" + content + "; expires = " + expires + ";domain=." + domain + ";path=/;";
};
$xd.getDomain = function () {
// http://rossscrivener.co.uk/blog/javascript-get-domain-exclude-subdomain
var i = 0;
var domain = document.domain;
var p = domain.split('.');
var s = '_gd' + (new Date()).getTime();
while (i < (p.length - 1) && document.cookie.indexOf(s + '=' + s) == -1) {
domain = p.slice(-1 - (++i)).join('.');
document.cookie = s + "=" + s + ";domain=" + domain + ";";
}
document.cookie = s + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=" + domain + ";";
return domain;
};
$xd.isLink = function (url) {
// In some cases url can be undefined, to avoid issues before to execute toLowerCase() we need to check that url is having any value
if(typeof url !== 'undefined' && url !== null){
url = url.toLowerCase();
if (url.substring(0, 7) === 'http://') {
return true;
}
if (url.substring(0, 8) === 'https://') {
return true;
}
if (url.substring(0, 2) === '//') {
return true;
}
if (url.substring(0, 1) === '/') {
return true;
}
}
return false;
};
$xd.extractDomain = function (url) {
var hostname;
//find & remove protocol (http, ftp, etc.) and get hostname
if (url.indexOf("//") > -1) {
hostname = url.split('/')[2];
} else {
hostname = url.split('/')[0];
}
//find & remove port number
hostname = hostname.split(':')[0];
//find & remove "?"
hostname = hostname.split('?')[0];
hostname = hostname.replace("www.", "");
return hostname;
};
$xd.inBlackList = function (externalURL) {
var blacklist = [
"facebook.com",
"twitter.com",
"youtube.com",
"instagram.com",
"pinterest.es",
"pinterest.com",
"es.pinterest.com",
"vimeo.com",
"plus.google.com",
"linkedin.com",
"tripadvisor.com"
];
var domainURL = $xd.extractDomain(externalURL.toLowerCase());
return (blacklist.indexOf(domainURL) > -1);
};
/*
* Event Wrapper
*/
$xd.eventWrapper = function (element, event, funct) {
try {
element.addEventListener ? element.addEventListener(event, funct) : element.attachEvent && element.attachEvent("on" + event, funct);
} catch (e) {
$xd.log("AffMLC exception:" + e.message, false);
}
};
/*
* Log
*/
$xd.log = function (note, stop) {
if (typeof window.affilireddebug !== 'undefined') {
console.log("AffMLC debug: " + note);
if (stop) {
debugger;
}
}
};
/*
* Event Listener for the clicks
*/
$xd.onClick = function (event) {
if(true === true){
//Looking for the clicked Anchor
var tarEl = event.target;
while (tarEl.nodeName.toUpperCase() != 'A' && tarEl.parentElement) {
tarEl = tarEl.parentElement;
}
if (tarEl && tarEl.nodeName.toUpperCase() == "A") {
if ($xd.isLink(tarEl.href)) { //Checking if it is a real link (avoiding javascript:, mailto:, tel:, etc)
if ($xd.isExternalLink(tarEl.href)) { //Is it an external link?
if (!$xd.inBlackList(tarEl.href)) { //Checking if the external domain in black list
//Injecting the propagate parameters into the external link
var current_link = $xd.injectParametersToLink(tarEl.href, window._AffMLC_propagate_param);
tarEl.href = current_link;
$xd.log("Click :: Added parameter to link " + tarEl.href, false);
}
}
}
}
}
};
/*
* Event Listener for FORMSs submits (GET & POST)
*/
$xd.onSubmit = function (event) {
if(true === true){
if (typeof event.target.action !== 'undefined') {
if (event.target.action != "") {
if ($xd.isLink(event.target.action)) { //Checking if it is a real link (avoiding javascript:, mailto:, tel:, etc)
if ($xd.isExternalLink(event.target.action)) { // Is it an external link?
if (!$xd.inBlackList(event.target.action)) { // Checking if the external domain in black list
//Injecting the propagate parameters into the external link
var current_link = $xd.injectParametersToLink(event.target.action, window._AffMLC_propagate_param);
if (event.target.method.toUpperCase() == 'GET') {
// GET action
// validate AffMLC_propagate_param to avoid creating of _affclk input with null value and adding blank param in url
if(window._AffMLC_propagate_param != ''){
// create _affclk input and set value
var input = document.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("name", "_affclk");
input.setAttribute("value", window._AffMLC_propagate_param.replace("_affclk=", ""));
event.srcElement.appendChild(input);
$xd.log("Submit :: GET :: Added hidden input", true);
}
} else {
//POST action
event.target.action = current_link;
$xd.log("Submit :: POST :: Added propagation to url " + event.target.action, false);
/*
* For those JS Apps that are preventing the submit with event.preventDefault();
* we force the Submit now, as we are in the Top of the Event Buble chain.
*/
if (event.defaultPrevented == true) {
$xd.log("Submit :: POST :: Forcing Submit", false);
event.target.submit();
}
}
}
}
}
}
}
}
};
/************************************
* Window Open Rewrite *
************************************/
$xd.wrap = function(object, method, wrapper) {
var fn = object[method];
return object[method] = function(){
if(arguments.length > 0){
return wrapper.apply(this, [fn.bind(this)].concat(
Array.prototype.slice.call(arguments)));
}else{
return fn.apply();
}
};
};
//You may want to 'unwrap' the method later
//(setting the method back to the original)
$xd.unwrap = function(object, method, orginalFn){
object[method] = orginalFn;
};
/************************************/
$xd.init = function (merchantId) {
//To ensure the function is only fired once
if (typeof this.executed === 'undefined') {
this.executed = true;
} else {
return;
}
/*
* We need that each Merchant Local Cookie has its own name, because of some merchants
* can end the booking process in a shared booking engine.
* Ex: merchant1.com has the booking process at bookingeengine.com
* and merchant2.com has the booking process at bookingeengine.com too,
* so we need 2 Merchant Local Cookies at bookingeengine.com to have different values
*/
$xd.AffLocalCookieName = "_afflrdmlc" + merchantId;
var network = null;
var affiliate = null;
var remainingTime = null;
var tracking_reference = null;
var clickid = null;
var referrer = '';
var acd_sale = ''; // no cdt from the begining
var cookieHistory = '';
var cookieExpiresDate = new Date();
var clickTime = Math.round(cookieExpiresDate / 1000);
window._AffMLC_propagate_param = ''; //Default Propagate param
/*
* Getting the _affclk parameter from the Location URL or from the Referrer URL
*/
var affClkReg = new RegExp("[?&]_affclk=([^&#]*)", "i");
var affClkString = affClkReg.exec(window.location.href);
if (!affClkString) {
affClkString = affClkReg.exec(document.referrer);
}
var affClkValue = affClkString ? affClkString[1] : undefined;
//Getting the Merchant Local Cookie (used later in any case)
var afflrdmlc = $xd.getAffLocalCookie();
var acd_cookie = '';
var device = $xd.getPlatformType();
if (affClkValue != "" && affClkValue != undefined) {
//Fixing any encoded character
affClkValue = decodeURIComponent(affClkValue);
/*
* Splitting the content from the QueryString parameter
*/
var affClkValueData = affClkValue.split(":");
if (affClkValueData[0] !== undefined) {
network = affClkValueData[0];
}
if (affClkValueData[1] !== undefined) {
affiliate = affClkValueData[1];
}
if (affClkValueData[2] !== undefined) {
remainingTime = affClkValueData[2];
if (remainingTime=='') {
remainingTime = null; //COOKIELIFE;
cookieExpiresDate.setTime(cookieExpiresDate.getTime() + ($xd.COOKIELIFE * 1000));
} else {
cookieExpiresDate.setTime(cookieExpiresDate.getTime() + (remainingTime * 1000));
}
} else {
cookieExpiresDate.setTime(cookieExpiresDate.getTime() + ($xd.COOKIELIFE * 1000));
}
if (affClkValueData[3] !== undefined) {
tracking_reference = affClkValueData[3];
}
if (affClkValueData[4] !== undefined) {
clickid = affClkValueData[4];
}
if(affClkValueData[5] !== undefined){
referrer = affClkValueData[5];
}
/*
* If we have the _affclk parameter we must:
* 1.- Get the Local cookie
* 2.- Create if it doesn't exist *
* 3.- Update the content if already exists (update history + refresh network and affiliate) * ^
*
* [*] If we have a remainingTime value, the cookie will have limited time, not a fill time life
*/
// If the Merchant Local Cookie exists
if (afflrdmlc !== null) {
/*
* The Merchant Local Cookie ALREADY EXISTS
*
* Processing the Cookie Funnel / History = network:affiliate:cookietime[;oldHistory] ([0]:[2]:[5][;[3]])
*/
var afflrdmlcData = afflrdmlc.split("|");
//If remainingTime is null means that we are getting a new click
/*
* NORMALIZED COOKIE FORMAT:
* network | tracking_ref | affiliate_ref | affiliate_ref_old | referrer | cookieTime | acd_sale | clickId | device
*
*/
/*
* PROPOSAL OF NORMALIZED FUNNEL FORMAT:
* network : affiliate_ref : interactionTime : affiliate_type : device
*
*/
if (typeof afflrdmlcData[8] == 'undefined') {
afflrdmlcData[8] = 0;
}
if (remainingTime == null) {
cookieHistory = afflrdmlcData[0] + ':' + afflrdmlcData[2] + ':' + afflrdmlcData[5] + '::' + afflrdmlcData[8];
if (afflrdmlcData[3] != '') {
cookieHistory += (encodeURIComponent(';') + afflrdmlcData[3]);
}
cookieHistory = cookieHistory.substring(0, 2000); // Limiting the size of the history
remainingTime = $xd.COOKIELIFE; // Setting the remaining time to be propagated
} else if (remainingTime != null) {
clickTime = afflrdmlcData[5];
cookieHistory = afflrdmlcData[3]; //Same history
//Checking if the network and affiliate have changed too
if (network != afflrdmlcData[0] || affiliate != afflrdmlcData[2]) {
cookieHistory = afflrdmlcData[0] + ':' + afflrdmlcData[2] + ':' + afflrdmlcData[5] + '::' + afflrdmlcData[8];
if (afflrdmlcData[3] != '') {
cookieHistory += (encodeURIComponent(';') + afflrdmlcData[3]);
}
}
}
}
/*
* NORMALIZED COOKIE FORMAT:
* network | tracking_ref | affiliate_ref | affiliate_ref_old | referrer | cookieTime | acd_sale | clickId | device
*
*/
/* Create / Update the Merchant Local Cookie [setAffLocalCookie(network, tracking_ref = '', affiliate, funnel = '', referrer = '', cookieTime, expires, domain)] */
$xd.setAffLocalCookie(network, tracking_reference, affiliate, cookieHistory, referrer, clickTime, acd_sale, clickid, device, cookieExpiresDate.toUTCString(), $xd.getDomain());
// Setting global variable to propagate parameters
window._AffMLC_propagate_param = $xd.createPropagateParam(network, affiliate, remainingTime, tracking_reference, clickid, referrer);
} else {
/*
* In case we don't have the "_affclk" parameter in the URL and referrer,
* we check if the local cookie "_afflrdmlc" cookie exists. If it exists we get the data from the local cookie
* to injectParameters() in the external links
*/
if (afflrdmlc !== null) {
// Getting data from the cookie
var data = afflrdmlc.split('|');
/*
* NORMALIZED COOKIE FORMAT:
* network | tracking_ref | affiliate_ref | affiliate_ref_old | referrer | cookieTime | acd_sale | clickId | device
*
*/
// Network
network = data[0];
// Tracking Reference
tracking_reference = data[1];
// Affiliate Ref
affiliate = data[2];
// funnel
cookieHistory = data[3];
// referer
referrer = data[4];
if (referrer !== null) {
// codify the referrer/rl before pass into param
var referrerParts = referrer.split('//');
var scheme = referrerParts[0];
var host = referrerParts[1];
scheme = scheme.replace(':', ''); // remove : from protocol
host = host.replace(/\./g, '_'); // replace dots with underscores
referrer = scheme + '//' + host;
}
// Remaining time
var cookieCreatedTime = data[5];
var cookieExpiryTime = parseInt(cookieCreatedTime) + parseInt($xd.COOKIELIFE);
var d = new Date();
var nowms = Math.round(d / 1000);
remainingTime = parseInt(cookieExpiryTime) - parseInt(nowms);
// acd_sale
acd_sale = data[6];
// ClickId
if (data[7] !== undefined) {
clickid = data[7];
}
// we keep the device as the detected device before this if / else branch, no mathers what the cookie says
// Setting global variable to propagate parameters
window._AffMLC_propagate_param = $xd.createPropagateParam(network, affiliate, remainingTime, tracking_reference, clickid, referrer);
}
}
/*
* Attaching to events
*/
$xd.eventWrapper(document, "click", $xd.onClick);
$xd.eventWrapper(document, "submit", $xd.onSubmit);
if (window._AffMLC_propagate_param.length > 0) {
if(true === true){
$xd.wrap(window, "open", function(orginalFn){
var originalParams = Array.prototype.slice.call(arguments, 1);
if ($xd.isLink(originalParams[0])) { //Checking if it is a real link (avoiding javascript:, mailto:, tel:, etc)
if ($xd.isExternalLink(originalParams[0])) { //Is it an external link?
if (!$xd.inBlackList(originalParams[0])) { //Checking if the external domain in black list
//Injecting the propagate parameters into the external link
var current_link = $xd.injectParametersToLink(originalParams[0], window._AffMLC_propagate_param);
originalParams[0] = current_link;
$xd.log("Click :: Added parameter to window.open " + originalParams[0], false);
}
}
}
orginalFn.apply(undefined, originalParams);
});
}
}
};
})(AffMLC);
(function () {
try {
if (typeof AffMLC !== 'undefined') {
if (document.readyState === "loading") {
document.onreadystatechange = function () {
if (document.readyState === "interactive") {
AffMLC.init(4843);
}
};
} else {
AffMLC.init(4843);
}
}
} catch (e) {
console.log("AffMLC main exception :: " + e.message);
}
})();
if(aff_extra_js == null){
var aff_extra_js = true;
// Resetting aff_denomatic == null and others because we need Denomatic need to be loaded multiple times during the shopping cart steps
aff_extra_js = null;
aff_masterTag = null;
aff_denomatic = null;
}
}