/**
 * Email decoder - see EmailObfuscatorTag.java
 *
 * TODO: use dom, not innerhtml
 */
function decodeLinks(link) {
    var href = link.getAttribute('href');
    if(href != null && href.indexOf('obfmail') != -1) {
        var address = href.replace(/.*obfmail_to\/([a-z0-9._%-]+)\+([a-z0-9._%-]+)\+([a-z.]+)/i, '$1' + '@' + '$2' + '.' + '$3');
        var mailto = address != href;
        if(!mailto) {
            address = href.replace(/.*obfmail\/([a-z0-9._%-]+)\+([a-z0-9._%-]+)\+([a-z.]+)/i, '$1' + '@' + '$2' + '.' + '$3');
        }
        if(href != address) {
            if(mailto) {
                address = 'mailto:' + rot13(address);
            } else {
                address = rot13(address);
            }
            link.setAttribute('href', address);
        }
        var linktext = link.innerHTML.replace(/.*obfmail\/([a-z0-9._%-]+)\+([a-z0-9._%-]+)\+([a-z.]+)/i, '$1' + '@' + '$2' + '.' + '$3');
        if(linktext != link.innerHTML) {
            // löytyi matchi, oletetaan, että se oli osoite
            link.innerHTML = rot13(linktext);
        }
    }
}

/**
 * Email decoder - see EmailObfuscatorTag.java
 *
 * TODO: use dom, not innerhtml
 */
function decodeSpans(span) {
    var email = span.innerHTML;
    if(email != null && email.indexOf('obfmail') != -1) {
        var linktext = email.replace(/.*obfmail\/([a-z0-9._%-]+)\+([a-z0-9._%-]+)\+([a-z.]+)/i, '$1' + '@' + '$2' + '.' + '$3');
        if(linktext != email) {
            // löytyi matchi, oletetaan, että se oli osoite
            span.innerHTML = rot13(linktext);
        }
    }
}

/**
 * This should be called in body.onload.
 */
function decodeEmails() {
    var links = document.getElementsByTagName('a');
    for(var i=0; i<links.length; i++) {
        decodeLinks(links[i]);
    }
    var spans = document.getElementsByTagName('span');
    for(var i=0; i<spans.length; i++) {
        decodeSpans(spans[i]);
    }
}

//// rot13

function rot13init() {
    var map = new Array();
    var s = "abcdefghijklmnopqrstuvwxyz";
    for(var i=0 ; i<s.length ; i++)
        map[s.charAt(i)] = s.charAt((i+13)%26);
    for(var i=0 ; i<s.length ; i++)
        map[s.charAt(i).toUpperCase()] = s.charAt((i+13)%26).toUpperCase();
    return map;
}
var rot13map = rot13init();
function rot13(a) {
	var s = "";
	for(var i=0 ; i<a.length ; i++) {
		var b = a.charAt(i);
		s += (b>='A' && b<='Z' || b>='a' && b<='z' ? rot13map[b] : b);
	}
	return s;
}

