').append(jQuery(item.selector).clone()).html(),
});
var html = '
';
jQuery(item.selector).replaceWith(html);
} else {
item.attempt = item.attempt ? item.attempt + 1 : 1;
if (item.attempt <= 5) {
setTimeout(applyContextItem, 1000 * item.attempt, item, serviceData);
}
}
}
}
else if (item.type == 'Video') {
if (serviceData.video_urls[item.video_template_id]) {
if (jQuery(item.selector).length > 0) {
appliedChanges.push({
type: item.type,
selector: item.selector,
old_content: jQuery(item.selector).html(),
new_src: serviceData.video_urls[item.video_template_id],
});
var html = '
';
jQuery(item.selector).html(html);
}
} else {
item.attempt = item.attempt ? item.attempt + 1 : 1;
if (item.attempt <= 5) {
setTimeout(applyContextItem, 1000 * item.attempt, item, serviceData);
}
}
}
else if (item.type == 'Text') {
if (jQuery(item.selector).length > 0) {
let newContent = prepareNewContent(item.new_content, serviceData.dynamic_data, serviceData.dynamic_data_applied);
if (newContent != item.new_content || newContent.indexOf('{') == -1) {
jQuery(item.selector).html(newContent);
} else {
newContent = item.old_content;
}
appliedChanges.push({
type: item.type,
selector: item.selector,
old_content: item.old_content,
new_content: newContent
});
} else {
item.attempt = item.attempt ? item.attempt + 1 : 1;
if (item.attempt <= 5) {
setTimeout(applyContextItem, 1000 * item.attempt, item, serviceData);
}
}
} else if (item.type == 'Input') {
let newContent = prepareNewContent(item.new_content, serviceData.dynamic_data, serviceData.dynamic_data_applied);
appliedChanges.push({
type: item.type,
selector: item.selector,
old_content: item.old_content,
new_content: newContent
});
jQuery(item.selector).val(newContent);
}
}
function prepareNewContent(newContent, dynamicData, dynamicDataApplied) {
for (key in dynamicData) {
if (dynamicDataApplied.hasOwnProperty(key) && dynamicDataApplied[key] == true) {
var macroField = "\{\{" + key + "\}\}";
newContent = newContent.replace(new RegExp(macroField, 'g'), dynamicData[key]);
}
}
return newContent;
}
imageBlock = function(url) {
var imageId = settings.imageId ? settings.imageId : 'hyperiseImage1';
document.getElementById(imageId).src = url;
return true;
}
function replaceMacroNodes(parent) {
if (parent.nodeType == 1 && parent.outerHTML.indexOf("\{\{") != -1) {
var oldValue = parent.outerHTML;
for (key in dynamicData) {
var macroField = "\{\{" + key + "\}\}";
oldValue = oldValue.replace(new RegExp(macroField, 'g'), dynamicData[key]);
}
if (parent.outerHtml != oldValue) {
parent.outerHTML = oldValue;
}
}
if (parent.nodeType == 3 && parent.nodeValue.indexOf("\{\{") != -1) {
for (key in dynamicData) {
var macroField = "\{\{" + key + "\}\}";
parent.nodeValue = parent.nodeValue.replace(new RegExp(macroField, 'g'), dynamicData[key]);
}
}
if (parent.childNodes.length == 0) {
return;
}
for (var i = 0; i < parent.childNodes.length; i++) {
replaceMacroNodes(parent.childNodes[i]);
}
}
function isExtensionActivated() {
var bodyClass = jQuery('body:first').attr('class');
if (!bodyClass) return false;
var classList = bodyClass.split(/\s+/);
if (classList && classList.includes('extension-active')) {
return true;
}
return false;
}
function serialize(obj) {
var items = [];
for (var p in obj) {
if (obj.hasOwnProperty(p)) {
items.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
}
return items.join("&");
}
function serializeExt(obj) {
var items = [];
for (var p in obj) {
if (obj.hasOwnProperty(p)) {
items.push(p + "=" + obj[p]);
}
}
return items.join("&");
}
function checkParamsIsEmpty(href) {
if (href.split('?').length == 1 || !href.split('?')[1].length) {
return true;
}
var url = new URL(href);
var isNotEmpty = false;
url.searchParams.forEach(function(value, key) {
if (value && availableParams.indexOf(key) >= 0) {
isNotEmpty = true;
return;
}
});
return !isNotEmpty;
}
function needReset(oldParams, newParams) {
if (newParams.utm_hyperef && newParams.utm_hyperef != oldParams.utm_hyperef) {
return true;
}
if (newParams.email && newParams.email != oldParams.email) {
return true;
}
if (newParams.email && oldParams.utm_hyperef && oldParams.utm_hyperef.indexOf('@') >= 0 && newParams.email != oldParams.utm_hyperef) {
return true;
}
if (oldParams.email && newParams.utm_hyperef && newParams.utm_hyperef.indexOf('@') >= 0 && oldParams.email != newParams.utm_hyperef) {
return true;
}
return false;
}
function run() {
var href = HR_getLocationHref();
var fromCookies = getCookie('wsp_qs');
if (!fromCookies) {
fromCookies = '';
}
if (checkParamsIsEmpty(href)) {
if (fromCookies) {
href = href.split('?')[0].split('#')[0] + '?' + fromCookies;
}
} else {
var fromCookiesParams = {};
if (fromCookies) {
var parts = fromCookies.split('&');
for (var i = 0; i < parts.length; i++) {
var pair = parts[i].split('=');
if (pair[0] && pair[1] && availableParams.indexOf(pair[0]) >= 0) {
fromCookiesParams[pair[0]] = pair[1];
}
}
}
var url = new URL(href);
var newParams = {};
url.searchParams.forEach(function(value, key) {
if (value && availableParams.indexOf(key) >= 0) {
newParams[key] = encodeURIComponent(value);
}
});
if (needReset(fromCookiesParams, newParams)) {
setCookie('wsp_qs', serializeExt(newParams), 365);
} else {
for(var key in newParams) {
fromCookiesParams[key] = newParams[key];
if (key == 'utm_hyperef' && newParams[key].indexOf('@') >= 0) {
if (fromCookiesParams.hasOwnProperty('email')) {
delete fromCookiesParams.email;
}
}
}
var queryString = serializeExt(fromCookiesParams);
setCookie('wsp_qs', queryString, 365);
href = href.split('?')[0].split('#')[0] + '?' + queryString;
}
}
process(href);
}
function runManually(fields) {
var href = HR_getLocationHref();
var fromCookies = getCookie('wsp_qs');
if (!fromCookies) {
fromCookies = '';
}
var fromCookiesParams = {};
if (fromCookies) {
var parts = fromCookies.split('&');
for (var i = 0; i < parts.length; i++) {
var pair = parts[i].split('=');
if (pair[0] && pair[1] && availableParams.indexOf(pair[0]) >= 0) {
fromCookiesParams[pair[0]] = pair[1];
}
}
}
var newParams = {}
for(var key in fields) {
if (fields[key] && availableParams.indexOf(key) >= 0) {
newParams[key] = encodeURIComponent(fields[key]);
}
}
if (needReset(fromCookiesParams, newParams)) {
var queryString = serializeExt(newParams);
setCookie('wsp_qs', queryString, 365);
href = href.split('?')[0].split('#')[0] + '?' + queryString;
} else {
for(var key in newParams) {
fromCookiesParams[key] = newParams[key];
if (key == 'email') {
if (fromCookiesParams.hasOwnProperty('utm_hyperef') && fromCookiesParams['utm_hyperef'].indexOf('@') >= 0) {
delete fromCookiesParams.utm_hyperef;
}
}
}
var queryString = serializeExt(fromCookiesParams);
setCookie('wsp_qs', queryString, 365);
href = href.split('?')[0].split('#')[0] + '?' + queryString;
}
process(href);
}
function process(href) {
console.log('HREF', href);
imageIdUsed = false;
var ipLookup = settings.hasOwnProperty('ipLookup') ? settings.ipLookup : false;
if (!ipLookup && checkParamsIsEmpty(href)) {
return;
}
var url = new URL(href);
originalId = url.searchParams.get("utm_hyperef") || '';
if (!originalId) {
originalId = url.searchParams.get("email") || '';
}
if (!originalId) {
originalId = url.searchParams.get("website") || '';
}
var data = {
id: originalId,
domain: url.host,
page: url.pathname,
account_hash: accountHash,
image_hash: settings.imageTemplate || '',
ip_lookup: ipLookup,
href: HR_getLocationHref(),
params: getParams(url),
segment_params: getSegmentParams(url)
}
callAjax(serviceUrl, data, function(response) {
if (isExtensionActivated()) {
return;
}
var serviceData = JSON.parse(response);
if (serviceData.href && serviceData.href.length > 0) {
setCookie('wsp_qs', serviceData.href, 365);
}
self.personalized = serviceData.dynamic_data;
if (serviceData.version == 1) {
imageBlock(serviceData.url);
if (serviceData.dynamic_data) {
dynamicData = serviceData.dynamic_data;
for (var i = 0; i < document.body.childNodes.length; i++) {
replaceMacroNodes(document.body.childNodes[i]);
}
if (settings.onComplete) {
settings.onComplete(self.personalized);
}
}
} else {
if (serviceData.status == 'success') {
if (settings.onComplete) {
settings.onComplete(self.personalized);
}
for (var contextIndex = 0; contextIndex < serviceData.context.length; contextIndex++) {
applyContextItem(serviceData.context[contextIndex], serviceData);
}
if (settings.hasOwnProperty('imageId')
&& settings.imageId
&& settings.hasOwnProperty('imageTemplate') && settings.imageTemplate) {
for (var index in serviceData.image_hashes) {
if (serviceData.image_hashes.hasOwnProperty(index) && serviceData.image_hashes[index] == settings.imageTemplate) {
appliedChanges.push({
type: 'Image',
selector: '#' + settings.imageId,
old_src: jQuery('#' + settings.imageId).attr(getImageSourceAttrName('#' + settings.imageId)),
new_src: serviceData.image_urls[index]
});
jQuery('#' + settings.imageId).attr(getImageSourceAttrName('#' + settings.imageId), serviceData.image_urls[index]);
}
}
}
if (serviceData.dynamic_data) {
dynamicData = serviceData.dynamic_data;
for (var i = 0; i < document.body.childNodes.length; i++) {
replaceMacroNodes(document.body.childNodes[i]);
}
}
}
}
if (serviceData.default_image_url) {
if (jQuery('#hyper-campaign-tracking-img').length == 0) {
jQuery('body').append('
![]()
');
}
jQuery('#hyper-campaign-tracking-img').attr('src', serviceData.default_image_url);
}
if (originalId) {
fbPixelBlock();
}
if (self.formSelector) {
if (document.querySelector(self.formSelector)) {
document.querySelector(self.formSelector).removeEventListener("submit", hyperiseFormSubmitListener);
}
hyperiseAttachFormSubmitEvent(self.formSelector, 5);
}
});
}
function innerInit(params) {
for (var prop in params) {
settings[prop] = params[prop];
}
if (isExtensionActivated()) {
return;
}
if (jQuery.fn.on) {
jQuery(document).on('mouseover', '.hyperise-extension-top', function() {
if (appliedChanges.length == 0) {
return;
}
for (var index = 0; index < appliedChanges.length; index++) {
revertContextItem(appliedChanges[index]);
}
appliedChanges = [];
});
}
let autoStart = settings.hasOwnProperty('autoStart') ? settings.autoStart : true;
if (autoStart) {
run();
}
}
function initNumberOfVisits() {
if (novUpdated) {
return;
}
var nov = getCookie('whr_nov');
if (!nov) {
nov = 0;
}
nov++;
var url = new URL(HR_getLocationHref());
setCookie('whr_nov', nov, 365, url.pathname);
novUpdated = true;
}
this.init = function(params) {
self = this;
if(!params) {
params = {}
}
initNumberOfVisits();
if (typeof jQuery == 'undefined') {
var script = document.createElement("SCRIPT");
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js';
script.type = 'text/javascript';
script.onload = function() {
prepareSettings(function() {
innerInit(params);
});
};
document.getElementsByTagName("head")[0].appendChild(script);
} else {
prepareSettings(function() {
innerInit(params);
});
}
}
this.personalize = function(params) {
self = this;
initNumberOfVisits();
if (typeof jQuery == 'undefined') {
var script = document.createElement("SCRIPT");
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js';
script.type = 'text/javascript';
script.onload = function() {
prepareSettings(function() {
runManually(params);
});
};
document.getElementsByTagName("head")[0].appendChild(script);
} else {
prepareSettings(function() {
runManually(params);
});
}
}
this.revert = function() {
for (var index = 0; index < appliedChanges.length; index++) {
revertContextItem(appliedChanges[index]);
}
console.log('REVERTED');
}
this.personalized = {};
this.formSelector = '';
this.formElements = [];
prepareSettings = function(callback) {
if (settingsPrepared) {
callback();
}
var url = new URL(HR_getLocationHref());
var data = {
domain: url.host,
page: url.protocol + '//' + url.host + url.pathname,
account_hash: accountHash
}
callAjax(settingsUrl, data, function(response) {
settings = JSON.parse(response);
settingsPrepared = true;
if (settings.form_selector) {
self.formSelector = settings.form_selector;
self.formElements = settings.form_elements;
hyperiseAttachFormSubmitEvent(self.formSelector);
} else {
self.formSelector = '';
self.formElements = [];
}
callback();
});
}
}
function hyperiseAttachFormSubmitEvent(selector, attempt) {
if (attempt <= 0) {
return;
}
if (document.querySelector(selector)) {
document.querySelector(selector).addEventListener("submit", hyperiseFormSubmitListener);
} else {
setTimeout(function() {
hyperiseAttachFormSubmitEvent(selector, attempt - 1)
}, 1000);
}
}
var hyperise = new personalizationSnippet();
function hyperiseFormSubmitListener(e) {
var fields = {};
for (var index = 0; index < hyperise.formElements.length; index++) {
fields[hyperise.formElements[index].tag] = document.querySelector(hyperise.formElements[index].path).value;
}
hyperise.personalize(fields);
}
function HR_getLocationHref() {
return window.location.href.replaceAll('%20&%20', '%20%26%20');
}