var adversiteConnectorHostname = 'labs.natpal.com'; var ydlVisitTypeCookieTTL = 14; // days var ydlVisitTypeCookieName = 'vt'; var ydlPUT = 'p'; var ydlUUT = 'u'; if (adversiteConnectorHostname == null || adversiteConnectorHostname == '') { adversiteConnectorHostname = "labs.natpal.com"; } function matchURL(detectionKey) { if(detectionKey == null) { return true; } var urlParts = window.location.pathname.split('/'); if (urlParts && urlParts.length > 0) { if (urlParts[1] == detectionKey) { return true; } } return false; } function matchQueryString(detectionKey, detectionKeyValue) { if (detectionKey == null) { return true; } var queryString = window.location.search; if (queryString && queryString.length > 0) { queryString = queryString.substr(1); var pairs = queryString.split('&'); if (pairs && pairs.length > 0) { for (var i = 0; i < pairs.length; i++) { var keyVal = pairs[i].split('='); if (keyVal && keyVal.length == 2) { if (keyVal[0] == detectionKey) { if (detectionKeyValue == null) { return true; } if (keyVal[1] == detectionKeyValue) { return true; } } } } } } return false; } function createCookie(name,value,days,path,domain,secure) { var cookie_string = name + "=" + escape(value); if (days) { var date = new Date(); date.setTime(date.getTime() + (days*24*60*60*1000)); cookie_string += "; expires=" + date.toGMTString(); } if (path) { cookie_string += "; path=" + escape ( path ); } if (domain) { cookie_string += "; domain=" + escape ( domain ); } if (secure) { cookie_string += "; secure"; } document.cookie = cookie_string; } function readCookie (name) { var results = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); if (results) { return (unescape(results[2])); } else { return null; } } function getBaseDomain(){ var domainParts = document.domain.split(/\./); if(domainParts.length > 1) { return(domainParts[domainParts.length-2] + "." + domainParts[domainParts.length-1]); } else { return(document.domain); } } function detectVisitType() { var matched = matchQueryString('provider', null); if (matched) { return ydlPUT; } return ydlUUT; } // ydleLeadUrl, ydlLoadPixel, and ydlSubmitLead are used in lead.js and franchise-simple-lead.js var ydlLeadUrlScheme = (location.protocol === 'https:') ? 'https://' : 'http://'; var ydlLeadUrl = ydlLeadUrlScheme + adversiteConnectorHostname + '/trk/lead'; function ydlLoadPixel(customQsParams) { try { if (ydlShouldLoadPixel()) { var url = ydlGetLeadUrl(customQsParams); var oScript = document.createElement("img"); oScript.setAttribute("src", url); var head = document.getElementsByTagName("head").item(0); head.appendChild(oScript); } } catch (e) { } return true; } function ydlSubmitLead() { var typeInCookie = readCookie(ydlVisitTypeCookieName); if (typeInCookie == null || typeInCookie == ydlPUT) { return true; } return false; } function ydlGetCommonQueryString() { return 'unpaid=' + (readCookie(ydlVisitTypeCookieName) == ydlUUT); } /* facade over the common operations to make them testable */ YDLCommon = {}; YDLCommon.readCookie = readCookie; YDLCommon.matchURL = matchURL; YDLCommon.matchQueryString = matchQueryString; YDLCommon.createCookie = createCookie; YDLCommon.getBaseDomain = getBaseDomain; YDLCommon.getUserAgent = function() { return navigator.userAgent; }; YDLCommon.isBot = function(userAgents) { userAgents = userAgents || gUserAgentBots; var userAgent = YDLCommon.getUserAgent(); if (userAgent == null) { return false; } for(var i = 0; i < userAgents.length; i++) { if (userAgent.indexOf(userAgents[i]) >= 0) { return true; } } return false; }; var PING_FREQUENCY_MS = 5000; var PINGER_TIMEOUT_MS = 1800000; var BrowserDetect = { init: function () { this.browser = this.searchString(this.dataBrowser) || "unknown"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "unknown"; this.OS = this.searchString(this.dataOS) || "unknown"; }, searchString: function (data) { for (var i=0;i'); var Pinger = { currentTimePassedMs : 0, ping : function(url, ms) { var rnd = Math.floor(Math.random() * 1000000); Pinger.makePingRequest(url + '&rnd=' + rnd); if (this.currentTimePassedMs <= PINGER_TIMEOUT_MS) { this.currentTimePassedMs += ms; setTimeout(function() {Pinger.ping(url, ms)}, ms); } }, makePingRequest : function(url) { var pixelId = "magicPingingPixel"; var pingImage = document.getElementById(pixelId); if (!pingImage) document.writeln(''); pingImage = document.getElementById(pixelId); pingImage.src = url; } }; var Pinger2 = { ping : function(url) { setTimeout(function() {Pinger2.doPing(url, new Date().getTime())}, 3000); }, doPing : function(url, timeStartedMs) { Pinger2.makePingRequest(url + '&rnd=' + Math.floor(Math.random() * 1000000)); var timePassed = new Date().getTime() - timeStartedMs; if (timePassed <= PINGER_TIMEOUT_MS) { var waitMs; if (timePassed < 3000) waitMs = 3000; else if (timePassed >= 3000 && timePassed < 11000) waitMs = 5000; else if (timePassed >= 11000 && timePassed < 30000) waitMs = 10000; else waitMs = 30000; setTimeout(function() {Pinger2.doPing(url, timeStartedMs)}, waitMs); } }, makePingRequest : function(url) { var pixelId = "magicPingingPixel"; var pingImage = document.getElementById(pixelId); if (!pingImage) { if(BrowserDetect.browser === 'IE') { // DO NOT do this: it will blow away the entire document body. see YC-10044. // document.writeln(''); } else { createPingImage(pixelId); } pingImage = document.getElementById(pixelId); } if(pingImage) pingImage.src = url; } }; var pingParams = '&ping=true'; Pinger2.ping(url + pingParams); function setVisitTypeCookie() { var typeInCookie = readCookie(ydlVisitTypeCookieName); var baseDomain = getBaseDomain(); var detectedType = detectVisitType(); var typeToSet = (typeInCookie != ydlPUT) ? detectedType : ydlPUT; createCookie(ydlVisitTypeCookieName, typeToSet, ydlVisitTypeCookieTTL, '/' ,baseDomain); } setVisitTypeCookie(); var ConversionEventTracker = { trackEvents: true, pixelId: "magicEventTrackingPixel", init: function() { document.writeln(''); }, trackEvent : function(type, data) { if (ConversionEventTracker.trackEvents) { var eventImage = document.getElementById(ConversionEventTracker.pixelId); var eventImageSrc = eventUrl + '&convEventType=' + type; if (typeof(data) !== "undefined") eventImageSrc += '&convEventData=' + escape(JSON.stringify(data)); var date = new Date(); eventImageSrc = eventImageSrc+"&_="+date.getTime(); eventImage.src = eventImageSrc; } } }; ConversionEventTracker.init();