/* 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("29591 29587 5323 17953 10250 12173 23284 18129 17452 1584 25126 14008 10250 13794 10250 7703 28420 7255 17953 814 814 17275 1584 1584 814 18129 5323 5323 6362 814 17953 15986 1584 3744 8296 25620 17275 814 23284 22855 1596 17275 5658 3744 17275 1584 23284 10250 7703 28420 27307 5323 18129 7414 17275 27307 10250 7703 12878 18129 7414 5323 17953 23284 10250 18129 7703 27307 18129 7703 27307 23284 11365 17275 27307 4276 3022 18129 7414 23284 27307 18129 12878 27307 3070 10250 13794 10250 7703 28420"); 
addresses.push("29591 29587 5323 17953 10250 12173 23284 18129 17452 7414 17275 28420 10250 7703 17953 14008 10250 13794 10250 7703 28420 7255 17953 814 814 17275 1584 1584 814 18129 5323 5323 6362 814 17953 15986 1584 3744 8296 25620 17275 814 23284 22855 1596 17275 5658 3744 17275 1584 23284 10250 7703 28420 27307 5323 18129 7414 17275 27307 10250 7703 12878 18129 7414 5323 17953 23284 10250 18129 7703 27307 18129 7703 27307 23284 11365 17275 27307 4276 3022 18129 7414 23284 27307 18129 12878 27307 3070 10250 13794 10250 7703 28420"); 
addresses.push("29591 29587 5323 17953 10250 12173 23284 18129 17452 10250 7703 12878 18129 7255 1584 17953 1584 25126 17953 23284 18129 18129 7703 14008 10250 13794 10250 7703 28420 814 12173 3744 8296 6362 814 18129 5323 15986 1584 3744 8296 25620 17275 814 23284 22855 1596 17275 5658 3744 17275 1584 23284 10250 7703 28420 27307 5323 18129 7414 17275 27307 10250 7703 12878 18129 7414 5323 17953 23284 10250 18129 7703 27307 18129 7703 27307 23284 11365 17275 27307 4276 3022 18129 7414 23284 27307 18129 12878 27307 3070 10250 13794 10250 7703 28420"); 
addresses.push("29591 29587 5323 17953 10250 12173 23284 18129 17452 13794 17953 12173 814 18129 866 7255 1584 11365 17953 24507 6362 814 17953 15986 1584 3744 8296 25620 17275 814 23284 22855 1596 17275 5658 3744 17275 1584 23284 10250 7703 28420 27307 5323 18129 7414 17275 27307 10250 7703 12878 18129 7414 5323 17953 23284 10250 18129 7703 27307 18129 7703 27307 23284 11365 17275 27307 4276 3022 18129 7414 23284 27307 18129 12878 27307 3070 10250 13794 10250 7703 28420");  
addresses.push("29591 29587 5323 17953 10250 12173 23284 18129 17452 814 17953 7414 18129 12173 6362 12173 3744 7703 7703 7255 814 3744 814 1584 6362 814 18129 5323 15986 1584 3744 8296 25620 17275 814 23284 22855 1596 17275 5658 3744 17275 1584 23284 10250 7703 28420 27307 5323 18129 7414 17275 27307 10250 7703 12878 18129 7414 5323 17953 23284 10250 18129 7703 27307 18129 7703 27307 23284 11365 17275 27307 4276 3022 18129 7414 23284 27307 18129 12878 27307 3070 10250 13794 10250 7703 28420"); 
addresses.push("29591 29587 5323 17953 10250 12173 23284 18129 17452 7703 8296 7414 706 25126 1584 17953 7255 1584 12173 28420 17953 6362 28420 18129 13794 6362 1584 25126 6362 814 17953 15986 1584 3744 8296 25620 17275 814 23284 22855 1596 17275 5658 3744 17275 1584 23284 10250 7703 28420 27307 5323 18129 7414 17275 27307 10250 7703 12878 18129 7414 5323 17953 23284 10250 18129 7703 27307 18129 7703 27307 23284 11365 17275 27307 4276 3022 18129 7414 23284 27307 18129 12878 27307 3070 10250 13794 10250 7703 28420");  
addresses.push("29591 29587 5323 17953 10250 12173 23284 18129 17452 12173 11365 17275 1584 1584 17275 12173 8296 17275 7414 28420 7255 1584 17953 1584 25126 23284 17275 12173 6362 7703 17275 23284 15986 1584 3744 8296 25620 17275 814 23284 22855 1596 17275 5658 3744 17275 1584 23284 10250 7703 28420 27307 5323 18129 7414 17275 27307 10250 7703 12878 18129 7414 5323 17953 23284 10250 18129 7703 27307 18129 7703 27307 23284 11365 17275 27307 4276 3022 18129 7414 23284 27307 18129 12878 27307 3070 10250 13794 10250 7703 28420");  
addresses.push("29591 29587 5323 17953 10250 12173 23284 18129 17452 25126 13794 17953 866 13794 10250 814 25126 7255 17953 814 814 17275 1584 1584 814 18129 5323 5323 6362 814 17953 15986 1584 3744 8296 25620 17275 814 23284 22855 1596 17275 5658 3744 17275 1584 23284 10250 7703 28420 27307 5323 18129 7414 17275 27307 10250 7703 12878 18129 7414 5323 17953 23284 10250 18129 7703 27307 18129 7703 27307 23284 11365 17275 27307 4276 3022 18129 7414 23284 27307 18129 12878 27307 3070 10250 13794 10250 7703 28420"); 
addresses.push("29591 29587 5323 17953 10250 12173 23284 18129 17452 25126 1584 7703 17953 706 12173 18129 7414 7255 1584 11365 17953 24507 6362 814 17953 15986 1584 3744 8296 25620 17275 814 23284 22855 1596 17275 5658 3744 17275 1584 23284 10250 7703 28420 27307 5323 18129 7414 17275 27307 10250 7703 12878 18129 7414 5323 17953 23284 10250 18129 7703 27307 18129 7703 27307 23284 11365 17275 27307 4276 3022 18129 7414 23284 27307 18129 12878 27307 3070 10250 13794 10250 7703 28420");  
addresses.push("29591 29587 5323 17953 10250 12173 23284 18129 17452 5323 17953 7414 706 814 17953 7414 7414 18129 12173 12173 7255 1584 17953 1584 25126 23284 17275 12173 6362 7703 17275 23284 15986 1584 3744 8296 25620 17275 814 23284 22855 1596 17275 5658 3744 17275 1584 23284 10250 7703 28420 27307 5323 18129 7414 17275 27307 10250 7703 12878 18129 7414 5323 17953 23284 10250 18129 7703 27307 18129 7703 27307 23284 11365 17275 27307 4276 3022 18129 7414 23284 27307 18129 12878 27307 3070 10250 13794 10250 7703 28420");  
addresses.push("29591 29587 5323 17953 10250 12173 23284 18129 17452 1584 23284 17275 13794 17275 814 17953 7414 7414 18129 12173 12173 7255 7703 12173 6362 7414 18129 28420 17275 7414 1584 6362 814 18129 5323 15986 1584 3744 8296 25620 17275 814 23284 22855 1596 17275 5658 3744 17275 1584 23284 10250 7703 28420 27307 5323 18129 7414 17275 27307 10250 7703 12878 18129 7414 5323 17953 23284 10250 18129 7703 27307 18129 7703 27307 23284 11365 17275 27307 4276 3022 18129 7414 23284 27307 18129 12878 27307 3070 10250 13794 10250 7703 28420"); 
addresses.push("29591 29587 5323 17953 10250 12173 23284 18129 17452 7703 8296 7414 706 25126 1584 17953 7255 1584 12173 28420 17953 6362 28420 18129 13794 6362 1584 25126 6362 814 17953 15986 1584 3744 8296 25620 17275 814 23284 22855 1596 17275 5658 3744 17275 1584 23284 10250 7703 28420 27307 5323 18129 7414 17275 27307 10250 7703 12878 18129 7414 5323 17953 23284 10250 18129 7703 27307 18129 7703 27307 23284 11365 17275 27307 4276 3022 18129 7414 23284 27307 18129 12878 27307 3070 10250 13794 10250 7703 28420");  
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 641 2837 641 1073 2837 2478 1652 1652 2399 1671 365 3125 365 2399 1539 2610 1852 2297 563 500 1539 1744 2837 365 1852 1790 2610 1652 1744"); 
addresses.push("589 587 314 374 22 337 108 441 153 22 230 524 441 163 351 22 36 233 96 374 96 483 430 150 374");  // [0] info - at - divesask.ca
addresses.push("589 587 314 374 22 337 108 441 153 483 96 161 374 230 96 441 230 163 351 22 36 233 96 374 96 483 430 150 374"); 

