var ThisHost=GetDomainFO();
var OtherHost="http://myastm1.astm.org";
var gTarget;

function GetDomainFO()
{
  return("http://"+window.location.hostname);
} 


function GetHTTPFO()
{
    var httpRequest;
    if(document.all) {
      httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else {
      httpRequest = new XMLHttpRequest();
    }
     return(httpRequest);
}

var xhr = GetHTTPFO();


function GoOtherFO(Target1)
{
  xhr.abort();
  Target1.href = Target1.href.replace(ThisHost,OtherHost);
  makeDotCookies();
  if(Target1.oldOnClick && Target1.oldOnClick != null)
  {
	return(Target1.oldOnClick.apply(Target1));
  }
  else
  {
	window.location.href = Target1.href;
  }
  //return(false);
}



function CheckHeartBeatFO(HostToCheck,Target1,async)
{

  var SpecString;
  var Specs="";
  var Timer;
  async=false;

  SpecString="http://"+HostToCheck+"/cgi-bin/HeartBeat.cgi";

  xhr.open('GET', SpecString, async);

  if(!async) { Timer = setTimeout("GoOtherFO(gTarget);",5000); }

  xhr.onreadystatechange=function(){

     if(xhr.readyState==4 && xhr.status == 200) {

	     clearTimeout(Timer);

	     Specs=xhr.responseText;
	     xhr.abort();
	     if(Specs.indexOf("Yep") >=0) {
		return(true);
	     }
	     else {
		  Target1.href = Target1.replace(ThisHost, OtherHost);
	     }
	} 
  };

  try
  {
    xhr.send(null);
  }
  catch(e)
  {
    //for chrome......
    //also shows that our async query died go to other host
    GoOtherFO(gTarget);
  }


  if(!async) { clearTimeout(Timer); }
  else { Timer = setTimeout("GoOtherFO(gTarget);",5000); }

 //if(async) { Timer = setTimeout("GoOtherFO(gTarget);",5000); }

}

function GoToUpHostFO(ThisLink)
{
   gTarget = ThisLink;
   UpHost = CheckHeartBeatFO(location.hostname, ThisLink, true);
   return false;   
}

function GoToUpHostSyncFO(ThisLink)
{
   gTarget = ThisLink;
   UpHost = CheckHeartBeatFO(location.hostname, ThisLink, false);
   return false;   
}


function FixLinkFO(ThisLink)
{
    if(ThisLink.onclick && ThisLink.href && ThisLink.href != "")
	{
		ThisLink.oldOnClick = ThisLink.onclick;
		ThisLink.onclick = function() 
					{
						GoToUpHostSyncFO(this);
						return(ThisLink.oldOnClick.apply(ThisLink));
					};
	}
    else
	{
		ThisLink.onclick = function() { GoToUpHostFO(this); };
	}
}

function FixAllLinksFO()
{
 //to resolve a problem with gTarget being cached
 gTarget = undefined;
 var i;
  for(i=0;i<document.links.length;i++) {
 	if((document.links[i].href.indexOf("myastm.astm.org")  > 0  || 
	   document.links[i].href.indexOf("myastm1.astm.org") >  0  || 
	   document.links[i].href.indexOf("myastm2.astm.org") >  0) && 
	   (document.links[i].href.indexOf("#") < 0) && !document.links[i].target) 
	{		
     FixLinkFO(document.links[i]);
	}
   }
}

function addEvent(obj, evType, fn)
{ 
	if (obj.addEventListener)
	{ 
		obj.addEventListener(evType, fn, false); 
		return true; 
	} 
	else if (obj.attachEvent)
	{ 
 		var r = obj.attachEvent("on"+evType, fn); 
		return r; 
	}
	else 
	{ 
		return false; 
	} 
}

function makeDotCookies()
{
	//split the cookies up	
	var cookies = document.cookie.split(" ");

	for(var i = 0; i < cookies.length; i++)
	{
		var cookInfo = cookies[i].split("=");
		document.cookie = cookInfo[0] + "=" + cookInfo[1] + ";" + " domain=.astm.org;"
	}
}