function codeGenerator() {
	if (document.getElementById) {
		var extraInfoIds = new Array('cg-name', 'cg-subject', 'cg-body');
		var emailObj = document.getElementById('cg-email');
		var paranoiaObj = document.getElementById('cg-paranoia');
		var resultObj = document.getElementById('cg-result');
		var email = emailObj.value.split('@');
		if (email.length != 2) {
			resultObj.value = "You pretend to put an email address, and I'll pretend this is code.";
		} else {
			var code = '<span class="spamspan">';
			switch (paranoiaObj.value) {
				case '1':
					code += cgLevel1(email);
				break;
				case '2':
					code += cgLevel2(email);
				break;
				case '3':
					code += cgLevel3(email);
				break;
			}
			var extraInfo = new Array();
			for (var i = 0; i < extraInfoIds.length; i++) {	
				extraInfoObj = document.getElementById(extraInfoIds[i]);
				if (extraInfoObj && extraInfoObj.value != '') {
					extraInfo.push(wrapInSpan(extraInfoObj.value, extraInfoObj.className))
				}
			}
			if (extraInfo.length) {
				code += ' (' + extraInfo.join(', ') + ')';
			}
			code += '</span>';
			resultObj.value = code;
			resultObj.focus();
			resultObj.select();
		}
	}
}
function cgLevel1(email) {
	var code = '';
	code += wrapInSpan(email[0], 'u');
	code += '@';
	code += wrapInSpan(email[1], 'd');
	return code;
}
function cgLevel2(email) {
	var code = '';
	code += wrapInSpan(email[0], 'u');
	code += '<img alt="@" width="10" height="10" src="@.png">';
	code += wrapInSpan(email[1], 'd');
	return code;
}
function cgLevel3(email) {
	var code = '';
	code += wrapInSpan(replaceDot(email[0]), 'u');
	code += ' [at] ';
	code += wrapInSpan(replaceDot(email[1]), 'd');
	return code;
}
function wrapInSpan(spanValue, spanClass) {
	var span = '';
	span += '<span';
	if (spanClass) {
		span += ' class="' + spanClass + '"';
	}
	span += '>' + spanValue + '</span>';
	return span;
}
function replaceDot(stringValue) {
	return stringValue.replace(/\.+/g, ' [dot] ');
}