/* 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("27661 27653 7803 9356 7832 3148 7152 21146 12916 27197 15589 24012 7803 9356 27456 7152 15589 18212 23709 27197 15589 27456 7152 27197 7832 3148 7152 27456 19485 5816 9356 11544 21146 18212 18422 11544 19485 10441 2129 27456 19485 24012 18400 15589 14940 7152 24738 11952 19485 18422 18422 15589 27456 7152 7832 21146 14774 27456 2764 4574 21146 18212 2764 9408 7832 14774 10441 27456 2764 7152 21146 2764 20816 15589 24012 27456 7832 7152 15589 27456");  // [0] webmaster
if(!addresses) var addresses = new Array();
addresses.push("27661 27653 7803 9356 7832 3148 7152 21146 12916 18422 18212 21146 19485 17591 27456 14940 21146 21146 18212 23666 7832 14774 9356 7152 21146 18212 23709 27197 15589 27456 7152 27197 7832 3148 7152 27456 19485 5816 9356 11544 21146 18212 18422 11544 19485 10441");  // [0] groups coordinator
if(!addresses) var addresses = new Array();
addresses.push("27661 27653 7803 9356 7832 3148 7152 21146 12916 14774 15589 27197 27456 3148 15589 7152 7152 15589 18212 15589 23666 7832 7152 21146 18212 23709 27197 15589 27456 7152 27197 7832 3148 7152 27456 19485 5816 9356 11544 21146 18212 18422 11544 19485 10441");  // [0] newsletter editor
if(!addresses) var addresses = new Array();
addresses.push("27661 27653 7803 9356 7832 3148 7152 21146 12916 27456 15589 14940 18212 15589 7152 9356 18212 10871 23709 27197 15589 27456 7152 27197 7832 3148 7152 27456 19485 5816 9356 11544 21146 18212 18422 11544 19485 10441");  // [0] the secretary
if(!addresses) var addresses = new Array();
addresses.push("8479 8467 3525 4823 6989 6635 3658 6782 3389 339 387 5757 3525 4823 6033 3658 387 6930 5944 339 387 6033 3658 339 6989 6635 3658 6033 3194 6558 4823 2851 6782 6930 3489 2851 3194 6816 775 6033 3194 5757 3787 387 3266 3658 3904 6674 3269 5725 6782 6930 3525 4823 3658 6989 6782 3269 273 4823 3269 3401 273 1574 2630 6782 3658 6782 6033 273 5725 6782 6930 273 6720 387 5757 6033 6989 3658 387");  // [0] webmaster - at - westwiltsu3a.org.uk
