/* 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("4847 4831 4751 3603 2374 4225 4834 2183 2285 3408 2580 4225 1111 3024 2580 3603 3434 4834 3408 2626 2580 4834 493 2626 2580 4834 1765 743 845 4200 4083 2580 3314 4834 1240 2434 2580 762 845 2580 743 4834 1271 1468 3434 2183 4751 1271 1720 2580 4200 743 2374 4834 2580");  // [0] help

if(!addresses) var addresses = new Array();
addresses.push("19549 19543 8616 11533 8037 17922 7307 2429 11563 15948 8037 17922 17922 8037 19022 18905 2456 3908 11533 18985 7307 8726 19022 3908 7307 15395 19022 3908 7307 19384 15425 6865 15948 12898 3908 8709 7307 14075 8639 3908 18532 6865 3908 15425 7307 11918 2188 18985 2429 8616 11918 18658 3908 15948 15425 8037 7307 3908");  // [1] billing

if(!addresses) var addresses = new Array();
addresses.push("7067 7057 1959 5425 6173 6731 1485 4995 1945 5739 5425 6731 2765 5739 4097 2765 5425 262 1485 5136 4069 2765 1485 4856 4069 2765 1485 5983 5739 6000 6388 2918 2765 5131 1485 1763 5299 2765 4516 6000 2765 5739 1485 3177 583 262 4995 1959 3177 2122 2765 6388 5739 6173 1485 2765");  // [2] sales

if(!addresses) var addresses = new Array();
addresses.push("21583 21577 17621 13850 11189 7551 820 12398 7300 11189 20198 20027 12398 7010 362 13850 679 820 11928 20198 362 820 10515 20198 362 820 16693 16078 2719 9477 2290 362 12147 820 17792 8737 362 6667 2719 362 16078 820 1342 20027 679 12398 17621 1342 8127 362 9477 16078 11189 820 362");  // [3] info


