/* 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("2021 2017 1313 1258 19 538 1535 1358 1993 1181 1358 1824 1615 46 1276 1258 762 1615 1820 918 673 1276 1358 1615 1311 1824 918 1583 46 1615 1824 1276 46 762 1010");  // [0] john saunderson - at - hey
addresses.push("2021 2017 1313 1258 19 538 1535 1358 1993 1258 1615 1820 673 918 721 46 1820 1258 1494 19 1276 1311 1824 918 1583 46 1615 1824 1276 46 762 1010");  // [1] andrew davis - at - hey
addresses.push("2021 2017 1313 1258 19 538 1535 1358 1993 701 673 1258 19 920 46 1313 1358 1358 673 918 1311 1824 918 1583 46 1615 1824 1276 46 762 1010");  // [2] craig moore - at - hey
addresses.push("2021 2017 1313 1258 19 538 1535 1358 1993 1820 1258 1494 19 1820 46 1276 1535 673 1258 19 1615 1311 1824 918 1583 46 1615 1824 1276 46 762 1010");  // [3] david.strain - at - hey
addresses.push("2021 2017 1313 1258 19 538 1535 1358 1993 1535 19 1313 46 721 1358 1358 1820 1311 1824 918 1583 46 1615 1824 1276 46 762 1010");  // [4] tim wood - at - hey
addresses.push("2021 2017 1313 1258 19 538 1535 1358 1993 920 1258 673 1583 46 538 19 1615 918 1583 1311 1824 918 1583 46 1615 1824 1276 46 762 1010");  // [5] gary liney - at - hey
