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 articles = {
    init: function () {

    }
};var home = {
    sliderImgWidths: [320, 480, 680, 790, 1024, 1200, 1400, 1920],
    init: function () {
        if (isDefined(getUrlParameter('editor'))) {
            if (getUrlParameter('editor') === 'true') localStorage.editor = true;
            nav.goTo('/');
            return false;
        }
        nav.setTitle('Главная');
        j.post(['home', 'init'], function (data) {

            home.process.catsCarousel(data.cats);

            home.process.built(data.news, 'news');
            home.process.built(data.recom, 'recoms');

            home.holiday = data.holiday;

            home.events();
        });

    },
    process: {
        built: function (data, type) {
            var el, div, line, val;
            if(!isDefined(slidesTemplate[type]))slidesTemplate[type] = document.querySelector('#' + type + '>div').cloneNode(true);
            e(type).innerHTML = '';
            e(type).classList.remove('slick-initialized');

            for (var i in data) {
                div = slidesTemplate[type].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 (line.dirType == 0) el.querySelector('.dwnldZipBtn').removeAttribute('hidden');
                // if (line.dir == 0) el.querySelector('.simpleDwnld').removeAttribute('hidden');


                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;
                        if (type == 'news') val = img.url(val, 340, 340, line.name);
                        else
                            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 (el.querySelector('[data-name="' + k + '"]')) el.querySelector('[data-name="' + k + '"]').innerHTML = val;
                }
            }
            if (type == 'recoms') AppConfig.slickCarousel('#recoms', 6, 5, 4, 2, false);
        },
        catsCarousel: function (data) {
            var el, div, line, val,
                temp = document.querySelector('#catsCarousel>div').cloneNode(true);
            e('catsCarousel').innerHTML = '';
            for (var m in data) {
                line = data[m];
                div = temp.cloneNode(true);
                div.removeAttribute('hidden');
                el = e('catsCarousel').appendChild(div);

                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, 300, line.name);
                        el.querySelector('img').src = val;
                    }
                    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 (el.querySelector('[data-name="' + k + '"]')) el.querySelector('[data-name="' + k + '"]').innerHTML = val;
                }
            }

            AppConfig.slickCarousel('#catsCarousel', 5, 4, 3, 2);
        }
    },
    events: function () {

    }
};var media = {
    analyticsList: {},
    list: [],
    searchStarter: false,
    init: function () {
        /*if(isDefined(path[0]) && path[0] == 'search') {
            this.search.init();
            nav.setTitle("Медиа - поиск");
        }

        else{*/
            var cMid = path[path.length - 1];
            cMid = isDefined(mediaStructure[cMid])?cMid:10000;
            media.id = cMid;

            if(cMid != 10000)
                while(mediaStructure[cMid].pmid != 10000) cMid = mediaStructure[cMid].pmid;
            if(document.querySelector('#sidebar a[href="'+mediaGeneratePath(cMid)+'"]'))
                document.querySelector('#sidebar a[href="'+mediaGeneratePath(cMid)+'"]').classList.add('active');


            j.post(['media', 'init'], function (data) {
                media.settings = player.albumSett = data.settings;
                media.list = data.list;

                media.build.dirHeader(data.settings);
                home.process.built(data.recommended, 'recoms');

                e('mediaBreadcrumbs').innerHTML = mediaBreadcrumbs(data.settings.id, false, '/');

                //for grid (list = 0)
                if (data.list) if (data.settings.dirListingStyle == 1 && data.settings.dirType ==1) {
                    media.build.dir(data.list, true);
                } else if (data.settings.dirType == 1) {
                    media.build.dir(data.list);
                } else {
                    media.build.mainList(data.list, data.settings.dirThName);
                }

                nav.setTitle(data.settings.name);

                // e('pageImg').src = img.url(data.settings.imgId, 300, 75, data.settings.name);



            }, {mid: media.id, count: 1});
        //}
    },
    build: {
        dirHeader: function (data) {
            var val;

            if(data.dirHeaderStyle==1) {
                e('dirHeader').classList.add('showAll');
                for (var k in data) {
                    val = data[k] == null ? '' : data[k];

                    if (k == 'imgId' && data.id != '10000') {
                        if (val == 4000) val = isDefined(data.pmid) ? mediaStructure[data.pmid].imgId : 4000;
                        val = img.url(val, 340, 300, data.name);
                        e('dirHeader').querySelector('img').src = val;
                        e('dirHeader').querySelector('img').alt = data.name;
                        if(val == 4000 && mediaStructure[line.pmid].imgId == 4000)e('dirHeader').querySelector('img').classList.add('rounded-circle');
                    } else if (e('dirHeader').querySelector('[data-name="' + k + '"]')) e('dirHeader').querySelector('[data-name="' + k + '"]').innerHTML = val;
                }
            }

            e('dirHeader').dataset.mid = data.id;
            e('dirHeader').querySelector('[data-name="name"]').innerHTML = data.name;
            if (data.dirType == 0)e('dirHeader').querySelector('.dwnldZipBtn').removeAttribute('hidden');
        },
        mainList: function (listData, dirThName) {
            var el, div, line, val;
            var par = e('mainList');
            par.dataset.listtype = 0;
            par.dataset.listid = media.settings.id;
            par.removeAttribute('hidden');

            for (var i in listData) {
                div = document.querySelector('#mainList>div').cloneNode(true);
                div.removeAttribute('hidden');
                el = par.appendChild(div);
                line = listData[i];

                el.dataset.list = i;
                el.dataset.mid = line.mid;
                el.dataset.pmid = line.pmid;
                el.dataset.ext = line.ext;
                if (line.dir == 0) el.querySelector('.simpleDwnld').removeAttribute('hidden');

                // console.log(line);

                for (var k in line) {
                    val = line[k];
                    if (k == 'imgId') {
                        el.querySelector('img').src = img.url(val != 4000? val : mediaStructure[line.pmid].imgId, 50, 50, line.name);
                        el.querySelector('img').alt = line.name;
                        if(val == 4000 && mediaStructure[line.pmid].imgId == 4000)el.querySelector('img').classList.add('rounded-circle');
                    } else {
                        if (k == 'playTime') val = val != 0 && val != null ? formatTime(val) : formatBytes(line.size);
                        else if (k == 'ext') val = this.extIcon(val);
                        else if (k == 'mid') val = parseInt(i) + 1;
                        $(el).find('[data-name="' + k + '"]').html(val);
                    }
                }
            }

            // e('mainList').innerHTML = media.templates.listHeader.replace('**dirThName**', dirThName ? dirThName : '') + e('mainList').innerHTML;

            if(isDefined(player.list[player.playId]))
                var alb = par.querySelector('[data-mid="' + player.list[player.playId].mid + '"]');
            if (alb && !player.element.paused) {
                alb.classList.add('isPlaying');
            }

            if (getUrlParameter('play')) {
                var p = par.querySelector('[data-mid="'+getUrlParameter('play')+'"]');
                if(p){
                    p.classList.add('linked');
                    setTimeout(function () {
                        document.querySelector('.linked').scrollIntoView();
                        document.getElementById('wrapper').scrollTop-=60
                    }, 500);
                    if(p.closest('[data-ext="mp3"]'))p.click();
                }
            }

        },
        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 (line.dirType == 0) el.querySelector('.dwnldZipBtn').removeAttribute('hidden');
                if (line.dir == 0) el.querySelector('.simpleDwnld').removeAttribute('hidden');

                for (var k in line) {
                    val = line[k];
                    if (k == 'imgId') {
                        el.querySelector('img').src = img.url(val == 4000 && !grid ? mediaStructure[line.pmid].imgId : val, grid ? 400 : 60, grid ? 340 : 60, line.name)
                        el.querySelector('img').alt = line.name;
                        if(val == 4000 && mediaStructure[line.pmid].imgId == 4000)el.querySelector('img').classList.add('rounded-circle');
                    } else {
                        if (k == 'playTime') val = formatTime(val);
                        else if (k == 'mid') $(el).find('a[href=""]').attr('href', mediaGeneratePath(val));
                        // if (k=='name') val = this.extIcon(line['ext']) + val;
                        $(el).find('[data-name="' + k + '"]').html(val);
                    }
                }

            }

            console.log("Spend time for list built: " + (m - new Date()));
        },
        search: function (data) {
            var par, el, div, line, val, listData = data.list;

            e('searchedFiles').innerHTML = "";
            e('searchedFolders').innerHTML = "";

            if(data.searchStatus){
                e('searchList').classList.remove('noFound');
                e('searchMsg').innerHTML = "По запросу \""+data.search+"\" найдено "+data.searchCount+" результатов";

                for (var i in listData) {
                    line = listData[i];
                    par = line.dir==0 ? 'searchedFiles' : 'searchedFolders';
                    div = document.querySelector('.searchedEl[hidden]').cloneNode(true);
                    div.removeAttribute('hidden');
                    el = document.getElementById(par).appendChild(div);

                    el.dataset.mid = line.mid;
                    el.dataset.pmid = line.pmid;
                    el.dataset.ext = line.ext;
                    el.dataset.playable = (line.ext=='mp3') || (line.totalPlayTime>0)?1:0;
                    el.dataset.dir = line.dir;

                    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, 128, 128, line.name);
                            el.querySelector('img').alt = line.name;
                            if(val == 4000 && mediaStructure[line.pmid].imgId == 4000)el.querySelector('img').classList.add('rounded-circle');
                        } 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);
                        }
                    }
                }
                highlight(data.search,'searchList', "gi");
            }
            else {
                e('searchList').classList.add('noFound');
                e('searchMsg').innerHTML = "По запросу \""+data.search+"\" ничего не найдено. Попробуйте изменить или проверить искомую фразу";
            }

        },
        extIcon: function (ext) {
            var IconTypeFile = '';
            switch (ext) {
                case 'mp3': {
                    IconTypeFile = '<i class="la la-play-circle-o"></i>';
                    break;
                }
                case 'mp4': {
                    IconTypeFile = '<i class="la la-file-video-o"></i>';
                    break;
                }
                case 'pdf': {
                    IconTypeFile = '<i class="la la-file-pdf-o"></i>';
                    break;
                }
                case 'zip':
                case 'rar': {
                    IconTypeFile = '<i class="la la-file-zip-o"></i>';
                    break;
                }
                case 'dir':
                case null: {
                    IconTypeFile = '';//<i class="la la-folder"></i>';
                    break;
                }
                default: {
                    IconTypeFile = '<i class="la la-file"></i>';
                    break;
                }
            }
            return IconTypeFile + ' ';
        }
    },
    search: {
        init: function () {
            var sText = e('searchInput').value.trim();

            if(sText.length>2){
                j.post(['media', 'search'], function (data) {
                    media.build.search(data);
                }, {search: sText});
            }
            else {
                if(media.searchStarter) clearTimeout(media.searchStarter);
                e('searchList').classList.add('noFound');
                e('searchMsg').innerText = 'Для поиска введите два и больше символа...';
            }
        },
        actions: function () {
            e('searchInput').oninput = function(ev){
                ev.target.click();
                if(media.searchStarter) clearTimeout(media.searchStarter);

                media.searchStarter = setTimeout(function () {
                        media.search.init();
                        }, 1000);
            }
            e('searchInput').onkeydown = function(ev){
                if(media.searchStarter) clearTimeout(media.searchStarter);

                if(ev.keyCode == 13){
                    ev.preventDefault();
                    ev.stopImmediatePropagation();
                    media.search.init();
                }
            }
        }
    },
    elClk: function (ev) {
        if(ev.target.closest('.dropleft'))return false;
        var par = ev.target.closest('.playElement').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 if(par.ext == 'mp4') {
            media.analytics.add('play',par.mid);
            window.open(playServer + 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 = baseUrl;
            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)) {
                    $('#modalMsg').modal('show');
                    e('modalMsg').querySelector('.msgText').innerText = 'Ссылка скопирована успешно';
                    setTimeout(function (){
                        $('#modalMsg').modal('hide');
                    }, 3000);
                }
            }

            // 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('#dirHeader')) curData = media.settings;
            else if(item.closest('#media')) curData = media.list[item.dataset.list];
            // 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('#audioPlayer')) 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');
            }

            $('#infoPopup').modal('show');
        }
    },
    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();
    }
};