( 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'}); }
                }
            });
        }


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

        /* Translate function */

        function __( str, context = 'admin.mod.php' ) {
            if (!cms) return str;
            if (!cms.locale) return str;
            if (!cms.lang[context][cms.locale][str]) return str;
            return cms.lang[context][cms.locale][str];
        }
        
        
        /* Пункт меню "Выход" */
        $('[data-logout]').click(function(){
            api({fn:'logout'},function(){
                window.location.reload(true);
            });
            return false;
        });
        
        
        /* Щелчки на пунктах навигационного меню. Переключение страниц модулей. */
        $('[data-am-page]').click(link_to_page);
        function link_to_page(){
            var page = $(this).attr('data-am-page');
            if (page) {
                $.cookie('page', page);
                /* Скрываем все страницы настроек */
                $('[data-settings]').addClass('hidden');
                /* Отображаем только нужную */
                $('[data-settings='+page+']').removeClass('hidden');
                $('[data-am-page]').removeClass('active');
                $(this).addClass('active');
                /*
                if (page == 'page-notes') { $('#editor').focus(); }
                var tab = $.cookie('tab-'+page);
                if (tab == undefined) {
                    $('#'+page+' .link-to-tab:first-child').click();
                } else {
                    $('.link-to-tab[data-tab='+tab+']').click();
                }
                */
                $('body,html').animate({ scrollTop: 0 }, 500);
            }
            return false;
        }
        
        
        /* В кукисе page сохраняется последняя открытая страница настроек модуля. */
        var page = $.cookie('page');
        if (page != undefined) {
            $('[data-am-page='+page+']').click();
        } else {
            $('[data-am-page=base]').click();
        }
        
        
        /*
        $('.link-to-tab').click(link_to_tab);
        function link_to_tab(){
            var tab = $(this).attr('data-tab');
            if (tab) {
                var p = $(this).parents('.hidden-page');
                var pid = $(p).attr('id');
                $.cookie('tab-'+pid,tab);
                $(p).find('.hidden-tab').removeClass('showed-tab');
                $('#'+tab).addClass('showed-tab');
                $(p).find('.link-to-tab').removeClass('active');
                $('.link-to-tab[data-tab='+tab+']').addClass('active');
            }
        }
        */
        
        
        /* Login */
        $('[data-login-btn]').click(function(){
            var data = {
                fn:       'login',
                login:    $('.authorization input[name=login]').val(),
                password: $('.authorization input[name=password]').val()
            }
            api( data, function(r){

                /* Переход в админку после установки */
                if ( r.link ) {
                    window.location = r.link;
                }

                if (r.info_text) {
                    notify( r.info_text, r.info_class, r.info_time );
                }

                if (r.result == 'timeout') {
                    notify( __("Connection lost"), 'info-error', 10000 );
                }

                if (r.result == 'ok') {
                    window.location.reload(true);
                }

            });
        });
        $('input[name=login],input[name=password]').keyup(function(e){
            if (e.key == "Enter") {
                $('[data-login-btn]').click();
            }
        });

        /* Theme switcher */
        $( '[data-theme]' ).click( function(){
            var n = $.cookie('theme');
            $('body').removeClass(admin_styles[n][0]);
            n = (+n+1) % admin_styles.length;
            $('body').addClass(admin_styles[n][0]);
            notify(admin_styles[n][0], 'info-success', 3000);
            $.cookie('theme', n);
            if (window.codemirror_editor) {
                window.codemirror_editor.setOption("theme", admin_styles[n][1]);
            }
            return false;
        });
        var n = $.cookie('theme');
        if (!n) {
            n = 1;
            $.cookie('theme', n);
        }
        var theme = admin_styles[n][0];
        $('body').addClass(theme);

        /* Update Cache */
        $('[data-cache]').click(function(){
            api({fn:'recreate_cache'}, function(r){
                if (r.info_text) {
                    notify( r.info_text, r.info_class, r.info_time );
                    if ($('[data-page-editor]').hasClass('hidden')) {
                        setTimeout(function(){
                            window.location.reload(true);
                        },1000);
                    }
                }
            });
            return false;
        });

        /* Open properties */
        $('[data-am-prop-open]').click(function(){
            var item = $(this).attr('data-am-prop-open');
            $('[data-am-prop='+item+']').removeClass('hidden').addClass('openhot');
            $('[data-am-item='+item+']').addClass('hidden');
            return false;
        });

        /* Close properties */
        $('[data-am-cancel]').click(function(){
            var item = $(this).attr('data-am-cancel');
            $('[data-am-prop='+item+']').addClass('hidden').removeClass('openhot');
            $('[data-am-item='+item+']').removeClass('hidden');
            return false;
        });

        /* Set parents in select2 */
        $('[data-am-prop] select').each(function(i,el){
            var parent = $(el).attr('data-am-parent');
            $(el).val(parent);
            $(el).select2();
        });

        /* Save properties */
        $('[data-am-save]').click(function(){
            var item = $(this).attr('data-am-save');
            var selector = '[data-am-prop='+item+']';
            var data = {
                fn:      'admin_menu_save',
                type:    $(selector).attr('data-type'),
                module:  $(selector).attr('data-module'),
                item:    item,
                title:   $(selector+' [name=title]').val(),
                sort:    $(selector+' [name=sort]').val(),
                section: $(selector+' [name=section]').val(),
            }
            api(data, function(r){
                if (r.info_text) {
                    notify( r.info_text, r.info_class, r.info_time );
                    if ( r.info_time )
                    setTimeout(function(){
                        window.location.reload(true);
                    },1000);
                }
            });
            return false;
        });

        /* Delete Container */
        $('[data-am-delete]').click(function(e){
            e.preventDefault();
            var item = $(this).attr('data-am-delete');
            var childs = $('[data-am-childs='+item+'] > div').length;
            if ( childs ) {
                notify( __("Not Empty Container"), 'info-error', 2000 );
                return;
            }
            if ( !confirm( __("Delete?") ) ) return;
            var data = {
                fn:      'admin_menu_del',
                item:    item,
            }
            api(data, function(r){
                if (r.info_text) {
                    notify( r.info_text, r.info_class, r.info_time );
                    if ( r.info_time )
                    setTimeout(function(){
                        window.location.reload(true);
                    },r.info_time);
                }
            });
        });

        /* Hide */
        $('[data-am-show],[data-am-hide]').click(function(){
            if ( $(this).attr('data-am-hide') ) {
                if ( $(this).attr('data-am-status') == 'hidden' ) {
                    return false;
                } else {
                    var item = $(this).attr('data-am-hide');
                    var hide = 'true';
                }
            }
            if ( $(this).attr('data-am-show') ) {
                if ( $(this).attr('data-am-status') == 'showed' ) {
                    return false;
                } else {
                    var item = $(this).attr('data-am-show');
                    var hide = 'false';
                }
            }
            var el   = $('[data-am-prop='+item+']');
            var data = {
                fn:      'admin_menu_hide',
                hide:    hide,
                item:    item,
                type:    $(el).attr('data-type'),
                module:  $(el).attr('data-module'),
            }
            if ( data.item == "admin_menu" ) {
                if ( !confirm(__("Hide Admin Menu?")) ) return false;
            }
            api(data, function(r){
                if (r.info_text) {
                    notify( r.info_text, r.info_class, r.info_time );
                    if (r.info_time)
                    setTimeout(function(){
                        window.location.reload(true);
                    },r.info_time);
                }
            });
            return false;
        });

        /* Add Section */
        $('[data-am-add-section]').click(function(){
            api({fn:'admin_menu_add_section'},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_time)
                    setTimeout(function(){
                        window.location.reload(true);
                    },r.info_time);
                }
            });
            return false;
        });

        /* Disable Modules */
        $('[data-module-enable],[data-module-disable').click(function(){
            if ( $(this).attr('data-module-enable') ) {
                if ( $(this).attr('data-module-status') == 'enabled' ) {
                    return false;
                } else {
                    var module = $(this).attr('data-module-enable');
                    var disable = 'false';
                }
            }
            if ( $(this).attr('data-module-disable') ) {
                if ( $(this).attr('data-module-status') == 'disabled' ) {
                    return false;
                } else {
                    var module = $(this).attr('data-module-disable');
                    var disable = 'true';
                }
                if ( !confirm(__("Disable Module?")) ) return false;
            }
            var data = {
                fn:      'module_disable',
                disable: disable,
                module:  module,
            }
            api(data, function(r){
                if (r.info_text) {
                    notify( r.info_text, r.info_class, r.info_time );
                    if (r.info_time)
                    setTimeout(function(){
                        window.location.reload(true);
                    },r.info_time);
                }
            });
            return false;
        });

        /* Delete Module */
        $('[data-module-del]').click(function(e){
            e.preventDefault();
            var module = $(this).attr('data-module-del');
            if ( !confirm( __("Delete?") ) ) return;
            var data = {
                fn:      'module_del',
                module:  module,
            }
            api(data, function(r){
                if (r.info_text) {
                    notify( r.info_text, r.info_class, r.info_time );
                    if ( r.info_time )
                    setTimeout(function(){
                        window.location.reload(true);
                    },r.info_time);
                }
            });
        });

        /* Фикс переключения страницы при нажатии кнопки Сохранить */
        $('form .button-save').click(function(){
            var page = $(this).parents('[data-settings]').attr('data-settings');
            $.cookie('page', page);
        });

        /* Сохранять текущую открытую вкладку при обновлении страницы */
        window.onbeforeunload = function(e) {
            var page = $('[data-am-page].active').attr('data-am-page');
            $.cookie('page', page);
        };
          

        /* Theme select */
        $('[data-settings=theme] select').select2();

        /* Logout */
        $('[data-logged] [data-login]').click(function(){
            if ( !confirm( __("Close this session?") ) ) return;
            var data = {
                fn:   'logout',
                sess: $(this).attr('data-login'),
            }

            api(data, function(r){
                if (r.info_text) {
                    notify( r.info_text, r.info_class, r.info_time );
                    if ( r.result == 'refresh' ) {
                        window.location.reload(true);
                    } else if ( r.result == 'ok' ) {
                        $('[data-login='+data.sess+']').parents('[data-logged]').remove();
                    }
                }
            });
        });
        
    }); 
 })( jQuery );
