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

var HIGH_SECURITY_MODE = true; // Enable this for high-security (non-deterministic) mode
// When false, the same input text will always generate the same key.
// When true, secure random keys are created.
//  VDC - be sure to enable this unless reproducability is desired

function generateKey() {
  var getElement = getElementCrossBrowser();
  var $textarea = getElement('user-input');
  var input = $textarea.value;

  if (input.length < 12) {
    // Invalid input - too short!
    updateResult('Please enter at least 12 characters for secure key generation');

  } else if (/[!\^&%$#@\*|\(\)-+=_]/.test(input) === false) {
    // Input invalid - no security characters
    updateResult('Please use at least one special characture to increase security');

  } else { // Input is valid - proceed

    if (HIGH_SECURITY_MODE) {
      // Create random seed every millisecond
      this.seed = +(new Date());
    }
    // Generate secure key
    var key = murmurhash_mgp_v2(input, this.seed);
    // Display key to user
    updateResult(key);
  }
}

// Updates result span
function updateResult(text) {
  var getElement = getElementCrossBrowser();
  var $result = getElement('result');
  $result.innerText = text;
}

// Use jQuery if needed (browsers are alllmost 'modern'!)
function getElementCrossBrowser() {

  // Compact feature / quirks detection
  //  http://stackoverflow.com/questions/10257810
  var hasJQueryIncluded = !!window.jQuery;
  var isModernBrowser, modernArrays, rAF, modernDom, m;
  try { // Test for modern browser features
    rAF = !!window.requestAnimationFrame;
    modernArrays = _=[!![]]+[![]]+{}+(1/(+!{}))+({})[{}];
    modernDom = !!(m = n=document,m._= !!history.pushState &&
      document.getElementById && document.createElement);
    isModernBrowser = modernArrays && modernDom || rAF;
  } catch (e) {}

  if (hasJQueryIncluded && !isModernBrowser) {
     // Not modern browser, use jQuery
    return window.$;
  } else {
     // Just use native dom method
   ...