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

        function api(data,rfn) {
            $.ajax({
                url: cms.api,
                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);
        }

        /* Translate function */

        function __( str, context = 'menu.mod.php' ) {
            if (!cms) return str;
            if (!cms.locale) return str;
            if (!cms.lang[context]) return str;
            if (!cms.lang[context][cms.locale][str]) return str;
            return cms.lang[context][cms.locale][str];
        }

        function toggleMenu(mid) {
            var menu = $.cookie('menu');
            if (menu === undefined || menu.substr(0,1) !== "[" ) { menu = "[]"; }
            menu = JSON.parse(menu);
            var index = menu.indexOf(mid);
            if (index === -1) {
                menu.push(mid);
            } else {
                menu.splice(index, 1);
            }
            menu = JSON.stringify(menu);
            $.cookie('menu', menu);
        }

        function removeMenu(mid) {
            var menu = $.cookie('menu');
            if (menu === undefined || menu.substr(0,1) !== "[" ) { menu = "[]"; }
            menu = JSON.parse(menu);
            var index = menu.indexOf(mid);
            if (index !== -1) {
                menu.splice(index, 1);
                menu = JSON.stringify(menu);
                $.cookie('menu', menu);
            }
        }

        function update_menu_items() {
            api({fn:'get_menu_items'},set_menu_items);
        }
        if ( $('body').hasClass('logged') ) {
            update_menu_items();
        }
        function set_menu_items(r) {

            // Заполняем список пунктов меню
            $('[data-menu-list]').html(r.list);

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

            // Области вывода
            $('[data-menu-area]').each(function(i,el){
                var area = $(el).attr('data-menu-area');
                $(el).val(area);
            });

            // Событие выбора страницы
            $('[data-menu-page]').change(function(){
                var mid = $(this).attr('data-menu-id');
                var id = $(this).val();
                if ( id == "0" ) {
                    $('[data-menu-id='+mid+'][name=url]').removeAttr('disabled');
                } else {
                    var url = $(this).find('option[value='+id+']').attr('data-url');
                    $('[data-menu-id='+mid+'][name=url]').val(url);
                    $('[data-menu-id='+mid+'][name=url]').attr('disabled','disabled');
                }
            });

            // Привязанные страницы
            $('[data-menu-page]').each(function(i,el){
                var page = $(el).attr('data-menu-page');
                $(el).append(r.pages);
                $(el).val(page).trigger('change');
            });

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

            /* Call Mobile Menu */
            $('[data-menu-menu]').click(function(){
                var id = $(this).attr('data-menu-menu');
                $('[data-menu-item='+id+'] .menu-button').addClass('open');
                $('[data-menu-item='+id+'] .item-button').addClass('open');
            });

            /* Close Mobile Menu */
            $('[data-settings="menu"] .menu-button, [data-settings="menu"] .item-button').click(function(){
                $(this).removeClass('open');
            });

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

            // Показать/скрыть дочерние пункты
            $('[data-menu-subitems-hide]').click(function(){
                var mid = $(this).attr('data-menu-subitems-hide');
                $('[data-menu-subitems='+mid+']').toggleClass('closed');
                toggleMenu(mid);
                $('[data-menu-item='+mid+'] .menu-button').removeClass('open');
                $('[data-menu-item='+mid+'] .item-button').removeClass('open');
                return false;
            });
            var menu = $.cookie('menu');
            if (menu === undefined || menu.substr(0,1) !== "[" ) { menu = "[]"; }
            menu = JSON.parse(menu);
            for ( var mid of menu ) {
                $('[data-menu-subitems='+mid+']').toggleClass('closed');
            }

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

            // Сохранить свойства
            $('[data-menu-save]').click(function(){
                var mid      = $(this).attr('data-menu-save');
                var selector =  '[data-menu-id='+mid+']';
                var data = {
                    fn:        'save_menu_item',
                    mid:       mid,
                    title:     $(selector+'[name=title]').val(),
                    tag_title: $(selector+'[name=tag_title]').val(),
                    url:       $(selector+'[name=url]').val(),
                    id:        $(selector+'[name=id]').val(),
                    pid:       $(selector+'[name=pid]').val(),
                    classes:   $(selector+'[name=classes]').val(),
                    sort:      $(selector+'[name=sort]').val(),
                    area:      $(selector+'[name=area]').val(),
                    target:    $(selector+'[name=targetblank]').prop('checked')
                }
                api(data, function(r){
                    if (r.result == 'timeout') {
                        notify( __("Connection lost"), 'info-error', 10000 );
                    } else if (r.info_text) {
                        notify( r.info_text, r.info_class, r.info_time );
                        if ( r.list ) {
                            set_menu_items(r);
                        }
                        if ( r.info_class == 'info-success' ) {
                            // Свернуть свойства
                            $('[data-menu-prop='+data.mid+']').addClass('hidden').removeClass('openhot');
                            $('[data-menu-item='+data.mid+']').removeClass('hidden');
                            // Маркер последнего редактирования
                            $('[data-menu-item]').removeClass('last-edited');
                            $('[data-menu-item='+data.mid+']').addClass('last-edited');
                        }
                    }
                });
                return false;
            });

            // Создать пункт
            $('[data-menu-create=0]').unbind( "click" );
            $('[data-menu-create]').click(function(){
                var pid = $(this).attr('data-menu-create');
                $('[data-menu-item='+pid+'] .menu-button').removeClass('open');
                $('[data-menu-item='+pid+'] .item-button').removeClass('open');
                var sort = $(this).attr('data-menu-sort');
                var sort2 = $(this).parents('[data-menu-box]');
                if (sort2[1]) {
                    sort2 = $(sort2[0]).next().find('[data-menu-sort]').attr('data-menu-sort');
                } else {
                    sort2 = undefined;
                }
                api({fn:'create_menu_item',pid:pid,sort:sort,sort2:sort2},function(r){
                    if (r.result == 'timeout') {
                        notify( __("Connection 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_menu_items(r);
                        }
                    }
                });
                return false;
            });

            // Удалить пункт или меню
            $('[data-menu-del]').click(function(e){
                var id = $(this).attr('data-menu-del');
                $('[data-menu-item='+id+'] .menu-button').removeClass('open');
                $('[data-menu-item='+id+'] .item-button').removeClass('open');
                e.preventDefault();
                if ( !confirm( __("Delete?") ) ) return;
                var data = {
                    fn:'del_menu_item',
                    mid:id
                };
                api(data, function(r){
                    if (r.result == 'timeout') {
                        notify( __("Connection 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' ) {
                            // remove from cookie
                            /*removeMenu(data.mid);
                            $('#page-menu .subbox-grid[data-mid='+data.mid+'] .cpline').each(function(i,el){
                                var mid = $(el).attr('data-mid');
                                removeMenu(mid);
                            });*/
                            set_menu_items(r);
                        }
                    }
                });
            });

        }

        // Получить событие updated от модуля страниц
        if ( $('[data-settings=pages]').length ) {
            $('[data-settings=pages]')[0].addEventListener("updated", function(event) {
                update_menu_items();
            });
        }

    });
})( jQuery );
