Detectar série de combinação de teclas com Javascript

Para o feriado de Páscoa, eu estou querendo ter uma pequena surpresa "Easter Egg Hunt" em um site que eu desenvolvo para. Dois destes cincoOvos de Páscoa Estou me escondendo será keypress ordenado. Isso não será como um tipo de negociação "Pressione CTRL e TAB ao mesmo tempo", mas será um tipo de coisa "Pres UP três vezes e depois RIGHT três vezes". Isso estará procurando uma série de pressionamentos de tecla em vez de apenas dois pressionados de uma vez. Eu tenho essa função configurada, mas por alguma razão estranha, não está funcionando como deveria.

NOTA: O script abaixo está procurando os seguintes arquivos:
surprise1 - ESQUERDA (x3), DIREITA (x3), UP (x3), DOWN (x3)
surprise2 - SHIFT (x3), TAB (x3), CTRL (x3)

<code>$(document.body).keydown(function(e) {
            surprise1(e);
            surprise2(e);
});

function surprise1(e) {
    var ev = (e) ? e : window.event;
    var k = ev.keyCode;
    if (k > 36 && k < 41) {
        typekeys[k] = isNaN(typekeys[k]) ? 0 : typekeys[k];
        typekeys[k]++;
        if (typekeys[37] == 3) {
            if (typekeys[37] == 3 && typekeys[39] == 3) {
                if (typekeys[37] == 3 && typekeys[39] == 3 && typekeys[38] == 3) {
                    if (typekeys[37] == 3 && typekeys[39] == 3 && typekeys[38] == 3 && typekeys[40] == 3) {
                        alert("You've found Surprise 1! Contact the site admin ASAP to get your prize!");
                        typekeys[37] = typekeys[39] = typekeys[38] = typekeys[40] = 0;
                    }
                } else {
                    typekeys[40] = 0;
                }
            } else {
                typekeys[38] = typekeys[40] = 0;
            }
        } else {
            if (typekeys[37] > 3) {
                typekeys[37] = 0;
            }
            typekeys[39] = typekeys[38] = typekeys[40] = 0;
        }
    } else {
        typekeys[37] = typekeys[39] = typekeys[38] = typekeys[40] = 0;
    }
};

function surprise2(e) {
    var ev = (e) ? e : window.event;
    var k = ev.keyCode;
    if (k > 8 && k < 18) {
        typekeys[k] = isNaN(typekeys[k]) ? 0 : typekeys[k];
        typekeys[k]++;
        if (typekeys[16] == 3) {
            if (typekeys[9] == 3) {
                if (typekeys[16] == 3 && typekeys[9] == 3 && typekeys[17] == 3) {
                    alert("You've found Surprise 2! Contact the site admin ASAP to get your prize!");
                    typekeys[16] = typekeys[9] = typekeys[17] = 0;
                }
            }
        } else {
            if (typekeys[16] > 3) {
                typekeys[16] = 0;
            }
            typekeys[9] = typekeys[17] = 0;
        }
    } else {
        typekeys[16] = typekeys[9] = typekeys[17] = 0;
    }
};
</code>

Mente me dizendo exatamente por que isso não está funcionando? Parece que para mim deveria funcionar.

questionAnswers(4)

yourAnswerToTheQuestion