/* EMAIL ENCRYPTION SCRIPT */

// This script is (c) copyright 2008 by Dan Appleman under the
// GNU General Public License (http://www.gnu.org/licenses/gpl.html)
// This script is modified from an original script by Jim Tucek
// For more information, visit www.danappleman.com 
// Leave the above comments alone!
// see encryption_instructions.txt for explanation of usage

var decryption_cache = new Array();

function decrypt_string(crypted_string,n,decryption_key,just_email_address) {
	var cache_index = "'"+crypted_string+","+just_email_address+"'";

	if(decryption_cache[cache_index])					// If this string has already been decrypted, just
		return decryption_cache[cache_index];				// return the cached version.

	if(addresses[crypted_string])						// Is crypted_string an index into the addresses array
		var crypted_string = addresses[crypted_string];			// or an actual string of numbers?

	if(!crypted_string.length)						// Make sure the string is actually a string
		return "Error, not a valid index.";

	if(n == 0 || decryption_key == 0) {					// If the decryption key and n are not passed to the
		var numbers = crypted_string.split(' ');			// function, assume they are stored as the first two
		n = numbers[0];	decryption_key = numbers[1];			// numbers in crypted string.
		numbers[0] = ""; numbers[1] = "";				// Remove them from the crypted string and continue
		crypted_string = numbers.join(" ").substr(2);
	}

	var decrypted_string = '';
	var crypted_characters = crypted_string.split(' ');

	for(var i in crypted_characters) {
		var current_character = crypted_characters[i];
		var decrypted_character = exponentialModulo(current_character,n,decryption_key);
		if(just_email_address && i < 7)				// Skip 'mailto:' part
			continue;
		if(just_email_address && decrypted_character == 63)	// Stop at '?subject=....'
			break;
		decrypted_string += String.fromCharCode(decrypted_character);
	}
		decryption_cache[cache_index] = decrypted_string;			// Cache this string for any future calls

	return decrypted_string;
}

function decrypt_and_email(crypted_string,n,decryption_key) {
	if(!n || !decryption_key) { n = 0; decryption_key = 0; }
	if(!crypted_string) crypted_string = 0;

	var decrypted_string = decrypt_string(crypted_string,n,decryption_key,false);
	parent.location = decrypted_string;
}

function decrypt_and_echo(crypted_string,n,decryption_key) {
	if(!n || !decryption_key) { n = 0; decryption_key = 0; }
	if(!crypted_string) crypted_string = 0;

	var decrypted_string = decrypt_string(crypted_string,n,decryption_key,true);
	document.write(decrypted_string);
	return true;
}

// Finds base^exponent % y for large values of (base^exponent)
function exponentialModulo(base,exponent,y) {
	if (y % 2 == 0) {
		answer = 1;
		for(var i = 1; i <= y/2; i++) {
			temp = (base*base) % exponent;
			answer = (temp*answer) % exponent;
		}
	} else {
		answer = base;
		for(var i = 1; i <= y/2; i++) {
			temp = (base*base) % exponent;
			answer = (temp*answer) % exponent;
		}
	}
	return answer;
}

// Remove the comments below to improve spam resistance! 
// email addresses: 

 if(!addresses) var addresses = new Array();
addresses.push("10403 10399 3270 5176 4217 938 2956 10393 3387 5176 4006 10393 7166 4393 10100 6898 10100 3270 10100 70 5176 938 3635 5176 70 4393 6902 3445 4393 10393 3270");  // [0] aboyce - at - emeraldarch.com
addresses.push("10403 10399 3270 5176 4217 938 2956 10393 3387 4006 4393 5176 70 10100 7166 6898 10100 3270 10100 70 5176 938 3635 5176 70 4393 6902 3445 4393 10393 3270");  // [1] bcarey - at - emeraldarch.com
addresses.push("10403 10399 3270 5176 4217 938 2956 10393 3387 3635 10393 6571 4217 1560 7828 2956 10393 1560 6898 10100 3270 10100 70 5176 938 3635 5176 70 4393 6902 3445 4393 10393 3270");  // [2] dovington - at - emeraldarch.com
addresses.push("10403 10399 3270 5176 4217 938 2956 10393 3387 7828 4393 5176 70 10100 7166 6898 10100 3270 10100 70 5176 938 3635 5176 70 4393 6902 3445 4393 10393 3270");  // [3] gcarey - at - emeraldarch.com
addresses.push("10403 10399 3270 5176 4217 938 2956 10393 3387 485 4393 5176 70 10100 7166 6898 10100 3270 10100 70 5176 938 3635 5176 70 4393 6902 3445 4393 10393 3270");  // [4] jcarey - at - emeraldarch.com
