EfogDev / VK Pikabu-like Navigation

// ==UserScript==
// @name         VK Pikabu-like Navigation
// @version      0.1
// @description  VK Pikabu-like Navigation. A/D/Z/C/R.
// @author       Efog
// @match        https://vk.com/*
// @match        http://vk.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    var current_address = null;
    var current_post = null;
    var feed_rows = null;

    document.addEventListener('keydown', function(event) {
        if (document.activeElement.nodeName != 'BODY') return;
        if (current_post === null || current_address != location.href) {
            feed_rows = document.querySelector('#feed_rows');
            if (feed_rows === null) feed_rows = document.querySelector('#page_wall_posts');
            current_post = feed_rows.children[0];
            document.body.scrollTop = current_post.offsetTop;
            current_address = location.href;
            return;
        }

        var toScroll = true;
        if (event.keyCode == 65) { //A
            if (!current_post.previousElementSibling.classList.contains('feed_row') && !current_post.previousElementSibling.classList.contains('post')) return;
            current_post = current_post.previousSibling;
        } else if (event.keyCode == 68) { //D
            if (!current_post.nextElementSibling.classList.contains('feed_row') && !current_post.nextElementSibling.classList.contains('post')) return;
            current_post = current_post.nextElementSibling;
        } else if (event.keyCode == 90) { //Z
            document.body.scrollTop -= 45;
            toScroll = false;
        } else if (event.keyCode == 67) { //C
            document.body.scrollTop += 45;
            toScroll = false;
        } else if (event.keyCode == 82) { //R
            current_post.querySelector('.wrh_text').click();
        } else return;

        if (toScroll) document.body.scrollTop = current_post.offsetTop;
        current_address = location.href;
    });
})();