(function($) {
    $.cheat = function(code, options, callback){
        if($.isFunction(options)){
          callback = options;
          options = {};
        }
        callback = callback || function(){};
        
        options = jQuery.extend({
            timeout: 1000
        }, options);
        
        if(typeof code == "string"){
          var words = code.toLowerCase().split(/\s+/);
          code = $.map(words, function(word){
            return $.cheat.KEYS[word]
          })
        }        
        var key_accum = [];
        var match = options.watchFor;
        var lastKey;
 
        $(document).keyup(function(e){
            
            if(options.timeout){
              var now = new Date();
              lastKey = lastKey || now;
              if(now - lastKey > options.timeout){
                key_accum = [];
              }
              lastKey = now;
            }
            
            len = key_accum.push(e.keyCode ? e.keyCode : e.charCode);
            
            if(len > code.length) key_accum.shift();

            if (key_accum.join('-') == code.join('-'))
            {
                key_accum = [];
                lastKey = null;
                callback();
            }
        });
    }
    
  $.cheat.KEYS = {
     "backspace" : 8,
     "space" : 32,
     "tab" : 9,
     "enter" : 13,
     "shift" : 16,
     "ctrl" : 17,
     "alt" : 18,
     "pause" : 19,
     "break" : 19,
     "caps_lock" : 20,
     "escape" : 27,
     "page_up" : 33,
     "page_down" : 34,
     "end" : 35,
     "home" : 36,
     "left" : 37,
     "up" : 38,
     "right" : 39,
     "down" : 40,
     "insert" : 45,
     "delete" : 46,
     "0" : 48,
     "1" : 49,
     "2" : 50,
     "3" : 51,
     "4" : 52,
     "5" : 53,
     "6" : 54,
     "7" : 55,
     "8" : 56,
     "9" : 57,
     "a" : 65,
     "b" : 66,
     "c" : 67,
     "d" : 68,
     "e" : 69,
     "f" : 70,
     "g" : 71,
     "h" : 72,
     "i" : 73,
     "j" : 74,
     "k" : 75,
     "l" : 76,
     "m" : 77,
     "n" : 78,
     "o" : 79,
     "p" : 80,
     "q" : 81,
     "r" : 82,
     "s" : 83,
     "t" : 84,
     "u" : 85,
     "v" : 86,
     "w" : 87,
     "x" : 88,
     "y" : 89,
     "z" : 90,
     "f1" : 112,
     "f2" : 113,
     "f3" : 114,
     "f4" : 115,
     "f5" : 116,
     "f6" : 117,
     "f7" : 118,
     "f8" : 119,
     "f9" : 120,
     "f10" : 121,
     "f11" : 122,
     "f12" : 123,
     "num" : 144,
     "scroll" : 145,
     ";" : 186,
     "=" : 187,
     "," : 188,
     "-" : 189,
     "." : 190,
     "/" : 191,
     "`" : 192,
     "[" : 219,
     "\\" : 220,
     "]" : 221,
     "'" : 222
    }
  
})(jQuery);

$(function(){
  $.cheat("up up down down left right left right b a enter", function(){
    toggle_freakout();
  });
})