var PageTimer={
"_placeholderSessions":{},
"_sessionGroups":[],
"_instance":Math.floor(Math.random()*100),
"_cookiesSent":0,
"_restored":false,
"_implicitBackgroundTimerKind":0,
"_publicationTimer":0,
"_getSessionGroup":PageTimer_GetSessionGroup,
"_removeSessionGroupKind":PageTimer_RemoveSessionGroupKind,
"_removeSessionGroupByIndex":PageTimer_RemoveSessionGroupByIndex,
"_publishSession":PageTimer_PublishSession,
"_completeSession":PageTimer_CompleteSession,
"_cookieAllowed":PageTimer_CookieAllowed,
"_sendCookies":PageTimer_SendCookies,
"AddPlaceholderSession":PageTimer_AddPlaceholderSession,
"RemovePlaceholderSession":PageTimer_RemovePlaceholderSession,
"ConnectToSession":PageTimer_ConnectToSession,
"AddSession":PageTimer_AddSession,
"ResetSession":PageTimer_ResetSession,
"DefineProgressCounters":PageTimer_DefineProgressCounters,
"DefineProgressCountersForActivityKind":PageTimer_DefineProgressCountersForActivityKind,
"FulfillProgressCounter":PageTimer_FulfillProgressCounter,
"CancelProgressCounter":PageTimer_CancelProgressCounter,
"ExchangeProgressCounters":PageTimer_ExchangeProgressCounters,
"SplitSession":PageTimer_SplitSession,
"CancelSession":PageTimer_CancelSession,
"RemoveSession":PageTimer_RemoveSession,
"SetImplicitBackgroundTimerKind":PageTimer_SetImplicitBackgroundTimerKind,
"ChangeCurrentSession":PageTimer_ChangeCurrentSession};
function PageTimer_AddPlaceholderSession(kind){
var placeholderSession={
"_progress":0,
"_published":null,
"Kind":kind,
"Window":null,
"Label":null,
"RequestTime":new Date(),
"ReplyTime":null,
"CompletionTime":null,
"ProgressCounters":{},
"LastProgressCounter":null};
var newEntry={"Value":placeholderSession,"Next":null};
var placeholderSessionQueue=this._placeholderSessions[kind];
if(!!placeholderSessionQueue){
var endEntry=placeholderSessionQueue.Last;
if(!!endEntry){
endEntry.Next=newEntry;
placeholderSessionQueue.Last=newEntry;}
else{
placeholderSessionQueue.First=placeholderSessionQueue.Last=newEntry;}}
else{
this._placeholderSessions[kind]={"First":newEntry,"Last":newEntry};}
return true;}
function PageTimer_RemovePlaceholderSession(kind){
var placeholderSessionQueue=this._placeholderSessions[kind];
if(!!placeholderSessionQueue){
if(!!placeholderSessionQueue.First){
if((placeholderSessionQueue.First=placeholderSessionQueue.First.Next)===null);{
placeholderSessionQueue.Last=null;}
return true;}
else{
return false;}}
else{
return false;}}
function PageTimer_GetSessionGroup(ownerWindow){
var sessionGroup=null;
for(var sessionGroupIndex=0;sessionGroupIndex<this._sessionGroups.length;sessionGroupIndex++){
sessionGroup=this._sessionGroups[sessionGroupIndex];
while(true){
try{
if(sessionGroup.Window.closed){
this._removeSessionGroupByIndex(sessionGroupIndex);}
else{
break;}}
catch(Problem){
sessionGroupIndex++;}
if(sessionGroupIndex>=this._sessionGroups.length){
return null;}
sessionGroup=this._sessionGroups[sessionGroupIndex];}
try{
if(sessionGroup.Window.document===ownerWindow.document){
break;}}
catch(Problem){}
sessionGroup=null;}
return sessionGroup;}
function PageTimer_ConnectToSession(ownerWindow,kind,label){
label=label||null;
var sessionGroup;
var sessionKindsToPreserve={};
if(!(this._restored)){
this._restored=true;
var currentCookie=window.document.cookie;
var recentTime;
var searchIndex=currentCookie.indexOf("PageTimer_Recent=");
if(searchIndex!==-1){
recentTime=new Date(parseInt(decodeURIComponent(currentCookie.substr(searchIndex+17)),10));}
else{
recentTime=new Date(0);}
var requestTime;
var locationHint=window.location.hash;
searchIndex=locationHint.indexOf("PageTimer_Request=");
if((searchIndex!==-1)&&((requestTime=new Date(parseInt(decodeURIComponent(locationHint.substr(searchIndex+18)),10)))>=recentTime)){
this.AddSession(ownerWindow,label);
sessionGroup=this._getSessionGroup(ownerWindow);
sessionGroup.Sessions[0].RequestTime=requestTime;}
else{
locationHint=window.location.search;
var searchIndex=locationHint.indexOf("PageTimer_Request=");
if((searchIndex!==-1)&&((requestTime=new Date(parseInt(decodeURIComponent(locationHint.substr(searchIndex+18)),10)))>=recentTime)){
this.AddSession(ownerWindow,label);
sessionGroup=this._getSessionGroup(ownerWindow);
sessionGroup.Sessions[0].RequestTime=requestTime;}
else{
searchIndex=currentCookie.indexOf("PageTimer=");
if(searchIndex!==-1){
savedSessionText=currentCookie.substr(searchIndex);
searchIndex=savedSessionText.indexOf(";")
if(searchIndex!==-1){
savedSessionText=savedSessionText.substring(0,searchIndex);}
this._cookiesSent=parseInt(savedSessionText.substr(savedSessionText.indexOf("_Sent:")+6),10);
this.AddSession(ownerWindow,label);
sessionGroup=this._getSessionGroup(ownerWindow);
sessionGroup.Sessions[0].RequestTime=new Date(parseInt(savedSessionText.substr(savedSessionText.indexOf("_Request:")+9),10));
window.document.cookie="PageTimer=; expires=Thu, 31-Dec-1970 08:00:00 GMT; path=/";}
else{
sessionGroup=this._getSessionGroup(ownerWindow);}}}
var backgroundCookieHeading="PageTimer_Background_"+kind+"=";
searchIndex=currentCookie.indexOf(backgroundCookieHeading);
if(searchIndex===-1){
backgroundCookieHeading="PageTimer_Background=";
searchIndex=currentCookie.indexOf(backgroundCookieHeading);}
if(searchIndex!==-1){
window.document.cookie=backgroundCookieHeading+"; expires=Thu, 31-Dec-1970 08:00:00 GMT; path=/";
var cookieText=currentCookie.substr(searchIndex+backgroundCookieHeading.length);
searchIndex=cookieText.indexOf(";");
if(searchIndex!==-1){
cookieText=cookieText.substring(0,searchIndex);}
searchIndex=cookieText.indexOf("|");
var backgroundKind;
if(searchIndex===-1){
backgroundKind=this._implicitBackgroundTimerKind;}
else{
backgroundKind=parseInt(cookieText,10);}
this.SplitSession(ownerWindow,backgroundKind);
sessionGroup=this._getSessionGroup(ownerWindow);
sessionGroup.Sessions[backgroundKind].RequestTime=new Date(parseInt(cookieText.substr(searchIndex+1),10));
var originalBaseKind=sessionGroup.BaseKind;
var originalCurrentKind=sessionGroup.CurrentKind;
sessionGroup.BaseKind=-1;
this.ConnectToSession(ownerWindow,backgroundKind,label);
this.DefineProgressCounters(ownerWindow,["_published_"+kind]);
sessionGroup.BaseKind=originalBaseKind;
sessionGroup.CurrentKind=originalCurrentKind;
sessionKindsToPreserve[backgroundKind]=true;}
window.document.cookie="PageTimer_Recent="+((new Date()).getTime())+"; path=/";}
else{
sessionGroup=this._getSessionGroup(ownerWindow);}
var session=null;
if(!!sessionGroup){
if(sessionGroup.BaseKind===0){
var previousSession=sessionGroup.Sessions[kind];
if(!!previousSession){
if(previousSession._published===false){
this._completeSession(previousSession,sessionGroup);}
sessionGroup.Sessions[kind]=null;}
session=sessionGroup.Sessions[0];
sessionGroup.Sessions[kind]=session;
sessionGroup.BaseKind=kind;
this._removeSessionGroupKind(sessionGroup,0);
sessionGroup.Sessions[0]=null;
sessionGroup.CurrentKind=kind;
sessionGroup.Kinds.push(kind);}
else{
session=sessionGroup.Sessions[kind];}}
if(!(session)){
var placeholderSessionQueue=this._placeholderSessions[kind];
if(!!placeholderSessionQueue){
var sessionEntry=placeholderSessionQueue.First;
if(!!sessionEntry){
if((placeholderSessionQueue.First=sessionEntry.Next)===null){
placeholderSessionQueue.Last=null;}
session=sessionEntry.Value;
session.Window=ownerWindow;
if(!(sessionGroup)){
sessionGroup={
"Window":ownerWindow,
"BaseKind":kind,
"CurrentKind":kind,
"Kinds":[kind],
"Sessions":{}};
sessionGroup.Sessions[kind]=session;
this._sessionGroups.push(sessionGroup);}
else{
if(!(sessionGroup.Sessions[kind])){
sessionGroup.Kinds.push(kind);}
sessionGroup.Sessions[kind]=session;
sessionGroup.CurrentKind=kind;}}}}
if(!(session)){
session={
"_progress":0,
"_published":false,
"Kind":kind,
"Window":ownerWindow,
"Label":label,
"RequestTime":null,
"ReplyTime":new Date(),
"CompletionTime":null,
"ProgressCounters":{},
"LastProgressCounter":null};
if(!(sessionGroup)){
sessionGroup={
"Window":ownerWindow,
"BaseKind":kind,
"CurrentKind":kind,
"Kinds":[kind],
"Sessions":{}};
sessionGroup.Sessions[kind]=session;
this._sessionGroups.push(sessionGroup);}
else{
if(!(sessionGroup.Sessions[kind])){
sessionGroup.Kinds.push(kind);}
sessionGroup.Sessions[kind]=session;
sessionGroup.CurrentKind=kind;}}
else{
if(session._published===false){
this._completeSession(session,sessionGroup);}
if(session._published!==null){
session.RequestTime=null;}
session._published=false;
session.Kind=kind;
session.Label=label;
session.ReplyTime=new Date();
session.CompletionTime=null;
session.ProgressCounters={};
session.LastProgressCounter=null;
session._progress=0;}
if(kind===sessionGroup.BaseKind){
sessionKindsToPreserve[kind]=true;
var newKinds=[];
for(var kindIndex=0;kindIndex<sessionGroup.Kinds.length;kindIndex++){
var kindCursor=sessionGroup.Kinds[kindIndex];
if(sessionKindsToPreserve[kindCursor]!==true){
var sessionCursor=sessionGroup.Sessions[kindCursor];
if(sessionCursor._published===false){
this._completeSession(sessionCursor,sessionGroup);}
sessionGroup.Sessions[kindCursor]=null;}
else{
newKinds.push(kindCursor);}}
sessionGroup.Kinds=newKinds;
sessionGroup.CurrentKind=sessionGroup.BaseKind;}}
function PageTimer_AddSession(ownerWindow,label){
label=label||null;
var sessionGroup=this._getSessionGroup(ownerWindow);
if(!(sessionGroup)){
var session={
"_progress":0,
"_published":null,
"Kind":null,
"Window":ownerWindow,
"Label":label,
"RequestTime":new Date(),
"ReplyTime":null,
"CompletionTime":null,
"ProgressCounters":{},
"LastProgressCounter":null};
sessionGroup={
"Window":ownerWindow,
"BaseKind":0,
"CurrentKind":0,
"Kinds":[0],
"Sessions":{}};
sessionGroup.Sessions[0]=session;
this._sessionGroups.push(sessionGroup);}}
function PageTimer_ResetSession(ownerWindow){
var currentTime=new Date();
var sessionGroup=this._getSessionGroup(ownerWindow);
if(!!sessionGroup){
for(var kindIndex=sessionGroup.Kinds.length-1;kindIndex>=0;kindIndex--){
var kind=sessionGroup.Kinds[kindIndex];
var session=sessionGroup.Sessions[kind];
if(!!session){
if(session._published===false){
this._completeSession(session,sessionGroup);}}}
var session=sessionGroup.Sessions[sessionGroup.BaseKind];
if(!!session){
var originalKind=session.Kind;
session._published=null;
session.Kind=0;
session.Label=null;
session.RequestTime=currentTime;
session.ReplyTime=null;
session.CompletionTime=null;
session.ProgressCounters={};
session.LastProgressCounter=null;
session._progress=0;
this._removeSessionGroupKind(sessionGroup,originalKind);
sessionGroup.Sessions[0]=session;
sessionGroup.BaseKind=0;
sessionGroup.Sessions[originalKind]=null;
sessionGroup.Kinds.push(0);}}
try{
if(ownerWindow.document===window.document){
if(this._cookieAllowed()){
window.document.cookie="PageTimer=_Sent:"+this._cookiesSent+"_Request:"+currentTime.getTime()+"; path=/";}}}
catch(Problem){}}
function PageTimer_DefineProgressCounters(ownerWindow,counterList){
var sessionGroup=this._getSessionGroup(ownerWindow);
if(!!sessionGroup){
var session=sessionGroup.Sessions[sessionGroup.CurrentKind];
if(!!session){
for(var counterIndex=0;counterIndex<counterList.length;counterIndex++){
var counter=counterList[counterIndex];
if(!!session.ProgressCounters[counter]){
session.ProgressCounters[counter]++;}
else{
session.ProgressCounters[counter]=1;}
session._progress--;}}}}
function PageTimer_DefineProgressCountersForActivityKind(ownerWindow,counterList,activityKind){
var sessionGroup=this._getSessionGroup(ownerWindow);
if(!!sessionGroup){
var session=sessionGroup.Sessions[activityKind];
if(!!session){
for(var counterIndex=0;counterIndex<counterList.length;counterIndex++){
var counter=counterList[counterIndex];
if(!!session.ProgressCounters[counter]){
session.ProgressCounters[counter]++;}
else{
session.ProgressCounters[counter]=1;}
session._progress--;}}}}
function PageTimer_FulfillProgressCounter(ownerWindow,counter){
var sessionGroup=this._getSessionGroup(ownerWindow);
var setAnyKind=false;
if(!!sessionGroup){
var session=sessionGroup.Sessions[sessionGroup.CurrentKind];
if(!!session){
if(!!session.ProgressCounters[counter]){
session.ProgressCounters[counter]--;
session._progress++;
session.LastProgressCounter=counter;
setAnyKind=true;
if(session._progress===0){
session.CompletionTime=new Date();
if(session._published===false){
this._completeSession(session,sessionGroup);}}}}
for(var kindIndex=sessionGroup.Kinds.length-1;kindIndex>=0;kindIndex--){
var kind=sessionGroup.Kinds[kindIndex];
if(kind!=sessionGroup.CurrentKind){
var session=sessionGroup.Sessions[kind];
if(!!session){
if(!!session.ProgressCounters[counter]){
session.ProgressCounters[counter]--;
session._progress++;
session.LastProgressCounter=counter;
if(session._progress===0){
session.CompletionTime=new Date();
if(session._published===false){
this._completeSession(session,sessionGroup);}}
if(!setAnyKind){
sessionGroup.CurrentKind=kind;}
setAnyKind=true;}}}}}
return setAnyKind;}
function PageTimer_CancelProgressCounter(ownerWindow,counter){
var sessionGroup=this._getSessionGroup(ownerWindow);
if(!!sessionGroup){
var session=sessionGroup.Sessions[sessionGroup.CurrentKind];
if(!!session){
if(!!session.ProgressCounters[counter]){
var quantity=session.ProgressCounters[counter];
session.ProgressCounters[counter]=0;
session._progress+=quantity;
session.LastProgressCounter=counter;
if(session._progress===0){
session.CompletionTime=new Date();
if(session._published===false){
this._completeSession(session,sessionGroup);}}
return true;}}
for(var kindIndex=sessionGroup.Kinds.length-1;kindIndex>=0;kindIndex--){
var kind=sessionGroup.Kinds[kindIndex];
var session=sessionGroup.Sessions[kind];
if(!!session){
if(!!session.ProgressCounters[counter]){
var quantity=session.ProgressCounters[counter];
session.ProgressCounters[counter]=0;
session._progress+=quantity;
session.LastProgressCounter=counter;
if(session._progress===0){
session.CompletionTime=new Date();
if(session._published===false){
this._completeSession(session,sessionGroup);}}
sessionGroup.CurrentKind=kind;
return true;}}}}
return false;}
function PageTimer_ExchangeProgressCounters(ownerWindow,originalCounter,newCounterList){
if(newCounterList.length!==0){
var sessionGroup=this._getSessionGroup(ownerWindow);
if(!!sessionGroup){
var sessionFound=false;
var session=sessionGroup.Sessions[sessionGroup.CurrentKind];
if(!!session){
if(!!session.ProgressCounters[originalCounter]){
session.ProgressCounters[originalCounter]--;
session._progress++;
session.LastProgressCounter=originalCounter;
sessionFound=true;}}
if(!(sessionFound)){
for(var kindIndex=sessionGroup.Kinds.length-1;kindIndex>=0;kindIndex--){
var kind=sessionGroup.Kinds[kindIndex];
var session=sessionGroup.Sessions[kind];
if(!!session){
if(!!session.ProgressCounters[originalCounter]){
session.ProgressCounters[originalCounter]--;
session._progress++;
session.LastProgressCounter=originalCounter;
sessionFound=true;
sessionGroup.CurrentKind=kind;
break;}}}}
if(sessionFound){
return this.DefineProgressCounters(ownerWindow,newCounterList);}}
return false;}
else{
return this.FulfillProgressCounter(ownerWindow,originalCounter);}}
function PageTimer_SplitSession(ownerWindow,kind){
var sessionGroup=this._getSessionGroup(ownerWindow);
if(!!sessionGroup){
if(!(sessionGroup.Sessions[kind])){
var requestTime;
var baseSession;
if((sessionGroup.BaseKind!==0)&&!!(baseSession=sessionGroup.Sessions[sessionGroup.BaseKind])){
requestTime=baseSession.RequestTime;
if(requestTime===null){
requestTime=baseSession.ReplyTime;}}
else{
requestTime=new Date();}
sessionGroup.Kinds.push(kind);
sessionGroup.Sessions[kind]={
"_progress":0,
"_published":null,
"Kind":null,
"Window":ownerWindow,
"Label":null,
"RequestTime":requestTime,
"ReplyTime":null,
"CompletionTime":null,
"ProgressCounters":{},
"LastProgressCounter":null};
sessionGroup.CurrentKind=kind;}}}
function PageTimer_CancelSession(ownerWindow){
var sessionGroup=this._getSessionGroup(ownerWindow);
if(!!sessionGroup){
var session=sessionGroup.Sessions[sessionGroup.CurrentKind];
if(!!session){
session._published=null;
session.Kind=null;
session.Label=null;
session.RequestTime=new Date();
session.ReplyTime=null;
session.CompletionTime=null;
session.ProgressCounters={};
session.LastProgressCounter=null;
session._progress=0;}}}
function PageTimer_RemoveSession(ownerWindow){
var sessionGroup=null;
for(var sessionGroupIndex=0;sessionGroupIndex<this._sessionGroups.length;sessionGroupIndex++){
sessionGroup=this._sessionGroups[sessionGroupIndex];
while(true){
try{
if(sessionGroup.Window.closed){
this._removeSessionGroupByIndex(sessionGroupIndex);}
else{
break;}}
catch(Problem){
sessionGroupIndex++;}
if(sessionGroupIndex>=this._sessionGroups.length){
return null;}
sessionGroup=this._sessionGroups[sessionGroupIndex];}
if(sessionGroup.Window.document===ownerWindow.document){
this._removeSessionGroupByIndex(sessionGroupIndex);
sessionGroup=null;
return true;}
sessionGroup=null;}
return false;}
function PageTimer_RemoveSessionGroupKind(sessionGroup,kind){
var kinds=sessionGroup.Kinds;
for(var kindIndex=0;kindIndex<kinds.length;kindIndex++){
if(kinds[kindIndex]===kind){
kinds[kindIndex]=kinds[kinds.length-1];
kinds.pop();
if(sessionGroup.CurrentKind===kind){
sessionGroup.CurrentKind=sessionGroup.BaseKind;}
return true;}}
return false;}
function PageTimer_RemoveSessionGroupByIndex(sessionGroupIndex){
var sessionGroup=this._sessionGroups[sessionGroupIndex];
for(var kindIndex=sessionGroup.Kinds.length-1;kindIndex>=0;kindIndex--){
var session=sessionGroup.Sessions[sessionGroup.Kinds[kindIndex]];
if(session._published===false){
this._completeSession(session,sessionGroup);}
session=null;}
this._sessionGroups[sessionGroupIndex]=this._sessionGroups[this._sessionGroups.length-1];
this._sessionGroups.pop();
return true;}
function PageTimer_SetImplicitBackgroundTimerKind(kind){
this._implicitBackgroundTimerKind=kind;}
function PageTimer_CompleteSession(session,sessionGroup){
this._publishSession(session);
session._published=true;
this.FulfillProgressCounter(session.Window,"_published_"+session.Kind);}
function PageTimer_PublishSession(session){
if(!(this._cookieAllowed())){
return;}
var originTiming=0;
if(!!session.RequestTime){
originTiming=session.RequestTime.getTime();}
else if(!!session.ReplyTime){
originTiming=session.ReplyTime.getTime();}
if(originTiming!==0){
var cookieValue="kind="+encodeURIComponent(session.Kind);
if(!!session.RequestTime){
cookieValue+="&request="+encodeURIComponent(session.RequestTime.getTime()-originTiming);}
if(!!session.ReplyTime){
cookieValue+="&reply="+encodeURIComponent(session.ReplyTime.getTime()-originTiming);}
if(!!session.CompletionTime){
cookieValue+="&completion="+encodeURIComponent(session.CompletionTime.getTime()-originTiming);}
if(!!session.LastProgressCounter){
cookieValue+="&lastCounter="+encodeURIComponent(session.LastProgressCounter);}
if(!!session.Label){
cookieValue+="&label="+encodeURIComponent(session.Label);}
switch(window.navigator.onLine){
case true:
cookieValue+="&online=1";
break;
case false:
cookieValue+="&online=0";
break;}
var clientCapabilities=window.document.getElementById("ClientCaps");
if(clientCapabilities===null){
clientCapabilities=window.document.createElement("LINK");
clientCapabilities.id="ClientCaps";
window.document.getElementsByTagName("HEAD")[0].appendChild(clientCapabilities);
try{
clientCapabilities.style.behavior="url(\"#default#clientCaps\")";}
catch(Problem){}}
try{
var connectionType=clientCapabilities.connectionType;
if(!!connectionType){
cookieValue+="&connection="+encodeURIComponent(connectionType);}}
catch(Problem){}}
var expires=new Date();
expires.setMinutes(expires.getMinutes()+30);
window.document.cookie="loadingTime"+this._instance+"_"+(this._cookiesSent++)+"="+encodeURIComponent(cookieValue)+"; path=/; expires="+expires.toUTCString();
if(this._publicationTimer!==0){
window.clearTimeout(this._publicationTimer);}
this._publicationTimer=window.setTimeout(PageTimerCallback_SendCookies,5000);}
function PageTimerCallback_SendCookies(){
PageTimer._sendCookies();}
function PageTimer_SendCookies(){
if(window.document.cookie.indexOf("loadingTime")!==-1){
if(this._publicationTimer!==0){
window.clearTimeout(this._publicationTimer);
this._publicationTimer=0;}
var beacon=window.document.createElement("SCRIPT");
beacon.type="text/javascript";
beacon.defer=true;
beacon.src="Remote.aspx?HTTPStatus=204";
window.document.getElementsByTagName("HEAD")[0].appendChild(beacon);}}
function PageTimer_CookieAllowed(){
var currentCookies=window.document.cookie;
if(currentCookies.indexOf("ID=OPT_OUT")!==-1){
return false;}
var availableCookieCount=14;
for(var cookieSeparatorIndex=0;cookieSeparatorIndex!==-1;cookieSeparatorIndex=currentCookies.indexOf(";",cookieSeparatorIndex+1)){
availableCookieCount--;}
return(availableCookieCount>0);}
function PageTimer_ChangeCurrentSession(ownerWindow,kind){
var sessionGroup=this._getSessionGroup(ownerWindow);
if(!!sessionGroup){
if(!!(sessionGroup.Sessions[kind])){
sessionGroup.CurrentKind=kind;}}}

