var about = {
    init: function () {
        validation('#contactForm', about.contact);
        nav.setTitle('О сайте');
        document.querySelector('.indx_title_main_wrapper').style = "background-image: url(" + img.url(5496, 300, 75, 'bg') + ");";
    },
    contact: function () {
        var text = e('message').value.trim();
        var email = e('email').value.trim();
        var name = e('name').value.trim();

        j.post(['about', 'contact'], function (data) {
            var frm = e('contactForm');
            empty(frm);
            // if (data.mgr.http_response_code == 200) e('alert', frm, 'div', 'alert alert-success').innerHTML = 'Спасибо! Ваше сообщение успешно отправлено.';
            if (data.result == 1) e('alert', frm, 'div', 'alert alert-success').innerHTML = 'Спасибо! Ваше сообщение успешно отправлено.';
            else e('alert', frm, 'div', 'alert alert-warning').innerHTML = 'К сожалению произошла ошибка, сообщите об этом по адресу - blago.web@outlook.com';
        }, {text: text, name: name, email: email, history: clk.debugPushedHistory});

    }
};var account = {
    loginForm: document.forms.login,
    init: function(){
        switch (path[0]) {
            case 'profile': {
                nav.setTitle('Настройки профиля');
                e('accountMain').classList.add('menuPullLeft');
                document.querySelector('input[name="userName"]').value = user.name;
                document.querySelector('input[name="userEmail"]').value = user.info.email;
                if (isDefined(user.info) && user.info.subscriber)
                    document.querySelector('input#newsletters').checked = 'checked';

                $('#saveAccount').off().on('click', function () {
                    validation('#profile', account.saveProfile);
                });

                break;
            }
            case 'changePass': {
                nav.setTitle('Изменение пароля');
                e('accountMain').classList.add('menuPullLeft');

                break;
            }
            case 'playlists': {
                nav.setTitle('Мои плейлисты');
                var div, el, val, par = e('playlists');


                for (var i in user.info.playlists) {
                    div = document.querySelector('#playlists>div').cloneNode(true);
                    div.hidden = false;
                    par.appendChild(div);

                    var line = user.info.playlists[i];

                    div.dataset.mid = line.id;
                    div.dataset.ext = 'playlist';
                    div.dataset.playable = line.count>0?1:0;
                    if(i==user.info.defaultPlaylistId) div.classList.add('isDefault');

                    for (var k in line){
                        val = line[k];
                        var selector = div.querySelector('[data-name="' + k + '"]');
                        if(selector)selector.innerText = val;
                    }

                    account.getTitleImg(line['name'], div.querySelector('canvas'));

                }

                break;
            }
            case 'marks': {
                nav.setTitle('Избранное');
                j.post(['account', 'get', 'marks'], function (data) {

                    var el, div, line, val;
                    var par = e('marks');
                    par.removeAttribute('hidden');

                    for (var i in data.marks) {
                        div = document.querySelector('#marks ul.album_inner_list_padding').cloneNode(true);
                        div.removeAttribute('hidden');
                        el = par.appendChild(div);
                        line = data.marks[i];

                        el.dataset.list = i;
                        el.dataset.mid = line.mid;
                        el.dataset.pmid = line.pmid;
                        el.dataset.ext = line.ext;
                        el.dataset.playable = line.totalPlayTime>0 || line.ext=='mp3'?1:0;
                        if (isDefined(user.info.playlistMIDS[line.mid])) el.classList.add('inPlaylist');
                        if (isDefined(user.info.markedMid[line.mid])) el.classList.add('inFavourites');

                        // console.log(line);

                        for (var k in line) {
                            val = line[k];
                            if (k == 'imgId') {
                                val != 4000 || mediaStructure[line.pmid].imgId != 4000
                                    ?
                                    ( $(el).find('img')[0].src = img.url(val != 4000? val : mediaStructure[line.pmid].imgId, 50, 50), el.classList.add('hasImg'))
                                    : $(el).find('img')[0].hidden = true;
                            } else {
                                if (k == 'playTime') val = val != 0 && val != null ? formatTime(val) : line.ext!='dir' ? formatBytes(line.size) : '';
                                if (k == 'name') val = media.build.extIcon(line.ext) + val;
                                else if (k == 'mid') val = parseInt(i) + 1;
                                $(el).find('[data-name="' + k + '"]').html(val);
                            }
                        }
                        if(line.ext!='dir')el.querySelector('.simpleDwnld').hidden = false;

                        //проверить папка или файл и дать ссылку на скачивание или архив
                    }

                }, {});

                break;
            }
            default:
                nav.goTo('account/profile');
                break;
        }

        if(document.querySelector('#accountContainer>div:not([hidden]):not(#alert)'))
            document.querySelector('#accountContainer>div:not([hidden]):not(#alert)').hidden = true;
        if(document.getElementById(path[0])){
            if(document.querySelector('#accountMenu a.active'))
                document.querySelector('#accountMenu a.active').classList.remove('active');
            document.querySelector('#accountMenu a.'+path[0]).classList.add('active');
            e('accountMain').classList.add(path[0]);
            e(path[0]).hidden = false;
        }

    },
    getTitleImg: function(title, canvas){
        var ctx = canvas.getContext("2d");

        var r = title.charCodeAt(0)%255
            ,g = title.charCodeAt(1)%255
            ,b = title.charCodeAt(2)%255;

        ctx.fillStyle = "rgb("+r+", "+g+", "+b+")";
        ctx.fillRect(0, 0, canvas.width, canvas.height);
        ctx.fillStyle = "rgb(255, 255, 255)";
        ctx.font = "bold 50px Verdana,sans-serif";
        ctx.textAlign = 'center';
        ctx.lineWidth = 1;
        ctx.fillText(title[0], canvas.width*.5, canvas.height*.5+10);
    },
    /**
     *
     * @param type: 0 - error, 1 - success, 2 - warning
     * @param msg
     * @param boxId
     */
    displayMsg: function(type, msg, boxId){
        boxId = boxId || 'alert';
        var cls = '';
        switch (type) {
            case 0: {
                cls = 'alert alert-danger';
                break;
            }
            case 1: {
                cls = 'alert alert-success';
                break;
            }
            case 2: {
                cls = 'alert alert-warning';
                break;
            }

            default:
                cls = 'alert alert-info';
                break;
        }
        e(boxId).cl(cls);
        $('#'+boxId).empty().append(msg).fadeIn(400).delay(10000).fadeOut(400);
    },
    saveProfile: function () {
        let name = document.forms.profile.userName.value;
        let email = document.forms.profile.userEmail.value;
        let subscribe = document.forms.profile.subscribe.checked?1:0;

        if(subscribe == '0'){
            if (!confirm('Вы действительно не хотите получать нашу рассылку?')){
                subscribe = 1;
            }
        }
        j.post(['account', 'set', 'profile'], function (data) {
            // console.log(data);
            if (data.status) {
                user.name=name;
                account.displayMsg(1, data.message, 'alert');
            }
            else {
                document.forms.profile.userEmail.value = user.info.email;
                account.displayMsg(0, data.message, 'alert');
                // alert(data.message);
            }
        }, {name: name, email: email, subscribe: subscribe});
    },
    loginLink: function(){
        if(isDefined(user.name)) nav.goTo('/account/profile');
        else $('#login_modal').modal('show');
    },
    login: function () {
        // console.log();
        j.post([], function (data) {

            if (data.pass == 1) {
                e('userName').innerText = 'Аккаунт';

                // save to global
                user = {name:data.name};
                document.querySelector('body').classList.add('logined');
                $('#login_modal').modal('hide');
                init();
            }
            else {
                account.displayMsg(0,'Ваш логин или пароль был введен <br> <b>неверно</b>, попробуйте еще раз.','loginMsg');
            }
        }, {session: 1, user: account.loginForm.email.value, pass: account.loginForm.password.value, rememberMe: account.loginForm.rememberMe.checked?1:0});
    },
    logout: function () {
        // console.log('logout');
        j.post([], function () {
            user = {};
            $('#userName').text('Войти');
            document.querySelector('body').classList.remove('logined');
            nav.goTo();

        }, {session: 0});
    },
    forgot: function () {
        j.post(['account', 'forgot'], function (data) {

            if (data.status) {
                account.displayMsg(1, data.message, 'forgotMsg');
            }
            else {
                account.displayMsg(0, data.message, 'forgotMsg');

            }
        }, {email: document.forms.forgot.email.value});
    },
    register: function () {
        j.post(['account', 'register'], function (req) {

            if (req.status) {
                account.displayMsg(1, req.message, 'registerMsg');
            }
            else account.displayMsg(0, req.message, 'registerMsg');

        }, {name: document.forms.register.name.value, email: document.forms.register.email.value, password: document.forms.register.password.value});
    },
    changePass: function(){
        j.post(['account', 'set', 'password'], function (data) {
            account.displayMsg(data.status?1:0,data.message,'alert');
        }, {pass: document.forms.changePass.password.value});
    },
    subscribe: function () {
        j.post(['subscribe'], function (data) {
            $('#subcribeMsg').fadeIn(100);
            if (data.status) document.getElementById('subcribeMsg').innerText = "Вы успешно подписались на нашу рассылку";
            else if (data.errno == 1062) document.getElementById('subcribeMsg').innerText = "Этот email уже есть в списках рассылки";
            else document.getElementById('subcribeMsg').innerText = "Возникла непредвиденная ошибка. Свяжитесь с администратором сайта.";
            setTimeout(function () {
                $('#subcribeMsg').fadeOut(500);
            }, 3000);
        }, {name: document.forms.subscribeForm.name.value, email: document.forms.subscribeForm.email.value});
    },
    playlistAct: {
        setDefault: function (ev) {
            var par = ev.closest('[data-mid]');
            if (confirm('Вы действительно хотите установить этот плейлист по умолчанию?')) {
                j.post(['account', 'set', 'defaultPlaylist'], function (data) {
                    // console.log(data);
                    if (data.status) {
                        if(document.querySelector('.isDefault'))
                            document.querySelector('.isDefault').classList.remove('isDefault');
                        par.classList.add('isDefault');
                        account.displayMsg(1, 'Плейлист по умолчанию успешно установлен.');
                    }
                    else {
                        account.displayMsg(0, data.message);
                    }
                }, {id: par.dataset.mid});
            }
        },
        rename: function (ev) {
            var par = ev.closest('[data-mid]');
            var plid = par.dataset.mid;
            var newName = prompt('Введите новое название для плейлиста:', par.querySelector('[data-name="name"]').innerText);
            if(newName!=null && newName.trim() != "") j.post(['account', 'set', 'playlistName'], function (data) {
                newName = newName.trim();
                if (data.status) {
                    account.displayMsg(1, data.message);
                    par.querySelector('[data-name="name"]').innerText = newName;
                }
                else {
                    account.displayMsg(0, data.message);
                }
            }, {id: plid, name: newName});
            else if(newName!=null) account.displayMsg(0,'Вы не можете оставить пустое имя плейлиста');
        },
        del: function (ev) {
            var par = ev.closest('[data-mid]');
            var plid = par.dataset.mid;
            if(confirm('Вы действительно хотите удалить плейлист '+par.querySelector('[data-name="name"]').innerText+'?'))
                j.post(['account','playlist','delete'], function (data) {
                    if (data.status) {
                        account.displayMsg(1, data.message);
                        par.remove();
                    }
                    else {
                        account.displayMsg(0, data.message);
                    }
                }, {id: plid});
        },
        create: function () {
            var newName = prompt('Введите название для нового плейлиста:', 'Новый плейлист');
            if(newName!=null && newName.trim() != "") j.post(['account', 'playlist', 'create'], function (data) {
                newName = newName.trim();
                if (data.status) {
                    account.displayMsg(1, data.message);

                    var div = document.querySelector('#playlists>div').cloneNode(true);
                    div.hidden = false;
                    document.querySelector('.isDefault').classList.remove('isDefault');
                    div.classList.add('isDefault');
                    div.querySelector('[data-name="name"]').innerText = newName;
                    e('playlists').appendChild(div);
                    div.dataset.mid = data.newPlaylistId;
                    account.getTitleImg(newName, div.querySelector('canvas'));
                }
                else {
                    account.displayMsg(0, data.message);
                }
            }, {name: newName});
            else if(newName!=null) account.displayMsg(0,'Вы не можете создать плейлист без имени');
        }
    }
    ,getAllUserData:function () {
        if (isDefined(user) && user) {
            j.post(['account', 'get', 'allUserInfo'], function (data) {
                // console.log(data);
                user.info = data.userInfo;
                document.querySelector('body').classList.add('logined');
                if(!moderator.activated)moderator.activate();
            });
        }
    }
};var articles = {
    init: function () {

    }
};var bible = {
    defaultBodyFontSize: 14,
    currentBodyFontSize: false,
    book: 40,
    chapter: 0,
    structure: false,
    audio: false,
    init: function () {

        document.querySelector('.indx_title_main_wrapper').style = "background-image: url(" + img.url(4176, 300, 75, 'bg') + ");";

        if (path[0] == "dictionary") {
            if (isDefined(path[1])) {
                var lettId = path.slice(-1)
                j.post(['bible', 'dictionary'], function (data) {
                    //console.log(data);
                    bible.dicData = data;
                    e(lettId).classList.add('active');
                    e('dictionaryWords').hidden = false;

                    if (isDefined(data.dictionaryList)) {
                        bible.buildDictionary.list();
                    }
                    else if (isDefined(data.word)) {
                        bible.buildDictionary.word();
                    }
                    nav.setTitle("Библейский словарь");
                    e('dictionary').hidden = false;
                    e('bible').classList.add('dictionary');
                    if(document.querySelector('#dictionaryLetters .active'))
                        document.querySelector('#dictionaryLetters .active').classList.remove('active');
                }, {id: lettId});
            }
            else {
                nav.setTitle("Библейский словарь");
                e('dictionary').hidden = false;
                e('bible').classList.add('dictionary');
                if(document.querySelector('#dictionaryLetters .active'))
                    document.querySelector('#dictionaryLetters .active').classList.remove('active');
            }

        }
        else {
            j.post(['bible', 'init'], function (data) {
                e('bible').className = '';
                e('bible').classList.add('bible');
                e('bookPage').style.fontSize = this.currentBodyFontSize + "px";

                bible.structure = data['structure'];
                bible.audio = data['audio'];
                bible.menu = data['menu'];
                e('bibleCont').hidden = false;

                var mode = 'book';
                bible.chapter = 0;

                if (isDefined(path[0]) && path[0] == "search") mode = 'search';
                else {
                    if (isDefined(path[1]) && path[1] != '') bible.book = path[1], mode = 'book';
                    if (isDefined(path[2]) && path[2] != '') bible.chapter = path[2], mode = 'chapter';
                }

                bible.build.menu();
                bible.build[mode]();

                bible.actions.init();
                // search.init();
                nav.setTitle("Библия");
            });
        }

        this.currentBodyFontSize = this.currentBodyFontSize ? this.currentBodyFontSize : this.defaultBodyFontSize;
    },
    buildDictionary: {
        list: function () {
            var itemList, list = bible.dicData.dictionaryList;
            $('#center #dictionaryWords').empty();
            list.forEach(function (item, i) {
                $('#dictionaryWords').append('<a href="/bible/dictionary/' + toUrl(item.word) + '/' + item.id + '">' + item.word + '</a>');
            });
        },
        word: function () {
            var data = bible.dicData.word;
            $('#center #dictionaryWords').empty();
            $('#dictionaryWords').append('<h3 style="text-decoration: underline;">Библейский словарь &gt;&gt; ' + data.word + '</h3>');
            $('#dictionaryWords').append('<p><strong>' + data.word + '</strong>  ' + data.description + '. </p>');
        }
    },
    build: {
        menu: function () {
            e('bibleMenu').hidden = false;
            document.querySelector('.tstTitle[data-menu="' + (bible.book < 40 ? 'oldTst' : 'newTst') + '"]').classList.add('active');
            e(bible.book < 40 ? 'oldTst' : 'newTst').hidden = false;
            for (var t in bible.menu) {
                var p = e(t + 'Tst');
                for (var bookId in bible.menu[t]) {
                    var book = bible.menu[t][bookId];
                    var cls = path[0] != "search" && bible.book == bookId ? ' active' : '';
                    var bL = e(null, p, 'li', 'bookLink' + cls);
                    var link = e(null, bL, 'a');
                    link.innerHTML = book.name + '<span class="chapters">' + book.chapters + '</span>';
                    // link.dataset.bookid = bookId;
                    link.href = '#';
                    link.dataset.href = bible.bibleUrl('b', bookId);
                    link.onclick = function (ev) {
                        if (e("mobileMenuModal").classList.contains('show')) {
                            $("#mobileMenuModal").on('hide.bs.modal', function () {
                                nav.goTo(ev.target.dataset.href);
                            });
                            $('#mobileMenuModal').modal('hide');
                        } else nav.goTo(ev.target.dataset.href);
                    }
                }
            }
        },
        book: function () {
            this.chapterMenu();
            nav.setTitle(bible.structure[bible.book].name + ' - Библия');
            j.post(['bible', 'bookInfo'], function (data) {
                var par = e('bookPage'), chapt, chBox, verBox;

                for (var t in data.topics) {
                    chapt = data.topics[t];

                    chBox = e(null, par, 'div', 'chaptBox');
                    e(null, chBox, 'h6').innerText = 'Глава ' + t;
                    for (var v in chapt) {
                        verBox = e(null, chBox, 'p', 'verseBox');
                        e(null, verBox, 'a').u(bible.bibleUrl('v', bible.book, t, v)).innerText = t + ':' + v;
                        e(null, verBox, 'span').u(bible.bibleUrl('v', bible.book, t, v)).innerText = ' - ' + chapt[v];
                    }
                }
            }, {book: bible.book});

            e('playChapter').dataset.mid = bible.audio[bible.book][1].pmid;
            e('playChapter').dataset.dir = 1;
        },
        chapter: function () {
            this.chapterMenu();

            var cth = ' >> Глава ' + path[2],
                cth2 = ' Глава ' + path[2];
            nav.setTitle(bible.structure[bible.book].name + cth2 + ' - Библия');

            j.post(['bible', 'chapterInfo'], function (data) {
                var par = e('bookPage'), verse, activeVerse = false;
                if (isDefined(path[3]) && path[3] != '' && isDefined(data.text[path[3]])) activeVerse = path[3];

                for (var v in data.text) {
                    var cls = activeVerse == v ? ' active' : '';
                    verse = e(null, par, 'p', 'verse' + cls);
                    verse.dataset.verse = v;
                    e(null, verse, 'b').innerText = v + '. ';
                    e(null, verse, 'span').innerText = data.text[v].text;
                    var r = e(null, verse, 'span', 'refLinks');
                    for (var rKey in data.text[v].r) {
                        var ref = data.text[v].r[rKey];
                        e(null, r, 'a').u(bible.bibleUrl('v', ref.rBook, ref.rChapter, ref.rVerse))
                            .innerText = bible.structure[ref.rBook].nameShort + '. ' + ref.rChapter + ':' + ref.rVerse + (rKey != data.text[v].r.length - 1 ? ',' : '');

                    }
                }

                if (activeVerse) document.querySelector('#bookPage .verse.active').scrollIntoView();

                bible.actions.init();

            }, {book: bible.book, chapter: bible.chapter});

            e('playChapter').dataset.mid = bible.audio[bible.book][bible.chapter].mid;
            e('playChapter').dataset.pmid = bible.audio[bible.book][bible.chapter].pmid;
        },
        chapterMenu: function () {
            var chapterBox = e('bookChaptersTop');
            chapterBox.innerHTML='';
            chapterBox.hidden = false;
            var maxCount = Math.floor(chapterBox.offsetWidth / (bible.structure[bible.book].chapters > 100 ? 43 : 34));
            var opt = {
                startEndCount: Math.floor((maxCount - 7) / 2) > 1 ? 2 : 1,
                rangeCount: Math.floor((maxCount - 7) / 2) > 1 ? Math.floor((maxCount - 7) / 2) : 1,
                currentChapter: bible.chapter || 0
            }

            for (var chapter = 1; chapter <= bible.structure[bible.book].chapters; chapter++) {
                var oldDisplay = isDefined(display) ? display : true;
                var display =
                    chapter <= opt.startEndCount  // первые startEndCount глав
                    || (chapter <= (maxCount - 1 - opt.startEndCount) && opt.currentChapter < (opt.startEndCount + opt.rangeCount + 3))
                    || (chapter >= (bible.structure[bible.book].chapters - (maxCount - 2 - opt.startEndCount)) && opt.currentChapter > (bible.structure[bible.book].chapters - (opt.startEndCount + opt.rangeCount + 1)))
                    || bible.structure[bible.book].chapters < (opt.startEndCount * 2 + opt.rangeCount * 2 + 1) // сумарное количество глав не превышает допустимое
                    || chapter > (bible.structure[bible.book].chapters - opt.startEndCount) // последние startEndCount глав
                    || (chapter >= (opt.currentChapter - opt.rangeCount) && chapter <= (parseInt(opt.currentChapter) + opt.rangeCount)); //текущая глава +
                if (display) {
                    var cls = bible.chapter == chapter ? 'active' : '';
                    e(null, e(null, chapterBox, 'li', cls), 'a').u(bible.bibleUrl('c', bible.book, chapter)).innerText = chapter;
                } else if (oldDisplay != display) e(null, e(null, chapterBox, 'li', cls), 'a').innerText = '...';
            }

            e('bookChaptersBottom').innerHTML = e('bookChaptersTop').innerHTML;
            e('bookChaptersBottom').hidden = false;

            e('goToChapter').placeholder = "Глава 1 - " + bible.structure[bible.book].chapters;
            e('goToChapter').max = bible.structure[bible.book].chapters;

            e('goToChapter').onchange = e('goToChapter').oninput = function (ev) {
                var newCh = ev.target.value;
                if (newCh >= 1 && newCh <= parseInt(bible.structure[bible.book].chapters)) {
                    ev.target.nextElementSibling.hidden = false;
                } else if (newCh < 1 && newCh != "") ev.target.value = 1;
                else if (newCh > parseInt(bible.structure[bible.book].chapters)) ev.target.value = bible.structure[bible.book].chapters;
                else ev.target.nextElementSibling.hidden = true;
            }
            e('goToChapter').onkeyup = function (ev) {
                var newCh = ev.target.value;
                if (ev.keyCode == 13 && newCh >= 1 && newCh <= parseInt(bible.structure[bible.book].chapters))
                    nav.goTo(bible.bibleUrl('c', bible.book, newCh));
            }

        },
        search: function () {
            var params = JSON.parse(localStorage.bibleSearch);

            document.forms.bibleSearch.matchCase.checked = params.matchCase;
            document.forms.bibleSearch.caseSensitive.checked = params.caseSensitive;
            document.forms.bibleSearch.pathB.value = params.path;
            document.forms.bibleSearch.bibleSW.value = params.search;

            e('bible').classList.add('search');
            document.querySelector('.searchBox').classList.add('openedOptions');

            j.post(['bible', 'search'], function (data) {

                var par = e('bookPage'), boo, chapt, chBox, verBox;
                if(data.searchStatus){
                    par.innerHTML = '<p class="shortSearchRes">По запросу <b>"'+params.search+'"</b> найдено '+data.searchCount+' результатов</p>';

                    par = e('searchList',par);

                    for (var t in data.searchList) {
                        boo = data.searchList[t];

                        chBox = e(null, par, 'div', 'chaptBox');
                        e(null, chBox, 'h6').innerText = bible.structure[t].name + ' (' + data.countInBook[t] + ')';
                        for (var c in boo) {
                            chapt = boo[c];
                            for (var v in chapt) {
                                verBox = e(null, chBox, 'p', 'verseBox');
                                e(null, verBox, 'a').u(bible.bibleUrl('v', t, c, v)).innerText = c + ':' + v;
                                e(null, verBox, 'span').u(bible.bibleUrl('v', t, c, v)).innerText = ' - ' + chapt[v];
                            }
                        }
                    }
                    var reg = params.caseSensitive? "g" : "gi";
                    highlight(params.search,'searchList',reg);
                }
                else par.innerHTML = '<p class="shortSearchRes">По запросу <b>"'+params.search+'"</b> не найдено результатов поиска. Попробуйте изменить параметры поиска, или искомую фразу</p>';
            }, params);
        }
    },
    actions: {
        init: function(){
            $('.refLinks a').on('mouseover', function (el) {
                bible.timerId = setTimeout(function () {
                    var top = el.pageY + 10;
                    var left = el.pageX - (el.pageX / 5);
                    if ($(document).width() < 500) left = 50;
                    var Url = el.target.pathname;
                    if (Url == undefined) Url = el.pathname;

                    Url = Url.replace(/\/$/, "").trim().split('/').slice(-3);
                    var params = {
                        b: Url[0],
                        c: Url[1],
                        v: Url[2]
                    };

                    j.post(['bible', 'reference'], function (data) {
                        var verses = '';
                        var referenceView = e('referenceView');
                        empty(referenceView);
                        referenceView.style = 'top: ' + top + 'px; left: ' + left + 'px;';
                        data.verse.map(function (item) {
                            verses += '<strong>' + item['verse'] + '. </strong><textnode>' + item['text'] + '</textnode><br>';
                        });
                        e(null, referenceView, 'strong').innerHTML = data.verse[0]['name'] + ' Гл. ' + data.chapter;
                        $(referenceView).append('<hr>');
                        $(referenceView).append(verses);
                        $(referenceView).append('<hr>');

                    }, params);
                }, 500);
            });
            $('.refLinks a').on('mouseout mousedown', function (el) {
                clearTimeout(bible.timerId);
                $('#referenceView').remove();
            });
            document.forms.bibleSearch.bibleSW.onkeypress = function(ev){
                if(ev.keyCode==13){
                    ev.preventDefault();
                    ev.stopImmediatePropagation();
                    e('bibSearchBtn').click();
                }
            }
            e('bibSearchParamsBtn').onclick = function (ev){
                var box = ev.target.closest('.searchBox');
                box.classList.toggle('openedOptions');
            }
            e('bibSearchBtn').onclick = function (){
                var params = {
                    options: 1,
                    matchCase: document.forms.bibleSearch.matchCase.checked?1:0,
                    caseSensitive: document.forms.bibleSearch.caseSensitive.checked?1:0,
                    path: document.forms.bibleSearch.pathB.value,
                    search: document.forms.bibleSearch.bibleSW.value.trim()
                };
                if(params.search.length>2){
                    localStorage.bibleSearch = JSON.stringify(params);
                    nav.goTo('/bible/search');
                }
                else alert('Для поиска введите искомый текст (три и больше буквы)');
            }
            $("#mobileMenuModal").on('hide.bs.modal', function () {
                bodyScroll.enable();
            });
        },
        tstSelect: function (tar){
            document.querySelector('#bibleMenu ul:not([hidden])').hidden = true;
            document.querySelector('#bibleMenu a.active').classList.remove('active');
            e(tar.dataset.menu).hidden = false;
            tar.classList.add('active');
        },
        font: {
            increase: function () {
                // bible.currentBodyFontSize = bible.currentBodyFontSize ? bible.currentBodyFontSize+1 : bible.defaultBodyFontSize + 1;
                e('bookPage').style.fontSize = bible.currentBodyFontSize++ + "px";
            },
            decrease: function () {
                // bible.currentBodyFontSize = bible.currentBodyFontSize ? bible.currentBodyFontSize - 1 : bible.defaultBodyFontSize - 1;
                e('bookPage').style.fontSize = bible.currentBodyFontSize-- +"px";
            }
        }
    },
    onresize: function(){bible.build.chapterMenu()},
    // for generate bible urls
    bibleUrl: function(flag, b, c, v) {
    b = b || 40;
    if (isDefined(bible.structure[b])) {
        c = c || 1;
        v = v || 1;

        // var url = 'http://blagovam.org/bible/'+toUrl(bible.structure[b].name) ;
        var url = '/bible/' + toUrl(bible.structure[b].name.trim().replace(' ', '+'));

        switch (flag) {
            case 'b': {
                url += '/' + b + '/';
                break;
            }
            case 'c': {
                url += '-Глава-' + c + '/' + b + '/' + c + '/';
                break;
            }
            case 'v': { // link for verse
                // url += '-Глава-'+c+'/'+ b + '/' + c + '/' + v + '/#'+v;
                url += '-Глава-' + c + '/' + b + '/' + c + '/' + v;
                break;
            }
            default: {
                url += '/' + b + '/';
                break;
            }
        }
        return url;
    }
    else bibleUrl();
}
};var home = {
    sliderImgWidths: [320, 480, 680, 790, 1024, 1200, 1400, 1920],
    init: function () {
        j.post(['home', 'init'], function (data) {
            home.process.built(data.news, 'news');
            // home.process.built(data.articles, 'articles');
            home.slides = data.slides; //for built slider after resize
            home.holiday = data.holiday;
            home.live = data.live;
            home.process.slider();

            home.events();
            nav.setTitle('Главная');
        });

    },
    process: {
        built: function (data, type) {
            var el, div, line, val,
                temp = document.querySelector('#'+type+'>div').cloneNode(true);
            e(type).innerHTML = '';

            for (var i in data) {
                div = temp.cloneNode(true);
                div.removeAttribute('hidden');
                el = document.getElementById(type).appendChild(div);
                line = data[i];

                el.dataset.list = i;
                el.dataset.mid = line.mid;
                el.dataset.pmid = line.pmid;
                el.dataset.ext = line.ext;
                el.dataset.playable = line.totalPlayTime>0 || line.ext=='mp3'?1:0;
                el.dataset.dir = line.dir;
                if(isDefined(user.info) && isDefined(user.info.playlistMIDS[line.mid])) el.classList.add('inPlaylist');
                if(isDefined(user.info) && isDefined(user.info.markedMid[line.mid])) el.classList.add('inFavourites');


                for (var k in line) {
                    val = line[k] == null ? '' : line[k];

                    if (k == 'imgId') {
                        if (val == 4000) val = isDefined(line.pmid) ? mediaStructure[line.pmid].imgId : 4000;
                        val = img.url(val, 510, 340, line.name);
                        el.querySelector('img').src = val;
                        el.querySelector('img').alt = line['name'];
                    }
                    if (k == 'mid') {
                        if(el.querySelector('[data-name="breadcrumbs"]'))
                            el.querySelector('[data-name="breadcrumbs"]').innerHTML = mediaBreadcrumbs(line.pmid,2);
                        $(el).find('a[href=""]').attr('href', mediaGeneratePath(val,line.pmid));
                    }
                    if(type == 'articles' && k == 'id'){
                        val = '/articles/'+toUrl(line.title)+'/'+val;
                        $(el).find('a[href=""]').attr('href', val);
                    }
                    if(el.querySelector('[data-name="' + k + '"]'))el.querySelector('[data-name="' + k + '"]').innerHTML = val;
                }

                // if(line.dirType == 0) el.querySelector('.toPlaylist').removeAttribute('hidden');
                if(line.dirType == 0 && line.dir == 1) el.querySelector('.dwnldZipBtn').removeAttribute('hidden');
                if(line.dir == 0) el.querySelector('.simpleDwnld').removeAttribute('hidden');
                if(line.ext == 'mp3') el.querySelector('.toPlaylist').removeAttribute('hidden');
            }
        },
        slider: function () {
            var w = 0, div,
                temp = document.querySelector('#slides>div:not(#liveStream)').cloneNode(true),
               banner = e('mobileBanner');
            e('slides').innerHTML = '';
            for(var sz in home.sliderImgWidths) {
                if(window.innerWidth < home.sliderImgWidths[sz]) {
                    w = home.sliderImgWidths[sz];
                    break;
                }
                else if (window.innerWidth > 1919) w = 1920;
            }
            e('sliderIndicators', e('slides'), 'ol', 'carousel-indicators').innerHTML= '';

            for(var sl in home.slides) {
                div = temp.cloneNode(true);
                div.removeAttribute('hidden');
                div.id = 'slide'+sl;
                div.querySelector('img').src = img.url(home.slides[sl], w, 0, "main-slider");
                e('slides').prepend(div);
                e('sliderIndicators').innerHTML += '<li data-target="#carousel-example-generic" data-slide-to="'+sl+'" ><span class="number"></span></li>';

                if(isDefined(home.live.html) && sl==home.slides.length-1) {
                    if(window.innerWidth > 992){
                        e('sliderIndicators').innerHTML += '<li data-target="#carousel-example-generic" data-slide-to="'+(parseInt(sl)+1)+'" ><span class="number"></span></li>';
                        div = temp.cloneNode(true);
                        div.removeAttribute('hidden');
                        div.id = 'liveStream';
                        // div.querySelector('.content_img_wrapper').innerHTML = home.live.html;
                        div.innerHTML = home.live.html;
                        div.querySelector('iframe').width = 1920;
                        div.querySelector('iframe').height = 531;
                        e('slides').prepend(div);
                        banner.hidden = true;
                    }
                    else {
                        banner.innerHTML = home.live.html;
                        banner.hidden = false;
                        banner.querySelector('iframe').width = banner.offsetWidth;
                        banner.querySelector('iframe').height = banner.offsetWidth*0.6;
                        if(document.getElementById('liveStream')) e('liveStream').remove();
                    }
                }
                else if(isDefined(home.holiday.imgId) && sl==home.slides.length-1) {
                    var holImg = '';
                    if(window.innerWidth > 992){
                        e('sliderIndicators').innerHTML += '<li data-target="#carousel-example-generic" data-slide-to="'+(parseInt(sl)+1)+'" ><span class="number"></span></li>';
                        div = temp.cloneNode(true);
                        div.removeAttribute('hidden');
                        div.id = 'slideHoliday';
                        holImg = img.url(home.holiday.imgId, 0, Math.round(531 / (1920 / w)), "main-slider");
                        div.style = "background-image: url('"+holImg+"');";
                        div.querySelector('img').src = holImg;
                        e('slides').prepend(div);
                        banner.hidden = true;
                    }
                    else {
                        holImg = img.url(home.holiday.imgId, w, 0, "main-slider");
                        banner.querySelector('img').src = holImg;
                        banner.hidden = false;
                        if(document.getElementById('slideHoliday')) e('slideHoliday').remove();
                    }

                }
            }

            e('slides').firstElementChild.classList.add('active');
            if(e('sliderIndicators').firstElementChild)e('sliderIndicators').firstElementChild.classList.add('active');
            e('mainSlider').style.display = 'block';
            e('slides').style.height = Math.ceil(531 / (1920 / window.innerWidth))+2+'px';

            var params = {};
            if(isDefined(home.live.html)) params.interval = false;

            $('.carousel').carousel(params);
        }
    },
    events: function () {

    },
    onresize(){
        this.process.slider();
    }
};var media = {
    id: false,
    analyticsList: {},
    list: [],
    templates: {
        listHeader: '<li>#</li>' +
            '           <li class="song_title_width">Название</li>' +
            '           <li class="song_title_width">**dirThName**&nbsp;</li>' +
            '           <li class="text-center">&nbsp;</li>' +
            '           <li class="text-center">Ещё&nbsp;</li>'
    },
    init: function () {
        var main = document.getElementsByTagName('main')[0];
        main.className = '';
        this.id = false;

        if (isDefined(user.info) && !isDefined(user.info.defaultPlaylistId)) {
            alert('Выберите/создайте плейлист по умолчанию');
            nav.goTo('account/playlists');
            return false;
        }

        if(isDefined(path[0]) && path[0] == 'search') {
            this.search.init();
            nav.setTitle("Медиа - поиск");
        }

        else{
            for (var i in path) if (path[i].search(/^\d{5,6}$/i) >= 0) media.id = path[i];
            // media.id = path[1]&&isDefined(mediaStructure[path[1]])?path[1]:10000;
            if(!media.id) media.id = 10000;

            var cMid = media.id;

            j.post(['media', 'init'], function (data) {
                if (!data.settings) nav.goTo('media');
                else {
                    while (cMid != 10000) {
                        document.querySelectorAll('header .has-sub .has-sub.open').forEach(function (val) {
                            val.classList.remove('open');
                        });
                        document.querySelectorAll('header a[href*="' + cMid + '"]').forEach(function (val) {
                            val.classList.add('active');
                            if (val.closest('.has-sub')) val.closest('.has-sub').classList.add('open');
                        });
                        cMid = mediaStructure[cMid].pmid;
                    }

                    media.settings = player.albumSett = data.settings;
                    media.list = data.list;

                    e('mediaBreadcrumbs').innerHTML = mediaBreadcrumbs(data.settings.id, false, '/');


                    nav.setTitle(data.settings.name);
                    media.build.dirHeader(data.settings);

                    document.querySelector('.indx_title_main_wrapper').style = "background-image: url(" + img.url(data.settings.imgId, 300, 75, 'bg') + ");";

                    //for grid (list = 0)
                    if (data.list) if (data.settings.dirListingStyle == 1 && data.settings.dirType == 1) {
                        media.build.dir(data.list, true);
                        document.querySelector('div.gridView').removeAttribute('hidden');
                    } else if (data.settings.dirType == 1) {
                        media.build.dir(data.list);
                        document.querySelector('div.listView').removeAttribute('hidden');
                    } else {
                        media.build.mainList(data.list, data.settings.dirThName);
                    }
                }


            }, {mid: media.id, count: 1});
        }

        this.setActions();
    },
    build: {
        dirHeader: function (data) {
            var val;

            e('dirHeader').dataset.mid = data.id;

            for (var k in data) {
                val = data[k] == null ? '' : data[k];

                if (k == 'imgId') {
                    if (val == 4000) val = isDefined(data.pmid) ? mediaStructure[data.pmid].imgId : 4000;
                    val = img.url(val, 510, 340, data.name);
                    e('dirHeader').querySelector('img').src = val;
                    e('dirHeader').querySelector('img').alt = data['name'];
                } else if (e('dirHeader').querySelector('[data-name="' + k + '"]')) e('dirHeader').querySelector('[data-name="' + k + '"]').innerHTML = val;
            }
            e('dirHeader').removeAttribute('hidden');
            if (data.dirType == 0) {
                e('dirHeader').querySelector('.dwnldZipBtn').removeAttribute('hidden');
            }
            if (data.dirHeaderStyle==1) e('dirHeader').classList.add('showAllInfo');
        },
        mainList: function (listData, dirThName) {
            document.querySelector('div.listView').removeAttribute('hidden');
            let startTime = new Date().getTime();
            var el, div, line, val, curEl, imgTag;
            var par = e('mainList');
            par.dataset.listtype = 0;
            par.dataset.listid = media.settings.id;
            par.removeAttribute('hidden');
            const divTempl = document.querySelector('#mainList ul.album_inner_list_padding');

            for (let i in listData) {
                el = divTempl.cloneNode(true);
                el.removeAttribute('hidden');
                line = listData[i];

                el.dataset.list = i;
                el.dataset.mid = line.mid;
                el.dataset.pmid = line.pmid;
                el.dataset.ext = line.ext;
                if (isDefined(user.info) && isDefined(user.info.playlistMIDS[line.mid])) el.classList.add('inPlaylist');
                if (isDefined(user.info) && isDefined(user.info.markedMid[line.mid])) el.classList.add('inFavourites');

                // console.log(line);

                for (var k in line) {
                    val = line[k];
                    if (k == 'imgId') {
                        // imgTag = $(el).find('img')[0];
                        imgTag = el.querySelector('img');
                        if(val != 4000 /*|| (val = mediaStructure[line.pmid].imgId) != 4000*/){
                            imgTag.src = img.url(val, 50, 50);
                            el.classList.add('hasImg');
                        }
                        else imgTag.hidden = true;
                        imgTag.alt = line['name'];
                    }
                    else if(k == 'ext') {
                        val = this.extIcon(line.ext, true);
                        el.querySelector('i[data-name="extIcon"]').className = val;
                    } else {
                        if (k == 'playTime') val = val != 0 && val != null ? formatTime(val) : formatBytes(line.size);
                        else if (k == 'mid') val = parseInt(i) + 1;

                        curEl = el.querySelector('[data-name="' + k + '"]');
                        if(curEl)
                            curEl.innerText = val;
                    }
                }

                par.appendChild(el);
            }

            // e('mainList').innerHTML = media.templates.listHeader.replace('**dirThName**', dirThName ? dirThName : '') + e('mainList').innerHTML;
            e(null, e('mainList'),'ul', 'album_list_name ms_cover').t(media.templates.listHeader.replace('**dirThName**', dirThName ? dirThName : ''));

            let alb = isDefined(player.list[player.playId]) ? document.querySelector('[data-mid="' + player.list[player.playId].mid + '"]') : false;
            if (alb && !player.element.paused) {
                alb.classList.add('isPlaying');
            }


            if (getUrlParameter('play')) {
                var p = document.querySelector('[data-mid="'+getUrlParameter('play')+'"]');
                if(p){
                    p.classList.add('linked');
                    p.scrollIntoView(true);
                    if(p.closest('[data-ext="mp3"]'))p.click();
                }
            }

            console.log("Build time for main list:" + (new Date().getTime() - startTime) + 'ms');
        },
        dir: function (listData, grid) {
            var par = grid ? 'mainGrid' : 'shortList';
            var el, div, line, val, m = new Date();
            document.getElementById(par).dataset.listtype = 0;
            document.getElementById(par).dataset.listid = media.settings.id;

            for (var i in listData) {
                div = document.querySelector('#' + par + '>div').cloneNode(true);
                div.removeAttribute('hidden');
                el = document.getElementById(par).appendChild(div);
                line = listData[i];

                el.dataset.list = i;
                el.dataset.mid = listData[i].mid;
                el.dataset.ext = listData[i].ext;
                el.dataset.playable = listData[i].totalPlayTime>0?1:0;
                el.dataset.dir = listData[i].dir;
                if (isDefined(user.info) && isDefined(user.info.playlistMIDS[line.mid])) el.classList.add('inPlaylist');
                if (isDefined(user.info) && isDefined(user.info.markedMid[line.mid])) el.classList.add('inFavourites');

                for (var k in line) {
                    val = line[k];
                    if (k == 'imgId') {
                        val != 4000 || grid
                            ?
                            $(el).find('img')[0].src = img.url(val, grid ? 510 : 60, grid ? 340 : 60, line['name'])
                            : $(el).find('img')[0].hidden = true;
                        $(el).find('img')[0].alt = line['name'];
                    } else {
                        if (k == 'playTime') val = formatTime(val);
                        if (k == 'mid') $(el).find('a[href="#"]').attr('href', mediaGeneratePath(val));
                        $(el).find('[data-name="' + k + '"]').html(val);
                    }
                }

                if (line.dirType == 0) el.querySelector('.dwnldZipBtn').removeAttribute('hidden');
            }

            console.log("Spend time for list built: " + (m - new Date()));
        },
        search: function (data) {
            var par = 'shortList';
            var el, div, line, val, listData = data.list;

            if(data.searchStatus){
                e('mediaBreadcrumbs').innerHTML = "По запросу \""+data.search+"\" найдено "+data.searchCount+" результатов";
                document.querySelector('div.listView').removeAttribute('hidden');

                for (var i in listData) {
                    div = document.querySelector('#' + par + '>div').cloneNode(true);
                    div.removeAttribute('hidden');
                    el = document.getElementById(par).appendChild(div);
                    line = listData[i];

                    el.dataset.mid = listData[i].mid;
                    el.dataset.pmid = listData[i].pmid;
                    el.dataset.ext = listData[i].ext;
                    el.dataset.playable = (listData[i].ext=='mp3') || (listData[i].totalPlayTime>0)?1:0;
                    el.dataset.dir = listData[i].dir;
                    if (isDefined(user.info) && isDefined(user.info.playlistMIDS[line.mid])) el.classList.add('inPlaylist');
                    if (isDefined(user.info) && isDefined(user.info.markedMid[line.mid])) el.classList.add('inFavourites');

                    for (var k in line) {
                        val = line[k];
                        if (k == 'imgId') {
                            el.querySelector('img').src = img.url(val != 4000? val : mediaStructure[listData[i].pmid].imgId, 60, 60);
                        } else {
                            if (k == 'playTime') val = formatTime(val);
                            else if (k == 'mid') $(el).find('a[href=""]').attr('href', mediaGeneratePath(val,listData[i].pmid));
                            else if (k == 'pmid') val = mediaBreadcrumbs(listData[i].pmid, 2), k = 'theme';
                            $(el).find('[data-name="' + k + '"]').html(val);
                        }
                    }

                    if (line.dirType == 0) el.querySelector('.dwnldZipBtn').removeAttribute('hidden');
                }
                highlight(data.search,'shortList', "gi");
            }
            else e('mediaBreadcrumbs').innerHTML = "По запросу \""+data.search+"\" ничего не найдено. Попробуйте изменить или проверить искомую фразу";

            document.querySelector('.indx_title_main_wrapper').style = "background-image: url("+imgServer+"/1704Q1d/bg.jpg);";

        },
        extIcon: function (ext, getClass) {
            var IconTypeFile = '', IconClasses = '';
            switch (ext) {
                case 'mp3': {
                    IconClasses = 'fas fa-music';
                    break;
                }
                case 'mp4': {
                    IconClasses = 'fas fa-desktop';
                    break;
                }
                case 'pdf': {
                    IconClasses = 'fas fa-file-pdf';
                    break;
                }
                case 'zip':
                case 'rar': {
                    IconClasses = 'fas fa-file-archive';
                    break;
                }
                case 'dir': {
                    IconClasses = 'fas fa-compact-disc';
                    break;
                }
                default: {
                    IconClasses = 'far fa-file';
                    break;
                }
            }
            IconTypeFile = '<i class="'+IconClasses+'"></i>';
            return getClass ? IconClasses : IconTypeFile + ' ';
        }
    },
    search: {
        init: function () {
            var params = JSON.parse(localStorage.mediaSearch);

            // document.forms.bibleSearch.matchCase.checked = params.matchCase;
            // document.forms.bibleSearch.caseSensitive.checked = params.caseSensitive;
            e('searchBox').value = params.search;

            e('media').classList.add('search');

            j.post(['media', 'search'], function (data) {
                media.build.search(data);
            }, params);
        },
        actions: function () {
            e('searchBox').onkeypress = function(ev){
                if(ev.keyCode==13){
                    ev.preventDefault();
                    ev.stopImmediatePropagation();
                    e('mainSearchBtn').click();
                }
            }
            e('mainSearchBtn').onclick = function () {
                var params = {
                    // options: 1,
                    // matchCase: document.forms.bibleSearch.matchCase.checked?1:0,
                    // caseSensitive: document.forms.bibleSearch.caseSensitive.checked?1:0,
                    // path: document.forms.bibleSearch.pathB.value,
                    search: e('searchBox').value.trim()
                };
                if(params.search.length>2){
                    localStorage.mediaSearch = JSON.stringify(params);
                    nav.goTo('/media/search');
                }
                else alert('Для поиска введите искомый текст (три и больше буквы)');
            }
        }
    },
    elClk: function (ev) {
        var par = ev.target.closest('.album_inner_list_padding').dataset;
        if(par.ext=='mp3'){
            if (player.listType != 0 || player.listId != media.settings.id) {
                player.list = media.list;
                player.listType = 0;
                player.listId = media.settings.id;
                player.init();
            }
            player.playClk(ev);
        }
        else if(par.ext == 'pdf') {
            media.analytics.add('download',par.mid);
            window.open(pdfServer + par.mid + '/' + toUrl(media.list[par.list].name) + '.' + par.ext);
        }
        else this.moreActions.dwnld(par.mid,ev.target.closest('*[data-mid]'));
    },
    onPlayIcon: function (ev) {
        player.element.play();
        player.element.pause();
        var par = ev, albMid, lType;
        while (!isDefined(par.dataset.mid)) par = par.parentNode;

        albMid = par.dataset.dir == 1 || par.dataset.ext == 'playlist' ? par.dataset.mid : par.dataset.pmid;
        lType = par.dataset.ext == 'playlist' ? 1 : 0; // 0 - dir, 1 - user playlist

         if (par.dataset.playable == 1){
             if(player.listId == albMid && player.listType == lType){
                 var playId = par.dataset.dir == 1  || par.dataset.ext == 'playlist' ? 0 : document.querySelector('#fullPlaylist [data-mid="' + par.dataset.mid + '"]').dataset.list;
                 player.play(playId);
             }
             else j.post(['media', 'getPlaylist'], function (data) {
                     player.list = data.list;
                     player.listId = albMid;
                     player.listType = lType;
                     player.albumSett = lType == 1 ? user.info.playlists : data.settings;
                     player.init();

                     var playId = par.dataset.dir == 1 || par.dataset.ext == 'playlist'? 0 : document.querySelector('#fullPlaylist [data-mid="' + par.dataset.mid + '"]').dataset.list;
                     player.play(playId);
                 }, {mid: albMid, playList: lType});
         }
         else nav.goTo(mediaGeneratePath(par.dataset.mid, par.dataset.pmid));
    },
    moreActions: {
        init: function (ev) {
            event.preventDefault();
            event.stopImmediatePropagation();

            var block = ev.closest('*[data-mid], *[data-aid]');
            var id = block.dataset.mid;
            var action = ev.dataset.action;

            if (isDefined(this[action])) this[action](id, block);
            else alert('Ошибка! Обратитесь к администратору');
        },
        zip: function (mid) {
            media.analytics.add('zip',mid);
            window.open(zipServer + mid + '/', 'Download ' + mediaStructure[mid].name);
        },
        playlist: function (mid, item) {
            if (isDefined(user.name)) { // authorization check
                /*if (item.dataset.dir == 1) { // if it's directory - disabled!!!!
                    j.post(['account', 'playlist', 'addMassMids'], function (data) {
                        console.log(data);
                        if (data.status) {
                            item.classList.add('inPlaylist');
                            if (page == "media" && isDefined(media.settings) && media.settings.id == mid)
                                $('.icon.addToPlaylist_track').addClass('added');
                        } else {
                            alert('Произошла ошибка добавления! \n Пожалуйста напишите нам об этом')
                        }
                    }, {pmid: mid});
                } else {*/


                    // if it's track
                    if (isDefined(user.info.playlistMIDS[mid]) || item.id == 'fullPlaylist') {
                        var plid = item.id == 'fullPlaylist' ? item.dataset.listid : user.info.defaultPlaylistId;
                        j.post(['account', 'playlist', 'removeMid'], function (data) {
                            //console.log(data);
                            if (data.status) {
                                if(isDefined(item)) item.classList.remove('inPlaylist');
                                delete user.info.playlistMIDS[mid];
                            }
                        }, {mid: mid, plid: plid});
                    } else {
                        j.post(['account', 'playlist', 'addMid'], function (data) {
                            //console.log(data);
                            if (data.status) {
                                item.classList.add('inPlaylist');
                                user.info.playlistMIDS[mid] = {
                                    id: mid,
                                    order: "999999999"
                                };
                            }
                        }, {mid: mid});
                    }
                return true;
                // }
            } else {
                if (confirm('Для того чтоб управлять плейлистами, \n войдите в свою учетую запись!'))
                    $('#login-popup-open').click();
            }
        },
        dwnld: function (mid, item) {
            media.analytics.add('download',mid);
            window.open(dwnldServer + mid + '/' + toUrl(item.querySelector('[data-name="name"]').innerText) + '.' + item.dataset.ext);
        },
        share: function (mid, item) {
            var link = "https://blagovam.org", isShared = false, sharePromise;
            if(isDefined(mediaStructure[mid])) link += mediaGeneratePath(mid);
            else link += mediaGeneratePath(mid, item.dataset.pmid);

            if (isMobile && navigator.share) {
                navigator.share({
                    title: item.querySelector('[data-name="name"]').innerText,
                    url: link
                });
            }
            else {
            // if(!isShared) {
                if(Clipboard.copy(link)) {
                    var succMsg =  e(null ,item,'div', 'succMsg');
                    succMsg.innerText = 'Ссылка скопирована успешно';
                    setTimeout(function (){
                        succMsg.remove();
                    }, 2000);
                }
            }

            // alert(link + "\n эта опция пока недоступна, попробуйте воспользоваться ею позже");
        },
        favourite: function (mid, item) {
            if (isDefined(user.name)) {

                if (item.classList.contains('inFavourites')) {
                    j.post(['account', 'unmarkMid'], function (data) {
                        //console.log(data);
                        if (data.status) {
                            delete user.info.markedMid[mid];
                            item.classList.remove('inFavourites');
                        }
                    }, {mid: mid});

                } else {
                    j.post(['account', 'markMid'], function (data) {
                        //console.log(data);
                        if (data.status) {
                            user.info.markedMid[mid] = mid;
                            item.classList.add('inFavourites');
                        }
                    }, {mid: mid});
                }
            } else {
                if(confirm('Для того чтоб сохранить/удалить пометку о файле, \n войдите в свою учетую запись!'))
                    $('#login-popup-open').click();
            }
        },
        info: function (mid, item) {
            var val, valBox, curData,
                infoBox = e('infoPopup');

            if(item.closest('.gridView, .listView')) curData = media.list[item.dataset.list];
            else if(item.closest('#dirHeader')) curData = media.settings;
            // else if(item.closest('#recoms')) curData = home.recomsList[item.dataset.list];
            // else if(item.closest('#news')) curData = home.newsList[item.dataset.list];
            else if(item.closest('#adonis_jp_container')) curData = player.list[item.dataset.list];
            else return false;

            var display = ['name', 'theme', 'breadcrumbs', 'ext', 'playTime', 'totalPlayTime', 'size', 'totalSize', 'chanel', 'bitrate', 'count', 'createDate', 'updateContent'];

            for(var i in display){
                var k = display[i];
                val = curData[k],
                valBox = infoBox.querySelector('[data-name="'+k+'"]');
                if(valBox)if(val != null && val != '' && val != 0){
                    if(k == 'createDate' || k == 'updateContent') {
                        val = media.formatDate(val);
                        val = k == 'updateContent' ? val == media.formatDate(curData['createDate']) ? 'не обновлялся' : val : val;
                    }
                    else if(k == 'playTime' || k == 'totalPlayTime') val = formatTime(val);
                    else if(k == 'size' || k == 'totalSize') val = formatBytes(val);
                    valBox.innerText = val;
                    if(valBox.closest('li'))valBox.closest('li').removeAttribute('hidden');
                    else valBox.removeAttribute('hidden');
                }
                else if(valBox.closest('li'))valBox.closest('li').setAttribute('hidden', 'hidden');
                else valBox.setAttribute('hidden', 'hidden');
            }

            infoBox.classList.add('opened');

            // alert('Эта опция пока недоступна, попробуйте воспользоваться ею позже');
        }
    },
    analytics: {
        add: function (path, mid){
            if(!isDefined(media.analyticsList[path])) media.analyticsList[path] = {}
            media.analyticsList[path][mid] = media.analyticsList[path][mid] ?  media.analyticsList[path][mid]+1 : 1;
        },
        clear: function (){
            media.analyticsList = {}
            return true;
        },
    },
    formatDate: function (dateTime) {

        let cText = {
            months: ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"]
        };

        let today = new Date(dateTime.replace(' ', 'T'));
        return today.getDate() + " " + cText.months[today.getMonth()] + " " + today.getFullYear();
    },
    setActions: function () {
        /*document.querySelector('.niceScroll').onscroll = function () {
            if((this.scrollTop + this.clientHeight + 1) > this.scrollHeight )
                this.scrollTop--;
        }*/
    }
};