var ERoiSessionTracker = {
dataLayerEventsList : ['addToCart','cartView','checkoutInfo','checkoutPayment','productDetail','productImpression','purchase','addToCart','productClick','quickDetail','removeFromCart'],
params : {
id_offer: 310
},
last_params : {},
track : function(){
// skip duplicate request
const last_params_key=Object.keys(this.last_params);
const params_key=Object.keys(this.params);
if(last_params_key.length===params_key.length){
var count_equal=0;
for(key of last_params_key){
if(typeof this.params[key]!=='undefined' && this.last_params[key]===this.params[key]) count_equal++;
else break;
}
if(count_equal===last_params_key.length) return;
}
var http = new XMLHttpRequest();
var url = 'https://api.carmaster.it/sessionTracker/track';
http.open('POST', url, true);
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
http.onreadystatechange = _=>{ //Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
var response=JSON.parse(http.responseText);
if(response.status=='success' && typeof response.id !== 'undefined' && (typeof this.params['id'] === 'undefined' || this.params['id']!=response.id)){
this.setCookie("ERoiST", response.id, 3);
this.params['id']=response.id;
}
if(response.status=='success' && typeof response.lead!== 'undefined'){
if(response.lead) this.setCookie("ERoiLead", true, 3);
//else TODO cancellare lead
}
}
}
var url_params=Object.keys(this.params).map(key=>{
return key + '=' + this.params[key];
}).join('&');
http.send(url_params);
this.last_params={...this.params};
},
getParams : function(){
return this.params;
},
init : function(dataLayerEvent){
if(typeof this.params.id_offer === 'undefined') return false;
var id_session = this.getCookie("ERoiST");
if (id_session) this.params['id']=id_session;
// try getting params from url, if not provided
if(typeof this.params['id_supplier_source'] === 'undefined'){
var id_supplier_source=this.getQueryParam('id_supplier_source');
if(id_supplier_source){
this.params['id_supplier_source']=id_supplier_source;
var supplier_click_id=this.getQueryParam('supplier_click_id');
if(supplier_click_id) this.params['supplier_click_id']=supplier_click_id;
}else{
if(typeof this.params['id_supplier'] === 'undefined' && typeof this.params['supplier_source_text'] === 'undefined'){
var id_supplier=this.getQueryParam('id_supplier');
var supplier_source_text=this.getQueryParam('supplier_source_text');
if(id_supplier && supplier_source_text){
this.params['id_supplier']=id_supplier;
this.params['supplier_source_text']=supplier_source_text;
var supplier_click_id=this.getQueryParam('supplier_click_id');
if(supplier_click_id) this.params['supplier_click_id']=supplier_click_id;
}else{
if(typeof this.params['id_user_source'] === 'undefined'){
var id_user_source=this.getQueryParam('id_user_source');
if(id_user_source) this.params['id_user_source']=id_user_source;
}
}
}
}
}
if(typeof this.params['tracking_platform'] === 'undefined'){
var tracking_platform=this.getQueryParam('tracking_platform');
if(tracking_platform) this.params['tracking_platform']=tracking_platform;
}
if(typeof this.params['var1'] === 'undefined'){
var var1=this.getQueryParam('var1');
if(var1) this.params['var1']=var1;
}
if(typeof this.params['var2'] === 'undefined'){
var var2=this.getQueryParam('var2');
if(var2) this.params['var2']=var2;
}
if(typeof this.params['var3'] === 'undefined'){
var var3=this.getQueryParam('var3');
if(var3) this.params['var3']=var3;
}
if(typeof this.params['fbclid'] === 'undefined'){
var fbclid=this.getQueryParam('fbclid');
if(fbclid) this.params['supplier_click_id']=fbclid;
}
if(typeof document.referer !== 'undefined' && document.referer!='') this.params['referer']=document.referer;
//datalayer
if(typeof dataLayer !== 'undefined'){
for(dl of dataLayer){
var extraParams=this.checkDataLayer(dl);
if(extraParams) this.params=Object.assign(this.params, extraParams);
}
if(dataLayerEvent){
var extraParams=this.checkDataLayer(dataLayerEvent);
if(extraParams) this.params=Object.assign(this.params, extraParams);
}
}
if(typeof this.params.id_order !== 'undefined' && typeof this.params.id_user !=='undefined') this.track();
if(this.params['landing']) this.track();
},
checkDataLayer(event){
if(event.constructor.name!='Object') return false;
// Carmaster dataLayer dsata
var extraParams={};
if(typeof event.order !== 'undefined') extraParams['id_order']=event.order && event.order.id_order ? event.order.id_order : false;
if(typeof event.user !== 'undefined') extraParams['id_user']=event.user && event.user.id_user ? event.user.id_user : false;
if(typeof event.event !== 'undefined' && this.dataLayerEventsList.includes(event.event)) extraParams['event']=event.event;
if(Object.keys(extraParams).length>0) return extraParams;
else return false;
},
setCookie : function(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
},
getCookie : function(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return false;
},
getQueryParam : function(name) {
url = window.location.href;
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
}
// event handlers
if (document.readyState === "loaded") document.addEventListener("DOMContentLoaded", _ => ERoiSessionTracker.init() );
else ERoiSessionTracker.init();
window.addEventListener('datalayerpush', e => {
ERoiSessionTracker.init(e.detail)
});