/*
        --------------------------------------------------------------------------
        $Id: spamspan.js 5 2007-09-29 15:56:26Z moltar $
        --------------------------------------------------------------------------
        Version: 1.03
        Release date: 13/05/2006
        Last update: 07/01/2007

        (c) 2006 SpamSpan (www.spamspan.com)

        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 spamSpanMainClass                = 'spamspan_main';
var spamSpanUserClass                = 'spamspan_user';
var spamSpanDomainClass                = 'spamspan_domain';
var spamSpanAnchorTextClass = 'spamspan_text';
var spamSpanParams                        = new Array('subject', 'body');

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

// load SpamSpan
// spamSpanAddEvent(window, 'load', spamSpan);
// Originalversion. Dank Mootools gehts besser:
window.addEvent('domready', function() {spamSpan();});


function spamSpan() {
        var allSpamSpans = spamSpanGetElementsByClass(spamSpanMainClass, document, 'span');
        for (var i = 0; i < allSpamSpans.length; i++) {
                // get data
                var user = spamSpanGetSpanValue(spamSpanUserClass, allSpamSpans[i]);
                var domain = spamSpanGetSpanValue(spamSpanDomainClass, allSpamSpans[i]);
                var anchorText = spamSpanGetSpanValue(spamSpanAnchorTextClass, allSpamSpans[i]);
                // prepare parameter data
                var paramValues = new Array();
                for (var j = 0; j < spamSpanParams.length; j++) {
                        var paramSpanValue = spamSpanGetSpanValue(spamSpanParams[j], allSpamSpans[i]);
                        if (paramSpanValue) {
                                paramValues.push(spamSpanParams[j] + '=' +
                                        encodeURIComponent(paramSpanValue));
                        }
                }
                // create new anchor tag
                var at = String.fromCharCode(32*2);
                var email = spamSpanCleanSpan(user) + at + spamSpanCleanSpan(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
                allSpamSpans[i].parentNode.replaceChild(anchorTag, allSpamSpans[i]);
        }
}

function spamSpanGetElementsByClass(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 spamSpanGetSpanValue(searchClass, scope) {
        var span = spamSpanGetElementsByClass(searchClass, scope, 'span');
        if (span[0]) {
                return span[0].firstChild.nodeValue;
        } else {
                return false;
        }
}

function spamSpanCleanSpan(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 spamSpanAddEvent(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]);
        }
}