var SflyPageMon=SflyPageMon||{};SflyPageMon._onloadTime=null;SflyPageMon.mark=function(metricName,startTime){SflyPageMon.marks[metricName]=parseInt(startTime||Number(new Date()));};SflyPageMon.measure=function(metricName,start,end,addDuration){var start=("undefined"!=typeof(start)&&null!=start?start:metricName);var startEpochTime=("undefined"!=typeof(SflyPageMon.marks[start])?SflyPageMon.marks[start]:start);var endEpochTime=("undefined"===typeof(end)||null==end?Number(new Date()):("undefined"!=typeof(SflyPageMon.marks[end])?SflyPageMon.marks[end]:end));if(startEpochTime){SflyPageMon.measures[metricName]=parseInt(endEpochTime-startEpochTime);SflyPageMon.marks[metricName]=parseInt(startEpochTime);if("undefined"!=typeof(addDuration)){SflyPageMon.measures[metricName]=parseInt(SflyPageMon.measures[metricName]+addDuration);}
if(SflyPageMon._timer==null&&SflyPageMon.domready==true){SflyPageMon._timer=setTimeout('SflyPageMon._sendBeacon()',30000);}}};SflyPageMon.setPageReady=function(){SflyPageMon.mark("pagereadyFired");SflyPageMon.measure("pageready","frontendstarttime","pagereadyFired");};SflyPageMon.getOnloadTime=function(){var measures=SflyPageMon.measures;if(SflyPageMon._onloadTime!=null){return{"onload":SflyPageMon._onloadTime};}else{return{"message":"onload has not yet fired for SflyPageMon, but time to first byte is available","timeToFirstByte":SflyPageMon.marks["frontendstarttime"]};}};SflyPageMon.init=function(){if(!SflyPageMon.beaconUrl){alert("no beacon specified. monitor cannot initialize");return;}
SflyPageMon.domready=false;SflyPageMon.marks={};SflyPageMon.measures={};SflyPageMon._timer=null;if(!SflyPageMon.doNotSendToServer){SflyPageMon.doNotSendToServer=false;}
if(!SflyPageMon.pageName){SflyPageMon.pageName=window.location.pathname;}
SflyPageMon.bindDomReady();SflyPageMon.findRequestStartTime();SflyPageMon.mark("frontendstarttime",SflyPageMon.firstByte);SflyPageMon.measure("roundtrip","backendstarttime","frontendstarttime");SflyPageMon.addEventListener("beforeunload",SflyPageMon.beforeUnload,false);SflyPageMon.addEventListener("load",function(){SflyPageMon.mark("onloadFired");SflyPageMon.measure("onload","frontendstarttime","onloadFired");SflyPageMon._onloadTime=SflyPageMon.measures["onload"];SflyPageMon.measure("total","backendstarttime","onloadFired");SflyPageMon._sendBeacon();},false);};SflyPageMon.getMeasures=function(){return SflyPageMon.measures;};SflyPageMon._sendBeacon=function(){var measures=SflyPageMon.getMeasures();var sTimes="";for(var key in measures){sTimes+=","+key+":"+measures[key];}
if(sTimes){sTimes=sTimes.substring(1);var url=SflyPageMon.beaconUrl+"?ets="+sTimes+"&pn="+SflyPageMon.pageName+"&ts="+Number(new Date());if(!SflyPageMon.beaconImg){var img=document.createElement("img");img.style.width="1px";img.style.height="1px";document.body.appendChild(img);SflyPageMon.beaconImg=img;}
SflyPageMon.setBeaconUrl(url);}
return"";};SflyPageMon.setBeaconUrl=function(url){SflyPageMon.clear();SflyPageMon._timer=null;if(SflyPageMon.doNotSendToServer!=true){SflyPageMon.beaconImg.src=url;}};SflyPageMon.clear=function(){SflyPageMon.measures={};};SflyPageMon.findRequestStartTime=function(){var aCookies=document.cookie.split(' ');for(var i=0;i<aCookies.length;i++){if(0===aCookies[i].indexOf("SflyPageMon=")){var aSubCookies=aCookies[i].substring("SflyPageMon=".length).split('&');var startTime;var bReferrerMatch=false;for(var j=0;j<aSubCookies.length;j++){if(0===aSubCookies[j].indexOf("s=")){startTime=aSubCookies[j].substring(2);}
else if(0===aSubCookies[j].indexOf("r=")){if(aSubCookies[j][aSubCookies[j].length-1]==';'){aSubCookies[j]=aSubCookies[j].substring(0,aSubCookies[j].length-1);}
var startPage=aSubCookies[j].substring(2,aSubCookies[j].length);var ref=escape(document.referrer);referrerStringCompare=startPage.indexOf(ref);if(referrerStringCompare>-1){bReferrerMatch=true;}}}
if(bReferrerMatch&&startTime){SflyPageMon.mark("backendstarttime",startTime);}}}};SflyPageMon.beforeUnload=function(e){SflyPageMon._sendBeacon();document.cookie="SflyPageMon=s="+Number(new Date())+"&r="+escape(document.location)+"; path=/";};SflyPageMon.addEventListener=function(sType,callback,bCapture){if("undefined"!=typeof(window.attachEvent)){return window.attachEvent("on"+sType,callback);}
else if(window.addEventListener){return window.addEventListener(sType,callback,bCapture);}};SflyPageMon.bindDomReady=function(){if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);SflyPageMon.domIsReady();},false);}else if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);SflyPageMon.domIsReady();}});if(document.documentElement.doScroll&&window==window.top)(function(){if(SflyPageMon.domready)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}
SflyPageMon.domIsReady();})();}
SflyPageMon.addEventListener("load",function(){SflyPageMon.domIsReady();},false);};SflyPageMon.domIsReady=function(){if(!SflyPageMon.domready){SflyPageMon.domready=true;SflyPageMon.mark("domready","frontendstarttime");}};SflyPageMon.init();
