function getElementsByClassName(node, classname) {
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++) {
        if(re.test(els[i].className)) a.push(els[i]);
    }
    return a;
}

function decryption(src) {
	var hexshift = src.substring(0,7);
	var shift = '';
	var result = '';
	var email = false;
	if(hexshift != 'mailto:') {
		shift = h2dconvert(hexshift);
		// If not valid hex, don't decrypt.
		if(shift == -1) {
			return src;
		}
	} else {
		src = src.substring(7);
		shift = h2dconvert(src.substring(0,2));
		if(shift == -1) {
			return 'mailto:' + src;
		}
		result = 'mailto:';
		email = true;
	}
	for(var i = 2, j = src.length;i < j;i += 2) {
		var nextchar = h2dconvert(src.substring(i,i+2));
		
		nextchar -= shift;
		result += String.fromCharCode(nextchar);
	}
	return result;
}

function decrypt() {
	var l = getElementsByClassName(document.body, 'crypted');
	for(var i = 0;i < l.length;i++) {
		l[i].href		= decryption(l[i].href);
		l[i].innerHTML	= decryption(l[i].innerHTML);
	}
}

var hexstr = '0123456789abcdef';

function h2dconvert(hexval) {
	var hexvalue = 0;
	if (hexstr.indexOf(hexval.charAt(0)) >= 0) {
		hexvalue += hexstr.indexOf(hexval.charAt(0)) * 16;
	} else {
		return -1;
	}
	if (hexstr.indexOf(hexval.charAt(1)) >= 0) {
		hexvalue += hexstr.indexOf(hexval.charAt(1));
	} else {
		return -1;
	}
	return hexvalue;
}
