/*
 * Transforms email addresses back to normal. See also ~/web/customtags/rot13.cfm
 */

Rot13 = 
{
    map: null,

    convert: function(a) 
	{
        Rot13.init();

        var s = "";
		
        for (i = 0; i < a.length; i++) 
		{
            var b = a.charAt(i);
			
			if (isLetter(b))
			{
				s += Rot13.map[b]
			}
			else
			{
				s += b;
			}
        }
		
        return s;
    },

    init: function() 
	{
        if (Rot13.map != null)
		{
            return;
		}
              
        var map = new Array();
        var s   = "abcdefghijklmnopqrstuvwxyz";

        for (i = 0; i < s.length; i++)
		{
            map[s.charAt(i)] = s.charAt((i + 13) % 26);
		}
		
        for (i = 0; i < s.length; i++)
		{
            map[s.charAt(i).toUpperCase()] = s.charAt((i + 13) % 26).toUpperCase();
		}

        Rot13.map = map;
    },

    write: function(a) 
	{
        document.write(Rot13.convert(a));
    }
}

function isLetter(b)
{
	return (b >= 'A' && b <= 'Z') || (b >= 'a' && b <= 'z');
}

function fixRot13Transformations()
{
	for (var i = 0; i < document.links.length; i++)
	{
		var maillink = document.links[i];
		
		// document.links does not necessarily contain only A-tags...
		if (maillink.tagName.toUpperCase() == "A" && maillink.href.indexOf('mailto:') >= 0)
		{
			var parts = maillink.href.split(':');
			var innerHTML = maillink.innerHTML;
			
			maillink.href = 'mailto:' + Rot13.convert(parts[1]);
			
			if (innerHTML.length == 0 || (innerHTML.length == 1 && innerHTML.charCodeAt(0) == 160) || innerHTML.toLowerCase() == "&nbsp;")
			{
				maillink.innerHTML = Rot13.convert(parts[1]);
			}
			else
			{
			    // innerHTML may have been changed when href was set, so we set it explicitly
			    maillink.innerHTML = innerHTML;
			}
		}
	}
}
