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])					
		return decryption_cache[cache_index];				

	if(addresses[crypted_string])						
		var crypted_string = addresses[crypted_string];			

	if(!crypted_string.length)						
		return "Error, not a valid index.";

	if(n == 0 || decryption_key == 0) {					
		var numbers = crypted_string.split(' ');			
		n = numbers[0];	decryption_key = numbers[1];			
		numbers[0] = ""; numbers[1] = "";				
		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)				
			continue;
		if(just_email_address && decrypted_character == 63)	
			break;
		decrypted_string += String.fromCharCode(decrypted_character);
	}
		decryption_cache[cache_index] = decrypted_string;			

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


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



 if(!addresses) var addresses = new Array();
addresses.push("33227 33223 4372 13400 27013 14491 9356 13089 24073 10800 13089 25100 9356 13400 10800 9356 8307 13400 21942 10800 10366 27013 9356 10366 24393 8701 24393 1855 10800 13089 4372 13804 8701 32723 9374 32616 24393 10800 9356 10208 21942 24393 25100 8701 24393 27013 15578 25100 24393 4372 24393 25100 9356 8701"); 

