var linkParseDelegate = 'parseLink(node)';
var logLinkAdditionalInfo = '';


//A better way of programmatically adding javascript OnLoad events.
//Using this method, previously defined events are not overwritten
//instead they're 'stacked up' so they all get run at page load time.
function addLoadEvent(func)
{
	var oldonload = window.onload;

	if (typeof window.onload != 'function')
	{
		window.onload = func;
	} else {
		window.onload = function()
		{
			oldonload();
			func();
		}
	}
}


function addClickEvent(node, func)
{
	var oldonclick = node.onclick;

	if (typeof node.onclick != 'function')
	{
		node.onclick = func;

	} else {
		node.onclick = function()
		{
			oldonclick();
			func();
		}
	}
}


function parseBody()
{
	var startAt=document.getElementsByTagName('BODY');

	if (startAt != null)
		parseNodes( startAt[0] );
}


function parseNodes( container )
{
	for(var i=0; i<container.childNodes.length; i++)
	{
		var node = container.childNodes[i];

		if (node.nodeType != 3) //Not just text...
		{
			switch( node.tagName )
			{
				case 'A':
				{
					try
					{ eval( linkParseDelegate ); }
					catch(e)
					{ alert('Unexpected error in parseNodes():\n' +  e.message); }

					break;
				}
			}
		}

		parseNodes( node );
	}
}


function parseLink(link)
{
	var href=link.href;

	if (href)
	{
		var url=new URL(href);

		if( url.getHost() != window.location.host )
			addClickEvent(link, function(){ return externalClick(this) });
	}
}


function externalClick( node )
{
	var xmlhttp=false;

	try 
	{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } 

	catch (e) 
	{
		try 
		{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } 

		catch (E) 
		{ xmlhttp = false; }
	}

	if (!xmlhttp && typeof XMLHttpRequest!='undefined') 
	{
		xmlhttp = new XMLHttpRequest();
	}


	xmlhttp.open("GET", ajaxPath + "LogLink.aspx?url=" + escape( node.href ) + "&referer=" + escape( window.location ) + "&additionalInfo=" +  escape( logLinkAdditionalInfo ));
	xmlhttp.send(null);

	return true;
}
