var hyEM = { log: function(){ if(this.config.debug) { console.log.apply(console, arguments); } }, pushToDataLayer: function (h) { window.dataLayer = window.dataLayer || []; if (h.event == "hyly_interaction") { if (this.config.interaction_events) { dataLayer.push(h); } } else { dataLayer.push(h); } // for extension this.events.push({ eventTime: (new Date()).toLocaleTimeString(), eventData: h }); window.postMessage({ type: "FROM_PAGE", events: this.events}, "*"); }, setupEventListener: function () { var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent", eventer = window[eventMethod], messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; eventer(messageEvent, function(e) { try { var eventHash = JSON.parse(e.message || e.data); // eventHash was stringified } catch(ex) { var eventHash = {}; // ignore unknown event } var appName = eventHash.appName; if (eventHash.originEvent) { eventHash.event = eventHash.originEvent; delete eventHash["originEvent"]; delete eventHash["appName"]; } if (eventHash.eventCategory) { if (appName == "Hy.ly hyTours" && hyEM.config.hytours_events || appName == "Hy.ly hyForms" && hyEM.config.hyforms_events || appName == "Hy.ly Tour Site" && hyEM.config.toursite_events) { hyEM.pushToDataLayer(eventHash); } } }, false); }, // GTM template tag will pass the configuration like // hyEM.init({env: 'dev', 'debug': true, ...}); init: function(data){ this.config = data || {}; this.events = []; if (self!=top) { // iframe } else { this.setupEventListener(); } } }