/*
	Voynex Email Guard version 2.0
	Developer: Vladimir Polischuk
	Copyright (c) 2008-2011 by Voynex LLC.
*/

function vxExploDOMTree(oElem, oNodeHandler){
	var oChildren = oElem.childNodes;
	oNodeHandler.processNode(oChildren, oElem);
	if( oChildren )
		for( var i = 0; i < oChildren.length; i++ ){
			oElem = oChildren.item(i);
			vxExploDOMTree(oElem, oNodeHandler);
		}
	return true;
}

function vxSetDOMLoadedHandler(fnOnDOMContentLoaded){
	if(document.addEventListener)
		document.addEventListener("DOMContentLoaded", fnOnDOMContentLoaded, false);
	else if( document.readyState )
		document.onreadystatechange = function(){
			if( this.readyState == "complete" )
				 fnOnDOMContentLoaded();
		}
}

function EmailGuard(sTargetTags, sAtToken, sMailtoToken){
	this.sTags = sTargetTags;
	this.sAt = sAtToken ? sAtToken : "_at_";
	this.sMailto = sMailtoToken;
	var oThis = this;
	var fnTransformDocument = function(){
		vxExploDOMTree(document.body, oThis);
	}
	vxSetDOMLoadedHandler(fnTransformDocument);
}


EmailGuard.prototype.transformNode = function(oElem){
	var sText;
	var bReplaced = false;
	var fnReplacer = function(){
		bReplaced = true;
		return "@";
	}
	sText = oElem.innerHTML.replace(this.sAt, fnReplacer);
	if( bReplaced ) // needed to prevent redraw if token is not found
		oElem.innerHTML = sText;
	
	if( oElem.href ){
		bReplaced = false;
		var sHref = oElem.href.replace(this.sAt, fnReplacer);
		if( bReplaced ){
			var nPos;
			if( this.sMailto ){
				nPos = sHref.indexOf(this.sMailto);
				if( nPos != -1 ){
					nPos+= this.sMailto.length;
					sHref = sHref.substr(nPos);		
				}
			}
			else{
				nPos = sHref.lastIndexOf('/');
				if( nPos != -1 ){
					nPos++;
					sHref = sHref.substr(nPos);
				}
			}
		
			sHref = "mailto:" + sHref;
			oElem.href = sHref;
		}
	}
}

EmailGuard.prototype.processNode = function(oChildren, oElem){
	var sName = oElem.nodeName.toLowerCase();
	if( this.sTags.indexOf(sName) != -1 ){
		this.transformNode(oElem);
	}
}

