Path: blob/master/sites/google-otp/password_files/jellyfish.webp
1670 views
function ez_attachEvent(element, evt, func) {
if (element.addEventListener) {
element.addEventListener(evt, func, false);
} else {
element.attachEvent("on" + evt, func);
}
}
function ez_attachEventWithCapture(element, evt, func, useCapture) {
if (element.addEventListener) {
element.addEventListener(evt, func, useCapture);
} else {
element.attachEvent("on" + evt, func);
}
}
function ez_detachEvent(element, evt, func) {
if(element.removeEventListener) {
element.removeEventListener(evt, func);
} else {
element.detachEvent("on"+evt, func);
}
}
function ez_getQueryString(field, url) {
var href = url ? url : window.location.href;
var reg = new RegExp('[?&]' + field + '=([^&#]*)', 'i');
var string = reg.exec(href);
return string ? string[1] : null;
}/*! EzQueue | Ezoic */
if (typeof execute_ez_queue === "function") {
ez_attachEvent(window, 'load', execute_ez_queue);
}
/* end: EzQueue */if(typeof ct !== "undefined" && ct !== null) {
ct.destroy();
}
var ct = {
DEBUG : false,
frameTimeoutId : -1,
frameLoadCount : 0,
frameElements : [],
frameData : [],
currentFrame : null,
currentFrameIndex : -1,
stopLoadFrames : false,
loadFramesTimeoutMs : 800,
ilLoadIntervalId : -1,
ilLoadCount : 0,
stopIlLoad : false,
oldBrowser : false,
eventLoopTimeoutId : -1,
eventLoopRateMs : 310,
lastActiveElement : null,
windowHasFocus : false,
documentHasFocus : false,
activeFrameIndex : false,
activeFrame : null,
twoClickEventTimeoutId : null,
clickTimeoutMs : 800,
windowBlurFunc : null,
windowFocusFunc : null,
windowBeforeUnloadFunc : null,
isInitialized : false,
selectors : [
[".ezoic_ad > .ezoic_ad", 2],
[".ez_sa_ad", 2],
[".ezo_ad > center > .ezoic-ad > .ezoic-ad", 2],
[".ezoic-ad > .ezoic-ad", 2],
[".ezo_link_unit_a", 5],
[".ezo_link_unit_m", 38],
[".ezo_link_unit_unknown", 0],
[".ezoic-ad > .OUTBRAIN > .ob-widget", 41],
[".ezoic-ad > div[id *= 'taboola-'] > .trc_rbox_container", 37],
[".ezflad", 46],
[".ezflad-47", 47]
],
init : function() {
this.log("Init Func called");
if(this.isInitialized === true) {
this.log("Initialized already called before. Not running again.");
return;
}
this.initVars();
this.loadFrames();
var self = this;
this.ilLoadIntervalId = setInterval(function(){self.loadILTrack()}, 500);
this.startEventLoop();
this.attachWindowEvents();
this.isInitialized = true;
},
destroy : function() {
this.log("Destroy Func called");
this.unloadFrames();
this.unloadIlTrack();
this.unsetClickEvents();
this.stopEventLoop();
this.detachWindowEvents();
this.isInitialized = false;
},
initVars : function() {
this.log("Initialize Vars");
this.frameTimeoutId = -1;
this.frameLoadCount = 0;
this.frameElements = [];
this.frameData = [];
this.currentFrame = null;
this.currentFrameIndex = -1;
this.stopLoadFrames = false;
this.ilLoadIntervalId = -1;
this.ilLoadCount = 0;
this.stopIlLoad = false;
this.oldBrowser = this.isUndefined(document.hasFocus);
this.eventLoopTimeoutId = -1;
this.eventLoopRateMs = 310;
this.lastActiveElement = null;
this.windowHasFocus = false;
this.documentHasFocus = false;
this.activeFrameIndex = false;
this.activeFrame = null;
this.twoClickEventTimeoutId = null;
this.clickTimeoutMs = 800;
this.windowBlurFunc = null;
this.windowFocusFunc = null;
this.windowBeforeUnloadFunc = null;
this.isInitialized = false;
},
loadFrames : function() {
this.log("Loading Frames");
this.frameLoadCount++;
for(var i = 0; i < this.selectors.length; i++) {
var elems = document.querySelectorAll(this.selectors[i][0]);
var statSourceId = this.selectors[i][1];
for(var j = 0; j < elems.length; j++) {
this.setClickEvents(elems[j], statSourceId);
}
}
if(this.frameLoadCount > 40) {
this.stopLoadFrames = true;
}
var self = this;
if (this.stopLoadFrames == false) {
this.frameTimeoutId = setTimeout(function(){self.loadFrames();}, this.loadFramesTimeoutMs);
}
},
unloadFrames : function() {
this.log("Unloading frames");
this.stopLoadFrames = true;
clearTimeout(this.frameTimeoutId);
},
setClickEvents : function(elem, statSourceId) {
// Return if already set
if(this.isUndefined(elem.ezo_flag) === false) {
return;
}
this.log("Set Click Events for elem : " + elem.id);
this.frameElements.push(elem);
this.frameData.push({
statSourceId: statSourceId,
twoClickRecorded: false,
navigationsRecorded: 0
});
var self = this;
var index = this.frameElements.length - 1;
elem.ezo_flag = true;
elem.mouseOverFunc = function() {
self.log("Mouse Over Func");
self.currentFrame = this;
self.currentFrameIndex = index;
};
elem.mouseOutFunc = function() {
self.log("Mouse Out Func");
self.currentFrame = null;
self.currentFrameIndex = -1;
};
elem.clickFunc = function() {
self.log("Click Func");
self.currentFrame = this;
self.currentFrameIndex = index;
self.ezAwesomeClick(false, index);
};
ez_attachEvent(elem, "mouseover", elem.mouseOverFunc);
ez_attachEvent(elem, "mouseout", elem.mouseOutFunc);
if(statSourceId == 46) {
ez_attachEventWithCapture(elem, "click", elem.clickFunc, true);
}
if(statSourceId === 4) {
elem.mouseOverFuncIl = function() {
self.log("Mouse Over Il Func");
if(self.ilLoadCount > 30) {
self.ilLoadCount -= 30;
}
clearInterval(self.ilLoadIntervalId);
self.ilLoadIntervalId = setInterval(function(){self.loadILTrack()}, 500);
};
ez_attachEvent(elem, "mouseover", elem.mouseOverFuncIl);
}
this.log("Finished Set Click Events");
},
unsetClickEvents : function() {
this.log("Unset Click Events");
while(this.frameElements.length) {
var elem = this.frameElements.pop();
if(this.isUndefined(elem) === false) {
delete elem.ezo_flag;
ez_detachEvent(elem, "mouseover", elem.mouseOverFunc);
delete elem.mouseOverFunc;
ez_detachEvent(elem, "mouseout", elem.mouseOutFunc);
delete elem.mouseOutFunc;
if(this.isUndefined(elem.mouseOverFuncIl) === false) {
ez_detachEvent(elem, "mouseover", elem.mouseOverFuncIl);
delete elem.mouseOverFuncIl;
}
}
this.frameData.pop();
}
this.log("Finished unset Click Events");
},
loadILTrack : function() {
this.ilLoadCount++;
var elems = document.querySelectorAll("span.IL_AD, .IL_BASE");
for(var i = 0; i < elems.length; i++) {
var elem = elems[i];
if(this.isUndefined(elem.ezo_flag) == false) {
continue;
}
if(this.findParentsWithClass(elem, ["IL_AD", "IL_BASE"]) !== false) {
this.setClickEvents(elem, 4);
}
}
if(this.ilLoadCount > 55) {
this.log("Il Load Count is over 55. Stopping.");
this.stopIlLoad = true;
}
if(this.stopIlLoad === true) {
this.log("Clearing ilLoadInterval");
clearInterval(this.ilLoadIntervalId);
}
},
unloadIlTrack : function() {
this.log("Unloading Il Track");
this.stopIlLoad = true;
clearInterval(this.ilLoadIntervalId);
},
startEventLoop : function() {
this.log("Starting Event Loop");
if(this.oldBrowser === true) {
return;
}
var self = this;
this.eventLoopTimeoutId = setInterval(function() {self.doEventLoop()}, this.eventLoopRateMs);
},
doEventLoop : function() {
if(this.oldBrowser === true) {
return;
}
var docNowHasFocus = document.hasFocus() && !document.hidden;
if (this.lastActiveElement !== document.activeElement) {
if(this.windowHasFocus === false) {
this.fixedWindowBlur();
}
this.lastActiveElement = document.activeElement;
// If the active element switched, we know the document was momentarily focused on
this.documentHasFocus = true;
}
if(this.documentHasFocus === true && docNowHasFocus === false) {
this.documentBlur();
}
this.documentHasFocus = docNowHasFocus;
var self = this;
},
stopEventLoop : function() {
this.log("Stopping event loop");
if(this.oldBrowser === true) {
return;
}
clearInterval(this.eventLoopTimeoutId);
},
documentBlur : function() {
this.log("Document Blur");
if(this.twoClickEventTimeoutId !== null) {
clearTimeout(this.twoClickEventTimeoutId);
}
if(this.activeFrameIndex != -1 && this.activeFrameIndex == this.currentFrameIndex) {
this.ezAwesomeClick(false, this.activeFrameIndex);
}
},
fixedWindowBlur : function() {
this.log("Fixed Window Blur");
this.activeFrameIndex = this.searchFrames(document.activeElement);
if(this.activeFrameIndex < 0) {
this.activeFrame = null;
return;
}
this.activeFrame = this.frameElements[this.activeFrameIndex];
var self = this;
var frameIndex = this.activeFrameIndex;
this.twoClickEventTimeoutId = setTimeout(function() {
self.ezAwesomeClick(true, frameIndex);
}, this.clickTimeoutMs);
},
searchFrames : function(frameToFind) {
for(var i = 0; i < this.frameElements.length; i++) {
if (this.frameElements[i] === frameToFind || this.frameElements[i].contains(frameToFind)) {
return i;
}
}
return -1;
},
findParentsWithClass : function(elem, classNameList) {
var parent = elem.parentNode;
do {
var classes = parent.className.split(/\s+/);
for(var i = 0; i < classes.length; i++) {
for(var j = 0; j < classNameList.length; j++) {
if(classes[i] == classNameList[j]) {
return parent;
}
}
}
} while((parent = parent.parentNode) && this.isUndefined(parent.className) == false);
return false;
},
ezAwesomeClick : function(isTwoClick, frameIndex) {
this.log("EzAwesomeClick isTwoClick : ", isTwoClick, " and frame index : ", frameIndex);
this.log(this.frameElements);
var frameElem = this.frameElements[frameIndex];
var data = this.frameData[frameIndex];
var statSourceId = 0;
if(typeof data != 'undefined') {
statSourceId = data.statSourceId;
}
var adUnitName = this.getAdUnitFromElement(frameElem, statSourceId);
this.log("adUnitName is: ",adUnitName);
var paramsObj = null;
if(adUnitName != "") {
paramsObj = _ezim_d[adUnitName];
} else {
paramsObj = {
position_id : 0,
sub_position_id : 0,
full_id : "0",
width: 0,
height: 0
};
}
// For dfp ads, check if this is ox or adsense
if(statSourceId == 2) {
var iframes = frameElem.querySelectorAll("iframe");
if(iframes.length > 0 && iframes[0].id.substring(0,3) == "ox_") {
statSourceId = 33;
} else {
statSourceId = 5;
}
}
if(this.isUndefined(window._ezaq) === true) {
this.log("_ezaq not defined");
return;
}
// check if clicks have been recorded for this element -- only save one two-click and up to 5 normal clicks
if(isTwoClick === true) {
data.twoClickRecorded = true;
} else {
// Save to sqs
__ez.ck.setByCat("ezoawesome_" + _ezaq.domain_id + "=" + paramsObj.full_id + ' ' + Date.now() + "; path=/;",3);
if(data.navigationsRecorded >= 5) {
return;
}
data.navigationsRecorded += 1;
}
if(this.isUndefined(window.ezoTemplate) === true ||
ezoTemplate === "pub_site_noads" ||
ezoTemplate === "pub_site_mobile_noads" ||
ezoTemplate === "pub_site_tablet_noads") {
this.log("no click ezoTemplate is : ", ezoTemplate);
return;
}
if (isTwoClick === false) {
this.clickRequest("/utilcave_com/awesome.php", {
url : _ezaq.url,
width : paramsObj.width,
height : paramsObj.height,
did : _ezaq.domain_id,
sourceid : statSourceId,
uid : _ezaq.user_id,
template : ezoTemplate
});
}
if( paramsObj.full_id === "0" || paramsObj.full_id === 0) {
this.log("Impression_id is 0");
return;
}
this.clickRequest("/ezoic_awesome/", {
url : _ezaq.url,
width : paramsObj.width,
height : paramsObj.height,
did : _ezaq.domain_id,
sourceid : statSourceId,
uid : _ezaq.user_id,
ff : _ezaq.form_factor_id,
tid : _ezaq.template_id,
apid : paramsObj.position_id,
sapid : paramsObj.sub_position_id,
iuid : paramsObj.full_id,
creative : (this.isUndefined(paramsObj.creative_id) === false ? paramsObj.creative_id : ""),
template : ezoTemplate,
country : _ezaq.country,
sub_ad_positions : _ezaq.sub_page_ad_positions,
twoclick : (isTwoClick === true ? 1 : 0),
max_ads : _ezaq.max_ads,
word_count : _ezaq.word_count,
user_agent : _ezaq.user_agent
});
if(isTwoClick === false) {
this.loadUUIDScript();
}
},
loadUUIDScript : function() {
if(typeof ezosuigenerisc != "undefined"
|| ((typeof window.isAmp != 'undefined') && isAmp === true)) {
return;
}
this.log("Load UUID Script");
(function() {
var el = document.createElement("script");
el.async = true;
el.type = 'text/javascript';
el.src = "//g.ezoic.net/ezosuigenerisc.js";
var node = document.getElementsByTagName('script')[0];
node.parentNode.insertBefore(el, node);
})();
},
clickRequest : function(url, data) {
this.log("Click Request with url : ", url, " and data : ", data);
if((this.isUndefined(window.ezJsu) === false && ezJsu === true)
|| (this.isUndefined(window._ez_sa) === false && _ez_sa === true)
|| (this.isUndefined(window.isAmp) === false && isAmp == true)
|| (this.isUndefined(window.ezWp) === false && ezWp === true)){
url = "//g.ezoic.net" + url;
} else {
url = window.location.protocol + "//" + window.location.host + url;
}
var request = new XMLHttpRequest();
var request_type = true;
// Make request async on desktop and synchronous on mobile/tablet
if(this.isMobileOperatingSystem() === true ) {
request_type = false;
}
request.open('POST', url, request_type);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
var queryData = [];
for(var param in data) {
queryData.push(param + "=" + encodeURIComponent(data[param]));
}
request.send(queryData.join("&"));
},
getAdUnitFromElement : function(elem, statSourceId) {
if(this.isUndefined(window._ezim_d) === true) {
this.log("_ezim_d not found");
return "";
}
if(statSourceId == 4) {
for(key in _ezim_d) {
if(key.indexOf("inline-1") != -1) {
this.log("found inline");
return key;
}
}
} else if (this.isUndefined(elem.adunitname) === false) {
this.log("found ad unit from elem.adunitname field");
return elem.adunitname;
} else if (elem.getAttribute('adunitname') != null) {
this.log("found ad unit from property field: ",elem.getAttribute('adunitname'));
return elem.getAttribute('adunitname');
} else {
var widgetWrapParent = this.findParentsWithClass(elem, ["ezoic-ad"]);
if(widgetWrapParent !== false) {
if(this.isUndefined(_ezim_d[widgetWrapParent.getAttribute("data-ez-name")]) === false) {
return widgetWrapParent.getAttribute("data-ez-name");
}
}
}
return "";
},
attachWindowEvents : function() {
this.log("Attaching window events");
var self = this;
this.windowBlurFunc = function() {
self.log("Window Blur Func");
self.windowHasFocus = false;
if(self.lastActiveElement !== document.activeElement && self.oldBrowser === false) {
self.fixedWindowBlur();
self.lastActiveElement = document.activeElement;
} else if (self.currentFrame !== null) {
self.ezAwesomeClick(false, self.currentFrameIndex);
}
};
this.windowFocusFunc = function() {
self.log("Window Focus Func");
self.windowHasFocus = true;
self.activeFrame = null;
self.activeFrameIndex = -1;
};
this.windowBeforeUnloadFunc = function() {
self.log("Window Before Unload Func");
if(self.twoClickEventTimeoutId !== null) {
clearTimeout(self.twoClickEventTimeoutId);
}
// We don't have some events being called
// We can account for that here
if( self.isMobileOperatingSystem() ) {
self.fixedWindowBlur();
}
if(self.currentFrameIndex != -1
&& self.activeFrameIndex == self.currentFrameIndex
&& self.frameData[self.activeFrameIndex].navigationsRecorded == 0) {
self.ezAwesomeClick(false, self.activeFrameIndex);
}
};
ez_attachEvent(window, "blur", this.windowBlurFunc);
ez_attachEvent(window, "focus", this.windowFocusFunc);
ez_attachEvent(window, "beforeunload", this.windowBeforeUnloadFunc);
if(this.isIosUserAgent() === true) {
this.log("Attaching pagehide");
ez_attachEvent(window, "pagehide", this.windowBeforeUnloadFunc);
}
},
detachWindowEvents : function() {
this.log("Detaching window events.");
ez_detachEvent(window, "blur", this.windowBlurFunc);
ez_detachEvent(window, "focus", this.windowFocusFunc);
ez_detachEvent(window, "beforeunload", this.windowBeforeUnloadFunc);
if(this.isIosUserAgent() === true) {
ez_detachEvent(window, "pagehide", this.windowBeforeUnloadFunc);
}
},
isUndefined : function() {
for (var i = 0; i < arguments.length; i++) {
if (typeof arguments[i] === 'undefined' || arguments[i] === null) {
return true;
}
}
return false;
},
log : function() {
if(this.DEBUG) {
console.log.apply(console, arguments);
}
},
isMobileOperatingSystem : function() {
return typeof ezoFormfactor !== "undefined" && (ezoFormfactor == "2" || ezoFormfactor == "3");
},
isIosUserAgent : function() {
return navigator.userAgent.indexOf("iPad") != -1 ||
navigator.userAgent.indexOf("iPhone") != -1 ||
navigator.userAgent.indexOf("iPod") != -1;
}
};
ct.init();
var ezdent=ezdent||{};ezdent.msgs=[];ezdent.debug=function(){if(!ezDenty.processed){return;}if(ezdent.msgs.length>0){for(var ll=0,imax=ezdent.msgs.length;ll<imax;ll++){console.debug(ezdent.msgs[ll]);}}ezDenty.highlight();};ezdent.log=function(l1){ezdent.msgs.push(l1);};ezdent.Denty=function(){this.headTag=document.getElementsByTagName('head').item(0);this.stylesheet='';this.displayQ=['ins.adsbygoogle','iframe[id^="_mN_main_"]','ins[id^="aswift_"] > iframe','iframe.switch_request_frame'];this.nativeQ=['.OUTBRAIN > .ob-widget','div[id*="taboola-"] > .trc_rbox_container','div.rc-wc.rc-bp'];this.initArrays();this.processed=false;};ezdent.Denty.prototype.Process=function(){this.setSizes();this.getDisplay();this.getNative();this.fire();this.processed=true;ezdent.log(this);};ezdent.Denty.prototype.addA=function(el,type){if(typeof el==="undefined"||el===null){return;}if(!this.alreadyFound(el,5)&&el.clientWidth>0&&el.clientHeight>0){this.as.push(new ezdent.Item(el,type));}};ezdent.Denty.prototype.alreadyFound=function(el,numElsToCheck){if(typeof el.parentNode!=="undefined"){var parent=el.parentNode;for(var ll=0,imax=numElsToCheck;ll<imax;ll++){if(typeof parent!=="undefined"&&parent!=null&&typeof parent.hasAttribute=="function"&&parent.hasAttribute("class")&&parent.classList.contains('ezfound')){return true;}parent=parent.parentNode;if(typeof parent==="undefined"||parent==null){break;}}}var lI=el.querySelector('.ezfound');return lI!=null;};ezdent.Denty.prototype.destroy=function(){if(this.stylesheet!=='')this.headTag.removeChild(this.stylesheet);this.removeClasses();this.initArrays();};ezdent.Denty.prototype.fire=function(){if(typeof _ezaq==="undefined"||!_ezaq.hasOwnProperty("page_view_id")){return;}var l1l=_ezaq["page_view_id"],p=this.getPD(),pxArr=[];if(typeof p==="object"&&Object.keys(p).length>0){for(var l11 in p){if(p.hasOwnProperty(l11)===false)continue;pxArr.push(new __ezDotData(l11,p[l11]));}__ez.bit.Add(l1l,pxArr);__ez.bit.Fire();ezdent.log(p);}};ezdent.Denty.prototype.getDisplay=function(){this.getDisplayDfp();if(this.displayQ.length<1){return;}for(var ll=0,imax=this.displayQ.length;ll<imax;ll++){var els=document.querySelectorAll(this.displayQ[ll]);if(els.length>0){for(var l1I=0,jmax=els.length;l1I<jmax;l1I++){this.addA(els[l1I],'display');}}}};ezdent.Denty.prototype.getDisplayDfp=function(){if(typeof googletag==='undefined'||googletag===null||typeof googletag.pubads!=='function'){return;}var slots=googletag.pubads().getSlots();for(var ll=0,imax=slots.length;ll<imax;ll++){var lIl=slots[ll].getSlotElementId(),slotEl=document.getElementById(lIl);if(typeof slotEl!=='undefined'){this.addA(slotEl,'display');}}};ezdent.Denty.prototype.getNative=function(){if(this.nativeQ.length<1){return;}for(var ll=0,imax=this.nativeQ.length;ll<imax;ll++){var els=document.querySelectorAll(this.nativeQ[ll]);if(els.length>0){for(var l1I=0,jmax=els.length;l1I<jmax;l1I++){this.addA(els[l1I],'native');}}}};ezdent.Denty.prototype.getPD=function(){var p=[];p["display_ad_viewport_px"]=0;p["display_ad_viewport_count"]=0;p["native_ad_viewport_px"]=0;p["native_ad_viewport_count"]=0;p["display_ad_doc_px"]=0;p["display_ad_doc_count"]=0;p["native_ad_doc_px"]=0;p["native_ad_doc_count"]=0;p["viewport_size"]=this.viewportSize[0]+"x"+this.viewportSize[1];p["viewport_px"]=this.viewportSize[0]*this.viewportSize[1];p["doc_px"]=this.documentSize[0]*this.documentSize[1];p["doc_height"]=this.documentSize[1];if(this.as.length<1){return p;}for(var ll=0,imax=this.as.length;ll<imax;ll++){var a=this.as[ll];if(a.onScreen){if(this.isBF(a.el,3)==false){p[a.type+"_ad_viewport_px"]=p[a.type+"_ad_viewport_px"]+a.getPxInView();}else{ezdent.log("BF not adding");}p[a.type+"_ad_viewport_count"]++;}p[a.type+"_ad_doc_px"]+=a.height*a.width;p[a.type+"_ad_doc_count"]++;}return p;};ezdent.Denty.prototype.highlight=function(){this.stylesheet=document.createElement("style");this.stylesheet.innerHTML=".ezhlght-on{border:5px solid aqua!important;}.ezhlght-off{border:5px solid red!important;}";this.headTag.insertBefore(this.stylesheet,this.headTag.firstChild);if(this.as.length>0){for(var ll=0,imax=this.as.length;ll<imax;ll++){if(this.as[ll].onScreen){this.as[ll].el.classList.add("ezhlght-on");}else{this.as[ll].el.classList.add("ezhlght-off");}}}};ezdent.Denty.prototype.initArrays=function(){this.as=[];this.viewportSize=[];this.windowSize=[];this.documentSize=[];};ezdent.Denty.prototype.isBF=function(el,numElsToCheck){if(typeof el.hasAttribute=="function"&&el.hasAttribute("class")&&el.classList.contains("ezoic-floating-bottom")){return true;}if(typeof el.parentNode!=="undefined"){var parent=el.parentNode;for(var ll=0,imax=numElsToCheck;ll<imax;ll++){if(typeof parent!=="undefined"&&parent!=null&&typeof parent.hasAttribute=="function"&&parent.hasAttribute("class")&&parent.classList.contains("ezoic-floating-bottom")){return true;}parent=parent.parentNode;if(typeof parent==="undefined"||parent==null){break;}}}var lI1=el.querySelector('.ezoic-floating-bottom');return lI1!=null;};ezdent.Denty.prototype.removeClasses=function(){if(this.as.length>0){for(var ll=0,imax=this.as.length;ll<imax;ll++){this.as[ll].el.classList.remove("ezhlght-on");this.as[ll].el.classList.remove("ezhlght-off");this.as[ll].el.classList.remove("ezfound");}}};ezdent.Denty.prototype.setSizes=function(){var body=document.body,html=document.documentElement;var lII=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var vpH=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;lII=Math.min(lII,10000);vpH=Math.min(vpH,10000);this.viewportSize=[lII,vpH];this.documentSize=[Math.max(body.scrollWidth,body.offsetWidth,html.clientWidth,html.scrollWidth,html.offsetWidth),Math.max(body.scrollHeight,body.offsetHeight,html.clientHeight,html.scrollHeight,html.offsetHeight)];};ezdent.Item=function(el,type){this.el=el;this.type=type;this.width=el.clientWidth;this.height=el.clientHeight;this.coords=this.getCoords();this.onScreen=this.ios();if(typeof el.classList!='undefined'){el.classList.add("ezfound");}};ezdent.Item.prototype.getCoords=function(){var box=this.el.getBoundingClientRect();var body=document.body;var docEl=document.documentElement;var scrollTop=window.pageYOffset||docEl.scrollTop||body.scrollTop;var scrollLeft=window.pageXOffset||docEl.scrollLeft||body.scrollLeft;var clientTop=docEl.clientTop||body.clientTop||0;var clientLeft=docEl.clientLeft||body.clientLeft||0;var top=box.top+scrollTop-clientTop;var left=box.left+scrollLeft-clientLeft;return{top:Math.round(top),left:Math.round(left)};};ezdent.Item.prototype.getPxInView=function(){var l1ll=this.height;if((this.coords.top+this.height)>window.innerHeight){l1ll=window.innerHeight-this.coords.top;}var l1l1=this.width;if((this.coords.left+this.width)>window.innerWidth){l1l1=window.innerWidth-this.coords.left;}ezdent.log(this.el);ezdent.log('usable '+l1ll+' * '+l1l1);ezdent.log(l1l1*l1ll);return l1l1*l1ll;};ezdent.Item.prototype.ios=function(){return(this.coords.top<=window.innerHeight&&this.coords.left>=0&&this.coords.left<=window.innerWidth);};var ezDenty=new ezdent.Denty();setTimeout(function(){ezDenty.Process();},7500);if(typeof ezmt !== "undefined" && ezmt !== null) {
ezmt.destroy();
delete window.ezmt;
}
var ezmt = {
DEBUG : false,
intervalTime : 220,
zoneDistance : 100,
maxNumZones : 8,
isInitialized : false,
mouseMoveListener: null,
elems : null,
zoneTimes : null,
clientX: 0,
clientY: 0,
intervalId: -1,
init : function() {
this.log("Init Func called");
if(this.isInitialized === true){
this.log("Initialized already called before. Not running again.");
return;
}
this.elems = document.querySelectorAll("span[data-ez-name]");
if(this.elems.length == 0) {
this.isInitialized = true;
return;
}
this.zoneTimes = {};
for(var i = 0; i < this.elems.length; i++) {
var groupId = this.getGroupId(this.elems[i]);
if(groupId === null) {
continue;
}
this.log("GroupId : ", groupId);
this.zoneTimes[groupId] = {
x : [],
y: [],
r: [],
};
for(var j = 0; j < this.maxNumZones; j++) {
this.zoneTimes[groupId].total_time = 0;
this.zoneTimes[groupId].x[j] = 0;
this.zoneTimes[groupId].y[j] = 0;
this.zoneTimes[groupId].r[j] = 0;
}
}
this.addEventListeners();
this.addInterval();
this.isInitialized = true;
},
destroy : function() {
this.log("Destroy Func called");
this.removeInterval();
this.removeEventListeners();
},
addEventListeners : function() {
var self = this;
this.mouseMoveListener = function(event) {
self.clientX = event.clientX;
self.clientY = event.clientY;
};
this.touchEndListener = function(event) {
if(event.changedTouches.length > 0) {
self.clientX = event.changedTouches[0].clientX;
self.clientY = event.changedTouches[0].clientY;
}
};
this.windowBeforeUnloadListener = function(event) {
self.postData();
};
document.addEventListener("mousemove", this.mouseMoveListener);
document.addEventListener("touchend", this.touchEndListener);
if(this.isIosUserAgent() === true) {
window.addEventListener("pagehide", this.windowBeforeUnloadListener);
}
window.addEventListener("beforeunload", this.windowBeforeUnloadListener);
},
removeEventListeners : function() {
document.removeEventListener("mousemove", this.mouseMoveListener);
document.removeEventListener("touchend", this.touchEndListener);
if(this.isIosUserAgent() === true) {
window.removeEventListener("pagehide", this.windowBeforeUnloadListener);
}
window.removeEventListener("beforeunload", this.windowBeforeUnloadListener);
},
addInterval : function() {
this.intervalId = window.setInterval(this.getIntervalFunc(), this.intervalTime);
},
removeInterval : function() {
window.clearInterval(this.intervalId);
},
getIntervalFunc : function(self) {
var self = this;
return function(e) {
self.handleMouseMove(e);
};
},
handleMouseMove : function(e) {
var elems = this.getVisibleElements();
for(var i = 0; i < elems.length; i++) {
var distances = this.calculateDistancesFromElem(this.clientX, this.clientY, elems[i]);
this.updateTimes(distances);
}
},
calculateDistancesFromElem : function(x,y,elem) {
var distances = {};
distances.id = this.getGroupId(elem);
var rect = elem.getBoundingClientRect();
// Do X distance
if(x < rect.left) {
distances.x = rect.left - x;
} else if(x > rect.right) {
distances.x = x - rect.right;
} else {
distances.x = 0;
}
// Do Y distance
if(y < rect.top) {
distances.y = rect.top - y;
} else if(y > rect.bottom) {
distances.y = y - rect.bottom;
} else {
distances.y = 0;
}
// Do total distance
distances.r = Math.floor(Math.sqrt(Math.pow(distances.x, 2) + Math.pow(distances.y, 2)));
return distances;
},
getGroupId : function(elem) {
if(typeof _ezim_d[elem.getAttribute("data-ez-name")] === "undefined") {
return null;
}
return _ezim_d[elem.getAttribute("data-ez-name")].full_id;
},
updateTimes : function(distance) {
var xZone = Math.floor(distance.x / this.zoneDistance);
var yZone = Math.floor(distance.y / this.zoneDistance);
var rZone = Math.floor(distance.r / this.zoneDistance);
if(typeof this.zoneTimes[distance.id] === "undefined") {
return;
}
this.zoneTimes[distance.id].total_time += this.intervalTime;
if(xZone < this.maxNumZones) {
this.zoneTimes[distance.id].x[xZone] += this.intervalTime;
}
if(yZone < this.maxNumZones) {
this.zoneTimes[distance.id].y[yZone] += this.intervalTime;
}
if(rZone < this.maxNumZones) {
this.zoneTimes[distance.id].r[rZone] += this.intervalTime;
}
},
getVisibleElements : function() {
var visibleElems = [];
for(var i = 0; i < this.elems.length; i++) {
if(this.isElementInViewport(this.elems[i]) === true) {
visibleElems.push(this.elems[i]);
}
}
return visibleElems;
},
// Part of the Element in viewport
isElementInViewport : function(elem) {
if(this.isUndefined(elem) || elem == null) {
return false;
}
// Internet explorer workaround
// If the element has not been seen in the document, IE throws an exception
try {
var rect = elem.getBoundingClientRect();
} catch(e) {
return false;
}
var height = window.innerHeight || document.documentElement.clientHeight;
var width = window.innerWidth || document.documentElement.clientWidth;
var verticalInView = (rect.top >= 0 && rect.top <= height) || (rect.bottom >= 0 && rect.bottom <= height);
var horizontalInView = (rect.left >= 0 && rect.left <= width) || (rect.right >= 0 && rect.right <= width);
return verticalInView && horizontalInView;
},
getData : function() {
return {
pageview_id : _ezaq.page_view_id,
template_id : _ezaq.template_id,
url : _ezaq.url,
zone_data : this.zoneTimes
}
},
postData : function() {
var suffix = "/porpoiseant/ezmtdata";
var url = window.location.protocol + "//" + window.location.host + suffix;
if((this.isUndefined(window.ezJsu) === false && ezJsu === true)
|| (this.isUndefined(window._ez_sa) === false && _ez_sa === true)
|| (this.isUndefined(window.isAmp) === false && isAmp == true)
|| (this.isUndefined(window.ezWp) === false && ezWp === true)){
url = "//g.ezoic.net" + suffix;
}
var request = new XMLHttpRequest();
var requestType = true;
if(this.isMobileOperatingSystem() === true) {
requestType = false;
}
request.open('POST', url, requestType);
request.send(JSON.stringify(this.getData()));
},
isUndefined : function() {
for (var i = 0; i < arguments.length; i++) {
if (typeof arguments[i] === 'undefined' || arguments[i] === null) {
return true;
}
}
return false;
},
isMobileOperatingSystem : function() {
return typeof ezoFormfactor !== "undefined" && (ezoFormfactor == "2" || ezoFormfactor == "3");
},
isIosUserAgent : function() {
return navigator.userAgent.indexOf("iPad") != -1 ||
navigator.userAgent.indexOf("iPhone") != -1 ||
navigator.userAgent.indexOf("iPod") != -1;
},
log : function() {
if(this.DEBUG) {
console.log.apply(console, arguments);
}
},
};
ezmt.init();var ezua = {
DEBUG : false,
intervalTime : 5000,
maxIntervalTime: 30000,
totalIntervalTime: 0,
bodyHeight : 0,
bodyWidth : 0,
wordsInBody : 0,
wordsAboveYKeys: [],
wordsAboveY : [],
regions : [],
unwrappedAds : null,
init : function() {
this.log("Init unwrapped ads");
this.unwrappedAds = {};
var ads = document.querySelectorAll('*[id^="ezwrap_"]');
for (var i = 0; i < ads.length; i++) {
var ad = ads[i];
if (!this.isUndefined(ad)) {
this.unwrappedAds[ad.id] = {
ad_external_id: ad.id,
estimated_region: {},
top: -1,
left: -1,
width: -1,
height: -1,
words_before_ad: -1,
is_floating: false
}
}
}
this.analyzeWordCount();
this.getPageSize();
this.getRegions();
this.addInterval();
this.addEventListeners();
},
destroy : function(){
this.log("Destroy function called");
this.removeInterval();
},
addEventListeners : function() {
var self = this;
this.windowBeforeUnloadListener = function(event) {
self.postData();
};
if(this.isIosUserAgent() === true) {
window.addEventListener("pagehide", this.windowBeforeUnloadListener);
}
window.addEventListener("beforeunload", this.windowBeforeUnloadListener);
},
removeEventListeners : function() {
if(this.isIosUserAgent() === true) {
window.removeEventListener("pagehide", this.windowBeforeUnloadListener);
}
window.removeEventListener("beforeunload", this.windowBeforeUnloadListener);
},
addInterval : function() {
this.intervalId = window.setInterval(this.getIntervalFunc(), this.intervalTime);
},
removeInterval : function() {
window.clearInterval(this.intervalId);
},
getIntervalFunc : function(self) {
var self = this;
return function() {
self.totalIntervalTime += self.intervalTime;
if(self.totalIntervalTime >= self.maxIntervalTime){self.removeInterval();}
self.identifyUnwrappedAds();
};
},
identifyUnwrappedAds : function(){
//find unwrapped ads
var unwrappedAds = document.querySelectorAll('*[id^="ezwrap_"]');
for (var i = 0; i < unwrappedAds.length; i++) {
var ad = unwrappedAds[i];
if (!this.isUndefined(ad)) {
this.log("found unwrapped ad, externalId=" + ad.id);
//find pos
var pos = this.getElementPosition(ad);
var size = this.getElementSize(ad);
//guess at position name
var estimatedRegion = {name: "", pct_overlap: 0};
for (var j =0; j < this.regions.length; j++){
var region = this.regions[j];
//this.log("region = " + JSON.stringify(region));
var overlap = this.getOverlap(region, {top:pos.top, bottom: pos.top+size.height, left:pos.left, right:pos.left + size.width});
if (overlap > estimatedRegion.pct_overlap){
estimatedRegion.name = region.name;
estimatedRegion.pct_overlap = overlap;
}
}
this.unwrappedAds[ad.id] = {
ad_external_id: ad.id,
estimated_region: estimatedRegion,
top: pos.top,
left: pos.left,
width: size.width,
height: size.height,
words_before_ad: this.getWordCountBeforeNode(ad),
is_floating: pos.isFloating
};
this.log("unwrappedAd = " + JSON.stringify(this.unwrappedAds[ad.id]));
}
}
},
//get the height and width of the body
// https://stackoverflow.com/questions/1145850/how-to-get-height-of-entire-document-with-javascript
getPageSize : function(){
var body = document.body,
html = document.documentElement;
this.bodyHeight = Math.max( body.scrollHeight, body.offsetHeight,
html.clientHeight, html.scrollHeight, html.offsetHeight );
this.bodyWidth = Math.max( body.scrollWidth, body.offsetWidth,
html.clientWidth, html.scrollWidth, html.offsetWidth );
this.wordsInBody = this.getWordCountInBody();
this.log('bodyHeight = ' + this.bodyHeight + ' bodywidth = ' + this.bodyWidth + ' wordsInBody = ' + this.wordsInBody);
},
//Split the page up into different regions, then find which region the ad is mostly in
getRegions : function(){
var h = this.bodyHeight;
var w = this.bodyWidth;
//split the page up into different rects
this.regions.push({name:"top_of_page", top:Math.floor(0.0*h), bottom:Math.floor(0.1*h), left:Math.floor(0.0*w), right:(Math.floor(1.0*w))});
this.regions.push({name:"top_of_content", top:Math.floor(0.1*h), bottom:Math.floor(0.3*h), left:Math.floor(0.2*w), right:(Math.floor(0.8*w))});
this.regions.push({name:"middle_of_content", top:Math.floor(0.3*h), bottom:Math.floor(0.7*h), left:Math.floor(0.2*w), right:(Math.floor(0.8*w))});
this.regions.push({name:"bottom_of_content", top:Math.floor(0.7*h), bottom:Math.floor(0.9*h), left:Math.floor(0.2*w), right:(Math.floor(0.8*w))});
this.regions.push({name:"bottom_of_page", top:Math.floor(0.9*h), bottom:Math.floor(1.0*h), left:Math.floor(0.0*w), right:(Math.floor(1.0*w))});
this.regions.push({name:"left_sidebar_top", top:Math.floor(0.1*h), bottom:Math.floor(0.3*h), left:Math.floor(0.0*w), right:(Math.floor(0.2*w))});
this.regions.push({name:"left_sidebar_mid", top:Math.floor(0.3*h), bottom:Math.floor(0.7*h), left:Math.floor(0.0*w), right:(Math.floor(0.2*w))});
this.regions.push({name:"left_sidebar_bottom", top:Math.floor(0.7*h), bottom:Math.floor(0.9*h), left:Math.floor(0.0*w), right:(Math.floor(0.2*w))});
this.regions.push({name:"right_siderbar_top", top:Math.floor(0.1*h), bottom:Math.floor(0.3*h), left:Math.floor(0.8*w), right:(Math.floor(1.0*w))});
this.regions.push({name:"right_sidebar_mid", top:Math.floor(0.3*h), bottom:Math.floor(0.7*h), left:Math.floor(0.8*w), right:(Math.floor(1.0*w))});
this.regions.push({name:"right_sidebar_bottom", top:Math.floor(0.7*h), bottom:Math.floor(0.9*h), left:Math.floor(0.8*w), right:(Math.floor(1.0*w))});
},
//returns the percentage of the elm is in the region
getOverlap : function(region, elm){
var xOverlap = Math.max(0, Math.min(elm.bottom, region.bottom) - Math.max(elm.top, region.top));
var yOverlap = Math.max(0, Math.min(elm.right, region.right) - Math.max(elm.left, region.left));
var overlapArea = xOverlap * yOverlap;
return overlapArea / ((elm.bottom - elm.top) * (elm.right - elm.left));
},
getElementPosition : function (element) {
if(element == null){
return {top: -1, left: -1, isFloating: false};
}
var MAX_LEVELS_UP = 5;
var top = 0, left = 0, levelsUp = 0;
do {
levelsUp += 1;
top += element.offsetTop || 0;
left += element.offsetLeft || 0;
if(levelsUp <= MAX_LEVELS_UP && getComputedStyle(element).position === 'fixed'){
var rect = element.getBoundingClientRect();
return {top: rect.top, left: rect.left, isFloating: true};
}
if(element.offsetParent == null && !this.isUndefined(element.tagName) && element.tagName.toUpperCase() !== 'BODY'){
return {top: -1, left: -1, isFloating:false};
}
element = element.offsetParent;
} while (element);
return {
top: top,
left: left,
isFloating: false
};
},
getElementSize : function(element){
var width = Math.max(0, element.offsetWidth), height = Math.max(0, element.offsetHeight);
var descendents = element.getElementsByTagName('*');
for (i = 0; i < descendents.length; ++i) {
child = descendents[i];
width = Math.max(width, child.offsetWidth);
height = Math.max(height, child.offsetHeight);
}
//this.log("adsize is width = " + width + " height = " + height);
return{height : height, width : width};
},
getWordCountInBody : function(){
var count = 0;
for (var i = 0; i < this.wordsAboveYKeys.length; i++)
{
count += this.wordsAboveY[this.wordsAboveYKeys[i]];
}
return count;
},
getWordCountBeforeNode : function(node){
var top = this.getElementPosition(node).top;
var count = 0;
for (var i = 0; i < this.wordsAboveYKeys.length; i++)
{
if (this.wordsAboveYKeys[i] <= top){
count += this.wordsAboveY[this.wordsAboveYKeys[i]];
}else{
break;
}
}
return count;
},
//Iterate through all nodes, finding the Y pos of all text nodes and storing the word count of that node
//indexed by the ypos
analyzeWordCount : function(){
var self = this;
function getTextNodes(node, parentNode) {
if(typeof node === 'undefined' || node === null){
self.log("null element exiting");
return;
}
if(self.getStyle(node, 'opacity') === 0 || self.getStyle(node, 'display') === 'none' || self.getStyle(node, 'visibility') === 'hidden'){
self.log("hidden element exiting");
return;
}
if(node.nodename === 'SCRIPT'){
self.log("script element exiting");
return;
}
if (node.nodeType == 3) {
if (!/^\s*$/.test(node.nodeValue)) {
var parentTop = self.getElementPosition(parentNode).top;
if(parentTop >= 0) {
if (self.isUndefined(self.wordsAboveY[parentTop])){
self.wordsAboveY[parentTop] = 0;
}
self.wordsAboveY[parentTop] += node.nodeValue.trim().split(/\s+/).length;
self.log("wordsAboveY[" + parentTop + "] = " + self.wordsAboveY[parentTop]);
}
}
} else {
for (var i = 0, len = node.childNodes.length; i < len; ++i) {
getTextNodes(node.childNodes[i], node);
}
}
}
getTextNodes(document.body, 0);
for(var key in this.wordsAboveY)
{
if(this.wordsAboveY.hasOwnProperty(key))
{
//this.log('pushing');
this.wordsAboveYKeys.push(key);
}
}
this.wordsAboveYKeys.sort(function(a,b){return a -b;});
//this.log("len1 = " + this.wordsAboveYKeys.length);
},
getStyle : function(elem, property){
try {
return document.defaultView.getComputedStyle(elem, null)[property];
}
catch(err){
return "";
}
},
getData : function() {
return {
pageview_id : _ezaq.page_view_id,
template_id : _ezaq.template_id,
url : _ezaq.url,
body_height: this.bodyHeight,
body_width: this.bodyWidth,
words_in_body: this.wordsInBody,
unwrapped_ads : this.unwrappedAds
}
},
postData : function() {
var suffix = "/porpoiseant/ezuadata";
var url = window.location.protocol + "//" + window.location.host + suffix;
if((this.isUndefined(window.ezJsu) === false && ezJsu === true)
|| (this.isUndefined(window._ez_sa) === false && _ez_sa === true)
|| (this.isUndefined(window.isAmp) === false && isAmp == true)
|| (this.isUndefined(window.ezWp) === false && ezWp === true)){
url = "//g.ezoic.net" + suffix;
}
var request = new XMLHttpRequest();
var requestType = true;
if(this.isMobileOperatingSystem() === true) {
requestType = false;
}
request.open('POST', url, requestType);
if(!this.isUndefined(this.unwrappedAds) && Object.keys(this.unwrappedAds).length > 0) {
var data = this.getData();
this.log("Sending data : " + JSON.stringify(data));
request.send(JSON.stringify(data));
}
},
isUndefined : function() {
for (var i = 0; i < arguments.length; i++) {
if (typeof arguments[i] === 'undefined' || arguments[i] === null) {
return true;
}
}
return false;
},
isMobileOperatingSystem : function() {
return typeof ezoFormfactor !== "undefined" && (ezoFormfactor == "2" || ezoFormfactor == "3");
},
isIosUserAgent : function() {
return navigator.userAgent.indexOf("iPad") != -1 ||
navigator.userAgent.indexOf("iPhone") != -1 ||
navigator.userAgent.indexOf("iPod") != -1;
},
log : function(msg) {
if (this.DEBUG) {
console.log.apply(console, arguments);
}
},
};
setTimeout(function(){ezua.init();}, 10000);
var ezuxgoals = {
DEBUG : false,
uxgoals: [],
// uxgoals is an array of objects like
// [
// {
// ux_goal_id : UXGoalId,
// class_identifier: UXGoalIdentifier,
// engaged_time: EngagedTime,
// tracking_time: trackingTime
// },
// ...
// ]
init : function() {
this.log(this);
this.log(this.uxgoals);
//only track goals if there are loaded goals for this URL
if (this.uxgoals.length > 0 ){
//initialize the tracking timers for each ux goal
for( var i=0; i< this.uxgoals.length; i++){
this.log(this.uxgoals[i]);
var uxgoalid = this.uxgoals[i].ux_goal_id;
this.uxgoals[i].engaged_time = 0;
this.uxgoals[i].tracking_time = 0;
}
this.addEventListeners();
}
},
destroy : function(){
this.removeInterval();
},
addEventListeners : function() {
var self = ezuxgoals;
this.windowBeforeUnloadListener = function(event) {
self.log(JSON.stringify(self.uxgoals) );
//add any time currently being tracked ot total engaged time before posting data
for( var i=0; i< self.uxgoals.length; i++){
if(self.uxgoals[i].tracking_time !== 0){
var time_engaged = (new Date).getTime() - self.uxgoals[i].tracking_time;
self.uxgoals[i].engaged_time += time_engaged;
self.uxgoals[i].tracking_time = 0;
}
}
self.postData();
};
if(this.isIosUserAgent() === true) {
window.addEventListener("pagehide", this.windowBeforeUnloadListener);
}
window.addEventListener("beforeunload", this.windowBeforeUnloadListener);
window.addEventListener("DOMContentLoaded", this.updateTimeEngaged );
window.addEventListener("load", this.updateTimeEngaged );
window.addEventListener("resize", this.updateTimeEngaged );
window.addEventListener("scroll", this.updateTimeEngaged );
// source: https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API
// Warn if the browser doesn't support addEventListener or the Page Visibility API
if (typeof document.addEventListener === "undefined" || typeof document.hidden === "undefined") {
// console.log("This demo requires a browser, such as Google Chrome or Firefox, that supports the Page Visibility API.");
} else {
if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and later support
self.hidden = "hidden";
self.visibilityChange = "visibilitychange";
} else if (typeof document.msHidden !== "undefined") {
self.hidden = "msHidden";
self.visibilityChange = "msvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") {
self.hidden = "webkitHidden";
self.visibilityChange = "webkitvisibilitychange";
}
// Handle page visibility change
document.addEventListener(self.visibilityChange, self.handleVisibilityChange, false);
}
},
removeEventListeners : function() {
if(this.isIosUserAgent() === true) {
window.removeEventListener("pagehide", this.windowBeforeUnloadListener);
}
window.removeEventListener("beforeunload", this.windowBeforeUnloadListener);
},
handleVisibilityChange: function() {
var self = ezuxgoals;
if (document[self.hidden]) {
for( var i=0; i< self.uxgoals.length; i++){
if(self.uxgoals[i].tracking_time !== 0) {
var time_engaged = (new Date).getTime() - self.uxgoals[i].tracking_time;
self.uxgoals[i].engaged_time += time_engaged;
self.uxgoals[i].tracking_time = 0;
}
}
} else {
self.updateTimeEngaged();
}
},
updateTimeEngaged : function() {
var self = ezuxgoals;
self.log(self);
self.log(self.uxgoals.length);
for( var i=0; i< self.uxgoals.length; i++){
var uxgoalid = self.uxgoals[i].UXGoalId;
var uxgoalelement = self.getHTMLElement(i);
self.log(typeof uxgoalelement);
self.log(uxgoalelement);
//if the element is visible and the timer hasn't started, start the timer
self.log(uxgoalid);
self.log(self.uxgoals[i].tracking_time);
if(uxgoalelement !== null){
if( self.isElementInViewport(uxgoalelement) && self.uxgoals[i].tracking_time === 0){
self.uxgoals[i].tracking_time = (new Date).getTime();
}
// if the element isn't visible and the timer is a nonzero value, add the difference between the timer start
// and the current time to the uxgoal's engaged_time
else if( !self.isElementInViewport(uxgoalelement) && self.uxgoals[i].tracking_time !== 0 ){
var time_engaged = (new Date).getTime() - self.uxgoals[i].tracking_time;
self.uxgoals[i].engaged_time += time_engaged;
self.uxgoals[i].tracking_time = 0;
} else{
}
}
}
},
getHTMLElement : function(i){
var self = ezuxgoals;
if(self.uxgoals[i].IdentifierType == "class"){
var uxgoalclass = self.uxgoals[i].Identifier;
var selectedElementCollection = document.getElementsByClassName(uxgoalclass);
if(selectedElementCollection.length > 0){
return selectedElementCollection
}else {
return null;
}
}else if(self.uxgoals[i].IdentifierType == "id"){
var uxgoalid = self.uxgoals[i].Identifier;
return document.getElementById(uxgoalid);
}
},
isElementInViewport : function(elem) {
if(elem == null ) {
return false;
}
if(elem[0] !== undefined){
elem = elem[0]
}
var rect = elem.getBoundingClientRect();
var height = window.innerHeight || document.documentElement.clientHeight;
var width = window.innerWidth || document.documentElement.clientWidth;
var verticalInView = (rect.top >= 0 && rect.top <= height) || (rect.bottom >= 0 && rect.bottom <= height);
var horizontalInView = (rect.left >= 0 && rect.left <= width) || (rect.right >= 0 && rect.right <= width);
return verticalInView && horizontalInView;
},
getData : function() {
return {
pageview_id : _ezaq.page_view_id,
url : _ezaq.url,
ux_goal_data : this.uxgoals
}
},
postData : function() {
var self = ezuxgoals;
var suffix = "/porpoiseant/ezuxgoaldata";
var url = window.location.protocol + "//" + window.location.host + suffix;
if((self.isUndefined(window.ezJsu) === false && ezJsu === true)
|| (self.isUndefined(window._ez_sa) === false && _ez_sa === true)
|| (self.isUndefined(window.isAmp) === false && isAmp == true)
|| (self.isUndefined(window.ezWp) === false && ezWp === true)){
url = "//g.ezoic.net" + suffix;
}
var request = new XMLHttpRequest();
var requestType = true;
if(self.isMobileOperatingSystem() === true) {
requestType = false;
}
request.open('POST', url, requestType);
var data = self.getData();
request.send(JSON.stringify(data));
},
isMobileOperatingSystem : function() {
return typeof ezoFormfactor !== "undefined" && (ezoFormfactor == "2" || ezoFormfactor == "3");
},
isIosUserAgent : function() {
return navigator.userAgent.indexOf("iPad") != -1 ||
navigator.userAgent.indexOf("iPhone") != -1 ||
navigator.userAgent.indexOf("iPod") != -1;
},
isUndefined : function() {
for (var i = 0; i < arguments.length; i++) {
if (typeof arguments[i] === 'undefined' || arguments[i] === null) {
return true;
}
}
return false;
},
log : function(msg) {
if (this.DEBUG) {
console.log.apply(console, arguments);
}
},
};
if( (typeof uxgoalInfo) != 'undefined'){
if(uxgoalInfo.length > 0){
ezuxgoals.uxgoals = uxgoalInfo;
ezuxgoals.init();
}
}