/* 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("4321 4297 1077 3912 1893 504 1218 197 2262 1077 3912 1893 504 1218 197 2262 1077 1218 3912 3645 3645 3912 102 1218 2557 3645 1077 3912 1893 504 974 1955 197 1077");  // [0] mt - gm.com
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 1077 3912 1893 504 1218 197 2262 1077 3912 1218 1218 3120 3685 454 1218 3912 3645 2557 441 3912 3120 197 197 974 1955 197 1077");  // [1] mt - yh.com
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 1077 3912 1893 504 1218 197 2262 2199 3912 2199 1955 441 1218 3912 3645 2557 441 3912 3120 197 197 974 1955 197 1077");  // [2] :nt - yh.com
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 1077 3912 1893 504 1218 197 2262 2199 3912 2199 1955 441 2557 1077 197 1218 3120 3685 102 3120 197 197 2764 454 1893 1218 3120 197 1190 1218 1825 3685 3912 102 974 1955 197 1077");  // [3] n - mwf.com
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 1077 3912 1893 504 1218 197 2262 2199 3912 2199 1955 441 2557 1077 197 1218 3120 3685 102 3120 197 197 2764 454 1893 1218 3120 197 1190 1218 1825 3685 3912 102 974 2199 3685 1218");  // [4] n - mwf.net
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 1077 3912 1893 504 1218 197 2262 2199 3912 2199 1955 441 2557 1077 197 1218 3120 3685 102 3120 197 197 2764 454 1893 1218 3120 197 1190 1218 1825 3685 3912 102 974 197 102 3645");  // [5] n - mwf.org
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 1077 3912 1893 504 1218 197 2262 1077 3912 1218 1218 2557 1218 3912 3645 3645 3912 102 1218 1825 3912 1077 974 2199 3685 1218");  // [6] m - tf.net
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 1077 3912 1893 504 1218 197 2262 2199 3912 2199 1955 441 2557 1218 3912 3645 3645 3912 102 1218 1825 3912 1077 974 2199 3685 1218");  // [7] n - tf.net

addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 4266 3685 504 1893 666 666 3912 2557 1178 3685 504 504 441 1178 3685 3645 1893 2199 2199 1893 2199 3645 666 974 1955 197 1077");  // [8] Melissa - BB.com
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 2837 1744 324 1790 1852 500 2610 1652 1744 2610 2837 641 2478 1790 2399 2172 2478");  // [9] amy.l - comcast.net
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 1825 3685 504 1893 1955 1893 3912 974 804 504 1190 666 3120 2557 3645 1077 3912 1893 504 974 1955 197 1077");  // [10] felicia.blush - gm.com
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 1955 197 102 1218 2199 1893 1077 1190 504 504 1893 2199 2557 441 3912 3120 197 197 974 1955 197 1077");  // [11] cortnimullin - yh.com
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 2584 3912 3120 197 197 268 2557 3120 197 1218 1077 3912 1893 504 974 1955 197 1077");  // [12] jahoop - hm.com
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 1955 504 3912 102 1893 1955 3685 974 804 1190 102 1955 3120 2557 3645 1077 3912 1893 504 974 1955 197 1077");  // [13] clarice.burch - gm.com
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 2584 1190 2764 1893 1218 3120 2557 3120 197 504 1893 666 1218 1893 1955 804 1893 102 1218 3120 1893 2199 3645 974 1955 197 1077");  // [14] judith - hb.com
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 1077 3912 2193 2764 197 2764 3645 3685 2557 1077 666 2199 974 1955 197 1077");  // [15] ma_dodge - msn.com
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 1077 2199 2584 804 1190 102 804 3912 1955 3120 2557 3120 197 1218 1077 3912 1893 504 974 1955 197 1077");  // [16] mnjburbach - hm.com
addresses.push("4321 4297 1077 3912 1893 504 1218 197 2262 2764 3685 2199 2131 3685 102 2764 197 1190 504 3912 2557 3645 1077 3912 1893 504 974 1955 197 1077");  // [17] denverdoula - gm.com
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 563 365 135 2478 1718 456 1652 2297 135 2399 2172 324 365 2399 2645 1652 500 1539 1744 2837 365 1852 1790 2610 1652 1744");  // [18] birthjourneyinfo - gm.com
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 1671 135 2837 1718 500 2610 1652 1744 2610 2837 641 2478 1790 2399 2172 2478");  // [19] drah - comcast.net
