/*
 * EMail Address Obfuscation
 *
 * We avoid the "mailto:"-prefix in href so that spambots encounter
 * problems on scanning for email links. We just set correct syntax 
 * onmouseover.
 *
 */

var email_text_at_sign_replacement = '<img class="inword-image" src="/design/girls_day/gd_link_at.gif" alt="@">';
var email_text_dot_replacement = '<img class="inword-image" src="/design/girls_day/gd_link_dot.gif" alt=".">';
var email_href_at_sign_replacement = ':dies-durch-einen-Klammeraffen-ersetzen:'; // don't use "@" or "." inside!
var email_href_dot_replacement = ':dies-durch-einen-Punkt-ersetzen:'; // don't use "@" or "." inside!

var email_href_at_sign_replacement_regexp = new RegExp(regexpEscape(email_href_at_sign_replacement),"g");
var email_href_dot_replacement_regexp = new RegExp(regexpEscape(email_href_dot_replacement),"g");
var email_text_at_sign_replacement_regexp = new RegExp(regexpEscape(email_text_at_sign_replacement),"g");
var email_text_dot_replacement_regexp = new RegExp(regexpEscape(email_text_dot_replacement),"g");

/* returns the next <a> tag element */
function GetNextLinkElement(elem)
{
    elem = elem.nextSibling;
    while (elem.nodeName != "A"){
	elem = elem.nextSibling;
    }
    return elem;
}

function adjustEmailObfuscation(atSignPattern, dotPattern)
{
    var email_text_at_sign_replacement = atSignPattern;
    var email_text_dot_replacement = dotPattern;

    email_text_at_sign_replacement_regexp = new RegExp(regexpEscape(email_text_at_sign_replacement),"g");
    email_text_dot_replacement_regexp = new RegExp(regexpEscape(email_text_dot_replacement),"g");
}

function regexpEscape (str)
{
	return escape(str).replace(/\//g,"\\/");
}

function regexpUnEscape (str)
{
	return unescape(str).replace(/\\\//g,"/");
}

function DeObfuscateEmailLinkText(str)
{
    str = escape(str);
    str = str.replace (email_text_dot_replacement_regexp, ".");
    str = str.replace (email_text_at_sign_replacement_regexp, "@");
    return unescape(str);
}

function ObfuscateEmailLinkText(str)
{
    str = str.replace (/\./g, email_text_dot_replacement);
    str = str.replace (/@/g, email_text_at_sign_replacement);
    return str;
}

function DeObfuscateEmailLinkHref(str)
{
    str = escape(str);
    str = str.replace (email_href_dot_replacement_regexp, ".");
    str = str.replace (email_href_at_sign_replacement_regexp, "@");
    return unescape(str);
}

function ObfuscateEmailLinkHref(str)
{
    str = str.replace (/\./g, email_href_dot_replacement);
    str = str.replace (/@/g, email_href_at_sign_replacement);
    return str;
}

function DeObfuscateNextEmailLink(elem)
{
    DeObfuscateEmailLink(GetNextLinkElement(elem));
}

function ObfuscateNextEmailLink(elem)
{
    ObfuscateEmailLink(GetNextLinkElement(elem));
}

function DeObfuscateEmailLink(mailToLink)
{
    DeObfuscateEmailAddressInHref(mailToLink)
    DeObfuscateEmailAddressInInnerHTML(mailToLink)
}

function ObfuscateEmailLink(mailToLink)
{
    ObfuscateEmailAddressInHref(mailToLink)
    ObfuscateEmailAddressInInnerHTML(mailToLink)
}

function DeObfuscateEmailLinkWithChild(mailToLink)
{
    DeObfuscateEmailAddressInHref(mailToLink);
    var span = mailToLink.firstChild;
    DeObfuscateEmailAddressInInnerHTML(span);
}

function ObfuscateEmailLinkWithChild(mailToLink)
{
    ObfuscateEmailAddressInHref(mailToLink);
    var span = mailToLink.firstChild;
    ObfuscateEmailAddressInInnerHTML(span);
}

function DeObfuscateEmailAddressInHref(mailToLink)
{
    // No width implicators for text replacements like "[at]"
    // because they are wider than their substitutes "@"
    if (email_text_at_sign_replacement.indexOf("<") != 0 
        && email_text_dot_replacement.indexOf("<") != 0){
	mailToLink.style.textDecoration = "none";
	mailToLink.style.border = "none";
    }

    var ref = mailToLink.href;
    
    // In case the browser inserts path infomation on the link (w/
    // protocol prefix), we get the shit out of it
    ref = ref.replace(/(http|file).*\//,"");

    // We insert mailto prefix:
    if (ref.indexOf("mailto") == -1)
	ref = "mailto:" + ref;

    // Set values:
    mailToLink.href = DeObfuscateEmailLinkHref(ref);
    mailToLink.title = "E-Mail-Link (Klick zur Aktivierung Ihres E-Mail-Programms)"

    return true;
}

function ObfuscateEmailAddressInHref(mailToLink)
{
    var ref = ObfuscateEmailLinkHref(mailToLink.href);

    // On the way back we delete the prefix
    ref = ref.replace(/mailto:/,"");

    mailToLink.href = ref;
    return true;
}

function DeObfuscateEmailAddressInInnerHTML(span)
{
    var l = span.innerHTML.length;
    var email = DeObfuscateEmailLinkText(span.innerHTML);

    // if not a tag (like image) we fill the obfuscation sign's space 
    // with whitespace to prevent firing onmouseout events when shortening the link to it's 
    // correct syntax:
    var strippedTagsInEmail = email.replace(/<.*?>/g,"");
    if (strippedTagsInEmail.length > 0){
	var strippedTagsInSpan = span.innerHTML.replace(/<.*?>/g,"");
	var diff = strippedTagsInSpan - strippedTagsInEmail.length;
	for (var i = 0; i <= diff; i++){
	    email += "&nbsp;&nbsp;";
	}
    }
    span.innerHTML = email;
    return true;
}

function ObfuscateEmailAddressInInnerHTML(span)
{
    span.innerHTML = ObfuscateEmailLinkText(span.innerHTML);
    return true;
}



