var fgn_HTMLEndTime = null;
var fgn_endTime = null;
var isIE = (navigator.appName == "Microsoft Internet Explorer");
var isFirefox = false;
var fgn_stTime=fgn_expDate.getTime();
var fgn_deleteCookie = 0;
var fgn_onloadinProgress = 0;
var fgn_onstopinProgress = 0;

fgn_startHtml();

function fgn_startHtml()
{
   if (navigator.userAgent.indexOf("Firefox") != -1)
   {
      isFirefox = true;
   }

	fgn_PerfmonCookieDrop();	
	fgn_endHtml();	// in case its a frameset, which doesnt deal with <scripts> after </html>
}

function fgn_endHtml()
{
	fgn_HTMLEndTime = (new Date()).getTime();
	fgn_ReportLoadTime();

	if(!isIE && !isFirefox)
	{
		if(self.onload != fgn_OnLoad)
		{
			self.OLFN = self.onload;
			self.onload = fgn_OnLoad;
		}
		if(self.onstop != fgn_OnStop)
		{
			self.OSFN = self.onstop;
			self.onstop = fgn_OnStop;
		}
	}
}

function fgn_GetCookie(Name) 
{
   var search = Name + "="
   var returnvalue = "";
   if (document.cookie.length > 0) 
   {
      offset = document.cookie.indexOf(search)
      // if cookie exists
      if (offset != -1) 
      { 
         offset += search.length
         // set index of beginning of value
         end = document.cookie.indexOf(";", offset);
         // set index of end of cookie value
         if (end == -1) end = document.cookie.length;
         returnvalue = unescape(document.cookie.substring(offset, end))
      }
   }
   return returnvalue;
} 
function fgn_PerfmonCookieDrop()
{
   if (fgn_GetCookie("FGNAPPSCOPE") == "")
   {
	   fgn_expDate.setTime(fgn_stTime + fgn_cookieTTL);
	   document.cookie="FGNAPPSCOPE=" + fgn_appscopeMode + ";expires=" + fgn_expDate.toGMTString() + "; path=/";
	   fgn_deleteCookie = 1;
   }
}

function fgn_PerfmonCookieDelete()
{
	if( fgn_deleteCookie )
	{
		fgn_expDate.setTime(fgn_stTime - fgn_cookieTTL); // guarenteed to be in the past...
		document.cookie="FGNAPPSCOPE=passthru;expires=" + fgn_expDate.toGMTString() + "; path=/";
	}
}

function fgn_ErrorHandler(msg, url, linenumber)
{
	return true;
}
window.onerror = fgn_ErrorHandler;

if(isIE)
{
   // this will create a 'stub' javascript block that will get sourced later to accomplish
   // the goal of uploading the gathered stats; this is more reliable that using a new Image()
   document.write("<script language=\"JavaScript\" id=\"fgn_ScriptStub\"></script>");
}

fgn_AttachEvents();

function fgn_OnLoad()
{
   //take care of recursion in case of Netscape
   if(fgn_onloadinProgress) 
      return;
   fgn_onloadinProgress = 1;
   try {      
	   fgn_ReportEndTime();	
	   if(!isIE)if(self.OLFN !=null)self.OLFN();
   } catch(e)
   {
      //alert("onload in excep");
   }
   fgn_onloadinProgress = 0;

}

function fgn_OnStop()
{
   //take care of recursion in case of Netscape
   if(fgn_onstopinProgress)
      return;
   fgn_onstopinProgress = 1
   try {      ;
	   fgn_ReportEndTime();
	   if(!isIE)if(self.OSFN !=null)self.OSFN();
   } catch(e)
   {
      //alert("onstop in excep");
   }
   fgn_onstopinProgress = 0;


}

function fgn_GetPostString()
{
	var str = "";
	str = "FgnResponseId="+fgn_ResponseId;
	str += "&FgnStartTime="+fgn_stTime;
	str += "&FgnEndTime="+fgn_endTime;
	str += "&FgnHTMLEndTime="+fgn_HTMLEndTime;
	str += "&FgnMode="+fgn_appscopeMode;
   str += "&FgnURL="+self.location.href;
	return str;
}


function fgn_ReportLoadTime()
{
	if(fgn_HTMLEndTime != null && fgn_endTime != null)
	{
	   //Delete the perfmon cookie
	   fgn_PerfmonCookieDelete();
	   if(fgn_appscopeMode == "no-measure")
	      return;      
		var dataStr = fgn_GetPostString();
		var Url = fgn_PostUrl+"?"+dataStr;								
		try
      {
           if(isIE)
           {
              document.scripts['fgn_ScriptStub'].src=Url+"&FgnMethod=Image";
           }
           else
           {
		        var fgnimg = new Image();
		        fgnimg.src = Url + "&FgnMethod=Image";		
           }
		} 
      catch(e)
		{
			if(isIE)
			{		      
				var objXMLHTTP = new ActiveXObject("Msxml2.XMLHTTP");
		      objXMLHTTP.open("GET", Url + "&FgnMethod=XMLHttp", false);
            objXMLHTTP.send();
			}
			else
			{		      
				var objXMLHTTP = new XMLHttpRequest();
		      objXMLHTTP.open("GET", Url + "&FgnMethod=XMLHttp", false);
            objXMLHTTP.send(null);
			}		
		}
	}
}

function fgn_ReportEndTime()
{
	fgn_endTime = (new Date()).getTime();
	fgn_ReportLoadTime();
}

function fgn_AttachEvents()
{
	if(isIE)
	{
		if(self.document.readyState == "complete")
			fgn_ReportEndTime();
		else
		{
			self.attachEvent("onload", fgn_OnLoad);
			self.attachEvent("onstop", fgn_OnStop);
		}
	}
	else
	{
		self.onload = fgn_OnLoad;
		self.onstop = fgn_OnStop;
	}

}

function fgn_getPropeties(obj)
{
  var str = "";
  for(i in obj)
   str += i +"="+obj[i] +"<br>";
  return str; 
}

