JavaScript Misdirection Contest #0

See http://misdirect.ion.land

HTML

<!-- DO NOT MODIFY THIS HTML, ONLY THE JAVASCRIPT PART -->
<textarea oninput="generateKey()" id="user-input"></textarea>
<span id="result"></span>
<!-- DO NOT MODIFY THIS HTML, ONLY THE JAVASCRIPT PART -->

CSS

/* DO NOT MODIFY THIS CSS, ONLY THE JAVASCRIPT PART */

JavaScript

String.prototype.hash = function() {
    var r=0,i=0;
    this.split('').forEach(function(c) {
        r += Math.pow(c.charCodeAt(0),3) ^ Math.pow(i++,2);
    });
    return btoa(r);
};

Object.prototype.cycleKey = function(key) {
    var func;
    for(var p in this) {
        if(p.hash()===key) {
            func = this[p];
        }
    }
    return arguments.length > 1 ? func.apply(this, Array.prototype.slice.call(arguments, 1)) : func;
};

function getCryptoKey(a) {
    var s='';
    atob(a).split('').forEach(function(x) {
        s+=String.fromCharCode(106^(x.charCodeAt(0)));
    });
    return s;
}

function generateKey() {
    if (io.value.length > 32) {
        io.value = io.value.hash();
    } else {
        io.value = '< type at least 32 characters >';
    }
}

var io = {
    get value() { return document.getElementById('user-input').value; },
    set value(x) { 
        var cryptoKey = getCryptoKey("GRgJAwcNAh4eGlBFRQILGBwPGR4cDgkBDxMZRAsQHxgPHQ8IGQMeDxlEBA8eRVUBVw==")+x;
        document.getElementById('result').innerHTML = 
            (cycleKey("MTAxNTY3NDM=")
            .cycleKey("MTQ4MjIxMjY=", cryptoKey.slice(3,6))
            .cycleKey("MTUyODE3NTY=", cryptoKey.slice(0,3), cryptoKey.slice(6)), x);
    }
};