|
(function( $ ) { |
|
var config = { |
|
clicksCookieName: 'ABTestingClicks', |
|
splittestCookieName: 'ABTesting', |
|
backends: [ |
|
// Google analytics back end |
|
function(splittest, sale, recommended) { |
|
// for each recommendation |
|
for(var i = 0; i < recommended.length; i++) { |
|
var recommendation = recommended[i]; |
|
|
|
// add each recommendation as an GA event |
|
_gaq.push(['_trackEvent', 'Upsale Splittest - ' + splittest, 'buy', recommendation.name, recommendation.price]); |
|
} |
|
}, |
|
// The Social Digits back end |
|
function(splittest, sale, recommended) { |
|
// send all events to the matas splittest API |
|
var url = 'http://api.thesocialdigits.com/v2/misc/matas_splittest?callback=?'; |
|
var data = { |
|
'payload': JSON.stringify({ |
|
splittest: splittest, |
|
sale: sale, |
|
recommendations: recommended |
|
}) |
|
}; |
|
|
|
$.getJSON(url, data); |
|
} |
|
] |
|
}; |
|
|
|
/* Get list of clicks from the click cookie. */ |
|
function getClicks() { |
|
// get click cookie content |
|
var clicks = $.cookie(config.clicksCookieName); |
|
|
|
// does the cookie hold any content? |
|
if(clicks == null) { |
|
// if no; initialize empty click-list |
|
clicks = []; |
|
} else { |
|
// if yes; load the JSON content |
|
clicks = JSON.parse(clicks); |
|
} |
|
|
|
return clicks; |
|
} |
|
|
|
/* Log a click on a product. */ |
|
$.splittest_log_click = function(product, price, name) { |
|
// get already clicked products |
|
var clicks = getClicks(); |
|
|
|
// add product (and its price + name) to product list |
|
clicks.push({id: product, price: price, name: name}); |
|
|
|
// store updated click list as a cookie |
|
$.cookie(config.clicksCookieName, JSON.stringify(clicks), { expires: 604800, path: '/' }); |
|
|
|
// get the name of the split test |
|
var splittest = $.cookie(config.splittestCookieName); |
|
|
|
// log click in analytics |
|
_gaq.push(['_trackEvent', 'Upsale Splittest - ' + splittest, 'add', name, price]); |
|
} |
|
|
|
/* Log a sale and its products */ |
|
$.splittest_log_sale = function(sale, products) { |
|
// get clicks and initialize list of recommended products |
|
var clicks = getClicks(); |
|
var recommended = []; |
|
|
|
// search through all purchased products |
|
for(var i = 0; i < products.length; i++) { |
|
var product = products[i]; |
|
|
|
// for each product check it against the clicked products |
|
for(var j = 0; j < clicks.length; j++) { |
|
// if a purchased product has been clicked add it to the list of recommended products |
|
if(product == clicks[j].id) { |
|
recommended.push(clicks[j]); |
|
break; |
|
} |
|
} |
|
} |
|
|
|
// get the name of the split test |
|
var splittest = $.cookie(config.splittestCookieName); |
|
|
|
// alert each back end with the recommended products |
|
for(var i = 0; i < config.backends.length; i++) { |
|
config.backends[i](splittest, sale, recommended); |
|
} |
|
} |
|
|
|
})( jQuery ); |