
var PageMetrics=function(domain,endpoint,debug){var metricsServer,pageMetrics,timers,debugMode;metricsServer=endpoint;pageMetrics={"site":domain,"time":(new Date()).getTime(),"metrics":{"cookielength":document.cookie.length}};timers=[];debugMode=debug||false;return{save:function(){var metric,jQueryVersion;this.stopTimer(null);if(typeof jQuery!=='function'){this.debugMessage("jQuery is not loaded, can't push result to server.");}
jQueryVersion=jQuery.fn.jquery.split(".");if(jQueryVersion[0]==="1"&&(jQueryVersion[1]==="2"||jQueryVersion[1]==="3")){for(metric in pageMetrics.metrics){if(pageMetrics.metrics.hasOwnProperty(metric)){pageMetrics["metrics["+metric+"]"]=pageMetrics.metrics[metric];}}
delete pageMetrics.metrics;}
jQuery.ajax({data:pageMetrics,dataType:"jsonp",url:metricsServer});},get:function(metric){if(typeof pageMetrics.metrics[metric]==='number'){return pageMetrics.metrics[metric];}
this.debugMessage("Returning 0 by default for "+metric);return 0;},set:function(metric,value){if(typeof metric==='string'&&typeof value==='number'){if(value<0){value=0;}
this.debugMessage("Setting "+metric+" to "+value);pageMetrics.metrics[metric]=value;}},setURL:function(url){pageMetrics.url=url;},startTimer:function(metric){timers.push({name:metric,start:(new Date()).getTime(),additions:this.get(metric),deductions:0});this.debugMessage("Started timer: "+metric);},stopTimer:function(metric){var startData,duration;if(timers.length>0){if(timers[timers.length-1].name===metric){startData=timers.pop();duration=(new Date()).getTime()-startData.start;this.debugMessage("Stopped timer: "+metric+" ("+duration+"ms)");this.set(metric,duration+startData.additions-startData.deductions);if(timers.length>0){timers[timers.length-1].deductions+=duration;}}else{do{this.stopTimer(timers[timers.length-1].name);}while(timers.length>0&&timers[timers.length-1].name!==metric);}}},debugMessage:function(message){if(debugMode&&typeof console==='object'){console.log("[Page Metrics] "+message);}}};};
