﻿/*
	--------------------------------------------------------------------------
	Version: 1.02
	Release date: 13/05/2006
	Last update: 07/01/2007

	(c) 2006 (5p4m5p4n.c0m) (obfuscated original title to befuddle robots)

	This program is distributed under the terms of the GNU General Public
	Licence version 2, available at http://www.gnu.org/licenses/gpl.txt
	--------------------------------------------------------------------------
*/

var smurfMainClass		= 'smurf';
var smurfUserClass		= 'u';
var smurfDomainClass		= 'd';
var smurfAnchorTextClass = 't';

/*
	--------------------------------------------------------------------------
	Do not edit past this point (unless you know what you are doing).
	--------------------------------------------------------------------------
*/

// load Smurf
addEvent(window, 'load', smurf);

function smurf() {
	var allSmurfs = getElementsByClass(smurfMainClass, document, 'span');
	for (var i=0; i<allSmurfs.length; i++) {
		// get data
		var user = getSpanValue(smurfUserClass, allSmurfs[i]);
		var domain = getSpanValue(smurfDomainClass, allSmurfs[i]);
		var anchorText = getSpanValue(smurfAnchorTextClass, allSmurfs[i]);
		// 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 anchorTag = document.createElement('a');
			anchorTag.className = smurfMainClass;
			anchorTag.setAttribute('href', mto + email);
			anchorTag.appendChild(anchorTagText);
		// replace the span with anchor
		allSmurfs[i].parentNode.replaceChild(anchorTag, allSmurfs[i]);
	}
}

function getElementsByClass(searchClass, scope, tag) {
	var classElements = new Array();
	if (scope == null) node = document;
	if (tag == null) tag = '*';
	var els = scope.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\s)"+searchClass+"(\s|$)");
	for (var i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function getSpanValue(searchClass, scope) {
	var span = getElementsByClass(searchClass, scope, 'span');
	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;
}

// http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
function addEvent(obj, type, fn) {
	if (obj.addEventListener)
		obj.addEventListener(type, fn, false);
	else if (obj.attachEvent)
	{
		obj['e' + type + fn] = fn;
		obj[type + fn] = function() { obj['e' + type + fn](window.event); }
		obj.attachEvent('on' + type, obj[type + fn]);
	}
}