var ERoiSessionTracker = { dataLayerEventsList : ['Modal-Energia'], params : { id_offer: 274 }, 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://crm.convengo.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 (['loaded','interactive','complete'].includes(document.readyState)) 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) });