// This script is (c) copyright 2006 Jim Tucek under the
// GNU General Public License (http://www.gnu.org/licenses/gpl.html)
// For more information, visit www.jracademy.com/~jtucek/email/ 
// Leave the above comments alone!


if(!addresses) var addresses = new Array();
addresses.push("11573 1031 6822 2039 6416 8565 8753 6693 4994 6416 9253 9921 6693 5933 2039 3755 8753 7842 4015 6693 9253 8565 6416 9253 7842 8708 6693 10236 2604");
addresses.push("11573 1031 6822 2039 6416 8565 8753 6693 4994 8753 6416 9715 11276 7842 8753 3755 5933 2039 3755 8753 7842 4015 6693 9253 8565 6416 9253 7842 8708 6693 10236 2604");
addresses.push("11573 1031 6822 2039 6416 8565 8753 6693 4994 532 6693 8565 3028 9253 8753 7842 7842 10236 5933 2039 3755 8753 7842 4015 6693 9253 8565 6416 9253 7842 8708 6693 10236 2604");
addresses.push("11573 1031 6822 2039 6416 8565 8753 6693 4994 7842 532 7842 9253 8753 3755 5933 2039 3755 8753 7842 4015 6693 9253 8565 6416 9253 7842 8708 6693 10236 2604");
addresses.push("11573 1031 6822 2039 6416 8565 8753 6693 4994 6078 6693 9253 2039 8753 6416 6693 9253 3755 5933 2039 3755 8753 7842 4015 6693 9253 8565 6416 9253 7842 8708 6693 10236 2604");
addresses.push("11573 1031 6822 2039 6416 8565 8753 6693 4994 6822 2039 6416 8565 6416 9253 2604 8565 6416 3755 8753 5933 2039 3755 8753 7842 4015 6693 9253 8565 6416 9253 7842 8708 6693 10236 2604");

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;
}


// -->