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

// Ledengegevens 
if(!addresses) var addresses = new Array();
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 365 2399 2645 1652 500 1744 1652 3125 2172 1852 2172 1652 1790 563 2172 63 641 2297 563 456 2172 2610 2478 867 3247 1652 3125 2172 1852 2172 1652 1985 987 2172 563 641 365 2478 2172");  // [0] Info
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 2837 2399 1671 135 2172 1790 2478 2172 2487 2487 2172 135 641 500 2487 2837 2399 1671 1652 135 2837 1790 563 2172");  // [1] André T
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 987 365 2478 2478 2172 135 641 456 1652 1718 2837 2399 500 641 2610 2837 135 1852 2172 2478 1790 563 2172");  // [2] Johan W
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 2610 1718 2837 135 1852 2172 641 1790 1718 2297 324 641 1744 2837 2399 641 500 2487 2837 2399 1671 1652 135 2837 1790 563 2172");  // [3] Karel H
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 1744 2837 135 365 1652 1790 2172 2172 2399 641 500 641 2610 2837 135 1852 2172 2478 1790 563 2172");  // [4] Mario E
addresses.push("33499 33493 28610 6630 13281 8197 21046 21564 2250 29753 30706 6630 24565 24565 15285 15285 32840 10011 29753 6630 18837 8197 15285 21046 276 29848 15285");  // [5] Michel VDR
addresses.push("33499 33493 28610 6630 13281 8197 21046 21564 2250 24565 5824 276 10011 13281 28610 21564 24279 10011 32840 8197 22051 29753 21564 10011 276 24279 8197");  // [6] Frank-Jan S
addresses.push("33499 33493 28610 6630 13281 8197 21046 21564 2250 6630 24279 21046 21564 13281 24279 15285 21046 21046 15285 12425 6630 24279 1470 15285 18837 8197 6630 6630 33168 32840 30706 15285 21046 24279 15285 21046 276 24279 8197");  // [7] Antoinette VDL
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 2297 641 2172 135 1464 2560 2757 500 2033 2172 2478 1790 563 2172");  // [8] Chris T
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 1539 2297 365 1671 1652 1790 1671 2172 563 1652 2172 2610 1073 500 1718 1652 2478 1744 2837 365 1852 1790 2610 1652 1744");  // [9] Guido D
addresses.push("2257 2251 2000 2049 2152 108 2141 2146 58 1448 2146 122 1729 102 46 107 2049 110 2152 1729 1583 1410 107 2152 64 2141 1729 108 1729 110 1729 2141 46 2159 1729"); // [10] Antoinette G / Jozef K
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 1073 2172 2478 456 2172 641 563 2837 678 2837 2837 135 500 2478 2172 1852 2172 2399 2172 2478 1790 563 2172");  // [11] David M
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 1671 2172 2399 2019 1671 2297 2610 1073 324 500 1718 1652 2478 1744 2837 365 1852 1790 2610 1652 1744");  // [12] Ducky
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 1671 2172 2399 456 2297 3125 2172 500 2478 2172 1852 2172 2399 2172 2478 1790 563 2172");  // [13] Eric J
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 1852 2297 2610 1790 3125 2837 2399 1790 2172 135 1652 1744 500 2478 2172 1852 2172 2399 2172 2478 1790 563 2172");  // [14] Luc V
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 3125 2837 2399 641 987 2172 2172 456 500 1718 1652 2478 1744 2837 365 1852 1790 2610 1652 1744");  // [15] Jan V
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 135 1652 2172 1852 1539 2172 2297 2478 456 2172 2399 641 500 1718 1652 2478 1744 2837 365 1852 1790 2610 1652 1744");  // [16] Roel G
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 456 1652 641 563 2837 2297 987 2172 2399 641 500 1718 1652 2478 1744 2837 365 1852 1790 2610 1652 1744");  // [17] Jos B
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 2487 2172 2478 2172 135 1790 3125 2297 2172 1539 2172 2399 500 2487 2837 2399 1671 1652 135 2837 1790 563 2172");  // [18] Peter V
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 456 2297 135 1539 2172 2399 1539 2172 2297 2399 641 500 2478 2172 1852 2172 2399 2172 2478 1790 563 2172");  // [19] Jurgen G
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 1671 2172 2399 641 1790 2487 2837 2478 135 365 1073 500 1852 365 3125 2172 1790 563 2172");  // [20] Patrik D
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 1744 2172 135 2610 365 2172 135 1790 1744 2837 135 2610 1790 1464 500 1539 1744 2837 365 1852 1790 2610 1652 1744");  // [21] Mercier M
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 2478 365 1744 641 2837 2399 2478 2172 135 1744 2837 2399 641 500 1718 1652 2478 1744 2837 365 1852 1790 2610 1652 1744");  // [22] Tim S
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 2487 1852 2172 2172 641 1790 1852 2297 2610 365 2172 2399 500 563 2837 641 2172 1790 563 2172");  // [23] Lucien P
addresses.push("3379 3373 1744 2837 365 1852 2478 1652 1255 456 2172 2399 641 1790 3125 2837 1852 1073 2172 2399 2172 2172 135 641 500 641 1073 324 2399 2172 2478 1790 563 2172");  // [24] Jens V
