﻿/* 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("6157 6151 6103 119 2851 1716 1806 4421 5953 6103 119 3880 885 9 1806 2851 3886 1988 1084 3742 5328 5315 3880 4421 4539 2851 554 885 4421 2551 1716 119 5315 9 885 2161 5975 1716 4081");  // [0] market ing
addresses.push("6157 6151 6103 119 2851 1716 1806 4421 5953 3880 9 5328 9 3880 4539 119 5745 2486 119 1084 3742 5328 5315 3880 4421 4539 2851 554 885 4421 2551 1716 119 5315 9 885 2161 5975 1716 4081");  // [1] rezerwa cja
addresses.push("6157 6151 6103 119 2851 1716 1806 4421 5953 5745 4421 885 1084 3742 5328 5315 3880 4421 4539 2851 554 885 4421 2551 1716 119 5315 9 885 2161 5975 1716 4081");  // [2] cok
addresses.push("6157 6151 6103 119 2851 1716 1806 4421 5953 5315 1716 3742 1988 4421 5975 4421 1716 9 1084 3742 5328 5315 3880 4421 4539 2851 554 885 4421 2551 1716 119 5315 9 885 2161 5975 1716 4081");  // [3] dlugopo le
addresses.push("6157 6151 6103 119 2851 1716 1806 4421 5953 554 9 885 3880 9 1806 119 3880 2851 119 1806 1084 3742 5328 5315 3880 4421 4539 2851 554 885 4421 2551 1716 119 5315 9 885 2161 5975 1716 4081");  // [4] sekretar iat
addresses.push("6157 6151 6103 119 2851 1716 1806 4421 5953 2851 3886 3208 4421 3880 6103 119 5745 2486 119 1084 3742 5328 5315 3880 4421 4539 2851 554 885 4421 2551 1716 119 5315 9 885 2161 5975 1716 4081");  // [5] informac ja
addresses.push("6157 6151 6103 119 2851 1716 1806 4421 5953 2851 3886 3208 4421 3880 6103 119 5745 2486 119 2161 2486 9 3880 5328 4251 1084 3742 5328 5315 3880 4421 4539 2851 554 885 4421 2551 1716 119 5315 9 885 2161 5975 1716 4081");  // [6] informacja je rzy
addresses.push("6157 6151 6103 119 2851 1716 1806 4421 5953 3880 9 5745 9 5975 5745 2486 119 1084 3742 5328 5315 3880 4421 4539 2851 554 885 4421 2551 1716 119 5315 9 885 2161 5975 1716");  // [7] recep cja

