function b64arrays() {
	var b64s='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
	b64 = [];
	f64 =[];
	for (var i=0; i<b64s.length ;i++) {
		b64[i] = b64s.charAt(i);
		f64[b64s.charAt(i)] = i;
	}
}

/*
Written by Jonathan Snook, http://www.snook.ca/jonathan
Add-ons by Robert Nyman, http://www.robertnyman.com
*/
function getElementsByClassName(oElm, strTagName, strClassName) {
	var arrElements = oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for (var i=0; i<arrElements.length; i++) {
		oElement = arrElements[i];
		if (oRegExp.test(oElement.className)) {
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}

function b64t2d(t) {
	var d=[];
	var i=0;

	t=t.replace(/\n|\r/g,""); t=t.replace(/=/g,"");
	while (i<t.length) {
		d[d.length] = (f64[t.charAt(i)]<<2) | (f64[t.charAt(i+1)]>>4);
		d[d.length] = (((f64[t.charAt(i+1)]&15)<<4) | (f64[t.charAt(i+2)]>>2));
		d[d.length] = (((f64[t.charAt(i+2)]&3)<<6) | (f64[t.charAt(i+3)]));
		i+=4;
	}
	if (t.length%4 == 2) {
		d = d.slice(0, d.length-2);
	}
	if (t.length%4 == 3) {
		d = d.slice(0, d.length-1);
	}
	return d;
}

function utf8d2t(d) {
	var r=new Array;
	var i=0;
	while(i<d.length) {
		if (d[i]<128) {
			r[r.length]= String.fromCharCode(d[i]);
			i++;
		} else if ((d[i]>191) && (d[i]<224)) {
			r[r.length]= String.fromCharCode(((d[i]&31)<<6) | (d[i+1]&63));
			i+=2;
		} else {
			r[r.length]= String.fromCharCode(((d[i]&15)<<12) | ((d[i+1]&63)<<6) | (d[i+2]&63));
			i+=3;
		}
	}
	return r.join("");
}

function decode() {
	b64arrays();
	var elements = getElementsByClassName(document, "span", "mto");
	for (var i = 0; i < elements.length; i++) {
		var address = utf8d2t(b64t2d(elements[i].firstChild.data));
		elements[i].innerHTML = '<a href="mailto:'+address+'">'+address+'</a>';
	}
}

window.onload = function() {
	decode();
}
