Word scrambler

Keeps first and last character in a word but randomises the ones in the middle.

by SHELDON PASCIAK

HTML

<div id="output">TRUMP LOVES STORMY DANIELS AND KAREN MCDOUGAL - KANYE FOR PRESIDENT</div>
<div></div>

JavaScript

// The Fisher-Yates shuffle  - See http://stackoverflow.com/a/3943985/203371
String.prototype.shuffle = function () {
    var a = this.split(""),
        n = a.length;

    for (var i = n - 1; i > 0; i--) {
        var j = Math.floor(Math.random() * (i + 1));
        var tmp = a[i];
        a[i] = a[j];
        a[j] = tmp;
    }
    return a.join("");
};

var shufflePreserveFirstLast = function (input) {
    if (input.length > 2) {
        var firstCharacter = input[0];
        var lastCharacter = input[input.length - 1];

        var internalCharacters = input.substring(1, input.length - 1);

        return firstCharacter + internalCharacters.shuffle() + lastCharacter;
    } else {
        return input;
    }
};

function GetScrambledText(text){    
    var tokenisedString = text.split(" ");
    var shuffledOutput = "";
    
    $.each(tokenisedString, function (key, value) {
        shuffledOutput += shufflePreserveFirstLast(value) + " ";
    });
    
    return shuffledOutput;
}

function recursiveReplace(node) {
    if (node.nodeType == 3) { // text node
        node.nodeValue = node.nodeValue.replace(node.nodeValue, GetScrambledText(node.nodeValue));
    } else if (node.nodeType == 1) { // element
        $(node).contents().each(function () {
            recursiveReplace(this);
        });
    }
}

recursiveReplace(document.body);