function bindExternalLinkEvents()
{
	bindExternalLinkEvent(document.documentElement);
}

function bindExternalLinkEvent(rootNode)
{
	// is tag an <a> with a "rel" of (or containing) "external"?
	if (rootNode.tagName && rootNode.tagName.toLowerCase() == 'a')
	{
		var attr = (rootNode.attributes ? rootNode.attributes['rel'] : rootNode.getAttribute("rel"));
		if (attr)
		{
			var rels = attr.value.split(/\s+/);
			for (var i = 0; i < rels.length; i++)
			{
				if (rels[i].toLowerCase() == "external")
				{
					rootNode.target = "_blank";
					break;
				}
			}
		}
	}
	// don't bother recursing if so; <a>s can't contain other <a>s
	else if (rootNode.hasChildNodes())
	{
		for (var i = 0; i < rootNode.childNodes.length; i++)
		{
			bindExternalLinkEvent(rootNode.childNodes[i]);
		}
	}
}

function bindEvent(node, eventName, handler)
{
	// add via IE's method if available
	if (node.attachEvent)
	{
		node.attachEvent("on" + eventName, handler);
	}
	// add via DOM if not available
	else
	{
		node.addEventListener(eventName, handler, true);
	}
}

bindEvent(window, "load", bindExternalLinkEvents);
