/*
 * JavaScript ASCII Converter
 *
 * do whatever you want with this.
 *
 * usage:
 *		writeAddr('example', 'bob', 'com');
 *
 * will export this (in html):
 *		<a href="mailto:bob@example.com">bob@example.com</a>
 *
 * ACM DESIGNS 2006
 */

var charArray = new Array(
	' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-',
	'.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';',
	'<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
	'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
	'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e',
	'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
	't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '', 'Ç', 'ü',
	'é', 'â', 'ä', 'à', 'å', 'ç', 'ê', 'ë', 'è', 'ï', 'î', 'ì', 'Ä', 'Å',
	'É', 'æ', 'Æ', 'ô', 'ö', 'ò', 'û', 'ù', 'ÿ', 'Ö', 'Ü', 'ø', '£', 'Ø',
	'×', 'ƒ', 'á', 'í', 'ó', 'ú', 'ñ', 'Ñ', 'ª', 'º', '¿', '®', '¬', '½',
	'¼', '¡', '«', '»', '_', '_', '_', '¦', '¦', 'Á', 'Â', 'À', '©', '¦',
	'¦', '+', '+', '¢', '¥', '+', '+', '-', '-', '+', '-', '+', 'ã', 'Ã',
	'+', '+', '-', '-', '¦', '-', '+', '¤', 'ð', 'Ð', 'Ê', 'Ë', 'È', 'i',
	'Í', 'Î', 'Ï', '+', '+', '_', '_', '¦', 'Ì', '_', 'Ó', 'ß', 'Ô', 'Ò',
	'õ', 'Õ', 'µ', 'þ', 'Þ', 'Ú', 'Û', 'Ù', 'ý', 'Ý', '¯', '´', '­', '±',
	'_', '¾', '¶', '§', '÷', '¸', '°', '¨', '·', '¹', '³', '²', '_', ' ');

var hex_digits = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
		'A', 'B', 'C', 'D', 'E', 'F');


function charToByte(c)
{
	var i;
	for(i=0; i < charArray.length; i++) {
		if(c == charArray[i]) return i+32;
	}
	return 0;
}

function byteToHex(n)
{
	return hex_digits[(n >> 4) & 0xf] + hex_digits[n & 0xf];
}

function isNothing(str)
{
	if(str == "") {
		return false;
	} else {
		return true;
	}
}

function hex_from_chars(stringValue)
{

	var char_str = stringValue;
	var hex_str = new Array();
	var nEml;
	var i, n;
	
	for(i=0; i < char_str.length; i++) {
		n = charToByte(char_str.charAt(i));
		if(n != 0) {
			hex_str[i] = byteToHex(n);
		}
	}
	
	nEml = "";
	for(i=0; i < hex_str.length; i++) {
		nEml += "&#x"+ hex_str[i] + ";"; // name
	}

	return nEml;
}

function writeAddr(domain, name, extension, link_text)
{

	var dm, nm, ex, tx;
	var at = "&#x" + "40" + ";"; // (at) symbol
	var dt = "&#x" + "2E" + ";"; // (dot)
	
	dm = hex_from_chars(domain);
	nm = hex_from_chars(name);
	ex = hex_from_chars(extension);
	
	document.write('<a href=\"&#x6D;&#x61;&#x69;&#x6C;&#x74;&#x6F;&#x3A;');	// start link tag
	document.write(nm + at + dm + dt + ex); // eml addr
	document.write('\">');
	
	if(link_text != null) { // if user entered link text
		tx = hex_from_chars(link_text);
		document.write(tx);
	} else { // if user didn't enter link text, link text becomes the email address
		document.write(nm + at + dm + dt + ex);
	}
	
	document.write('</a>'); // close link tag
}