/*
	Voynex Email Guard version 4.0
	Developer: Vladimir Polischuk
	Copyright (c) 2008-2011 by Voynex LLC.
*/
var vxRun = vxSetOnDOMLoadedHandler;

function vxExploDOMTree(oElem, fnNodeHandler, oParam){
	var oChildren = oElem.childNodes;
	oParam = fnNodeHandler(oElem, oParam);
	if( oChildren )
	{
		var cNodes = oChildren.length;
		for( var i = 0; i < cNodes; i++ )
		{
			oElem = oChildren.item(i);
			vxExploDOMTree(oElem, fnNodeHandler, oParam);
		}
	}
	return oParam;
}

function vxSetOnDOMLoadedHandler(fnOnDOMContentLoaded){
	if(document.addEventListener)
		document.addEventListener("DOMContentLoaded", fnOnDOMContentLoaded, false);
	else if( document.readyState )
		document.onreadystatechange = function(){
			if( this.readyState == "complete" )
				 fnOnDOMContentLoaded();
		}
	else
		window.onload = fnOnDOMContentLoaded;
}

function vxEmailGuardEx(oParent, sTags, sAt, sMailto){

	var bReplaced;

	if( !sAt )
		sAt = "_at_";

	var oRegExp = new RegExp(sAt, "g");

	function replacer()
	{
		bReplaced = true;
		return "@";
	}

	function transformText(oElem)
	{
		bReplaced = false;
		var sText = oElem.nodeValue.replace(oRegExp, replacer);
		if( bReplaced ) // needed to prevent redraw if token is not found
			oElem.nodeValue = sText;
	}


	function transformHref(oElem)
	{
		bReplaced = false;
		var sHref = oElem.href.replace(sAt, replacer);

		if( !bReplaced )
			return;

		var nPos;

		if( sMailto )
		{
			nPos = sHref.indexOf(sMailto);
			if( nPos != -1 )
			{
				nPos+= sMailto.length;
				sHref = sHref.substr(nPos);		
			}
		}
		else
		{
			nPos = sHref.lastIndexOf('/');
			if( nPos != -1 )
			{
				nPos++;
				sHref = sHref.substr(nPos);
			}
		}
		sHref = "mailto:" + sHref;
		oElem.href = sHref;
	}

	function processNode(oElem)
	{
		var nType = oElem.nodeType;
		if( nType == 3 ) // TEXT_NODE
		{
			transformText(oElem);
		}
		else if( (nType == 1) && oElem.href )  // ELEMENT_NODE
		{
			transformHref(oElem);
		}
		return true;
	}

	if( sTags && sTags.length ){
		sTags = sTags.toLowerCase();
		function processNodeEx(oElem, bInclude)
		{
			if( !bInclude )
			{
				var sName = oElem.nodeName.toLowerCase();
				bInclude = ( sTags.indexOf(sName) > -1 );
			}
		 	if( bInclude )
				processNode(oElem);
			return bInclude;
		}
		return vxExploDOMTree(oParent, processNodeEx, false);
	}

	return vxExploDOMTree(oParent, processNode);
}

function vxEmailGuard(sTags, sAt, sMailto)
{
	return vxEmailGuardEx(document.body, sTags, sAt, sMailto);
}

