var about = {
    init: function (loadPageFunc) {
        nav.setTitle('О сайте');
        loadPageFunc();
        validation('#contactForm', about.contact);

        brcrArray = [{name:"О нас"}];
        nav.setBreadcrumbs();
    },
    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 authors = {
    id: false,
    pageNum: 1,
    totalPages: false,
    init: function (loadPageFunc) {
        this.id = false;
        for (var i in path) {
            if (path[i].search(/^\d{4}$/i) >= 0) this.id = path[i];
            else if (path[i].search(/^\d{1,3}$/i) >= 0) this.pageNum = parseInt(path[i]);
        }

        if (path[0] == 'info') {
            j.post(['authors', 'init'], function (data) {
                if(data.details){
                    loadPageFunc();
                    loadedData = data;

                    authors.display.author(data.details);
                    authors.display.verseSlider(data.verses);

                    brcrArray = [];
                    brcrArray.push({
                        name: data.details.author,
                        link: '/authors/' + toUrl(data.details.author) + '/' + data.details.authorId
                    });
                    brcrArray.push({
                        name: "Биография",
                        link: '/authors/info/' + toUrl(data.details.author) + '/' + data.details.authorId
                    });
                    nav.setBreadcrumbs();

                    nav.setTitle(data.details.author + " - биография");
                }
                else{
                    nav.notFound = true;
                    nav.goTo('/');
                }
            }, {id: authors.id});
        } else if (authors.id) {
            j.post(['authors', 'list', 'verses'], function (data) {
                if(data.details) {
                    loadPageFunc();
                    loadedData = data;

                    e('shortAuthorInfo').hidden = false;
                    e('versesGridPagination').hidden = false;
                    e('versesPaginationInfo').hidden = false;
                    read.display.author(data.details);
                    authors.display.versesPagination(data.limit, data.total);
                    home.process.built(data.verses);

                    brcrArray = [];
                    brcrArray.push({
                        name: data.details.author,
                        link: '/authors/' + toUrl(data.details.author) + '/' + data.details.id
                    });
                    nav.setBreadcrumbs();
                    nav.setTitle(data.details.author);
                }
                else{
                    nav.notFound = true;
                    nav.goTo('/');
                }
            }, {id: authors.id, pageNum: this.pageNum});
        } else { //show all authors
            j.post(['authors', 'list'], function (data) {
                if(data.authors) {
                    loadPageFunc();
                    authors.display.authorsList(data.authors);
                    brcrArray = [];
                    brcrArray.push({
                        name: "Авторы",
                        link: '/authors/'
                    });
                    nav.setBreadcrumbs();
                    nav.setTitle("Список авторов");
                }
                else{
                    nav.notFound = true;
                    nav.goTo('/');
                }
            }, {});
        }
    },
    display: {
        author: function (data) {
            var val, hr, el = e('fullInfo');
            el.hidden = false;

            for (var k in data) {
                val = data[k] == null ? '' : data[k];

                if (k == 'authorId') {
                    hr = '/authors/' + toUrl(data.author) + '/' + val;
                    el.querySelector('a[data-name="verselist"]').href = hr;
                } else if (k == 'imgId') {
                    val = img.url(val, 160, 240, data.author);
                    el.querySelector('img').src = val;
                }

                if (el.querySelector('[data-name="' + k + '"]')) el.querySelector('[data-name="' + k + '"]').innerHTML += val;
                if (el.querySelector('a[data-name="' + k + '"]')) el.querySelector('a[data-name="' + k + '"]').href = hr;
            }
        },
        verseSlider: function (data) {
            var par = 'authorSlider';

            var el, div, line, val, hr,
                temp = document.querySelector('#' + par + ' div[hidden]').cloneNode(true);
            e(par).innerHTML = '';

            for (var i in data) {
                if (i != 'order') {
                    div = temp.cloneNode(true);
                    div.removeAttribute('hidden');
                    el = document.getElementById(par).appendChild(div);
                    line = data[i];

                    el.dataset.list = i;
                    el.dataset.id = line.vid;


                    for (var k in line) {
                        val = line[k] == null ? '' : line[k];
                        if (k == 'title') hr = '/read/' + toUrl(line.author) + '/' + toUrl(line.title) + '/' + line.vid;
                        else if (k == 'audioLink' && val != "" && val != null) el.querySelector('.card-footer').classList.add('hasAudio');
                        else if (k == 'videoLink' && val != "" && val != null) el.querySelector('.card-footer').classList.add('hasVideo');

                        if (el.querySelector('[data-name="' + k + '"]')) el.querySelector('[data-name="' + k + '"]').innerHTML += val;
                        if (el.querySelector('a[data-name="' + k + '"]')) el.querySelector('a[data-name="' + k + '"]').href = hr;
                    }
                }
            }

            $('#authorSlider').owlCarousel({
                loop: true,
                autoplay: true,
                dots: false,
                margin: 10,
                responsiveClass: true,
                nav: true,
                navText: ["<", ">"],
                stageClass: 'owl-stage d-flex',
                responsive: {
                    0: {
                        items: 1,
                    },
                    600: {
                        items: 2,
                    },
                    1000: {
                        items: 3,
                    }
                }
            });
        },
        authorsList: function (data) {
            var par = 'authorsList';

            var el, div, line, val, hr,
                temp = document.querySelector('#' + par + ' div[hidden]').cloneNode(true);
            e(par).innerHTML = '';

            for (var i in data) {
                div = temp.cloneNode(true);
                div.removeAttribute('hidden');
                el = document.getElementById(par).appendChild(div);
                line = data[i];

                el.dataset.list = i;
                el.dataset.id = line.id;

                var fields = ['imgId', 'author', 'shortDsc', 'listVerses'];

                for (var key in fields) {
                    var k = fields[key];
                    val = line[k] == null ? '' : line[k];

                    if (k == 'imgId') el.querySelector('img').src = img.url(val, 320, 240, line.author);
                    else if (k == 'author') hr = '/authors/info/' + toUrl(line.author) + '/' + line.id;
                    else if (k == 'listVerses') hr = '/authors/' + toUrl(line.author) + '/' + line.id;

                    if (isDefined(val) && el.querySelector('[data-name="' + k + '"]:not(img)'))
                        el.querySelector('[data-name="' + k + '"]').innerHTML += val;
                    if (el.querySelector('a[data-name="' + k + '"]')) el.querySelector('a[data-name="' + k + '"]').href = hr;
                }
            }
        },
        versesPagination: function (limit, total) {
            authors.totalPages = Math.ceil(total / limit);
            e('versesPaginationInfo').querySelector('.text').innerHTML = 'Страница ' + authors.pageNum + ' из ' + authors.totalPages;
            var par = e('versesGridPagination').querySelector('ul');
            par.innerHTML = '';

            e(null, e(null, par, 'li', 'page-item'), 'a', 'page-link').t('&laquo;').onclick = authors.goToPage.prev;
            var mobileSelect = e(null, e(null, par, 'li', 'page-item'), 'select', 'page-link d-lg-none form-control');
            mobileSelect.onchange = authors.goToPage.byNum;

            for (let p = 1; p <= authors.totalPages; p++) {
                let isActive = p == authors.pageNum ? 'active' : '';
                let plink = e(null, e(null, par, 'li', 'page-item ' + isActive), 'a', 'page-link d-none d-lg-block').t(p);
                plink.onclick = authors.goToPage.byNum;
                plink.dataset.page = p;
                mobileSelect[p] = new Option(p,p, p == authors.pageNum,p == authors.pageNum);
            }

            e(null, e(null, par, 'li', 'page-item'), 'a', 'page-link').t('&raquo;').onclick = authors.goToPage.next;
        }
    },
    goToPage: {
        prev: function () {
            if(authors.pageNum > 1)authors.goToPage.byNum(authors.pageNum - 1);
        },
        next: function () {
            if(authors.pageNum <= authors.totalPages) authors.goToPage.byNum(authors.pageNum + 1);
        },
        byNum: function (ev) {
            if (isDefined(ev.target)) {
                var g = ev.target.dataset.page ? ev.target.dataset.page : ev.target.value;
            }
            else g = ev;

            if (g < 2) {
                g = 1;
            } else if (g >= authors.totalPages) {
                g = authors.totalPages;
            }

            nav.goTo('/authors/' + toUrl(loadedData.details.author) + "/" + loadedData.details.authorId + "/" + g);

        }
    }
};var home = {
    init: function (loadPageFunc) {

        if (isDefined(getUrlParameter('editor'))) {
            if (getUrlParameter('editor') === 'true') localStorage.editor = true;
            nav.goTo('/');
            return false;
        }
        nav.setTitle('Христианские стихи');
        j.post(['home', 'init'], function (data) {
            loadPageFunc();
            loadedData = data;
            home.process.built(data.verses);
            home.process.tagArea(data.popularKeyWords);

            brcrArray = [];
            nav.setBreadcrumbs();
        });

    },
    process: {
        built: function (data) {
            var type = 'versesGrid';
            var el, div, line, val, hr, order,
                temp = document.querySelector('#' + type + ' div[hidden]').cloneNode(true);
            e(type).innerHTML = '';
            e(type).hidden = false;

            if (isDefined(data.order)) order = data.order;
            else order = data;
            for (var key in order) {
                if (isDefined(data.order)) var i = order[key];
                else i = key;

                div = temp.cloneNode(true);
                div.removeAttribute('hidden');
                el = document.getElementById(type).appendChild(div);
                line = data[i];

                el.dataset.list = i;
                el.dataset.id = line.vid;


                for (var k in line) {
                    val = line[k] == null ? '' : line[k];
                    if (k == 'title') hr = '/read/' + toUrl(line.author) + '/' + toUrl(line.title) + '/' + line.vid;
                    else if (k == 'author') hr = '/authors/info/' + toUrl(line.author) + '/' + line.authorId;
                    else if (k == 'audioLink' && val != "" && val != null) el.querySelector('.card-footer').classList.add('hasAudio');
                    else if (k == 'videoLink' && val != "" && val != null) el.querySelector('.card-footer').classList.add('hasVideo');

                    if (k == 'imgId' && el.querySelector('img'))
                        el.querySelector('img').src = img.url(val, 60, 60, line.author);
                    else if (el.querySelector('[data-name="' + k + '"]')) el.querySelector('[data-name="' + k + '"]').innerHTML += val;
                    if (el.querySelector('a[data-name="' + k + '"]')) el.querySelector('a[data-name="' + k + '"]').href = hr;
                }
            }
        },
        tagArea: function (data) {
            var t;
            e('tagArea').innerHTML = '';

            for(var k in data){
                t = e(null,e('tagArea'),'button', 'btn btn-outline-dark').t(data[k]);
                t.dataset.sw = data[k];
                t.onclick = search.actions.tagBtn;
            }
        }
    },

};var read = {
    defaultBodyFontSize: 16,
    currentBodyFontSize: false,
    init: function (loadPageFunc) {
        for (var i in path) if (path[i].search(/^\d{5,6}$/i) >= 0) read.id = path[i];

        j.post(['read', 'init'], function (data) {
            if(data.details){
                loadPageFunc();
                loadedData = data;

                read.display.verse(data.details);
                read.display.author(data.details);
                authors.display.verseSlider(data.verses);
                if (Object.keys(data.tags).length) {
                    e('tagsSection').hidden = false;
                    home.process.tagArea(data.tags);
                }

                brcrArray = [];
                brcrArray.push({
                    name: data.details.author,
                    link: '/authors/' + toUrl(data.details.author) + '/' + data.details.authorId
                });
                brcrArray.push({
                    name: data.details.title,
                    link: '/read/' + toUrl(data.details.author) + '/' + toUrl(data.details.title) + '/' + data.details.id
                });

                nav.setBreadcrumbs();
                nav.setTitle(data.details.title + " - " + data.details.author);
                document.querySelector('div[data-name="body"]').style.fontSize = read.defaultBodyFontSize + "px";
            }
            else{
                nav.notFound = true;
                nav.goTo('/');
            }

        }, {id: read.id});
    },
    display: {
        verse: function (data) {
            var val, hr, el = e('verseSection');

            for (var k in data) {
                val = data[k] == null ? '' : data[k];

                if (k == 'author') hr = '/authors/' + toUrl(data.author) + '/' + data.authorId;
                else if (k == 'audioLink' && val != "" && val != null) e('read').classList.add('hasAudio');
                else if (k == 'videoLink' && val != "" && val != null) e('read').classList.add('hasVideo');

                if (el.querySelector('[data-name="' + k + '"]')) el.querySelector('[data-name="' + k + '"]').innerHTML = val;
                if (el.querySelector('a[data-name="' + k + '"]')) el.querySelector('a[data-name="' + k + '"]').href = hr;
            }
        },
        author: function (data) {
            var val, hr, el = e('shortAuthorInfo');

            for (var k in data) {
                val = data[k] == null ? '' : data[k];

                if (k == 'authorId') {
                    hr = '/authors/info/' + toUrl(data.author) + '/' + val;
                    el.querySelector('a[data-name="biography"]').href = hr;
                } else if (k == 'imgId') {
                    val = img.url(val, 160, 240, data.author);
                    el.querySelector('img').src = val;
                }

                if (el.querySelector('[data-name="' + k + '"]')) el.querySelector('[data-name="' + k + '"]').innerHTML = val;
                if (el.querySelector('a[data-name="' + k + '"]')) el.querySelector('a[data-name="' + k + '"]').href = hr;
            }
        }
    },
    actions: {
        watch: function () {
            var p = event.currentTarget.closest('div[data-id]');
            var link = p != null ? loadedData.verses[p.dataset.id].videoLink : loadedData.details.videoLink;
            if (link != "") window.open(link);
        },
        listen: function () {
            var p = event.currentTarget.closest('div[data-id]');
            var link = p != null ? loadedData.verses[p.dataset.id].audioLink : loadedData.details.audioLink;
            if (link != "") window.open(link);
        },
        share: function (ev) {
            var link = baseUrl, title;

            var p = event.currentTarget.closest('div[data-id]');

            if (p != null) {
                link += "read/" + toUrl(loadedData.verses[p.dataset.id].author) + "/" + toUrl(loadedData.verses[p.dataset.id].title) + "/" + loadedData.verses[p.dataset.id].vid;
                title = loadedData.verses[p.dataset.id].title;
            } else {
                link += "read/" + toUrl(loadedData.details.author) + "/" + toUrl(loadedData.details.title) + "/" + loadedData.details.id;
                title = loadedData.details.title;
            }

            if (isMobile && navigator.share) {
                navigator.share({
                    title: title,
                    url: link
                });
            } else {
                // if(!isShared) {
                if (Clipboard.copy(link)) {
                    $('#modalMsg').modal('show');
                    e('modalMsg').querySelector('.msgText').innerText = 'Ссылка скопирована успешно';
                    setTimeout(function () {
                        $('#modalMsg').modal('hide');
                    }, 3000);
                }
            }
        },
        copyText: function () {
            var p = event.currentTarget.closest('div[data-id]');
            var text = p != null ? loadedData.verses[p.dataset.id].body : loadedData.details.body;
            if (Clipboard.copy(text)) {
                $('#modalMsg').modal('show');
                e('modalMsg').querySelector('.msgText').innerText = 'Текст стиха скопирован успешно';
                setTimeout(function () {
                    $('#modalMsg').modal('hide');
                }, 3000);
            }
        },
        dwnld: function () {
            let p = event.currentTarget.closest('div[data-id]');
            let info = p != null ? loadedData.verses[p.dataset.id] : loadedData.details;

            let link = document.createElement('a');
            link.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(info.body));
            link.setAttribute('download', info.title + ".txt");
            if (isOS()) link.setAttribute('target', "_blank");
            link.click();
        },
        font: {
            increase: function () {
                if (read.currentBodyFontSize) {
                    document.querySelector('div[data-name="body"]').style.fontSize = read.currentBodyFontSize + 1 + "px";
                    read.currentBodyFontSize++;
                } else {
                    document.querySelector('div[data-name="body"]').style.fontSize = read.defaultBodyFontSize + 1 + "px";
                    read.currentBodyFontSize = read.defaultBodyFontSize + 1;
                }
            },
            decrease: function () {
                if (read.currentBodyFontSize) {
                    document.querySelector('div[data-name="body"]').style.fontSize = read.currentBodyFontSize - 1 + "px";
                    read.currentBodyFontSize--;
                } else {
                    document.querySelector('div[data-name="body"]').style.fontSize = read.defaultBodyFontSize - 1 + "px";
                    read.currentBodyFontSize = read.defaultBodyFontSize - 1;
                }
            }
        },
        edit: function () {
            var p = event.currentTarget.closest('div[data-id]');
            var id = p != null ? p.dataset.id : loadedData.details.id;

            window.open('https://cp.stihi.org/verse/addEdit/' + id);
        }
    }
};var search = {
    init: function (loadPageFunc) {
        console.log(path);

        var sw = getUrlParameter('word');

        nav.setTitle('Поиск - "' + sw+'"');
        j.post(['search', 'init'], function (data) {
            loadPageFunc();
            loadedData = data;
            if (!isDefined(data.error)){
                home.process.built(data.verses);
                var c = data.verses.order.length > 100 ? '100+' : data.verses.order.length;
                e('breadcrumbs').innerHTML = 'По запросу "' + sw + '" найдено ' + c + ' результат(ов)';
            }
            else if(data.error=="")  {
                e('breadcrumbs').innerHTML = 'По запросу "' + sw + '" ничего не найдено. Возможно Вам будут интересны другие стихи';
                home.process.built(data.verses);
            }
            else e('breadcrumbs').innerHTML = 'При поиске "' + sw + '" возникла ошибка. Пожалуйста свяжитесь с администратором через контактную форму';
        }, {sw: sw});
    },
    actions: {
        init: function(){
            e('searchBox').onkeydown = this.input;
            e('searchBtn').onclick = this.button;
        },
        button: function () {
            nav.goTo('search?word='+e('searchBox').value);
        },
        input: function (ev) {
            if(ev.key=="Enter") nav.goTo('search?word='+ev.target.value);
        },
        tagBtn: function (ev) {
            e('searchBox').value = ev.target.dataset.sw;
            nav.goTo('search?word='+ev.target.dataset.sw);
        }
    }
};