/* 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;
}



 if(!addresses) var addresses = new Array();
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 1100 105 6570 259 11546 104 6562 6995 3524 9199 6713 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644"); 
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 9046 9199 11477 10895 259 2939 5723 9199 6644 6644 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 9046 5635 10768 6562 259 104 5635 8973 6562 5723 6570 5635 6713 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 6570 105 5006 6562 259 8973 5635 6713 9046 3524 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644"); 
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 3524 9199 6570 259 5006 5723 5635 11477 11546 11546 6562 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 9046 6562 6713 6713 105 11546 259 8973 5635 6995 5006 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 6562 9046 259 2939 9199 5723 6713 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 9046 5635 11408 6713 259 6570 5635 2939 6562 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644"); 
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 6570 105 5006 6562 259 104 5635 6995 10768 6562 6713 11546 6995 6562 8973 6562 6713 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644"); 
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 6995 5635 5723 5723 3742 259 11546 11408 5635 6995 104 6562 105 6570 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644"); 
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 8973 9199 8973 259 2939 5635 5723 6995 11546 9199 6713 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644"); 
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 9046 5635 6713 259 9046 105 3297 9199 6713 3530 9199 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644"); 
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 6570 105 5006 6562 259 6562 6995 9046 6562 5723 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644"); 
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 9046 105 5635 6713 6562 259 104 5635 5723 8973 9199 5723 3524 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 3524 9199 6570 259 104 5635 3742 6713 6562 11546 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 11546 3524 11477 5635 5723 3524 259 11408 105 11546 6562 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 1100 9199 104 6713 259 8973 6995 5635 11546 5006 5635 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 1100 11477 6713 105 9199 5723 259 6570 5635 6713 3524 104 6562 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 1100 6562 5723 9199 6570 6562 259 9046 9199 104 6562 5723 3524 3742 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 5723 105 2939 5006 259 5635 11477 11546 3524 105 6713 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 1100 5635 6570 105 6562 259 9046 6562 5723 5723 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 1100 9199 104 6713 259 9046 9199 6562 5723 3297 6562 5723 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 1100 105 6570 259 3297 5635 104 6562 3742 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644"); 
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 6570 105 5006 6562 259 104 105 6713 3530 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 1100 9199 6713 259 6995 5635 6644 6562 5723 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 5723 5635 6713 9046 3742 259 6995 105 6713 5006 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 11546 2939 9199 3524 3524 259 3524 9199 11408 6713 11546 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644"); 
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 1100 5635 11546 9199 6713 259 5723 11477 11546 11546 6562 6995 6995 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644"); 
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 6644 5635 11477 6995 259 104 5635 9046 6995 6562 5723 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 11546 5635 5723 5635 259 104 6562 6713 9046 5723 105 2939 5006 11546 9199 6713 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 2939 5635 11546 11546 5635 6713 9046 5723 5635 259 6644 9199 9840 11477 6562 3524 3524 6562 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 9046 9199 11477 10895 259 6995 9199 10768 10895 5723 6562 6713 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 11546 3524 6562 11408 5635 5723 3524 259 5635 6713 104 5635 6995 3524 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 2939 104 5635 5723 6995 105 6562 259 104 5635 6995 6995 9840 11477 105 11546 3524 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 8973 5723 5635 9046 259 6570 11477 5723 5723 5635 3742 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 5006 105 6570 259 3297 6995 6562 6570 105 6713 10895 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 1100 9199 104 6713 259 8973 105 6713 10768 6562 5723 11546 105 6562 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644");  
addresses.push("11573 11551 6570 5635 105 6995 3524 9199 58 9046 5635 10768 6562 259 1100 6562 6713 6713 105 6713 10895 11546 8797 6995 5635 6713 9046 6570 5635 5723 5006 259 2939 9199 9199 6644"); 