/* 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("32437 32429 9962 26460 13914 2085 555 11368 26510 6098 26460 28919 2085 26460 9962 26460 30561 23780 31203 2085 2085 13852 30962 2085 13914 23780 31203 19981 26577 11368 9962 8222 2955 28919 18945 21385 31203 26577 555 18170 15198 11368 28919 30561 28603 26460 2085 264 2955 28919 18945 2955 26577 30561 13914 6098 555 13914 11368 28603 22451 264 28603 11368 555 13914 10355 13914 26577 26460 555 13914 11368 28603 264 11368 10355 264 28603 31203 7704 264 31203 2955 2955 26460 13852 2955 22451 264 7704 31203 18945 2955 13914 555 31203 264 6098 30561 11368 18945 2085 31203 9962 264 31966 264 6098 2085 31203 26460 2955 31203 264 2955 6098 31203 26577 13914 10355 13852 264");  // [0] paulamarvelly - at - live.com


if(!addresses) var addresses = new Array();
addresses.push("4853 4831 2219 3051 949 4328 116 2643 1113 4122 3051 2440 2211 2841 1963 3051 1577 2017 3051 949 116 3051 46 2643 114 3901 46 961 3483 2173 115 961 2841 2849 2211 732 116 3437 1136 961 2211 115 116 949 2643 2009 2142 2643 2009 2142 2597 1577 2017 3051 949 116 3051");  // [1] qaweb - at - advaita.org.uk
