napisy24.pl helper

Dodaje kilka ciekawych funkcji na stronie napisy24.pl

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name            napisy24.pl helper
// @version         1.6.3
// @author          KO
// @description     Dodaje kilka ciekawych funkcji na stronie napisy24.pl
// @namespace       KO/napisy24_helper
// @icon            data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH3wEDDSUqO/kIZgAAB3RJREFUeNrtm1tsHFcZx39nbnubXe/6trabxDElJHGaVoSoXAoNClGJeAgRPDYICQkkkBAKqlBJH0IJjRCtKEgVUkCqFCEhxEtFpCJaBG2VthQqW7JFFGhMSOI0sRN7veu9zs6NB6/Xu95Ze5w6SVvPefFeZo7O9zv/73Z2LFzXZSMPiQ0+AgABgABAACAAEAAIAAQAAgAbdSiLL06ePPlH13V3bQSjhRDnjh079uUmAKZpHtqzZw/hcPhDbXylUmF0dPTeFgUApNNpYrHYhxpAsVi8MzFAiOot36vK14mF/o4kSi3fWZZFoVBY85ymaa4cA9ZjRLQxumKniYX+gSzlsJ0Uper9zBS+Rbn6gK85ktEXGEgeBxyypa9wLfvjpu/Pnj3L7Ows+/fvp7Oz09ecExMTjI+Pc+DAAWRZvh0KcOmOn2Ko+2skIi8jSzkAZGmOePg1hrofJRX7w+oA1XP0J38EODUlXG25Zm5uzlPK7YbjOIyNjeE4DoZhrL8ChDDZlDpKPPwqAFV7E/nyAcrm/cS0t+iIvogkivR3/ISKuZNydXebeQwGUj9EYLfH7Lo4zgIcRfG39Hw+z+Kpl67r9fvXDUA8/Ne68bOFr3Nj/vu4LMhsvvwIBeMhNnd+D3DQQ6+1BdAb/yUh5SKOG6FU/Th66E1P/68v3CeASqVSfy3L8voDKFU/QaZ4hELlYQrGZ1p3oPIFTDuNKk+jSHOec8RCb9Ol/xaAm/nvoin/87zuVgA0Grzc+LYx4E//muZ3/7xK43FptmTyxn8zTM6Vmz637B6mco97Gg+gyDdR5WkADGtr6wJEkYHkE4BL2byP2cKRtsbYtt20m2sF4CsLlKo2vz57CdeFvYNJNndGePrlCUavZFk8QP7irl6+s2/I1wLS8Wfrr8vVPS3f93X8FFW+hovM9eyTK8bl9wpA0zTK5fLKCpAEdUMvzpQ4fubfjFxeMh7gpXM3GL2SXSU4WvR3nKAjeqYeD8rmrmXx41WS0Rdq8eMbVMztq5Wwa3bRRQCSJCFJ0uoKUOWli55/4zKG5aCHFL75uUGGuqOcePEdbuYN3r6UZc+WpLespAybOo8S1UYWMoM1yNT8403XyNIc/cnjNdf4KDfz3169c2swYLm0TdMkl8uRz+fJ5/MUi0UMw6inS03T/LmA5SxttWE5RDWZpw7vZGtXFID7BuK88h+D6XnDc8KoNsqm1GMo8o2FfG18infnfobldDbVDQPJ4yjSLC4y1+aewnW1NQGYmppicnKSbDZLLpdbtS5QVdUfgIrZnIcffXBT3XiAzujCQucrVstkXfppehM/R2DjuhrT80fJFI8AzdLtiZ8iHv5bDdCnkaQCUW0EFwVcBVnK1tzRQJay2E6yxQXGxsbaGhqPx4lGo2iaRiaTIZvNrgWA07DQEF/anV7miLWA1CBBgc09nY+RCP+lppwh3p17xtOnFSlDt/6b+ns99Dp66PW2pfX2vs9iOd1cmjlNwe5qVls0SiqVIplM1v8u72ZHRkbWCmBJAfu3dyMtCzym7dR8eEmOqdjv68ZnS4eZyj2B40a8g5KrkTceRg+9WWt2Vv9tUlAF3KY6YN++ffT09KxepNeid7us4ZkGF8eDW1MeOyhqu2zX83hP/LnavXu5lj3RIvlmADpXM8/WY4EkDIQwEZj1v72JX5CI/JmKOcy17JNYdg+W041lzSypIxLxlQUWDffdDZYaFNCtax5BbuGW2eJCuxtW30GW8guBKfeDFY332lvHDYPbLFvbjdfcTKdi7vSsBNtF9RYDaxWjbwCNMSCqtcpGD8m14GVTMR2S0Ys1qSkY1sfqZwGSqCBEBUkY2E4C2+l4zz3nohFCiLY+3Q5AI7wVAWjy0g5WbQdNkZY1LaGl1rRU5Z5Urv7+3p7DKPIMkmg9sKham5nM/ArDGvKhC3NFAKqq+i6KFkG1AyC1dndqQyPTelM60QjAxDC3AxJCWGjKJU/jATRlknTiaV+LtpzF4CZ7AvAr/0YAjWX0igr4SE+U3ngIRRZNu71Uu4eJhxXyFYt4WKFgPMSlmeeJhd7CcRNYdhe2k8Rxw7huCMcNocgZwup58pXP+1p0rnSIkHKBXPmQp5x1XfcNoLe3F13X6evr8+sCEqeOPIBA4KUyRRI889VdlEybzalIPfqXqnvbLsKwoGh80veiDWuIycxzLZ8PDg4iSRLpdNr/MV0kwsGDB/13gwupbWX/6uu4O0fniqIwNDS0vnPe6o2WZXH9+vX3xVF3f3+/7wOSdQNw/vx5Lly44Nli3snhOA7btm1j9+7ddxaA4zi4rts2vdypIYRY9dRnxQ6TDT5uWQGLufhuu4DrumuqC9YNwI4dOxgYGOBuP2kqhCCRSNx5AEIIOjq86/vLly9z5cqVdTV0y5YtDA4Ovn9cYKUxMTFR/wlrvUa1Wr0tAIJHZIIscJsqs8bf5NZrzg8MgOHhYYaHhwMX+MC5wPT09IZ4SMoTgKqqZ8bHxzfEY3Kqqp6r1zPB/wwFdUAAIAAQAAgABAACAAGAAEAAYEOO/wNzY+aLYxIEkAAAAABJRU5ErkJggg==
// @match           https://napisy24.pl/*
// @homepage        https://github.com/olodev/n24h
// @grant           GM_registerMenuCommand
// @grant           GM_setValue
// @grant           GM_getValue
// @grant           GM_deleteValue
// @run-at          document-start
// ==/UserScript==

(function() {
    'use strict';

    var icons = {
        staroff:  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH3gwUDR0hRbYVJwAAAjtJREFUOMudlM+rElEUx8+8lOGqE6PjzLyXGzczbhSVAqOyRYt2QYu3q7eqhehCJmwXiW8hSgvxByK0qFX/QIKLlsILIRI0uXlHQmgR+QZFEEZUnFaGr17O6x24i3vuuZ/DOed7L2UYBphZtVp9AAAQj8ffm8Va4ALGcVzKMAwKAEyBYBjGzlUulx9jjOcY43mlUjkyi98zyUeJopjgeZ7meZ4WBCEBANSuCzuBtVotFg6Hb2z2oVDoeq1Wi10KmMvlnKIoPnE6nb/77HK5LIIgPM1kMuw/S8rn8zcZhrlltVp9NpvNbbVa3TRNc3a73enz+fYRQmeS6rq+JoT8mM1m4+Vyqc3n85Gu6yNd1/F4PP5oYRjGL8vy81AotH+RiSOE9oLBoAcAPNv+drutEUIyV+r1+udGozFYr9cRURSdcAnrdDrfMcZKIpF4Q22EXSwW70qS9DoSicj/A2u1Wt9UVY0lk8kPAADU9kspFAoBr9f7LhqN+imKMtVvs9n8OhwOjxRF+XTulBVF6fZ6vcNut/vzAmWOCCGH27BzZWMYho1l2atmQJZlHYvFwmKqQ5fLdZ/neWQGFATBxnHcPVMgQiiA0Flev9/XVFXV/ogDhFDA9LdxOBwHm6YTQk4JISfT6fQlAAAh5FiW5duSJLm3Y3cCaZq+hjE+HQwGJ5qmvUilUl+2jh8WCoWAqqrHkiTdoWna89fT25ZNNps9YBjm7Wq1eqYoSm9XD0ulkh8AXk0mk0fpdHq88f8CflYIlVvjW0cAAAAASUVORK5CYII='
        ,staron:  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH3gwUDR8nnuPSkAAAAsZJREFUOMulk0tvG1UUx//n3Jm5M2NnUjueOnYCoptmQYNUSKEqFYss2CGqloeQ6AoWkbJtdhVS8wX4ALBAoq14NGXBAqFu2oqmFSgEUKqySRcNIbUzcRw7bTyx554unGeBuApHOrpX5179dF5/EhF0sj8mgrcA4KUzte87/bXwDOYGqXMiIAAdgdzpw68T6Q97+sPXcs+Fr05fTZ/9n0AiP3BHPV9pz1faTbujANG+gdMT/khYzA6ZJIZJYoR9mVemJ/yRfQF/ukwZL3A+sl2xEhMjMQ042lhe2v74+hd04D9runPRPu767glWPGA5Vo6YckpJj+Vwpjvn9bISFkk2OwDTIrMSNRZaTVORhCKTSLnVMuXWeuveWn31tqU990i2WBjL9x/sNSZGksQwZh3GbJ5NiCSACEAMVjZnC34fs+5jdqCUBrNG+UE5qii+QCKC374L3s4Wcp+GxeyhLWgSb0HFNCEQECkwO21XGopdsNKI5qtz0cNo7OXT9a9pc7Gnv/HeCPKZz/LPZw+bpIHtbBswSQwRsw1SLpg1WGmU5qr3q+XqyNC7jWu7hnL0vbWb1b+W3pmfXZjZvRkEgEBE7esO+3u2/Gc9qr+/CQMAelp6ty7SQPGF8EYm7+VNst4uWZqAtEsmdsDKwfLDuLw0Xxs+9kF8d0/psYHvem7AZAFsAAhEeGPIDCILTBZcX9Jxsm511LLb5b3pBymPWNr9IAYkgQAg8EaWFvxA+77nDQP4fU+gpfSg7XgQacKAwKKwUqpFYKA77MoRGMQWLGXD1s5gxwwdTxeYHYghVKOVxUqpOtlcjT8BgOrS4/FMeOD1bL4nR2zDcXShI1DZdrFSWl5cLi1OrlUenR86G8/seD41dUkP1qLV8Uw+PGk7uu8f2hORLb/5JQpTV1I//nzFeXFn/N/8l6/SR6a+Tf0w+TmyO+NPAC36SwTUSJYTAAAAAElFTkSuQmCC'
        ,starign: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH3wgOBzkLYwp6HwAAAvZJREFUOMuNlEtIG1EUhv+ZPEYnajSJxQQsSgjNqjZGW2uhoCioRdHSrgpCsZvErkKlpIRiKQhBJUFFI7RSxZ0GDHGjG9sKpRTJxkElPhc11mQmpfiIGZXbhQ/U+MiBu7jnnvNx/nvOvUAS1t3dXdfV1fU0mVg6mSC1Wv1GrVbbAFBn/QSgCfCWAEokay6X6wXHcTsLCwt7Ho+n8QJsgACEAO5kK6R0Ot3rnJwcVqPRMJmZmdbW1laaABIAAwBeAvgOwHGSIL2O1tPTYzWZTIUne7PZXLjF8xYA9wE0AvgG4AkF7Nwotb29XTEyMjLD8zw5XZub5HdxsXAsc4IAqQmS2traHiiVyhK5XG5kWVbNMIxGKpVqWJbNMhqNWpZlJQCAw0OkNTeDGR1F1GTa+2G3B+M0HYnFYkIsFuNFUeSi0ehPqUqlMuXn578zm823riz38BBpVisYrxf7FRXA4GDKQ4a5e9ogQhAIBITV1dWPkvHx8ZnS0tIlURQfabXaxPbv7yO9qQmMzwexogLbQ0MgDHMuhOO49WAwaLNYLJ9OnW63+7Hf7w+eu7NQiMRraggBSLyykgihEDl3zvNkcnJypbe3t/pSZZ2dnQVer5eLRCJHsOrqI1htLeE3Ns6BIpEIGRsbm3O73cXXdrejo8P4dWIiHK+qOoLV1SXAeJ4nU1NTf5xO552L+QlzKA+FMgt9PpV8ehpifT22PB5AmjiuGRkZ6fF4XH4tkACp/4aHh9LDYYnY0ICtvr5LYQCQnZ3NZmVllQOYvRRIABaATxkOG+INDdg+hhFCsLS0JFAURen1ehVFHf0PLMtCoVAUXFrhMcwPoHy9qCiU0t+vIxSF1ZUVfm5ubkYQhA80Te8tLi469Hp9mcFgUFEUBYVCob1KsgdAOYDPAYejJGdtTTY/Px8QBOG9zWb7dSb+mcvlure8vOzIy8srk8lkuoSnd1zhbQCv2ltaelNyc78cHBy02Gy22RumwSyTyZy7u7vP7Xb73xP/f4cxclaSnWDmAAAAAElFTkSuQmCC'
        ,search:  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABJdEVYdENvcHlyaWdodABQdWJsaWMgRG9tYWluIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL3B1YmxpY2RvbWFpbi9Zw/7KAAABTklEQVQokY2PP0hCYRTFf/eZFThULhG0F0UQ4djgZsaHS0FBUK7NTkFNRVNbGER/oEVoCnyfgptbNAdRYwQ5BqJS6Ou2fMoriTrbvef+uOeIqgJQLpfngyDYFpElYAh4E5GTWCx2lkwm3wlJVBXf97MicgoM0q/7SCSymE6n692FZ61dEJELB+RFJNHpdMZUdQ2oA3NBEFx9++T7fglYBm6MMSuAds1isTjled4j8BmNRidTqVQNwANm3U0+DABkMpknoAl47XY70YvnSiMiEz/LVKvVAaDh/NcwZAFUNVupVOJhqNFoHAPjQK3Vaj2EO00Dt8Ao8AIcAXEXe9Xd7RljDnqQqmKtTQIFoC+iUwfYMsYUepDLP9xsNjdVdUZERlT1DvgALh0YABvGmOse9JustTvAYfejqq7/CTlwF9h34/O/IIBSqZRT1Rxw/gU4l4oisfSMMQAAAABJRU5ErkJggg=='
        ,gear:    'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH3gwZCB0WCaqqHgAAA3FJREFUOMulVN1LI1cUP2fuHchmQ12jMRKNRIwFG1jb3ARhxIbp0vSh6EP70AUpeWj/o1LYV5XtUx8Ka0ultKDJiB9MaAyCYASt+dB80padWZmZe/vQzDYyrvvQ83Tvub/7Ox+/cy8KIeA+SyaTHyLiAgAAIUQ7ODjYvQ9P4S0my/LPc3NzFADg5OTkFQC8cx9eGtyoqupTFOUZY2wZAIAx9phSKhRFkRVFkSVJkpPJ5Hv9s88URXmmqqpvkAPdkhVFeSCE+CUcDrNOp8Mdx6lxzkOZTGZoZmYGAQBOT095Pp//S5KkNiEkEgwGpWazqSPix7u7u+atkoUQ30YiEZbNZn2O40C3250lhMDIyMjr6LOzs9Lw8PAjzvmjYDAIhBDY2tpiV1dX3wDA17cIbdv+qdVqfeE4DlBKYWxs7M4ejY6OwsAd6HQ69s3NzQ+eHh4eHn5v23a92+16SGq1GtRqNY+/2WyCZVl/6Lq+6VGZMfZYluWQJP2n08XFhSgUCoZlWfW+4pGlpSX/1NQUAgBQSoFzPskYY7qu6wAAmEwmP6KU/kgp5YuLiw/i8Tj2ewobGxuGaZpPdV1/0Q+6HAgEvltdXQ24QSuVitA0zbRtW7Jt+1MJEdOJRILmcjm/SwYAcHl5CY7jVF0yAABd119YltUYLD8ej2Mul/MnEgmKiGkJAAAR7xQAEfkdPvEG7L+iIGKxXC6L9fV1o1KpvAZHo1EghERTqVTW9aVSqSwhJDIxMQGDJa+trRnlclkgYhGFEICIyBj7gFL628rKypA7Gufn57xQKJiO49T6bzmSyWT80WhUclXe3Nz807KsJ8VisSiEELQvgACAoqIoTc75kBs9FotJsVjsYbVafRcRYTAzdw4JIdW9vT3dM4fpdHqFEDIRDAY9/ZmcnPSQuUOOiNOMsU88hLIsfx4OhwkhBGzbhlarBb1ez0PS6/Wg1WqBbdsgyzKEQiHq8/meej6H+fn5h36//9fx8fH32+22wzlvOI4zpqpqYHp6GgEAzs7OxPb29t+EkDYhZDwUCpF6vf67YRhPSqXSy1sZlkqll4ioXl9fPzcM40tN0+KWZak7Ozumi8nn868sy1rSNG3GNM2vGo3Gc0RUXbJbGb7JFhYWzEQiQQEAjo+Pb/b39wP/68cWQiwfHR2x/vrwbfh/AK2fjH9FpXiPAAAAAElFTkSuQmCC'
    };

    var options_db = 'n24h_options';
    var shows_db = 'n24h_shows';
    var au_ignore_db = 'n24h_authors_ignore';
    var tr_ignore_db = 'n24h_translations_ignore';

    var utils = {
        /**
             Dodaj dodatkowego CSS'a do strony
        */
        insertcss: function(css) {
            let style = document.createElement('style');
            style.setAttribute('type', 'text/css');
            if (style.styleSheet) {
                style.styleSheet.cssText = css;
            } else {
                style.appendChild(document.createTextNode(css));
            }
            document.head.appendChild(style);
        },
        getSkin: function() {
            if (document.querySelector('ul.menu.avatar-main-menu.avatar-menu-icons.white')) {
                return 1;
            }
            if (document.querySelector('div.rt-social-buttons')) {
                return 2;
            }
            return 0;
        }
    };

    /**
    */
    var ls = {
        setItem: function(name, value) {
            if (typeof GM_setValue !== 'undefined') {
                GM_setValue(name, value);
            } else {
                localStorage.setItem(name, value);
            }
        },
        getItem: function(name, defaultValue) {
            let value;
            if (typeof GM_getValue !== 'undefined') {
                value=GM_getValue(name, defaultValue);
            } else {
                value=localStorage.getItem(name);
                if (!value) {
                    value=defaultValue;
                }
            }
            return value;
        },
        removeItem: function(name) {
            if (typeof GM_deleteValue !== 'undefined') {
                GM_deleteValue(name);
            } else {
                localStorage.removeItem(name);
            }
        }
    };

    /**
        Obsługa opcji
    */
    var options = {
        /**
            Zapisz wartość
        */
        setValue: function(name, value) {
            let optdb=ls.getItem(options_db, '{}');
            let o=JSON.parse(optdb);
            o[name]=value;
            ls.setItem(options_db, JSON.stringify(o));
        },
        /**
            Pobierz wartość
        */
        getValue: function(name, def) {
            let optdb=ls.getItem(options_db, '{}');
            let o=JSON.parse(optdb);
            let value=o[name];
            if (value==null) {
                value=def;
            }
            return value;
        },
        /**
            Usuń klucz z opcji
        */
        remove: function(name) {
            let optdb=ls.getItem(options_db,'{}');
            let o=JSON.parse(optdb);
            delete o[name];
            ls.setItem(options_db, JSON.stringify(o));
        },
        /**
            Pokaż/ukryj checkboxy w zależności od innych opcji
        */
        showHideCheckboxs: function() {
            let n24info=document.querySelector('input[data-n24h-checkbox="shown24info"]');
            let useimdb=document.querySelector('input[data-n24h-checkbox="useimdbinfo"]');
            if (n24info.checked) {
                useimdb.parentNode.setAttribute('style', 'display:block');
            } else {
                useimdb.parentNode.setAttribute('style', 'display:none');
            }
            let altskins=document.querySelectorAll('input[data-n24h-radio="altskinid"]');
            let usealtskin=document.querySelector('input[data-n24h-checkbox="usealtskin"]');
            for (let i=0;i<altskins.length;i++) {
                altskins[i].parentNode.setAttribute('style', usealtskin.checked?'display:block':'display:none');
            }
        },
        /**
            Wypełnij panele aktualnymi ustawieniami, serialami, itp.
        */
        fillPanels: function() {
            //checkboxy
            let checkboxs=document.querySelectorAll('input[data-n24h-checkbox]');
            for (let i=0;i<checkboxs.length;i++) {
                checkboxs[i].checked=options.getValue(checkboxs[i].getAttribute('data-n24h-checkbox'), false);
            }
            //seriale
            let keywords=db.getAll(shows_db);
            let areashows=document.getElementById('n24h_opt_areashows');
            let showtext='';
            for (let i=0;i<keywords.length;i++) {
                if (showtext!='') {
                    showtext+='\n';
                }
                showtext+=keywords[i];
            }
            areashows.value=showtext;
            //pomijani autorzy
            let authors=db.getAll(au_ignore_db);
            let areaauthors=document.getElementById('n24h_opt_areaignore');
            let authorstext='';
            for (let i=0;i<authors.length;i++) {
                if (authorstext!='') {
                    authorstext+='\n';
                }
                authorstext+=authors[i];
            }
            areaauthors.value=authorstext;
            //debug
            let areadebug=document.getElementById('n24h_opt_areadebug');
            let debugtext='/**opcje**/\n';
            debugtext+=ls.getItem(options_db, null);
            debugtext+='\n\n/**seriale**/\n';
            debugtext+=ls.getItem(shows_db, null);
            debugtext+='\n\n/**pomijani autorzy**/\n';
            debugtext+=ls.getItem(au_ignore_db, null);
            debugtext+='\n\n/**pomijane tłumaczenia**/\n';
            debugtext+=ls.getItem(tr_ignore_db, null);
            areadebug.value=debugtext;
            let radios=document.querySelectorAll('input[data-n24h-radio]');
            for (let i=0;i<radios.length;i++) {
                radios[i].checked=radios[i].getAttribute('data-n24h-radio_id')===options.getValue(radios[i].getAttribute('data-n24h-radio'), '1');
            }
            options.showHideCheckboxs();
        },
        /**
            Pokaż panel opcji
        */
        show: function() {
            options.fillPanels();
            let body=document.querySelector('body');
            let bstyle=body.getAttribute('style');
            if ((bstyle!=null)&&(bstyle!="")) {
                bstyle='overflow-y: hidden;'+bstyle
            } else {
                bstyle='overflow-y: hidden;';
            }
            body.setAttribute('style', bstyle);
            let panel=document.querySelector('div.n24h_options_background');
            panel.setAttribute('style', 'display:block');
        },
        /**
            Ukryj panel opcji
        */
        hide: function() {
            let body=document.querySelector('body');
            let bstyle=body.getAttribute('style');
            bstyle=bstyle.replace(/overflow-y: hidden;/g, '');
            body.setAttribute('style', bstyle);
            let panel=document.querySelector('div.n24h_options_background');
            panel.setAttribute('style', 'display:none');
        },
        /**
            Obsługa kliknięcia checkboxa
        */
        checkboxClick: function(e) {
            e = e || window.event;
            let target = e.target || e.srcElement;
            options.setValue(target.getAttribute('data-n24h-checkbox'), target.checked);
            options.showHideCheckboxs();
            options.showSaveInfo();
        },
        /**
            Obsługa kliknięcia radiobuttona
        */
        radioClick: function(e) {
            e = e || window.event;
            let target = e.target || e.srcElement;
            options.setValue(target.getAttribute('data-n24h-radio'), target.getAttribute('data-n24h-radio_id'));
            options.showSaveInfo();
        },
        /**
            Obsługa kliknięcia przycisku sekcji
        */
        typeButtonClick: function(e) {
            e = e || window.event;
            let target = e.target || e.srcElement;
            let panel = target.getAttribute('data-n24h-optiontype');
            let opt_panels=document.querySelectorAll('div[data-n24h-optionpanel]');
            for (let i=0;i<opt_panels.length;i++) {
                opt_panels[i].setAttribute('style', panel==opt_panels[i].getAttribute('data-n24h-optionpanel')?'display:block':'display:none');
            }
            let opt_buttons=document.querySelectorAll('div[data-n24h-optiontype]');
            for (let i=0;i<opt_buttons.length;i++) {
                opt_buttons[i].setAttribute('class', panel==opt_buttons[i].getAttribute('data-n24h-optiontype')?'n24h_options_panel_button n24h_options_panel_button_selected':'n24h_options_panel_button');
            }
            options.fillPanels();
        },
        /**
            Obsługa przycisku zapisz
        */
        btnSaveClick: function() {
            let areashows=document.getElementById('n24h_opt_areashows');
            let shows = areashows.value.split('\n');
            let title;
            ls.removeItem(shows_db);
            for (let i=0;i<shows.length;i++)
            {
                title=shows[i];
                if (options.getValue('titleremoveyear', false)) {
                    title=title.trim().replace(/\(\d{4}\)/g, '');
                }
                if (options.getValue('titleremoveapostrophe', false)) {
                    title=title.trim().replace(/'|’|`/g, '');
                }
                title=title.trim();
                console.log(title);
                if (title != null && title != '' && !db.exists(shows_db, title)) {
                    db.add(shows_db, title);
                }
            }
            options.fillPanels();
            options.showSaveInfo();
        },
        btnAuthorsSaveClick: function() {
            let areaauthors=document.getElementById('n24h_opt_areaignore');
            let authors = areaauthors.value.split('\n');
            let author;
            ls.removeItem(au_ignore_db);
            for (let i=0;i<authors.length;i++)
            {
                author=authors[i].trim();
                if (author != null && author != '' && !db.exists(au_ignore_db, author)) {
                    db.add(au_ignore_db, author);
                }
            }
            options.fillPanels();
            options.showSaveInfo();
        },
        /**
            Obsługa przycisku usuwania opcji
        */
        btnKillOptClick: function() {
            if (confirm('Czy na pewno chcesz usunąć wszystkie ustawienia?\nNie będzie można tego cofnąć.')) {
                ls.removeItem(options_db);
                options.showSaveInfo();
            }
            options.fillPanels();
        },
        /**
            Obsługa przycisku usuwania seriali
        */
        btnKillShowsClick: function() {
            if (confirm('Czy na pewno chcesz usunąć wszystkie ulubione filmy/seriale?\nNie będzie można tego cofnąć.')) {
                ls.removeItem(shows_db);
                options.showSaveInfo();
            }
            options.fillPanels();
        },
        btnKillIgnAu: function() {
            if (confirm('Czy na pewno chcesz usunąć wszystkich pomijanych autorów?\nNie będzie można tego cofnąć.')) {
                ls.removeItem(au_ignore_db);
                options.showSaveInfo();
            }
            options.fillPanels();
        },
        btnKillIgnTr: function() {
            if (confirm('Czy na pewno chcesz usunąć wszystkie pomijane tłumaczenia?\nNie będzie można tego cofnąć.')) {
                ls.removeItem(tr_ignore_db);
                options.showSaveInfo();
            }
            options.fillPanels();
        },
        savetimeout: null,
        showSaveInfo: function() {
            let saveinfo=document.querySelector('#n24h_options_saved');
            if (saveinfo) {
                clearTimeout(options.savetimeout);
                saveinfo.style.display='block';
                options.savetimeout=setTimeout(options.hideSaveInfo,1000);
            }
        },
        hideSaveInfo: function() {
            let saveinfo=document.querySelector('#n24h_options_saved');
            if (saveinfo) {
                saveinfo.style.display='none';
            }
        },
        init: function() {
            let css='#n24h_options_gear{'+
                'cursor:pointer;'+
                '}'+
                '.n24h_options_background{'+
                'position:fixed;'+
                'top:0;'+
                'left:0;'+
                'width:100%;'+
                'height:100%;'+
                'background:rgba(0,0,0,0.6);'+
                'text-align:center;'+
                'z-index:9999;'+
                '}'+
                '.n24h_options_dialog{'+
                'margin: 0px auto;'+
                'padding: 50px 0px;'+
                'width: 900px;'+
                'height: 100%;'+
                'transition: none 0s ease 0s;'+
                'transform: none;'+
                'position: relative;'+
                'box-sizing: border-box;'+
                '}'+
                '.n24h_options_content{'+
                'max-height: 100%;'+
                'overflow-y: auto;'+
                'border: 4px solid rgba(85, 85, 85, 0.5);'+
                'background-clip: padding-box;'+
                'box-shadow: 0px 3px 7px rgba(0, 0, 0, 0.3);'+
                'border-radius: 13px;'+
                'position: relative;'+
                'outline: 0px none;'+
                'background-color: #FFF;'+
                'box-sizing: border-box;'+
                'color: #303030;'+
                'font-family: Arial,Helvetica,sans-serif;'+
                'text-align:left;'+
                'display: block;'+
                '}'+
                '.n24h_options_header{'+
                'margin: 0px;'+
                'border-bottom: 1px solid #A0A0A0;'+
                'padding: 10px 10px 0px 10px;'+
                '}'+
                '.n24h_options_body{'+
                'display: table;'+
                'min-height: 150px;'+
                '}'+
                '.n24h_options_body>input{'+
                'margin: 0px;'+
                '}'+
                '.n24h_options_close{'+
                'float:right;'+
                'padding: 0px;'+
                'border: 1px solid;'+
                'cursor:pointer;'+
                'margin-top: -25px;'+
                'padding: 1px 3px 1px 3px;'+
                'border-radius: 5px;'+
                'background: linear-gradient(#EDEEEE, #E2E3E3);'+
                '}'+
                '.n24h_options_close:hover{'+
                'background-color: #D0D0D0;'+
                'border-color: #646F7C;'+
                '}'+
                '.n24h_options_panel_l{'+
                'padding: 10px;'+
                'border-right: 1px solid #A0A0A0;'+
                'display: table-cell;'+
                'position: relative;'+
                '}'+
                '.n24h_options_panel_r{'+
                'padding: 10px;'+
                'width: 750px;'+
                '}'+
                '.n24h_options_panel_button{'+
                'cursor: pointer;'+
                'background-color: #D5D5D5;'+
                'border: 1px solid #000000;'+
                'border-bottom: 3px solid #000000;'+
                'padding: 5px 10px 5px 10px;'+
                'margin-bottom: 2px;'+
                '}'+
                '.n24h_options_panel_button:hover{'+
                'background-color: #E0E0E0;'+
                'border-radius: 0px 0px 3px 3px;'+
                'border-bottom: 3px solid #D26911;'+
                '}'+
                '.n24h_options_panel_button_selected{'+
                'border-radius: 0px 0px 3px 3px;'+
                'border-bottom: 3px solid #F21911;'+
                '}'+
                '.n24h_opt_button{'+
                'background-color: #D5D5D5;'+
                'border: 1px solid #000000;'+
                'border-bottom: 3px solid #000000;'+
                'padding: 3px 5px 3px 5px;'+
                'margin-top: 5px;'+
                'margin-right: 5px;'+
                '}'+
                '.n24h_opt_button:hover{'+
                'background-color: #E0E0E0;'+
                'border-radius: 0px 0px 3px 3px;'+
                'border-bottom: 3px solid #D26911;'+
                '}'+
                '.n24h_opt_area{'+
                'width: 100% !important;'+
                'height: auto !important;'+
                'cursor: auto !important;'+
                'margin-bottom: 0px;'+
                'background-color: #EEEEEE;'+
                'color: #555555;'+
                'border: 1px solid #CCCCCC;'+
                'margin-left: 0px;'+
                'padding: 5px;'+
                '}'+
                '.n24h_opt_area:focus{'+
                'color: #555555;'+
                '}'+
                '.n24h_options_panel_r > label{'+
                'margin-bottom: 0px;'+
                'cursor:pointer;'+
                '}'+
                '.n24h_options_panel_r > label > input{'+
                'margin: 0px;'+
                'margin-top: -4px;'+
                'display: inline !important;'+
                '}'+
                '.n24_option_level2{'+
                'margin-left:30px;'+
                '}';
            let css1='#n24h_options_gear{'+
                'width:20px;'+
                'line-height: 26px;'+
                '}';
            let css2='.n24h-gear-social {'+
                'transition-delay: 0s;'+
                'transition-duration: 0.2s;'+
                'transition-property: all;'+
                'transition-timing-function: ease-out;'+
                '}'+
                '.n24h-gear-social:hover {'+
                'background: #007E00;'+
                '}'+
                '.n24h-icon-gear {'+
                'display: inline;'+
                'min-width: 18px;'+
                'min-height: 18px;'+
                'background-image: url('+icons.gear+');'+
                'background-repeat: no-repeat;'+
                'background-position: center;'+
                'padding-left: 18px;'+
                '}'+
                '#n24h_options_gear .social-button-text {'+
                'margin-left: 5px;'+
                '}';
            utils.insertcss(css);
            let skin_id=utils.getSkin();
            let li, ul, img, div, span1, span2, clear;
            switch (skin_id) {
                case 1:
                    ul=document.querySelector('ul.menu.avatar-main-menu.avatar-menu-icons.white');
                    if (!ul) {
                        return;
                    }
                    utils.insertcss(css1);
                    li=document.createElement('li'); //panel z opcjami
                    li.setAttribute('id', 'n24h_options_gear');
                    li.setAttribute('title', 'napisy24.pl helper opcje');
                    li.addEventListener('click', options.show, false);
                    img=document.createElement('img');
                    img.setAttribute('src', icons.gear);
                    img.setAttribute('style', 'margin-top: -5px;');
                    li.appendChild(img);
                    ul.appendChild(li);
                    break;
                case 2:
                    div=document.querySelector('div.rt-social-buttons');
                    if (!div) {
                        return;
                    }
                    utils.insertcss(css2);
                    li=document.createElement('div'); //panel z opcjami
                    li.setAttribute('id', 'n24h_options_gear');
                    li.setAttribute('class', 'social-button n24h-gear-social');
                    li.addEventListener('click', options.show, false);
                    span1=document.createElement('span');
                    span1.setAttribute('class', 'n24h-icon-gear');
                    li.appendChild(span1);
                    span2=document.createElement('span');
                    span2.setAttribute('class', 'social-button-text');
                    span2.appendChild(document.createTextNode('n24h opcje'));
                    li.appendChild(span2);
                    clear=div.querySelector('div.clear');
                    div.insertBefore(li, clear);
                    break;
                default:
                    console.log('Błędny skin "utils.getSkin()": '+skin_id);
            }
            let panel = document.createElement('div');
            panel.innerHTML='<div class="n24h_options_background" style="display:none">'+
                '<div class="n24h_options_dialog">'+
                '<div class="n24h_options_content">'+
                '<div class="n24h_options_header">'+
                '<img src="'+icons.gear+'" style="margin-top: -5px;padding-right: 5px;">Opcje:<br/>'+
                '<span style="color:red;font-size:small;">Zmiana opcji wymaga przeładowania strony.</span>'+
                '<div class="n24h_options_close">X</div>'+
                '<span id="n24h_options_saved" style="color:green;font-size:small;float:right;display:none;">Zapisane</span>'+
                '</div>'+
                '<div class="n24h_options_body">'+
                '<div class="n24h_options_panel_l">'+
                '<div class="n24h_options_panel_button n24h_options_panel_button_selected" data-n24h-optiontype="general">Ogólne</div>'+
                '<div class="n24h_options_panel_button" data-n24h-optiontype="shows">Seriale</div>'+
                '<div class="n24h_options_panel_button" data-n24h-optiontype="ignore">Pomijane</div>'+
                '<div class="n24h_options_panel_button" data-n24h-optiontype="debug">Debug</div>'+
                '</div>'+
                '<div class="n24h_options_panel_r" data-n24h-optionpanel="general">'+
                '<label><input type="checkbox" data-n24h-checkbox="fixsearch"> Zapamiętaj tekst w wyszukiwarce</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="killcover"> Usuń okładki filmów/seriali</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="killimdbinfo"> Usuń info o serialu/ocenę IMDB</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="hideemotspanel"> Ukrywaj panel z emotikonami i dodawaniem komentarza</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="fixcomments"> W komentarzach propozycję poprawek wyświetlaj czcionką o stałej szerokości</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="shown24info"> Na stronie z tłumaczeniami pokaż info N24/IMDB</label>'+
                '<label class="n24_option_level2" style="display:none"><input type="checkbox" data-n24h-checkbox="useimdbinfo"> Zastąp info N24 linkiem do IMDB</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="usealtskin"> Używaj alternatywnej skórki <div style="color:blue;font-size:small;display: inline;">najlepiej działa z domyślnym <i>(ciemnym)</i> stylem strony</div></label>'+
                '<label class="n24_option_level2" style="display:none"><input type="radio" name="n24h_altskinid" data-n24h-radio="altskinid" data-n24h-radio_id="1"> szara</label>'+
                '<label class="n24_option_level2" style="display:none"><input type="radio" name="n24h_altskinid" data-n24h-radio="altskinid" data-n24h-radio_id="2"> n24 classic</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="usesmallmenubuttons"> Zmniejsz rozmiar przycisków menu</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="removetargetblank"> Usuń target="_blank" ze wszystkich odnośników (nie otwieraj w nowej karcie)</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="addemptyrow"> Dodaj pusty wiersz po ostatnim ulubionym filmie/serialu</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="turnofffavpanel"> Wyłącz panel ulubionych</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="turnoffallfav"> Wyłącz wszystkie opcje ulubionych filmów/seriali</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="removeconnectbuttons"> Usuń przyciski "Dołącz..."</label>'+
                '</div>'+
                '<div style="display:none" class="n24h_options_panel_r" data-n24h-optionpanel="shows">'+
                '<span>Ulubione filmy/seriale (jeden film/serial na linię)</span>'+
                '<textarea id="n24h_opt_areashows" class="n24h_opt_area" rows="15" ></textarea>'+
                '<label><input type="checkbox" data-n24h-checkbox="titleremoveyear"> Usuń rok (RRRR) z nazwy filmu/serialu</label>'+
                '<label><input type="checkbox" data-n24h-checkbox="titleremoveapostrophe"> Usuń apostrofy ( \' ’ ` ) z nazwy filmu/serialu</label>'+
                '<button id="n24h_opt_btn_save" class="n24h_opt_button">Zapisz</button>'+
                '</div>'+
                '<div style="display:none" class="n24h_options_panel_r" data-n24h-optionpanel="ignore">'+
                '<span>Tłumaczenia tych autorów są pomijane na liście ulubionych (jeden autor/autor(tytuł) na linię)</span>'+
                '<textarea id="n24h_opt_areaignore" class="n24h_opt_area" rows="15" ></textarea>'+
                '<label><input type="checkbox" data-n24h-checkbox="autokillignoretranslations"> Automatycznie usuwaj pomijane tłumaczenia jeżeli nie ma ich w tabelce z tłumaczeniami</label>'+
                '<button id="n24h_opt_btn_ignoresave" class="n24h_opt_button">Zapisz</button>'+
                '</div>'+
                '<div style="display:none" class="n24h_options_panel_r" data-n24h-optionpanel="debug">'+
                '<span>Informacje do debugowania</span>'+
                '<textarea id="n24h_opt_areadebug" rows="10" class="n24h_opt_area" readOnly></textarea>'+
                '<button id="n24h_opt_btn_killshows" class="n24h_opt_button">Usuń wszystkie ulubione filmy/seriale</button>'+
                '<button id="n24h_opt_btn_ignoreaukill" class="n24h_opt_button">Usuń wszystkich pomijanych autorów</button>'+
                '<button id="n24h_opt_btn_ignorekill" class="n24h_opt_button">Usuń wszystkie pomijane tłumaczenia (bez autorów)</button>'+
                '<button id="n24h_opt_btn_killopt" class="n24h_opt_button">Usuń wszystkie ustawienia (bez filmów/seriali i opcji pomijania)</button>'+
                '</div>'+
                '</div>'+
                '</div>'+
                '</div>'+
                '</div>';
            document.body.appendChild(panel);
            //przycisk zapisz
            let close=document.querySelector('div.n24h_options_close');
            close.addEventListener('click', options.hide, false);
            //checkboxy
            let opt_checkboxs=document.querySelectorAll('input[data-n24h-checkbox]');
            for (let i=0;i<opt_checkboxs.length;i++) {
                opt_checkboxs[i].addEventListener('change', options.checkboxClick, false);
            }
            //radio
            let opt_radios=document.querySelectorAll('input[data-n24h-radio]');
            for (let i=0;i<opt_radios.length;i++) {
                opt_radios[i].addEventListener('change', options.radioClick, false);
            }
            //sekcje
            let opt_types=document.querySelectorAll('div[data-n24h-optiontype]');
            for (let i=0;i<opt_types.length;i++) {
                opt_types[i].addEventListener('click', options.typeButtonClick, false);
            }
            //przycisk zapisz
            let opt_btn_save=document.getElementById('n24h_opt_btn_save');
            opt_btn_save.addEventListener('click', options.btnSaveClick, false);
            let opt_btn_authorsave=document.getElementById('n24h_opt_btn_ignoresave');
            opt_btn_authorsave.addEventListener('click', options.btnAuthorsSaveClick, false);
            //usuń opcje
            let opt_btn_killopt=document.getElementById('n24h_opt_btn_killopt');
            opt_btn_killopt.addEventListener('click', options.btnKillOptClick, false);
            //usuń seriale
            let opt_btn_killshows=document.getElementById('n24h_opt_btn_killshows');
            opt_btn_killshows.addEventListener('click', options.btnKillShowsClick, false);
            //usuń pomijanych autorów
            let opt_btn_killignau=document.getElementById('n24h_opt_btn_ignoreaukill');
            opt_btn_killignau.addEventListener('click', options.btnKillIgnAu, false);
            //usuń pomijane tłumaczenia
            let opt_btn_killigntr=document.getElementById('n24h_opt_btn_ignorekill');
            opt_btn_killigntr.addEventListener('click', options.btnKillIgnTr, false);

            if (typeof GM_registerMenuCommand !== "undefined") {
                GM_registerMenuCommand("napisy24.pl helper opcje", options.show);
            }
        }
    };

    var db = {
        all: null,
        upper: null,
        /**
            Pobiera tablicę fraz-kluczy.
        */
        getAll: function(db_name) {
            let keywords = ls.getItem(db_name, null);
            this.all = (keywords != null && keywords != '') ? JSON.parse(keywords) : [];
            return this.all;
        },
        /**
            Pobiera tablicę fraz-kluczy.
        */
        exists: function(db_name, keyword) {
            let keywords = ls.getItem(db_name, null);
            this.upper = (keywords != null && keywords != '') ? JSON.parse(keywords.toUpperCase()) : [];
            return this.upper.indexOf(keyword.toUpperCase()) < 0 ? false : true;
        },
        /**
            Dodaje keyword do tablicy fraz-kluczy.
        */
        add: function(db_name, keyword) {
            if (!this.exists(db_name, keyword)) {
                this.getAll(db_name);
                this.all = this.all.concat([keyword]);
                ls.setItem(db_name, JSON.stringify(this.all));
                return 1;
            }
            return 0;
        },
        /**
            Usuwa keyword z tablicy fraz-kluczy.
        */
        remove: function(db_name, keyword) {
            if (this.exists(db_name, keyword)) {
                this.getAll(db_name);
                this.all.splice(this.upper.indexOf(keyword.toUpperCase()), 1);
                ls.setItem(db_name, JSON.stringify(this.all));
                return 1;
            }
            return 0;
        }
    };

    /**
        Strona z tłumaczeniami
    */
    var tlumaczenia = {
        /**
            Pobierz nazwę filmu/serialu bez numeru sezonu i odcinka/odcinków
        */
        getTitle: function(row) {
            let title=row.getAttribute('data-head');
            //oczyść tytuł ze wszystkich śmieci i numeru serii oraz odcinka/odcinków
            title=title.trim().replace(/\d+x\d+.*/, '');
            //usuń rok
            if (options.getValue('titleremoveyear', false)) {
                title=title.trim().replace(/\(\d{4}\)/g, '');
            }
            //usuń apostrofy
            if (options.getValue('titleremoveapostrophe', false)) {
                title=title.trim().replace(/'|’|`/g, '');
            }
            //usuń spacje na końcu która pozostała po wywaleniu numeru serii i odcina
            title=title.trim();
            return title;
        },
        /**
            Pobierz autora napisów
        */
        getAuthor: function(row) {
            return row.querySelector('a[href*="profile/userprofile/"]').textContent.trim();
        },
        /**
            Pobierz ID tłumaczenia
        */
        getTID: function(row) {
            return row.querySelector('input[data-tid]').getAttribute('data-tid').trim();
        },
        /**
            Zrób zebrę od nowa
        */
        restyleRows: function() {
            let rows=document.querySelectorAll('table#translationsTable > tbody > tr:not([style*="none"])');
            for (let i=0;i<rows.length;i++) {
                let trcl=rows[i].getAttribute('class');
                trcl=trcl.replace(/(odd|even)/, '');
                if (i%2) {
                    rows[i].setAttribute('class', trcl+' odd');
                } else {
                    rows[i].setAttribute('class', trcl+' even');
                }
            }
        },
        /**
            Przenieś wiersz na szczyt listy
        */
        moveTop: function(row) {
            //znajdź tabelkę z tłumaczeniami
            let table=document.querySelector('table#translationsTable > tbody');
            //znajdź pierwszy wiersz tabelki
            let first_line=table.querySelector('tr');
            //wstaw przed pierwszy wiersz nasz wiersz
            table.insertBefore(row,first_line);
            let td=row.querySelector('td[data-n24h-star]');
            td.setAttribute('data-n24h-star', 'on');
        },
        /**
            Umieść ulubione filmy/seriale na szczycie listy
        */
        FavoriteOnTop: function() {
            /**
                Dla każdego wiersza w tabeli...
                Od końca do początku, żeby zachować kolejność sortowania
            */
            tlumaczenia.RemoveEmptyRow();
            let rows=document.querySelectorAll('table#translationsTable > tbody > tr');
            for (let i=rows.length-1;i>=0;i--) {
                let row=rows[i];
                /**
                    Wyciąga tytuł i oczyszcza go ze zbędnych znaków.
                */
                let title=tlumaczenia.getTitle(row);
                let star=row.querySelector('td[data-n24h-star]');
                if (db.exists(shows_db, title)) {
                    //Znaleziono dopasowanie.
                    if (db.exists(au_ignore_db, tlumaczenia.getAuthor(row))) {
                        //autor jest na liście pomijanych nie przenosimy na górę
                        star.setAttribute('data-n24h-star', 'auign');
                    } else if (db.exists(au_ignore_db, tlumaczenia.getAuthor(row)+'('+tlumaczenia.getTitle(row)+')')) {
                        //tłumaczenie jest na liście pomijanych nie przenosimy na górę
                        star.setAttribute('data-n24h-star', 'autit');
                    } else if (db.exists(tr_ignore_db, tlumaczenia.getTID(row))) {
                        //tłumaczenie jest na liście pomijanych nie przenosimy na górę
                        star.setAttribute('data-n24h-star', 'trign');
                    } else {
                        tlumaczenia.moveTop(row);
                    }
                } else {
                    //Nie ma dopasowania
                    //Wyczyść na wszelki wypadek gwiazdkę
                    star.setAttribute('data-n24h-star', 'off');
                }
            }
            if (options.getValue('addemptyrow', false)) {
                let stars=document.querySelectorAll('table#translationsTable>tbody>tr>td[data-n24h-star="on"]');
                if (stars.length > 0) {
                    let table=document.querySelector('table#translationsTable > tbody');
                    let star=stars[stars.length-1];
                    if (star) {
                        let staroff=star.parentNode.nextSibling;
                        let emptyrow=document.createElement('tr');
                        emptyrow.setAttribute('id', 'n24h_emptyrow');
                        emptyrow.setAttribute('class', 'hoverable');
                        emptyrow.innerHTML='<td colspan="7"><div>&nbsp;</div></td>';
                        table.insertBefore(emptyrow,staroff);
                    }
                }
            }
            tlumaczenia.restyleRows();
        },
        /**
            Ustaw informację o kierunku sortowania w nagłówku tabelki
        */
        SetColumnHeader: function(col, reverse) {
            let header=document.querySelectorAll('table#translationsTable>thead>tr>th.header');
            for (let i=0;i<header.length;i++) {
                if ((i==col)&&(reverse==1)) {
                    header[i].setAttribute('class', 'header n24h_sort_asc')
                } else if ((i==col)&&(reverse==-1)) {
                    header[i].setAttribute('class', 'header n24h_sort_desc')
                } else {
                    let thcl=header[i].getAttribute('class');
                    thcl=thcl.replace(/(n24h_sort_asc|n24h_sort_desc)/, '');
                    header[i].setAttribute('class', thcl);
                }
            }
        },
        /**
            Sortowanie tabelki z tłumaczeniami
        */
        sortTable: function(col, reverse) {
            tlumaczenia.RemoveEmptyRow();
            let table=document.querySelector('table#translationsTable');
            col = typeof col !== 'undefined' ? col : options.getValue('column', 4);
            reverse = typeof reverse !== 'undefined' ? reverse : options.getValue('reverse', 1);
            let tb = table.tBodies[0];
            let tr = Array.prototype.slice.call(tb.rows, 0);
            reverse = -((+reverse) || -1);
            tr = tr.sort(function (a, b) { // sort rows
                let atext=a.cells[col].textContent.trim();
                let btext=b.cells[col].textContent.trim();
                if ((col==3)||(col==4)) {
                    //Kolumna 3: "Postęp"
                    //Kolumna 4: "Oczekujący"
                    //trzeba usunąć znaki: procentu, plus i minus oraz zamienić na numerek
                    let avalue=Number(atext.replace(/[\+\-\%]/g, ''));
                    let bvalue=Number(btext.replace(/[\+\-\%]/g, ''));
                    return reverse==1?avalue-bvalue:bvalue-avalue;
                } else {
                    return reverse * (atext.localeCompare(btext));
                }
            });
            for(let i = 0; i < tr.length; ++i) {
                tb.appendChild(tr[i]);
            }

            //zapisz ustawienia sortowania
            options.setValue('column', col);
            options.setValue('reverse', -((+reverse) || -1));
            //ustaw nagłówek
            tlumaczenia.SetColumnHeader(col, reverse);
            //przesuń ulubione na samą górę
            if (!options.getValue('turnoffallfav', false)) {
                tlumaczenia.FavoriteOnTop();
            } else {
                tlumaczenia.restyleRows();
            }
        },
        /**
            Obsługa kliknięcia w gwiazdkę
        */
        StarClickHandler: function(e) {
            e = e || window.event;
            let target = e.target || e.srcElement;
            let row=target.parentNode;
            let title=tlumaczenia.getTitle(row);
            if (this.getAttribute('data-n24h-star')==='on') {
                //Przestań śledzić...
                tlumaczenia.RemoveTitle(title);
            } else if (this.getAttribute('data-n24h-star')==='off') {
                //Zacznij śledzić...
                let keyword = prompt('Podaj tytuł filmu lub serialu\nbez numeracji sezonu/odcinka:', tlumaczenia.getTitle(row));
                tlumaczenia.AddTitle(keyword);
            }
        },
        /**
            Menu pomijania
        */
        IgnoreMenuHandler: function(e) {
            if (this.getAttribute('data-n24h-star')!='off') {
                e.preventDefault();
                e.stopPropagation();
                e = e || window.event;
                let target = e.target || e.srcElement;
                let row=target.parentNode;
                let rmenubg=document.querySelector('div.n24h_menu_background');
                rmenubg.setAttribute('style', 'display:block');
                let rmenu=document.querySelector('div#n24h_rmenu');
                rmenu.setAttribute('data-n24h-ign-tid', tlumaczenia.getTID(row));
                rmenu.setAttribute('data-n24h-ign-aut', tlumaczenia.getAuthor(row));
                rmenu.setAttribute('data-n24h-ign-ati', tlumaczenia.getAuthor(row)+'('+tlumaczenia.getTitle(row)+')');
                if (this.getAttribute('data-n24h-star')=='on') {
                    document.getElementById("n24h_start_auign").style.display = 'block';
                    document.getElementById("n24h_start_atign").style.display = 'block';
                    document.getElementById("n24h_start_trign").style.display = 'block';
                    document.getElementById("n24h_stop_auign").style.display = 'none';
                    document.getElementById("n24h_stop_atign").style.display = 'none';
                    document.getElementById("n24h_stop_trign").style.display = 'none';
                } else if(this.getAttribute('data-n24h-star')=='auign') {
                    document.getElementById("n24h_start_auign").style.display = 'none';
                    document.getElementById("n24h_start_atign").style.display = 'none';
                    document.getElementById("n24h_start_trign").style.display = 'none';
                    document.getElementById("n24h_stop_auign").style.display = 'block';
                    document.getElementById("n24h_stop_atign").style.display = 'none';
                    document.getElementById("n24h_stop_trign").style.display = 'none';
                } else if(this.getAttribute('data-n24h-star')=='autit') {
                    document.getElementById("n24h_start_auign").style.display = 'none';
                    document.getElementById("n24h_start_atign").style.display = 'none';
                    document.getElementById("n24h_start_trign").style.display = 'none';
                    document.getElementById("n24h_stop_auign").style.display = 'none';
                    document.getElementById("n24h_stop_atign").style.display = 'block';
                    document.getElementById("n24h_stop_trign").style.display = 'none';
                } else if(this.getAttribute('data-n24h-star')=='trign') {
                    document.getElementById("n24h_start_auign").style.display = 'none';
                    document.getElementById("n24h_start_atign").style.display = 'none';
                    document.getElementById("n24h_start_trign").style.display = 'none';
                    document.getElementById("n24h_stop_auign").style.display = 'none';
                    document.getElementById("n24h_stop_atign").style.display = 'none';
                    document.getElementById("n24h_stop_trign").style.display = 'block';
                }
                rmenu.style.top = e.clientY + 'px';
                //sprawdź czy zmieścimy się po prawej stronie
                if (window.innerWidth>e.clientX+rmenu.offsetWidth+20) {
                    rmenu.style.left = (e.clientX + 20) + 'px';
                } else {
                    //niestety nie, narysuj menu w lewo
                    rmenu.style.left = (e.clientX - rmenu.offsetWidth) + 'px';
                }
            }
        },
        IgnoreMenuClick: function(e) {
            e = e || window.event;
            let target = e.target || e.srcElement;
            let author=target.parentNode.parentNode.getAttribute('data-n24h-ign-aut');
            let tid=target.parentNode.parentNode.getAttribute('data-n24h-ign-tid');
            let autitle=target.parentNode.parentNode.getAttribute('data-n24h-ign-ati');
            let event=target.getAttribute('id');
            if (event=='n24h_start_auign') {
                db.add(au_ignore_db, author);
            }
            if (event=='n24h_start_atign') {
                db.add(au_ignore_db, autitle);
            }
            if (event=='n24h_start_trign') {
                db.add(tr_ignore_db, tid);
            }
            if (event=='n24h_stop_auign') {
                db.remove(au_ignore_db, author);
            }
            if (event=='n24h_stop_atign') {
                db.remove(au_ignore_db, autitle);
            }
            if (event=='n24h_stop_trign') {
                db.remove(tr_ignore_db, tid);
            }
            tlumaczenia.HideRMenu();
            tlumaczenia.sortTable();
        },
        /**
            Szukanie filmu/serialu na liście tłumaczonych
        */
        DoSearch: function() {
            let keyword = document.querySelector('input#n24h_tr_input_search').value.toUpperCase();
            let rows=document.querySelectorAll('table#translationsTable > tbody > tr:not(#n24h_emptyrow)');
            for (let i=0;i<rows.length;i++) {
                let row=rows[i];
                let title=tlumaczenia.getTitle(row).toUpperCase();
                if (keyword == null || keyword == '') {
                    //pokazujemy wszystkie rekordy
                    row.style.display='table-row';
                } else if (title.indexOf(keyword)!=-1) {
                    row.style.display='table-row';
                } else {
                    row.style.display='none';
                }
            }
            tlumaczenia.restyleRows();
        },
        /**
            Przycisk wyczyść / ESC
        */
        ClearHandler: function(e) {
            e = e || window.event;
            let isEscape = false;
            if (e.type == "keydown") {
                if ("key" in e) {
                    isEscape = (e.key == "Escape" || e.key == "Esc");
                } else {
                    isEscape = (e.keyCode == 27);
                }
            }
            if (isEscape || e.type == "click") {
                document.getElementById('n24h_tr_input_search').value='';
                tlumaczenia.DoSearch();
            }
        },
        /**
            Dodaj film/serial do listy ulubionych
        */
        AddTitle: function(title) {
            if (title != null && title != '' && !db.exists(shows_db, title)) {
                if (db.add(shows_db, title)) {
                    if (!options.getValue('turnofffavpanel', false)) {
                        document.querySelector('input#n24h_tr_input_new').value='';
                        let select=document.querySelector('select#n24h_tr_shows_list');
                        let option=document.createElement('option');
                        option.text=title;
                        option.setAttribute('class', 'n24h_tr_option');
                        select.add(option);
                    }
                    tlumaczenia.sortTable();
                }
            }
        },
        /**
            Przycisk dodaj
        */
        AddNewHandler: function() {
            let keyword = document.querySelector('input#n24h_tr_input_new').value.trim();
            tlumaczenia.AddTitle(keyword);
        },
        /**
            Usuń film/serial z listy ulubionych
        */
        RemoveTitle: function(title) {
            if (db.exists(shows_db, title)) {
                if (db.remove(shows_db, title)) {
                    if (!options.getValue('turnofffavpanel', false)) {
                        let select=document.querySelector('select#n24h_tr_shows_list');
                        for (let i=0;i<select.length;i++) {
                            if (select[i].value.toUpperCase()==title.toUpperCase()) {
                                select.remove(i);
                                break;
                            }
                        }
                    }
                }
                tlumaczenia.sortTable();
            }
        },
        /**
            Przycisk usuń
        */
        RemoveHandler: function() {
            let keyword = document.querySelector('select#n24h_tr_shows_list').value;
            tlumaczenia.RemoveTitle(keyword);
        },
        /**
            Dodaj panel na górze tabelki z tłumaczeniami
        */
        AddPanel: function() {
            let css='#tlumaczenia #n24h_tr_input_search{'+ //wyszukiwanie
                'margin-right: 5px;'+
                'padding: 0px 0px 0px 22px;'+
                'border-radius: 4px;'+
                'height: 25px;'+
                'margin-bottom: 0px;'+
                'width: 150px;'+
                'background-repeat: no-repeat;'+
                'background-position: 5px center;'+
                'background-image: url('+icons.search+');'+
                '}'+
                '#tlumaczenia #n24h_tr_input_new{'+
                'margin-right: 5px;'+
                'padding: 0px 0px 0px 27px;'+
                'border-radius: 4px;'+
                'height: 25px;'+
                'margin-bottom: 0px;'+
                'width: 150px;'+
                'background-repeat: no-repeat;'+
                'background-position: 5px center;'+
                'background-image: url('+icons.staroff+');'+
                '}'+
                '#tlumaczenia #n24h_tr_input_clear,#tlumaczenia #n24h_tr_input_add,#tlumaczenia #n24h_tr_input_remove{'+
                'border: 1px solid #32383E;'+
                'border-radius: 4px;'+
                'cursor: pointer;'+
                'width: 80px;'+
                'height: 25px;'+
                '}'+
                '#tlumaczenia #n24h_tr_input_clear:hover,#tlumaczenia #n24h_tr_input_add:hover,#tlumaczenia #n24h_tr_input_remove:hover{'+
                'border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted 9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);'+
                '}'+
                '#tlumaczenia #n24h_tr_shows_list{'+
                'width: auto;'+
                'margin-right: 5px;'+
                'height: 25px;'+
                'margin-bottom: 0px;'+
                'margin-left: 30px;'+
                'border: 1px solid #32383E'+
                'background-color: #1B1F23;'+
                'color: #7A878C;'+
                'max-width: 200px;'+
                '}'
            let css1='#tlumaczenia #n24h_tr_input_clear,#tlumaczenia #n24h_tr_input_add,#tlumaczenia #n24h_tr_input_remove{'+
                'background-color: #1B1F23;'+
                'color: #7A878C;'+
                '}'+
                '#tlumaczenia .n24h_tr_option{'+
                'background-color: #1B1F23;'+
                'color: #7A878C;'+
                '}';
            let css2='#tlumaczenia #n24h_tr_input_clear,#tlumaczenia #n24h_tr_input_add,#tlumaczenia #n24h_tr_input_remove{'+
                'background-color: #F8F8F8;'+
                'color: #2e2e2e;'+
                '}'+
                '#tlumaczenia .n24h_tr_option{'+
                'background-color: #efefef;'+
                'color: #585858;'+
                '}';

            let trtable=document.querySelector('table#translationsTable');
            if (!trtable) {
                return;
            }
            utils.insertcss(css);
            let skin_id=utils.getSkin();
            switch (skin_id) {
                case 1:
                    utils.insertcss(css1);
                    break;
                case 2:
                    utils.insertcss(css2);
                    break;
                default:
                    console.log('Błędny skin "utils.getSkin()": '+skin_id);
            }

            let panel=document.createElement('div'); //panel z opcjami
            panel.setAttribute('id', 'n24h_tr_panel');
            panel.setAttribute('class', 'tbl_top');
            panel.setAttribute('style', 'margin: 0px;');

            let div=document.createElement('div'); //ogólny div ze wszystkim
            div.setAttribute('style', 'float:none;padding: 10px; margin-top: -15px; margin-bottom: 15px;');

            let left_div=document.createElement('div'); //lewa część opcji
            left_div.setAttribute('style', 'float:left')

            let input_search=document.createElement('input'); //okienko do szukania
            input_search.setAttribute('id', 'n24h_tr_input_search');
            input_search.setAttribute('type', 'text');
            input_search.setAttribute('placeholder', 'Szukaj...');
            input_search.addEventListener('keyup', tlumaczenia.DoSearch, false);
            input_search.addEventListener('keydown', tlumaczenia.ClearHandler, false);

            let input_clear=document.createElement('input'); //przycisk wyczyść
            input_clear.setAttribute('id', 'n24h_tr_input_clear');
            input_clear.setAttribute('type', 'button');
            input_clear.setAttribute('value', 'Wyczyść');
            input_clear.addEventListener('click', tlumaczenia.ClearHandler, false);

            //dodaj do lewego diva
            left_div.appendChild(input_search); //okienko szukania
            left_div.appendChild(input_clear); //i przycisk wyczyść

            let right_div=document.createElement('div'); //prawa część opcji
            right_div.setAttribute('style', 'float:right')

            let input_new=document.createElement('input'); //okienko do dodawania nowego serialu/filmu
            input_new.setAttribute('id', 'n24h_tr_input_new');
            input_new.setAttribute('type', 'text');

            let input_add=document.createElement('input'); //przycisk dodaj
            input_add.setAttribute('id', 'n24h_tr_input_add');
            input_add.setAttribute('type', 'button');
            input_add.setAttribute('value', 'Dodaj');
            input_add.addEventListener('click', tlumaczenia.AddNewHandler, false);

            let select=document.createElement('select'); //selekt z listą seriali/filmów
            select.setAttribute('id', 'n24h_tr_shows_list');
            select.setAttribute('size', '1');

            //wypełnij selekta listą seriali/filmów
            let keywords = db.getAll(shows_db);
            for (let i=0;i<keywords.length;i++) {
                let option=document.createElement('option');
                option.text=keywords[i];
                option.setAttribute('class', 'n24h_tr_option');
                select.add(option);
            }

            let input_remove=document.createElement('input'); //przycisk usuń
            input_remove.setAttribute('id', 'n24h_tr_input_remove');
            input_remove.setAttribute('type', 'button');
            input_remove.setAttribute('value', 'Usuń');
            input_remove.addEventListener('click', tlumaczenia.RemoveHandler, false);

            //dodaj do prawego diva
            right_div.appendChild(input_new); //okienko do dodawania nowego serialu/filmu
            right_div.appendChild(input_add); //przycisk dodaj
            right_div.appendChild(select); //lista seriali/filmów
            right_div.appendChild(input_remove); //i przycisk usuń

            //dodaj do ogólnego diva
            div.appendChild(left_div); //lewego diva
            div.appendChild(right_div); //i prawego diva

            //dodaj ogólnego diva do panelu
            panel.appendChild(div);
            trtable.parentNode.insertBefore(panel,trtable);
        },
        /**
            Dodaj dodatkową kolumnę z gwiazdkami
        */
        AddStars: function() {
            let css='td[data-n24h-star]{'+
                'background-image: url('+icons.staroff+');'+
                'background-repeat: no-repeat;'+
                'background-position: center;'+
                'background-color: transparent !important;'+
                'cursor:pointer !important;'+
                '}'+
                'td[data-n24h-star="on"]{'+
                'background-image: url('+icons.staron+');'+
                '}'+
                'td[data-n24h-star="auign"], td[data-n24h-star="trign"], td[data-n24h-star="autit"]{'+
                'background-image: url('+icons.starign+');'+
                '}';
            let trtable=document.querySelector('table#translationsTable');
            if (!trtable) {
                return;
            }
            utils.insertcss(css);
            let trhead=trtable.querySelector('thead > tr');
            let th=document.createElement('th');
            th.setAttribute('id', 'n24h_tr_favhead');
            th.setAttribute('class', 'nosort header');
            th.setAttribute('style', 'background-image: url('+icons.staron+');background-repeat: no-repeat;background-position: center;width:10px;');
            th.setAttribute('title', 'Ulubione filmy/seriale');
            trhead.appendChild(th);
            let trs=trtable.querySelectorAll('tbody>tr');
            for (let i = 0; i < trs.length; i++) {
                let td=document.createElement('td');
                td.setAttribute('data-n24h-star', '');
                td.addEventListener('click', tlumaczenia.StarClickHandler, false);
                td.addEventListener('contextmenu', tlumaczenia.IgnoreMenuHandler, false);
                trs[i].appendChild(td);
            }

        },
        HideRMenu: function() {
            let rmenubg=document.querySelector('div.n24h_menu_background');
            rmenubg.setAttribute('style', 'display:none');
            let rmenu=document.querySelector('div#n24h_rmenu');
            rmenubg.setAttribute('data-n24h-ign-tid', '');
            rmenubg.setAttribute('data-n24h-ign-aut', '');
            rmenubg.setAttribute('data-n24h-ign-ati', '');
        },
        /**
            Dodaj menu pomijania tłumaczeń
        */
        AddRMenu: function() {
            let css='.n24h_menu_background{'+
                'position:fixed;'+
                'top:0;'+
                'left:0;'+
                'width:100%;'+
                'height:100%;'+
                'z-index:99999;'+
                '}'+
                '.n24h_rmenu{'+
                'z-index:999999;'+
                'position: absolute;'+
                'background-color:#FFFFFF;'+
                'color:#222222;'+
                'box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.1);'+
                'border: 1px solid rgba(61, 70, 77, 0.1);'+
                'padding: 2px;'+
                'border-radius: 5px;'+
                'margin: 0;'+
                'list-style-type: none;'+
                'list-style: none;'+
                '}'+
                '.n24h_rmenu ul{'+
                'margin: 0;'+
                '}'+
                '.n24h_rmenu li{'+
                'cursor: pointer;'+
                'list-style: none;'+
                'text-decoration: none;'+
                'padding-top: 5px;'+
                'padding-bottom: 5px;'+
                '}'+
                '.n24h_rmenu li:hover{'+
                'background-color:#F0F0F0;'+
                '}';
            utils.insertcss(css);
            let rmenu = document.createElement('div');
            rmenu.setAttribute('class', 'n24h_menu_background');
            rmenu.setAttribute('style', 'display:none');
            rmenu.innerHTML='<div id="n24h_rmenu" class="n24h_rmenu"><ul>'+
                '<li id="n24h_start_auign">Pomijaj&nbsp;tłumaczenia&nbsp;tego&nbsp;autora&nbsp;(wszystkie&nbsp;tytuły)</li>'+
                '<li id="n24h_start_atign">Pomijaj&nbsp;tłumaczenia&nbsp;tego&nbsp;autora&nbsp;(tylko&nbsp;ten&nbsp;tytuł)</li>'+
                '<li id="n24h_start_trign">Pomijaj&nbsp;to&nbsp;tłumaczenie</li>'+
                '<li id="n24h_stop_auign">Przestań&nbsp;pomijać&nbsp;tłumaczenia&nbsp;tego&nbsp;autora&nbsp;(wszystkie&nbsp;tytuły)</li>'+
                '<li id="n24h_stop_atign">Przestań&nbsp;pomijać&nbsp;tłumaczenia&nbsp;tego&nbsp;autora&nbsp;(tylko&nbsp;ten&nbsp;tytuł)</li>'+
                '<li id="n24h_stop_trign">Przestań&nbsp;pomijać&nbsp;to&nbsp;tłumaczenie</li>'+
                '</ul></div>';
            rmenu.addEventListener('click', tlumaczenia.HideRMenu, false);
            document.body.appendChild(rmenu);
            let rmenus=rmenu.querySelectorAll('li');
            for (let i = 0; i < rmenus.length; i++) {
                rmenus[i].addEventListener('click', tlumaczenia.IgnoreMenuClick, false);
            }
        },
        /**
            Ustaw nagłówki tabelki tak żeby dało się ją sortować
        */
        makeSortable: function() {
            let trtable=document.querySelector('table#translationsTable');
            if (!trtable) {
                return;
            }
            let th = trtable.tHead, i;
            th && (th = th.rows[0]) && (th = th.cells);
            if (th) {
                i = th.length;
            } else {
                return;
            }
            while (--i >= 0) {
                if (i<6) { //pomiń kolumnę ulubione
                    (function (i) {
                        let dir = 1;
                        th[i].addEventListener('click', function () {tlumaczenia.sortTable(i, (dir = 1 - dir))});
                    }(i));
                }
            }
        },
        /**
            Skopiuj nagłówki tabelki, żeby wywalić oryginalną obsługę sortowania i dodać naszą
        */
        AddNewHeader: function() {
            let css='#translationsTable th {cursor: pointer !important;}'+
                '#translationsTable th.nosort {cursor: default !important;}'+
                '.n24h_sort_asc{background-image: url(run/images/arrsh.png);background-repeat: no-repeat;background-position: right;}'+
                '.n24h_sort_desc{background-image: url(run/images/arrs.png);background-repeat: no-repeat;background-position: right;}';
            let trtable=document.querySelector('table#translationsTable');
            if (!trtable) {
                return;
            }
            utils.insertcss(css);
            let header=trtable.querySelector('thead');
            let new_header=document.createElement('thead');
            new_header.innerHTML=header.innerHTML;
            trtable.insertBefore(new_header, header);
            trtable.removeChild(header);
            tlumaczenia.makeSortable();
        },
        /**
            Wywal kolumnę info i ewentualnie dodaj linki do tytułów seriali
        */
        FixInfo: function() {
            let trtable=document.querySelector('table#translationsTable');
            if (!trtable) {
                return;
            }
            /**INFO START*/
            if (options.getValue('shown24info', false)) {
                let trs=trtable.querySelectorAll('tbody > tr');
                for (let i = 0; i < trs.length; i++) {
                    let title=trs[i].querySelector('td:nth-child(1)>div');
                    let info=trs[i].querySelector('td:nth-child(2)>div>a[href*="serial/"], a[href*="title/tt"]');
                    if (info) {
                        if (options.getValue('useimdbinfo', false)) {
                            let imdbid=trs[i].getAttribute('data-oczekuja').replace(/(.*imdbid=)(\d+)(.*)/g, '$2');
                            title.innerHTML='<a href="http://www.imdb.com/title/tt'+imdbid+'/" target="_blank">'+title.textContent+'</a>';
                        } else {
                            let target=info.href.indexOf('imdb.com')!=-1?' target="_blank"':'';
                            title.innerHTML='<a href="'+info.href+'"'+target+'>'+title.textContent+'</a>';
                        }
                    }
                }
            }
            /**INFO STOP*/
            //usuń kolumnę Info
            let th=document.querySelector('th:nth-child(2)');
            th.parentNode.removeChild(th);
            let tds=document.querySelectorAll('table#translationsTable>tbody>tr>td:nth-child(2)');
            for (let i = 0; i < tds.length; i++) {
                tds[i].parentNode.removeChild(tds[i]);
            }
        },
        RemoveEmptyRow: function() {
            //usuń pustą belkę jeżeli istnieje
            let emptyrow=document.querySelector('#n24h_emptyrow');
            if (emptyrow) {
                let table=emptyrow.parentNode;
                table.removeChild(emptyrow);
            }
        },
        KillIgnoreTranslations: function() {
            let tmp=[];
            let ignoredb=db.getAll(tr_ignore_db);
            if (ignoredb.length>0) {
                let tid;
                let selector;
                for (let i=0;i<ignoredb.length;i++) {
                    selector='table#translationsTable input[data-tid="'+ignoredb[i]+'"]';
                    tid=document.querySelector(selector);
                    if (tid) {
                        tmp.push(ignoredb[i]);
                    }
                }
                ls.setItem(tr_ignore_db, JSON.stringify(tmp));
            }
        },
        init: function() {
            if (!(options.getValue('turnofffavpanel', false)||options.getValue('turnoffallfav', false))) {
                tlumaczenia.AddPanel();
            }
            tlumaczenia.FixInfo();
            if (!options.getValue('turnoffallfav', false)) {
                tlumaczenia.AddStars();
            }
            tlumaczenia.AddNewHeader();
            if (!options.getValue('turnoffallfav', false)) {
                tlumaczenia.AddRMenu();
            }
            tlumaczenia.sortTable();
            if (options.getValue('autokillignoretranslations', false)) {
                tlumaczenia.KillIgnoreTranslations();
            }
        }
    };

    /**
        Strona z komentarzami
    */
    var komentarze = {
        /**
            Zapisz poprawki za pomocą czcionki o stałej szerokości
        */
        fix_comments: function() {
            let css='div.n24h_comment{'+
                'font-family: Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;'+
                'font-size: 13px;'+
                'text-align: left;'+
                '}';
            utils.insertcss(css);

            let comments=document.querySelectorAll('div.tresc2');
            for (let i=0;i<comments.length;i++)
            {
                let text=comments[i].innerHTML;
                let lines=text.split('<br>');
                let line='';
                text='';
                for (let j=0;j<lines.length;j++)
                {
                    line=lines[j].replace(/((\+|\-)?(.)?(\[|\{)\d+(\]|\})(\[|\{)\d+(\]|\}).*)/g, '<div class="n24h_comment">$1</div>');
                    text=text+line;
                    if (line.search('n24h_comment')==-1) {
                        text=text+'<br>';
                    }
                }
                comments[i].innerHTML=text;
            }
        },
        /**
            Pokaż/ukryj panel z emotkami i dodawaniem komentarza
        */
        ShowHideEmots: function() {
            let emots=document.querySelector('.page > div:nth-child(2)');
            let form=document.querySelector('form#userForm');
            let opener=document.querySelector('div#n24h_comm_opener');
            if ((!emots) || (!form)) {
                return;
            }
            if (emots.style.display==='none')
            {
                emots.style.display='block';
                form.style.display='block';
                opener.setAttribute('class', 'n24h_comm_opener n24h_comm_opener_open');
            } else {
                emots.style.display='none';
                form.style.display='none';
                opener.setAttribute('class', 'n24h_comm_opener');
            }
        },
        /**
            Dodaj strzałkę otwierającą/zamykającą panel emotek i komentarza
        */
        addOpener: function() {
            let css='div.n24h_comm_opener{'+
                'background-image: url(run/images/arrs.png);'+
                'background-repeat: no-repeat;'+
                'height: 20px;'+
                'width: 20px;'+
                'background-position: center;'+
                'cursor:pointer;'+
                'border: 1px solid;'+
                'border-color:#32383E;'+
                'padding: 3px;'+
                'margin-left: 10px;'+
                'float: left;'+
                '}'+
                'div.n24h_comm_opener:hover{'+
                'background-color: #202428;'+
                '}'+
                'div.n24h_comm_opener_open{'+
                'background-image: url(run/images/arrsh.png);'+
                '}';
            let footer=document.querySelector('div.moreInfo>div.infofooter');
            if (!footer) {
                return;
            }
            let footermain=footer.querySelector('#footerMain');
            if (!footermain) {
                return;
            }
            utils.insertcss(css);
            let opener=document.createElement('div');
            opener.setAttribute('id', 'n24h_comm_opener');
            opener.setAttribute('class', options.getValue('hideemotspanel', false)?'n24h_comm_opener':'n24h_comm_opener n24h_comm_opener_open');
            opener.setAttribute('title', 'Pokaż/ukryj dodawanie komentarza');
            opener.addEventListener('click', komentarze.ShowHideEmots, false);
            footer.insertBefore(opener,footermain);
            footer.setAttribute('style', 'padding-bottom: 5px; padding-top: 5px;');
            if (options.getValue('hideemotspanel', false)) {
                komentarze.ShowHideEmots();
            }
        },
        init: function() {
            komentarze.addOpener();
            if (options.getValue('fixcomments', false)) {
                komentarze.fix_comments();
            }
        }
    };

    /**
        Strona o serialu
    */
    var serial = {
        /**
            Dodaj linka do IMDB
        */
        addIMDBlink: function() {
            let info=document.querySelector('.infoColumn2>div:last-child');
            if (!info) {
                return;
            }
            let link=document.createElement('a');
            let imdbid=document.querySelector('#notify_napisy').getAttribute('data-imdb');
            let href='http://www.imdb.com/title/'+imdbid+'/';
            link.setAttribute('href', href);
            link.setAttribute('target', '_blank');
            link.innerHTML='IMDB';
            info.appendChild(document.createTextNode(' / ')); //dodaj spację
            info.appendChild(link);
        },
        setObserver: function() {
            let observer = new MutationObserver(function(mutations) {
                mutations.forEach(function(mutation) {
                    misc.killTargetBlank();
                });
            });

            observer.observe(document, { childList: true, subtree: true });
        },
        init: function() {
            serial.addIMDBlink();
            if (options.getValue('removetargetblank', false)) {
                serial.setObserver();
            }
        }
    };

    /**
        Różności
    */
    var misc = {
        /**
            Obsługa zapamiętywania wyszukiwanych filmów/seriali między stronami
        */
        SearchHandler: function() {
            let input=document.querySelector('input#phrase');
            if (!input) {
                return;
            }
            sessionStorage.setItem('n24h_search', input.value);
        },
        /**
            Dodaj zapamiętywanie wyszukiwanych filmów/seriali
        */
        fixSearch: function() {
            let input=document.querySelector('input#phrase');
            if (!input) {
                return;
            }
            let searchtext=sessionStorage.getItem('n24h_search');
            if ((searchtext!==null)&&(searchtext!=='')) {
                input.value=searchtext;
            }
            input.addEventListener('keyup', misc.SearchHandler, false);
        },
        /**
            Usuń okładkę filmu/serialu
        */
        killCover: function() {
            let css='div.subtitle{width: 675px !important;}';
            utils.insertcss(css);
            let divs=document.querySelectorAll('div.tbl');
            for (let i=0;i<divs.length;i++) {
                let poster=divs[i].querySelector('div.poster');
                divs[i].removeChild(poster);
            }
        },
        /**
            Usuń ocenę z IMDB
        */
        killIMDBInfo: function() {
            let divs=document.querySelectorAll('div[id^="toggleMe"]');
            for (let i=0;i<divs.length;i++) {
                let infocolumn=divs[i].querySelector('div.infoColumn0');
                divs[i].removeChild(infocolumn);
            }
        },
        /**
            Alternatywne skórki
        */
        altSkin: function() {
            /** Szara start*/
            let altcss1='.avatar-menu-icons[class*="avatar-main-menu-szare"] > li {background-color: #2B68AB;border-right: 1px solid #5592D5;border-bottom: 4px solid #1B4A7E;}'+//menu: forum, irc, rss
                '[class*="avatar-main-menu"] > li:hover {border-bottom: 4px solid #1B4A7E;line-height: 18px;height: 18px;}'+
                '[class*="avatar-main-menu"] > li:hover > a {top:0px;}'+
                '#oczekiwane .main_menu li a, #profile .main_menu li a, #szukaj .main_menu li a, #tlumaczenia .main_menu li a {color: #FFFFFF;}'+
                '#oczekiwane .main_menu li a:hover, #profile .main_menu li a:hover, #szukaj .main_menu li a:hover, #tlumaczenia .main_menu li a:hover {color: #cccccc;}'+
                'nav{background-color: #2B68AB !important;}'+//pusta przestrzeń między menu a dodaj napisy
                'nav ul li.menu_add_napisy a{background-color: #2B68AB;border-bottom: 4px solid #1B4A7E;}'+//przycisk dodaj napisy
                'nav ul li.menu_add_napisy a:hover{background-color: #1B4A7E;color: #CCC;background-position: 21px 12px;}'+
                'nav ul li.menu_add_napisy a:active{color: #CCC;text-shadow: 0px -1px 1px rgba(0, 0, 0, 0.2);filter: dropshadow(color=#33000000, offx=0, offy=-1);border-top: 4px solid #2B68AB;border-bottom: 4px solid #1B4A7E;background-color: #1B4A7E;background-position: 21px 8px;}'+
                'body{background-color:#D5D5D5 !important;color: #272727;}'+//body
                '#avatar-body-middle-block{background-color:#D5D5D5;}'+//środek
                '#avatar-header-inside-block{background-color:#D5D5D5;}'+//górna belka body
                '.logo .screen{border: 4px solid #5592D5 !important;}'+//logo
                '.logo .screen .subline1{background-color: #5592D5 !important;}'+
                '.logo .screen .subline2{background-color: #5592D5 !important;}'+
                '.logo h1{color: #5592D5 !important;}'+
                '.logo h2{color: #5592D5 !important;}'+
                'textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input {background-color: #D5D5D5 !important;color: #000000 !important;}'+//pola tekstowe
                '#search #phrase{color: #000000 !important;}'+//wyszukiwarka
                'section#content .tbl_top{background-color:#D5D5D5 !important;border-top: 1px solid #A0A0A0 !important;}'+ //tabelka nagłówek
                '.tbl_top1, .tbl_top2{background-color:#D5D5D5 !important;border-top: 1px solid #A0A0A0 !important;}'+ //tabelka nagłówek
                'section#content .tbl_top .head_r label{color:#000000 !important;}'+
                'section#content .tbl_top .head_l{color:#000000 !important;}'+
                'section#content .tbl{background-color:#D5D5D5 !important;border-top: 1px solid #A0A0A0 !important;}'+
                'section#content .page{border-color:#A0A0A0 !important;}'+
                'section#content .tbl_out{border-bottom:1px solid #A0A0A0 !important;}'+
                'section#content .tbl .poster{border-right:1px solid #A0A0A0 !important;}'+
                'section#content .pagination{border: 1px solid #A0A0A0;background-color: #E0E0E0;}'+
                'section#content .pagination .page-start, section#content .pagination .page-prev, section#content .pagination .page-next{ color: #272829;background-color: #D5D5D5;}'+//start, poprzednia, następna
                'section#content .pagination .page-start:hover, section#content .pagination .page-prev:hover, section#content .pagination .page-next:hover{color: #272829;background-color: #E0E0E0;border-radius: 0px 0px 3px 3px;border-bottom: 3px solid #D26911;border-top:none;padding-bottom: 0px;line-height: 30px;}'+
                'section#content .pagination .page-prev:hover{background-position: 15px center;}'+
                'section#content .pagination .page-next:hover{background-position: 90px center;}'+
                'section#content .pagination .page-num{color: #272829 !important;background-color: #D5D5D5;}'+//numery stron
                'section#content .pagination .page-num:hover{background-color: #E0E0E0;border-top-width: 1px;margin-top: 0px;border-radius: 0px 0px 3px 3px;border-bottom: 3px solid #D26911;}'+
                'section#content .tbl.opened .subtitle .opener, section#content .tbl .subtitle:hover .opener, .page .closerSmall, .page .closerSmall:hover, .page .openerSmall, .page .openerSmall:hover, .page .closerSmall2, .page .openerSmall2:hover {background-color: #E0E0E0 !important;border-radius: 0px 0px 3px 3px;border-bottom: 3px solid #D26911;}'+
                '.module_frame{border: 1px solid #A0A0A0;}'+
                '.category-modulemodule_frame li a{color: #000000;}'+
                '.category-modulemodule_frame li a:hover{color: #2F2F2F;background-color: #E0E0E0;}'+
                'aside .list li a{color: #000000 !important;}'+
                'aside .list li a:hover{color: #2F2F2F !important;background-color: #E0E0E0 !important;text-decoration: none !important;}'+
                'aside{width: inherit !important;}'+
                '.avatar-module .st-module-heading{background-color: #A0A0A0;color: #2F2F2F;}'+
                '.login-greeting{color: #272829;}'+
                '.moreInfo{background-color:#D5D5D5 !important;color:#000000 !important; border-top: 1px solid #A0A0A0;}'+
                '.page span{color: #272829 !important;}'+
                '.infofooter{border-top: 1px solid #A0A0A0 !important;background-color: #D5D5D5 !important;}'+
                '.infoColumn0{background-color: #D5D5D5 !important;border-right: 1px solid #A0A0A0 !important;border-bottom: 1px solid #A0A0A0 !important;border-top: 1px solid #A0A0A0 !important}'+
                'section#content .page{color: #272829 !important;}'+
                'section#content .tbl .subtitle .sub h2{color: #272829 !important;}'+
                'select {background-color: #C5C5C5 !important;}'+
                'a, a:link, a:visited {color: #1E519D;}'+
                '.infoheader, .infoheader1{color: #000000 !important;}'+
                '.row-fluid {border-bottom: none !important;}'+
                /**tłumaczenia*/
                '#tlumaczenia [class*="avatar-main-menu"] li a {color: #FFF;}'+
                'table.table-layout thead tr th{background-color: #D5D5D5 !important;color: #272829 !important;border-bottom: 1px solid #A0A0A0 !important;border-right: 1px solid #A0A0A0 !important;}'+
                'table.table-layout tbody tr.odd td:not([style*="background-color:#255180"]):not([style*="background-color:#DD7665"]):not([style*="background-color:#41d64b"]):not([style*="background-color:#3399ff"]){background-color: #C5C5C5 !important;}'+
                'table.table-layout tbody tr.even td:not([style*="background-color:#255180"]):not([style*="background-color:#DD7665"]):not([style*="background-color:#41d64b"]):not([style*="background-color:#3399ff"]){background-color: #B5B5B5 !important;}'+
                'table.table-layout tbody tr td{border-bottom: 1px solid #A0A0A0 !important;border-right: 1px solid #A0A0A0 !important;color: #000000 !important;}'+
                'table.table-layout {border: 1px solid #A0A0A0 !important;}'+
                '.progress div{background-color: #A0A0A0 !important; background-image: none !important;}'+
                '#tlumaczenia .progress {background-color: #676767 !important; background-image:none;}'+
                '.progress2 {background-image: none !important;background-color: #676767 !important;bottom: 8px !important;top: 10px !important;height: 20px;overflow: hidden;border-radius: 4px;box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);position: absolute;left: 8px;right: 8px;text-align: center;background-repeat: no-repeat;margin-bottom: 20px;}'+
                '#profile .progress2 div, #szukaj .progress2 div, #tlumaczenia .progress2 div, #serial .progress2 div {background-color: #A0A0A0 !important; background-image: none !important;top: 0px !important;left: 0px !important;right: 0px !important;}'+
                '#oczekiwane .progress2 > span, #profile .progress2 > span, #szukaj .progress2 > span, #tlumaczenia .progress2 > span{position: absolute;bottom: 0px;left: 0px;right: 0px;text-align: center;z-index: 3;font-size: 10px;letter-spacing: 1px;}'+
                '#oczekiwane .progress2 > span > span, #profile .progress2 > span > span, #szukaj .progress2 > span > span, #tlumaczenia .progress2 > span > span {display: inline-block;text-align: center;font-weight: 700;font-size: 9px;width: 36px;letter-spacing: 1px;color: #FFFFFF !important;text-shadow: 0 0 3px #000, 0 0 3px #000;}'+
                '.progress2 span{opacity: 1 !important;}'+
                '#tlumaczenia nav ul li.menu_add_tlum a{background-color: #2B68AB;border-bottom: 4px solid #2B68AB;background-position: 21px 12px; color: #FFFFFF;}'+
                'nav ul li.menu_add_tlum a:hover{border-bottom: 4px solid #1B4A7E;color: #CCCCCC;background-color: #2B68AB;line-height: 44px;height: 42px;background-position: 21px 12px;}'+
                'nav ul li.menu_add_tlum a:active{border-bottom: 4px solid #1B4A7E;color: #CCCCCC;background-color: #2B68AB;line-height: 48px;height: 42px;background-position: 21px 12px;text-shadow:none;filter:none;border-top:none;}'+
                'table.table-layout tbody tr td[style*="background-color:#255180"], td[style*="background-color:#41d64b"], td[style*="background-color:#3399ff"]{background-color:#DFDFDF !important;}'+ //ostatnio zaktualizowane
                'table.table-layout tbody tr td div span[style*="color: white"], span[style*="color: #feee39"]{color: black !important;}'+ //ilość oczekujących
                'table.table-layout tbody tr td div a[style*="color: rgb(0,200,0)"]{color: rgb(0,150,0) !important;}'+ //moderator
                '.translation {cursor: pointer !important;}'+
                '.headerSortUp{background-image: url(run/images/arrs.png);background-repeat: no-repeat;background-position: right;}'+
                '.headerSortDown{background-image: url(run/images/arrsh.png);background-repeat: no-repeat;background-position: right;}'+
                '.progress > span > span {color: #FFFFFF !important;}'+ //procenty ukończenia
                '#tlumaczenia table.table-layout tbody tr a {color: #1E519D;}'+
                /**komentarze*/
                '.moreInfo2{background-color:#D5D5D5 !important;color:#000000 !important;}'+
                'section#content .tbl .avatar{border-right: 1px solid #A0A0A0 !important;}'+
                '#komentarze section#content .tbl .subtitle .sub h3{color: #000000;}'+
                '#komentarze section#content .tbl .mark{color: #000000;}'+
                'textarea{background-color: #B5B5B5 !important;color: #272829 !important;}'+
                '#komentowane-header{background-color: #ADADAD !important;}'+ //górna belka z datą i oceną
                '.tresc2 div[style*="background-color: #292f35"]{background-color: #E9E9E9 !important;}'+ //cytat
                '#komentarze .sortComments{color: #000000;}'+
                /**artykuły*/
                '#jc{background: none repeat scroll 0px 0px #B5B5B5;}'+
                '#jc h4{color: #272829;background-color: #C5C5C5;}'+
                '#jc .rbox{background-color: #B5B5B5;}'+
                '#comments .comment-author, #comments .author-homepage, #comments .author-email{color: #4B3F37;}'+
                '#comments .comment-date{color: #4B3F37;}'+
                '#comments .comment-body{color: #4B3F37;}'+
                '#comments .quote{color: #4B3F37;}'+
                '#comments blockquote, #comments .hidden, #comments code, #comments pre{color: #1B6A6A;}'+
                '#comments a{color: #174B54;}'+
                '#comments-form input{color: #2D3335;}'+
                /**profil*/
                '#uddeim-overview .sectiontableentry1 {background-color: #C5C5C5 !important;}'+
                '#uddeim-overview .sectiontableentry2 {background-color: #B5B5B5 !important;}'+
                '#uddeim-overview>table {border-collapse: initial !important;}'+
                '#uddeim-writeform input {background-color: #D5D5D5 !important;}'+
                /**seriale*/
                '#seriale span.yellowfont {color: #000000 !important;}'+
                /**serial*/
                'section#content .tbl_top_powiadomienia {background-color:#D5D5D5 !important;border-top: 1px solid #A0A0A0 !important;}'+
                'section#content .tbl_top_powiadomienia .head_l {color: #414141 !important;}'+
                'section#content .tbl_top_powiadomienia .head_r  label {color: #414141 !important;}'+
                '.serialNapisy .infofootertab {color: #000000 !important; background-color: #DEE0E2 !important; border-top: 1px solid #BBBBBB !important;}'+
                '#serial section#content span[style*="color:#5d93d3"] {color: transparent !important;}'+
                /**n24 helper*/
                '#n24h_tr_input_search, #n24h_tr_input_new{color: #000000 !important;}'+
                '#n24h_tr_input_clear, #n24h_tr_input_add, #n24h_tr_input_remove {background-color: #C5C5C5 !important;color: #000000 !important;}'+
                '#n24h_tr_shows_list {background-color: #C5C5C5 !important;color: #000000 !important;}'+
                '.n24h_tr_option {background-color: #C5C5C5 !important;color: #000000 !important;}'+
                'div.n24h_comm_opener:hover {background-color: #C5C5C5 !important;}';
            /** Szara stop*/
            /** n24 classic start*/
            let altcss2='body{background-color:#DEE0E2 !important;color: #272727;}'+//body
                '#avatar-body-middle-block{background-color:#DEE0E2;}'+//środek
                '#avatar-header-inside-block{background-color:#DEE0E2;}'+//górna belka body
                '#avatar-tool-block{background-color:#DEE0E2;}'+
                '#oczekiwane .main_menu li a, #profile .main_menu li a, #szukaj .main_menu li a, #tlumaczenia .main_menu li a {color: #FFFFFF;}'+
                '#oczekiwane .main_menu li a:hover, #profile .main_menu li a:hover, #szukaj .main_menu li a:hover, #tlumaczenia .main_menu li a:hover {color: #cccccc;}'+
                '.logo .screen{border: 4px solid #5592D5 !important;}'+//logo
                '.logo .screen .subline1{background-color: #5592D5 !important;}'+
                '.logo .screen .subline2{background-color: #5592D5 !important;}'+
                '.logo h1{color: #5592D5 !important;}'+
                '.logo h2{color: #5592D5 !important;}'+
                '.avatar-menu-icons[class*="avatar-main-menu-szare"] > li {background-color: #2B68AB;border-right: 1px solid #5592D5;border-bottom: 4px solid #1B4A7E;}'+//menu: forum, irc, rss
                '[class*="avatar-main-menu"] > li:hover {border-bottom: 4px solid #1B4A7E;line-height: 18px;height: 18px;}'+
                '[class*="avatar-main-menu"] > li:hover > a {top:0px;}'+
                'nav{background-color: #2B68AB !important;}'+//pusta przestrzeń między menu a dodaj napisy
                'nav ul li.menu_add_napisy a{background-color: #2B68AB;border-bottom: 4px solid #1B4A7E;}'+//przycisk dodaj napisy
                'nav ul li.menu_add_napisy a:hover{background-color: #1B4A7E;color: #CCC;background-position: 21px 12px;}'+
                'nav ul li.menu_add_napisy a:active{color: #CCC;text-shadow: 0px -1px 1px rgba(0, 0, 0, 0.2);filter: dropshadow(color=#33000000, offx=0, offy=-1);border-top: 4px solid #2B68AB;border-bottom: 4px solid #1B4A7E;background-color: #1B4A7E;background-position: 21px 8px;}'+
                'textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input {background-color: #FFFFFF !important;color: #000000 !important;}'+//pola tekstowe
                '#search #phrase{color: #000000 !important;}'+//wyszukiwarka
                'section#content .tbl_top, section#content .tbl_top1, section#content .tbl_top2{background: linear-gradient(#EDEEEE, #E2E3E3) !important;border-top: none !important;border-radius:5px;border-bottom:1px solid #B6B7B7 !important;}'+ //tabelka nagłówek
                'section#content .tbl {width: inherit !important;}'+
                'section#content .tbl_top .head_l{color:#000000 !important;}'+
                'section#content .tbl{background-color:#F7F8F8 !important;border-top:none !important;border-bottom: 1px solid #DBDCDC;border-right: 1px solid #DBDCDC;}'+
                'section#content .page{border:none !important;}'+
                'section#content .tbl_out{border-bottom:none !important;}'+
                'section#content .pagination{background: linear-gradient(#EDEEEE, #E2E3E3);border:none;border-radius:5px;}'+
                'section#content .tbl .subtitle .sub h2{color:#004896 !important;}'+
                'section#content .tbl .subtitle .sub h3{color:#5D5D5D !important;}'+
                'section#content .pagination .page-start, section#content .pagination .page-prev, section#content .pagination .page-next{ color: #2C2C2C;background-color: #F9F9F9;border: 1px solid #CECFCF;border-radius: 4px;margin: 4px 2px 0px;line-height: 20px;background-image:none;}'+//start, poprzednia, następna
                'section#content .pagination .page-start:hover, section#content .pagination .page-prev:hover, section#content .pagination .page-next:hover{color: #2C2C2C;background-color: #F9F9F9;border: 1px solid #CECFCF;border-radius: 4px;padding-bottom: 0px;line-height: 30px;text-decoration:underline;line-height: 20px;background-image:none;}'+
                'section#content .pagination .page-start, section#content .pagination .page-prev {padding-left:15px;}'+
                'section#content .pagination .page-next {padding-right:15px;}'+
                'section#content .pagination a.page-num{color: #2C2C2C;background-color: #F9F9F9;border: 1px solid #CECFCF;border-radius: 4px;}'+//numery stron
                'section#content .pagination a.page-num:hover{background-color: #F9F9F9;border: 1px solid #CECFCF;margin-top: 0px; border-radius: 4px;text-decoration:underline;}'+
                'section#content .pagination span.page-num{color: #FFFFFF !important;background-color: #2A5EA1;border: 1px solid #CECFCF;border-radius: 4px;}'+//numery stron
                'section#content .pagination span.page-num:hover{background-color: #2A5EA1;border: 1px solid #CECFCF;margin-top: 0px; border-radius: 4px;text-decoration:underline;}'+
                'section#content .tbl.opened .subtitle .opener, section#content .tbl .subtitle:hover .opener {background-color: #F7F8F8 !important;}'+
                '.page .closerSmall, .page .closerSmall:hover, .page .openerSmall, .page .openerSmall:hover, .page .closerSmall2, .page .openerSmall2:hover {background-color: #DEE0E2 !important;}'+
                '.module_frame{border: none;}'+
                '.avatar-module .st-module-heading{background: linear-gradient(#266CB3, #0E418E);border-bottom: 1px solid #0B3372;border-radius:5px;box-shadow: -5px 5px 1px #FFFFFF;margin-bottom:10px;}'+
                '.category-modulemodule_frame li a,aside .list li a{background-color: #1758A5 !important;border-bottom:1px solid #0D3A6F;margin-bottom:1px;font-weight: bold;}'+
                '.category-modulemodule_frame li a:hover,aside .list li a:hover{color: #E8EEF0 !important;background-color: #1758A5 !important;text-decoration:underline;}'+
                'aside{width: inherit !important;}'+
                'aside .list{border: none !important;}'+
                '.moreInfo{background-color:#F7F8F8 !important;color:#252525 !important;}'+
                '.page span{color: #252525 !important;}'+
                '.infofooter{border-top: 1px solid #DBDCDC !important;background-color: #F7F8F8 !important;color:#252525 !important;}'+
                '.infoColumn0{background-color: #F7F8F8 !important;border-right: 1px solid #DBDCDC !important;border-bottom: 1px solid #DBDCDC !important;border-top: 1px solid #DBDCDC !important}'+
                'section#content .tbl .poster{border-right: 1px solid #DBDCDC !important}'+
                'section#content .page{color: #252525 !important;}'+
                '.head_r input[type="radio"]:checked + label{background-image: none !important;color: #FFFFFF !important;background-color: #2A5EA1;border: 1px solid #CECFCF;border-radius: 4px;}'+
                '.head_r input[type="radio"] + label{background-image: none !important;color: #2C2C2C !important;background-color: #F9F9F9;border: 1px solid #CECFCF;border-radius: 4px;padding: 0px 10px 0px 10px !important;}'+
                '.head_r input[type="radio"] + label:hover{text-decoration:underline;}'+
                '.head_r > label{color: #2C2C2C !important;}'+
                'select {background-color: #FFFFFF !important;}'+
                '.infoheader, .infoheader1{color: #20487F !important;}'+
                'section#content .tbl div.mark:nth-child(3) {color: #545D62 !important;}'+
                '.row-fluid {border-bottom: none !important;}'+
                /**tłumaczenia*/
                '#tlumaczenia [class*="avatar-main-menu"] li a {color: #FFF;}'+
                '.checkbox_outer input[type="checkbox"] + span, .checkbox_series input[type="checkbox"] + span, input[type="checkbox"]:not([id="comments-form-subscribe"]) + label{background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wEMETc09F0PlAAAAGRJREFUOMtj/Pnz538GKoCr164xMDFQEQxZw+4wTJzDzsDensGwY0h7kxFb0rhz2IpB+8hZ7Do0NzL8DPCgfdJgxJ9o7zBMnKPNUPY6kWFj5QwGjyGbaBlH8ybJgOXqtWtUMwwAJg4sDO+yKkcAAAAASUVORK5CYII=) !important;}'+
                '.checkbox_outer input[type="checkbox"] + span,.checkbox_series input[type="checkbox"] + span{width:19px;height:17px;}'+
                '.checkbox_outer input[type="checkbox"]:checked + span, .checkbox_series input[type="checkbox"]:checked + span, input[type="checkbox"]:checked:not([id="comments-form-subscribe"]) + label{background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wEMETcCO+eaDQAAADxJREFUOMtj/Pnz538GKoCr164xMDFQEYwaNjIMuzORgZWdnYENhq0mMjDS02WMozlgGBnGcvXaNaoZBgBLTBH0qX8ljgAAAABJRU5ErkJggg==) !important;}'+
                '.checkbox_outer input[type="checkbox"]:hover + span, .checkbox_series input[type="checkbox"]:hover + span{border-bottom: 1px solid #FCB622;border-right: 1px solid #FCB622;border-radius: 5px;}'+
                '.checkbox_outer{margin-top: 0px !important;top: 4px !important;}'+
                'table.table-layout {border: none !important;}'+
                'table.table-layout thead tr th{background: linear-gradient(#2369B0, #104694, #2167AF) !important;color: #DDDDDD !important;border: solid 1px white !important;line-height: inherit !important;}'+ //nagłówek tabelki
                'table.table-layout tbody tr.odd td:not([style*="background-color:#255180"]):not([style*="background-color:#DD7665"]):not([style*="background-color:#41d64b"]):not([style*="background-color:#3399ff"]):not([data-n24h-star]){background: linear-gradient(#FFFFFF, #DEE0E2) !important;}'+//nie nadpisuj aktualizacji
                'table.table-layout tbody tr.even td:not([style*="background-color:#255180"]):not([style*="background-color:#DD7665"]):not([style*="background-color:#41d64b"]):not([style*="background-color:#3399ff"]):not([data-n24h-star]){background: linear-gradient(#E1E1E1, #ECECEC) !important;}'+
                '.progress div {background-color: #E7BA63 !important; background-image: none !important;}'+
                '#profile .progress, #szukaj .progress, #tlumaczenia .progress, #serial .progress, #oczekiwane .progress {background-image: linear-gradient(#FFFFFF, #DEE0E2) !important;background-color: #DEE0E2 !important; border-right: 1px solid #D3D6D7 !important;border-bottom: 1px solid #D3D6D7 !important;bottom: 0px !important;top: 0px !important;margin: auto;}'+
                '.progress2 {background-image: linear-gradient(#FFFFFF, #DEE0E2) !important;background-color: #DEE0E2 !important; border-right: 1px solid #D3D6D7 !important;border-bottom: 1px solid #D3D6D7 !important;bottom: 0px !important;top: 0px !important;margin: auto;height: 20px;overflow: hidden;border-radius: 4px;box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);position: absolute;left: 8px;right: 8px;text-align: center;background-repeat: no-repeat;}'+
                '#profile .progress2 div, #szukaj .progress2 div, #tlumaczenia .progress2 div, #serial .progress2 div {background-color: #E7BA63 !important; background-image: none !important;top: 0px !important;left: 0px !important;right: 0px !important;}'+
                '#oczekiwane .progress2 > span, #profile .progress2 > span, #szukaj .progress2 > span, #tlumaczenia .progress2 > span{position: absolute;bottom: 0px;left: 0px;right: 0px;text-align: center;z-index: 3;text-shadow: rgb(0, 0, 0) 0px 0px 3px, rgb(0, 0, 0) 0px 0px 3px;font-size: 10px;letter-spacing: 1px;color: #fff !important;}'+
                '#oczekiwane .progress2 > span > span, #profile .progress2 > span > span, #szukaj .progress2 > span > span, #tlumaczenia .progress2 > span > span {display: inline-block;text-align: center;font-weight: 700;font-size: 9px;width: 36px;letter-spacing: 1px;}'+
                '.progress2 span{opacity: 1 !important;}'+
                'table.table-layout tbody tr td{color: #252525 !important;}'+
                'table.table-layout tbody tr td[style*="background-color:#255180"],td[style*="background-color:#41d64b"],td[style*="background-color:#3399ff"] {background-color: #E7BA63 !important;}'+ //ostatnio zaktualizowane
                'table.table-layout tbody tr td div span[style*="color: white"], span[style*="color: #feee39"]{color: #252525 !important;}'+ //ilość oczekujących
                '.progress > span > span, .progress2 > span > span {color: #252525 !important; text-shadow: none !important;}'+ //procenty ukończenia
                '.progress > span, .progress2 > span {top: -3px !important;}'+
                'table.table-layout tbody tr td{border-top: 1px solid #ffffff !important;border-left: 1px solid #ffffff !important;border-right: 1px solid #ffffff !important;border-bottom: 1px solid #bbbbbb !important;padding-top: 2px !important;padding-bottom: 2px !important;}'+
                'table.table-layout tbody tr:not(.serialNapisy):not(#n24h_emptyrow):hover td{border-top: solid 2px #E7BA63 !important;border-bottom: solid 2px #E7BA63 !important;border-left: solid 1px #E7BA63 !important;border-right: solid 1px #E7BA63 !important;padding-top: 1px !important;padding-bottom: 1px !important;}'+
                'table.table-layout {border-collapse: initial !important;}'+
                '.translation {cursor: pointer !important;}'+
                '#tlumaczenia nav ul li.menu_add_tlum a{background-color: #2B68AB;border-bottom: 4px solid #2B68AB;background-position: 21px 12px; color: #FFFFFF;}'+
                'nav ul li.menu_add_tlum a:hover{border-bottom: 4px solid #1B4A7E;color: #CCCCCC;background-color: #2B68AB;line-height: 44px;height: 42px;background-position: 21px 12px;}'+
                'nav ul li.menu_add_tlum a:active{border-bottom: 4px solid #1B4A7E;color: #CCCCCC;background-color: #2B68AB;line-height: 48px;height: 42px;background-position: 21px 12px;text-shadow:none;filter:none;border-top:none;}'+
                'table.table-layout thead tr th.headerSortUp{background-image: url(run/images/arrs.png) ,linear-gradient(#2369B0, #104694, #2167AF) !important; !important;background-repeat: no-repeat !important;background-position: right !important;}'+
                'table.table-layout thead tr th.headerSortDown{background-image: url(run/images/arrsh.png) ,linear-gradient(#2369B0, #104694, #2167AF) !important; !important;background-repeat: no-repeat !important;background-position: right !important;}'+
                '#tlumaczenia table.table-layout tbody tr a {color: #2B68AB;}'+
                /**komentarze*/
                '.moreInfo2{background-color:#DFE2E5 !important;color:#000000 !important;}'+
                'section#content .clear ~ .tbl{background-color:#DFE2E5 !important;border-bottom: 1px solid #BBBBBB !important;margin-bottom:2px !important;}'+
                'section#content .clear ~ .tbl .infoColumn0{background-color:#DFE2E5 !important;}'+
                'section#content .clear ~ .tbl .infofooter{background-color:#ECEEEF !important;color:#000000 !important;border-top: 1px solid #BBBBBB !important;}'+
                'section#content .tbl .avatar{border-right: 1px solid #BBBBBB !important;}'+
                '#komentarze section#content .tbl .subtitle .sub h3{color: #FFFFFF !important;}'+
                '#komentarze section#content .tbl .mark{color: #FFFFFF;}'+
                'textarea{background-color: #FFFFFF !important;color: #000000 !important;}'+
                '#komentowane-header{background: linear-gradient(#2369B0, #104694, #2167AF) !important;color: #DDDDDD !important;line-height: inherit !important;}'+ //górna belka z datą i oceną
                'section#content>.page>div[style*="margin-left:"]{border-left:1px solid #000000; border-top:1px solid #000000; border-right:1px solid #000000; background-color: #FFFFFF;margin-left:0px !important;padding-left: 15px;}'+
                'form#userForm{border-left:1px solid #000000; border-bottom:1px solid #000000; border-right:1px solid #000000; background-color: #FFFFFF;}'+
                '.tresc2 div[style*="background-color: #292f35"]{background-color: #FFFFFF !important;}'+ //cytat
                '#komentarze section#content .tbl_out .mark, #komentarze section#content .tbl_out .subtitle .sub h3 {color: #545d62 !important;}'+ //ocena całości, releasy
                /**artykuły*/
                '#jc{background: none repeat scroll 0px 0px #DFE2E5; border: 1px solid #000000;}'+
                '#jc .rbox{background-color: #DFE2E5;}'+
                '#comments .comment-date{color: #252525;}'+
                '#comments .comment-body{color: #252525;}'+
                '#comments blockquote, #comments .hidden, #comments code, #comments pre{color: #252525;}'+
                '#comments a{color: #174B54;}'+
                /**profil*/
                'section#content .page > h2 {background: linear-gradient(#EDEEEE, #E2E3E3) !important;border-top: none !important;border-radius:5px;border-bottom:1px solid #B6B7B7 !important; color:#252525 !important;}'+
                '#uddeim-overview .sectiontableentry1 {background-color: #ECECEC !important;}'+
                '#uddeim-overview .sectiontableentry2 {background-color: #DEE0E2 !important;}'+
                '#uddeim-overview>table {border-collapse: initial !important;}'+
                '#uddeim-writeform input {background-color: #FFFFFF !important;}'+
                /**seriale*/
                '#seriale span.yellowfont {color: #000000 !important;}'+
                /**serial*/
                'section#content .tbl_top_powiadomienia {background: linear-gradient(#EDEEEE, #E2E3E3) !important;border-top: none !important;border-radius:5px;}'+
                'section#content .tbl_top_powiadomienia .head_l {color: #414141 !important;}'+
                'section#content .tbl_top_powiadomienia .head_r  label {color: #414141 !important;}'+
                '.serialNapisy .moreInfo {background-color: #DEE0E2 !important;}'+
                '.serialNapisy .infofootertab {color: #000000 !important; background-color: #DEE0E2 !important; border-top: 1px solid #BBBBBB !important;}'+
                '#serial section#content .tbl_top_powiadomienia .head_r label[style*="background-image:none"] {background-image:none !important;}'+
                '#serial section#content span[style*="color:#5d93d3"] {color: transparent !important;}'+
                /**n24 helper*/
                'table.table-layout tbody tr.odd td[data-n24h-star]{background-image: url('+icons.staroff+'), linear-gradient(#FFFFFF, #DEE0E2) !important;background-repeat: no-repeat !important;background-position: center !important;}'+
                'table.table-layout tbody tr.even td[data-n24h-star]{background-image: url('+icons.staroff+'), linear-gradient(#E1E1E1, #ECECEC) !important;background-repeat: no-repeat !important;background-position: center !important;}'+
                'table.table-layout tbody tr.odd td[data-n24h-star="on"]{background-image: url('+icons.staron+'), linear-gradient(#FFFFFF, #DEE0E2) !important;}'+
                'table.table-layout tbody tr.even td[data-n24h-star="on"]{background-image: url('+icons.staron+'), linear-gradient(#E1E1E1, #ECECEC) !important;}'+
                'table.table-layout tbody tr.odd td[data-n24h-star="auign"], table.table-layout tbody tr.odd td[data-n24h-star="trign"], table.table-layout tbody tr.odd td[data-n24h-star="autit"]{background-image: url('+icons.starign+'), linear-gradient(#FFFFFF, #DEE0E2) !important;}'+
                'table.table-layout tbody tr.even td[data-n24h-star="auign"], table.table-layout tbody tr.even td[data-n24h-star="trign"], table.table-layout tbody tr.even td[data-n24h-star="autit"]{background-image: url('+icons.starign+'), linear-gradient(#E1E1E1, #ECECEC) !important;}'+
                'th#n24h_tr_favhead{background-image: url('+icons.staron+'), linear-gradient(#2369B0, #104694, #2167AF) !important;background-repeat: no-repeat !important;background-position: center !important;}'+
                '#n24h_tr_input_search, #n24h_tr_input_new{color: #000000 !important; border: 1px solid #CECFCF !important;}'+
                '#n24h_tr_input_clear, #n24h_tr_input_add, #n24h_tr_input_remove {background-color: #F9F9F9 !important;color: #000000 !important; border: 1px solid #CECFCF !important;}'+
                '#n24h_tr_shows_list {background-color: #FFFFFF !important;color: #000000 !important;border: 1px solid #CECFCF !important;}'+
                '.n24h_tr_option {background-color: #FFFFFF !important;color: #000000 !important;}'+
                'div.n24h_comm_opener:hover {background-color: #F0F0F0 !important;}'+
                'table.table-layout thead tr th.n24h_sort_asc{background-image: url(run/images/arrsh.png) ,linear-gradient(#2369B0, #104694, #2167AF) !important; !important;background-repeat: no-repeat !important;background-position: right !important;}'+
                'table.table-layout thead tr th.n24h_sort_desc{background-image: url(run/images/arrs.png) ,linear-gradient(#2369B0, #104694, #2167AF) !important; !important;background-repeat: no-repeat !important;background-position: right !important;}';
            /** n24 classic stop*/
            switch (options.getValue('altskinid', '1')) {
                case '1':
                    utils.insertcss(altcss1);
                    break;
                case '2':
                    utils.insertcss(altcss2);
                    break;
                default:
                    console.log('Błędny parametr "altskinid": '+options.getValue('altskinid', 'Err'));
            }
        },
        shrinkButtons: function() {
            let css='.avatar-menu-icons[class*="avatar-main-menu"] > li {padding-left: 5px; padding-right: 5px;}';
            utils.insertcss(css);
        },
        /**
            Usuń target="_blank" ze wszystkich odnośników
        */
        killTargetBlank: function() {
            let targets=document.querySelectorAll('a[target="_blank"]');
            for (let i=0;i<targets.length;i++) {
                targets[i].removeAttribute('target');
            }
        },
        /**
            Usuń przyciski "Dołącz..."
        */
        killConnectButtons: function() {
            let divs=document.querySelectorAll('div.cbConnectButtons');
            for (let i=0;i<divs.length;i++) {
                divs[i].parentNode.removeChild(divs[i]);
            }
        },
        fixThings: function() {
            if(location.pathname.toLowerCase() === '/napisy-podglad') {
                let li=document.querySelector('div.list li>a[href*="/napisy-podglad?"]');
                if (li) {
                    li.setAttribute('href', li.getAttribute('href').replace(/napisy-podglad/, 'komentarze'));
                    li.textContent='Skomentuj';
                }
            }
        },
        init: function() {
            if (options.getValue('fixsearch', false)) {
                misc.fixSearch();
            }
            if (options.getValue('killcover', false)) {
                misc.killCover();
            }
            if (options.getValue('killimdbinfo', false)) {
                misc.killIMDBInfo();
            }
            if (options.getValue('usesmallmenubuttons', false)) {
                misc.shrinkButtons();
            }
            if (options.getValue('removeconnectbuttons', false)) {
                misc.killConnectButtons();
            }
            misc.fixThings();
        }
    };

    var n24h = {
        /**
        */
        onLoad: function() {
            options.init();
            misc.init();
            if(location.pathname.toLowerCase() === '/tlumaczenia') {
                tlumaczenia.init();
            }
            if(location.pathname.toLowerCase() === '/komentarze') {
                komentarze.init();
            }
            if((location.pathname.toLowerCase() === '/serial')||(location.pathname.toLowerCase().indexOf('/serial/')>-1)) {
                serial.init();
            }
            if (options.getValue('removetargetblank', false)) {
                misc.killTargetBlank();
            }
        },
        setAltSkin: function() {
            if (options.getValue('usealtskin', false))
            {
                let head=document.querySelector('head');
                let body=document.querySelector('body');
                if ((!head)||(!body))
                {
                    //upewnij się że mamy załadowane head i body
                    setTimeout(n24h.setAltSkin,1);
                } else {
                    misc.altSkin();
                }
            }
        },
        /**
        */
        init: function()
        {
            if ( document.readyState === 'interactive' || document.readyState === 'complete' ) {
                n24h.onLoad();
            } else {
                addEventListener('DOMContentLoaded', n24h.onLoad);
            }
            n24h.setAltSkin();
        }
    };

    n24h.init();

})();