var spamSpanMainClass		= 'address';
var spamSpanUserClass		= 'u';
var spamSpanDomainClass		= 'd';
var spamSpanAnchorTextClass = 't';
var spamSpanParams			= new Array('subject', 'body');

// load SpamSpan
//document.observe('dom:loaded', function() { 
function InitSpamSpan()
{
	$$('span.' + spamSpanMainClass).each(function(item) {
	    item.removeClassName(spamSpanMainClass);
        var user = getSpanValue(spamSpanUserClass, item);
	    var domain = getSpanValue(spamSpanDomainClass, item);
	    var anchorText = getSpanValue(spamSpanAnchorTextClass, item);
	    // prepare parameter data
	    var paramValues = new Array();
	    for (var j = 0; j < spamSpanParams.length; j++) {
		    var paramSpanValue = getSpanValue(spamSpanParams[j], item);
		    if (paramSpanValue) {
			    paramValues.push(spamSpanParams[j] + '=' +
				    encodeURIComponent(paramSpanValue));
		    }
	    }
	    // create new anchor tag
	    var at = String.fromCharCode(32*2);
	    var email = cleanSpan(user) + at + cleanSpan(domain);
	    var anchorTagText = document.createTextNode(anchorText ? anchorText : email);
	    var mto = String.fromCharCode(109,97,105,108,116,111,58);
	    var hrefAttr = mto + email;
		    hrefAttr += paramValues.length ? '?' + paramValues.join('&') : '';
	    var anchorTag = document.createElement('a');
		    anchorTag.className = spamSpanMainClass;
		    anchorTag.setAttribute('href', hrefAttr);
		    anchorTag.appendChild(anchorTagText);
	    // replace the span with anchor
	    item.parentNode.replaceChild(anchorTag, item);    	
    });
}
//);

function getSpanValue(searchClass, element) {
    var span = element.select('.' + searchClass);
	if (span[0]) {
		return span[0].firstChild.nodeValue;
	} else {
		return false;
	}
}

function cleanSpan(string) {
	// string = string.replace(//g, '');
	// replace variations of [dot] with .
	string = string.replace(/[\[\(\{]?[dD][oO0][tT][\}\)\]]?/g, '.');
	// replace spaces with nothing
	string = string.replace(/\s+/g, '');
	return string;
}