Detectar series de combinaciones de pulsación de tecla con Javascript

Para las vacaciones de Semana Santa, quiero tener una pequeña sorpresa "Easter Egg Hunt" en un sitio para el que me desarrollo. Dos de estos cincoHuevos de Pascua Estoy escondido, será ordenada la pulsación de la tecla. Esto no será como un acuerdo de tipo "Presiona CTRL y TAB al mismo tiempo", sino que será un tipo de cosa "Pres UP tres veces y luego RIGHT tres veces". Esto buscará una serie de pulsaciones de teclas en lugar de solo dos pulsadas a la vez. Tengo esta función configurada, pero por alguna extraña razón no está funcionando como debería.

NOTA: La siguiente secuencia de comandos está buscando los siguientes ajustes de pulsación de tecla:
sorpresa1 - IZQUIERDA (x3), DERECHA (x3), ARRIBA (x3), ABAJO (x3)
surprise2 - MAYÚS (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>

¿Te importa decirme exactamente por qué eso no funciona? Me parece que debería funcionar.

Respuestas a la pregunta(4)

Su respuesta a la pregunta