( function ($) { 
    $(document).ready(function(){

        function api(data,rfn) {
            $.ajax({
                url: '/ajax',
                type: 'POST',
                data: data,
                success: function(rdata){
                    if ((rdata.substr(0,1) == '{') || (rdata.substr(0,1) == '[')) rdata = JSON.parse(rdata);
                    if (rfn) {
                        rfn(rdata);
                    }
                },
                error: function(xhr, ajaxOptions, thrownError){
                    if (xhr.status == 0) { rfn({result:'timeout'}); }
                }
            });
        }

        function notify( message, classes, msec ) {
            var el = $('<div class="'+classes+'">'+message+'</div>');
            $('.log-info-box').prepend(el);
            if (msec)
            setTimeout(function(){
                $(el).fadeOut(1000, function(){
                    $(el).remove();
                });
            }, msec);
        }

        function update_pages_list() {
            api({fn:'get_pages_list'},set_pages_list);
        }
        update_pages_list();
        function set_pages_list(r) {
            // Заполняем список страниц
            $('[data-pages-list]').html(r.list);

            /* Добавляем в выпадающий список родительские */
            $('[data-page-parent]').each(function(i,el){
                var parent = $(el).attr('data-page-parent');
                var self   = $(el).attr('data-page-id');
                $(el).append(r.parents);
                /* Удаляем себя из списка чтобы не назначить себя родителем */
                $(el).find('[value="'+self+'"]').remove();
                $(el).val(parent);
            });

            /* Выставляем шаблоны */
            $('[data-page-template]').each(function(i,el){
                var tpl = $(el).attr('data-page-template');
                if ( $(el).find('option[value="'+tpl+'"]').length == 0 ) {
                    $(el).prepend('<option value="'+tpl+'">'+tpl+'</option>');
                }
                $(el).val(tpl);
            });

            /* Добавляем поиск в выпадающий список */
            $("[data-pages-list] select").select2();

            /* Открыть свойства */
            $('[data-page-prop-open]').click(function(){
                var id = $(this).attr('data-page-prop-open');
                $('[data-page-prop='+id+']').removeClass('hidden').addClass('openhot');
                $('[data-page-item='+id+']').addClass('hidden');
                return false;
            });

            /* Скрыть свойства (Отменить) */
            $('[data-page-prop-cancel]').click(function(){
                var id = $(this).attr('data-page-prop-cancel');
                $('[data-page-prop='+id+']').addClass('hidden').removeClass('openhot');
                $('[data-page-item='+id+']').removeClass('hidden');
                return false;
            });

            /* Сохранить свойства (Сохранить) */
            $('[data-page-prop-save]').click(function(){
                var id      = $(this).attr('data-page-prop-save');
                var selector =  '[data-page-id='+id+']';
                var data = {
                    fn:          'save_prop',
                    id:          id,
                    title:       $(selector+'[name=title]').val(),
                    seo_title:   $(selector+'[name=seo_title]').val(),
                    type_url:    $(selector+'[name=url]').attr('data-page-url-type'),
                    url:         $(selector+'[name=url]').val(),
                    date:        $(selector+'[name=date]').val(),
                    time:        $(selector+'[name=time]').val(),
                    pid:         $(selector+'[name=pid]').val(),
                    template:    $(selector+'[name=template]').val(),
                    sort:        $(selector+'[name=sort]').val(),
                    description: $(selector+'[name=description]').val()
                }
                api(data, function(r){
                    if (r.result == 'timeout') {
                        notify( $conn_lost, 'info-error', 10000 );
                    } else if (r.info_text) {
                        notify( r.info_text, r.info_class, r.info_time );
                        if ( r.list ) {
                            set_pages_list(r);
                        }
                        if ( r.info_class == 'info-success' ) {
                            /* Свернуть свойства */
                            $('[data-page-prop='+data.id+']').addClass('hidden').removeClass('openhot');
                            $('[data-page-item='+data.id+']').removeClass('hidden');
                            /* Маркер последнего редактирования */
                            $('[data-page-item]').removeClass('last-edited');
                            $('[data-page-item='+data.id+']').addClass('last-edited');
                            // Обновить Title и URL
                            $('[data-page-item-link='+data.id+']').html(r.title);
                            $('[data-page-item-link='+data.id+']').attr('href', r.new_url);
                            $('[data-page-id='+data.id+'][name=url]').val(r.short_url);
                        }
                        sendUpdateEvent();
                    }
                });
                return false;
            });

            /* Редактировать страницу */
            $('[data-page-edit-btn]').click(function(){
                var id = $(this).attr('data-page-edit-btn');
                /* Очищаем поля редактора */
                $('[data-page-title]').text('');
                $('[data-page-title]').attr('href', '');
                $('[data-page-text]').val('');
                $('[data-page-text]').attr('data-page-text','');
                $('[data-page-save-btn]').attr('data-page-save-btn', '');
                /* Запрашиваем данные о странице с сервера */
                api({fn:'get_page',id:id},function(r){
                    if (r.result == 'ok') {
                        /* Заполняем поля редактора */
                        $('[data-page-title]').text(r.page.title);
                        $('[data-page-title]').attr('href', r.page.url);
                        $('[data-page-text]').val(r.page.text);
                        if (r.page.modified != null) /* fix remove attr */
                        $('[data-page-text]').attr('data-page-text', r.page.modified);
                        $('[data-page-save-btn]').attr('data-page-save-btn', r.page.id);
                        /* Отображаем редактор */
                        $('[data-page-editor]').removeClass('hidden');
                        /* Блокируем прокрутку списка страниц */
                        $('body').addClass('noscroll');
                        /* Выбираем тему */
                        var n = $.cookie('theme');
                        var theme = admin_styles[n][1];
                        /* Подключаем редактор */
                        var txtarea = $('[data-page-text]')[0];
                        window.codemirror_editor = CodeMirror.fromTextArea(txtarea, {
                            mode: "htmlmixed",
                            styleActiveLine: true,
                            lineNumbers: true,
                            lineWrapping: true,
                            matchBrackets: true,
                            theme: theme
                        });
                    }
                    if (r.result == 'timeout') {
                        notify( $conn_lost, 'info-error', 10000 );
                    }
                });
                return false;
            });

            /* Отмена редактирования страницы */
            $('[data-page-cancel-btn]').unbind( "click" );
            $('[data-page-cancel-btn]').click(function(){
                /* Отключить редактор */
                window.codemirror_editor.toTextArea();
                /* Разблокируем прокрутку списка страниц */
                $('body').removeClass('noscroll');
                /* Скрываем редактор */
                $('[data-page-editor]').addClass('hidden');
                return false;
            });

            /* Сохранить страницу */
            $('[data-page-save-btn]').unbind( "click" );
            $('[data-page-save-btn]').click(function(){
                /* Сбросить изменения в textarea */
                window.codemirror_editor.save();
                var data = {
                    fn:'save_page',
                    id: $('[data-page-save-btn]').attr('data-page-save-btn'),
                    modified: $('[data-page-text]').attr('data-page-text'),
                    text: $('[data-page-text]').val(),
                    url: $('[data-page-title]').attr('href') /* delete old page */
                }
                api(data,function(r){
                    if (r.info_text) {
                        notify( r.info_text, r.info_class, r.info_time );
                        /* Маркер последнего редактирования */
                        $('[data-page-item]').removeClass('last-edited');
                        $('[data-page-item='+data.id+']').addClass('last-edited');
                        if ( r.modified ) {
                            $('[data-page-text]').attr('data-page-text', r.modified);
                        }
                    }
                    if (r.result == 'timeout') {
                        notify( $conn_lost, 'info-error', 10000 );
                    }
                });
                return false;
            });
            
            /* Сохранить и закрыть */
            $('[data-page-save-close-btn]').unbind( "click" );
            $('[data-page-save-close-btn]').click(function(){
                /* Сбросить изменения в textarea */
                window.codemirror_editor.save();
                var data = {
                    fn:'save_page',
                    id: $('[data-page-save-btn]').attr('data-page-save-btn'),
                    modified: $('[data-page-text]').attr('data-page-text'),
                    text: $('[data-page-text]').val(),
                    url: $('[data-page-title]').attr('href') /* delete old page */
                }
                api(data,function(r){
                    if (r.info_text) {
                        notify( r.info_text, r.info_class, r.info_time );
                        /* Маркер последнего редактирования */
                        $('[data-page-item]').removeClass('last-edited');
                        $('[data-page-item='+data.id+']').addClass('last-edited');
                        /* Закрыть редактор */
                        $('[data-page-cancel-btn]').click();
                    }
                    if (r.result == 'timeout') {
                        notify( $conn_lost, 'info-error', 10000 );
                    }
                });
                return false;
            });

            // Создать страницу
            $('[data-page-create=0]').unbind( "click" );
            $('[data-page-create]').click(function(){
                var pid = $(this).attr('data-page-create');
                var sort = $(this).attr('data-page-sort');
                var sort2 = $(this).parents('[data-page-box]');
                sort2 = $(sort2[0]).next().find('[data-page-sort]').attr('data-page-sort');
                api({fn:'create_page',pid:pid,sort:sort,sort2:sort2},function(r){
                    if (r.result == 'timeout') {
                        notify( $conn_lost, 'info-error', 10000 );
                    } else if (r.info_text) {
                        notify( r.info_text, r.info_class, r.info_time );
                        if ( r.info_class == 'info-success' ) {
                            set_pages_list(r);
                        }
                    }
                });
                return false;
            });

            // Удалить страницу
            $('[data-page-del]').click(function(e){
                e.preventDefault();
                if ( !confirm( $q_delete ) ) return;
                var data = {
                    fn:'del_page',
                    id:$(this).attr('data-page-del')
                };
                api(data, function(r){
                    if (r.result == 'timeout') {
                        notify( $conn_lost, 'info-error', 10000 );
                    } else if (r.info_text) {
                        notify( r.info_text, r.info_class, r.info_time );
                        if ( r.info_class == 'info-success' ) {
                            set_pages_list(r);
                        }
                    }
                });
            });

            /* Отфильтровать, подергав поиск */
            var v = $("[data-page-search]").val();
            $("[data-page-search]").val('').trigger('change').val(v).trigger('change');

            sendUpdateEvent();

        }

        /* Send Update event to Menu */
        function sendUpdateEvent() {
            if (!document.skipFirstEvent) document.skipFirstEvent = [];
            if ( document.skipFirstEvent['pages'] ) {
                let event = new Event("updated");
                $('[data-settings=pages]')[0].dispatchEvent(event);
            } else {
                document.skipFirstEvent['pages'] = true;
            }
        }
        
        /* Поиск */
        $("[data-pages-list]").searcher({
            itemSelector: "[data-page-box]",
            textSelector: "[data-page-item-link]",
            inputSelector: "[data-page-search]"
        });

    });
})( jQuery );
