(function($){
    "use strict";

    if(window.Chart) {
        Chart.defaults.global.defaultFontFamily = "'Nunito', 'Segoe UI', 'Arial'";
        Chart.defaults.global.defaultFontSize = 12;
        Chart.defaults.global.defaultFontStyle = 500;
        Chart.defaults.global.defaultFontColor = "#999";
        Chart.defaults.global.tooltips.backgroundColor = "#000";
        Chart.defaults.global.tooltips.bodyFontColor = "rgba(255,255,255,.7)";
        Chart.defaults.global.tooltips.titleMarginBottom = 10;
        Chart.defaults.global.tooltips.titleFontSize = 14;
        Chart.defaults.global.tooltips.titleFontFamily = "'Nunito', 'Segoe UI', 'Arial'";
        Chart.defaults.global.tooltips.titleFontColor = '#fff';
        Chart.defaults.global.tooltips.xPadding = 15;
        Chart.defaults.global.tooltips.yPadding = 15;
        Chart.defaults.global.tooltips.displayColors = false;
        Chart.defaults.global.tooltips.intersect = false;
        Chart.defaults.global.tooltips.mode = 'nearest';
    }

    if(window.Dropzone) {
        Dropzone.autoDiscover = false;
    }

    $('[data-confirm]').each(function() {
        var me = $(this),
            me_data = me.data('confirm');

        me_data = me_data.split("|");
        me.fireModal({
            title: me_data[0],
            body: me_data[1],
            buttons: [
                {
                    text: me.data('confirm-text-yes') || 'Yes',
                    class: 'btn btn-danger btn-shadow',
                    handler: function() {
                        eval(me.data('confirm-yes'));
                    }
                },
                {
                    text: me.data('confirm-text-cancel') || 'Cancel',
                    class: 'btn btn-secondary',
                    handler: function(modal) {
                        $.destroyModal(modal);
                        eval(me.data('confirm-no'));
                    }
                }
            ]
        })
    });

    $(function() {
        let sidebar_nicescroll_opts = {
            cursoropacitymin: 0,
            cursoropacitymax: .8,
            zindex: 892
        }, now_layout_class = null;

        var sidebar_sticky = function() {
            if($("body").hasClass('layout-2')) {
                $("body.layout-2 #sidebar-wrapper").stick_in_parent({
                    parent: $('body')
                });
                $("body.layout-2 #sidebar-wrapper").stick_in_parent({recalc_every: 1});
            }
        }
        sidebar_sticky();

        var sidebar_nicescroll;
        var update_sidebar_nicescroll = function() {
            let a = setInterval(function() {
                if(sidebar_nicescroll != null)
                    sidebar_nicescroll.resize();
            }, 10);

            setTimeout(function() {
                clearInterval(a);
            }, 600);
        }

        var sidebar_dropdown = function() {
            if($(".main-sidebar").length) {
                $(".main-sidebar").niceScroll(sidebar_nicescroll_opts);
                sidebar_nicescroll = $(".main-sidebar").getNiceScroll();

                $(".main-sidebar .sidebar-menu li a.has-dropdown").off('click').on('click', function() {
                    var me     = $(this);
                    var active = false;
                    if(me.parent().hasClass("active")){
                        active = true;
                    }

                    $('.main-sidebar .sidebar-menu li.active > .dropdown-menu').slideUp(500, function() {
                        update_sidebar_nicescroll();
                        return false;
                    });

                    $('.main-sidebar .sidebar-menu li.active').removeClass('active');

                    if(active==true) {
                        me.parent().removeClass('active');
                        me.parent().find('> .dropdown-menu').slideUp(500, function() {
                            update_sidebar_nicescroll();
                            return false;
                        });
                    }else{
                        me.parent().addClass('active');
                        me.parent().find('> .dropdown-menu').slideDown(500, function() {
                            update_sidebar_nicescroll();
                            return false;
                        });
                    }

                    return false;
                });

                $('.main-sidebar .sidebar-menu li.active > .dropdown-menu').slideDown(500, function() {
                    update_sidebar_nicescroll();
                    return false;
                });
            }
        }
        sidebar_dropdown();

        if($("#top-5-scroll").length) {
            $("#top-5-scroll").css({
                height: 315
            }).niceScroll();
        }

        $(".main-content").css({
            minHeight: $(window).outerHeight() - 108
        })

        $(".nav-collapse-toggle").on('click',function() {
            $(this).parent().find('.navbar-nav').toggleClass('show');
            return false;
        });

        $(document).on('click', function(e) {
            $(".nav-collapse .navbar-nav").removeClass('show');
        });

        var toggle_sidebar_mini = function(mini) {
            let body = $('body');

            if(!mini) {
                body.removeClass('sidebar-mini');
                $(".main-sidebar").css({
                    overflow: 'hidden'
                });
                setTimeout(function() {
                    $(".main-sidebar").niceScroll(sidebar_nicescroll_opts);
                    sidebar_nicescroll = $(".main-sidebar").getNiceScroll();
                }, 500);
                $(".main-sidebar .sidebar-menu > li > ul .dropdown-title").remove();
                $(".main-sidebar .sidebar-menu > li > a").removeAttr('data-toggle');
                $(".main-sidebar .sidebar-menu > li > a").removeAttr('data-original-title');
                $(".main-sidebar .sidebar-menu > li > a").removeAttr('title');
            }else{
                body.addClass('sidebar-mini');
                body.removeClass('sidebar-show');
                sidebar_nicescroll.remove();
                sidebar_nicescroll = null;
                $(".main-sidebar .sidebar-menu > li").each(function() {
                    let me = $(this);

                    if(me.find('> .dropdown-menu').length) {
                        me.find('> .dropdown-menu').hide();
                        me.find('> .dropdown-menu').prepend('<li class="dropdown-title pt-3">'+ me.find('> a').text() +'</li>');
                    }else{
                        me.find('> a').attr('data-toggle', 'tooltip');
                        me.find('> a').attr('data-original-title', me.find('> a').text());
                        $("[data-toggle='tooltip']").tooltip({
                            placement: 'right'
                        });
                    }
                });
            }
        }

        $("[data-toggle='sidebar']").on('click',function() {
            var body = $("body"),
                w = $(window);

            if(w.outerWidth() <= 1024) {
                body.removeClass('search-show search-gone');
                if(body.hasClass('sidebar-gone')) {
                    body.removeClass('sidebar-gone');
                    body.addClass('sidebar-show');
                }else{
                    body.addClass('sidebar-gone');
                    body.removeClass('sidebar-show');
                }

                update_sidebar_nicescroll();
            }else{
                body.removeClass('search-show search-gone');
                if(body.hasClass('sidebar-mini')) {
                    toggle_sidebar_mini(false);
                }else{
                    toggle_sidebar_mini(true);
                }
            }

            return false;
        });

        var toggleLayout = function() {
            var w = $(window),
                layout_class = $('body').attr('class') || '',
                layout_classes = (layout_class.trim().length > 0 ? layout_class.split(' ') : '');

            if(layout_classes.length > 0) {
                layout_classes.forEach(function(item) {
                    if(item.indexOf('layout-') != -1) {
                        now_layout_class = item;
                    }
                });
            }

            if(w.outerWidth() <= 1024) {
                if($('body').hasClass('sidebar-mini')) {
                    toggle_sidebar_mini(false);
                    $('.main-sidebar').niceScroll(sidebar_nicescroll_opts);
                    sidebar_nicescroll = $(".main-sidebar").getNiceScroll();
                }

                $("body").addClass("sidebar-gone");
                $("body").removeClass("layout-2 layout-3 sidebar-mini sidebar-show");
                $("body").off('click touchend').on('click touchend', function(e) {
                    if($(e.target).hasClass('sidebar-show') || $(e.target).hasClass('search-show')) {
                        $("body").removeClass("sidebar-show");
                        $("body").addClass("sidebar-gone");
                        $("body").removeClass("search-show");

                        update_sidebar_nicescroll();
                    }
                });

                update_sidebar_nicescroll();

                if(now_layout_class == 'layout-3') {
                    let nav_second_classes = $(".navbar-secondary").attr('class'),
                        nav_second = $(".navbar-secondary");

                    nav_second.attr('data-nav-classes', nav_second_classes);
                    nav_second.removeAttr('class');
                    nav_second.addClass('main-sidebar');

                    let main_sidebar = $(".main-sidebar");
                    main_sidebar.find('.container').addClass('sidebar-wrapper').removeClass('container');
                    main_sidebar.find('.navbar-nav').addClass('sidebar-menu').removeClass('navbar-nav');
                    main_sidebar.find('.sidebar-menu .nav-item.dropdown.show a').click();
                    main_sidebar.find('.sidebar-brand').remove();
                    main_sidebar.find('.sidebar-menu').before($('<div>', {
                        class: 'sidebar-brand'
                    }).append(
                        $('<a>', {
                            href: $('.navbar-brand').attr('href'),
                        }).html($('.navbar-brand').html())
                    ));
                    setTimeout(function() {
                        sidebar_nicescroll = main_sidebar.niceScroll(sidebar_nicescroll_opts);
                        sidebar_nicescroll = main_sidebar.getNiceScroll();
                    }, 700);

                    sidebar_dropdown();
                    $(".main-wrapper").removeClass("container");
                }
            }else{
                $("body").removeClass("sidebar-gone sidebar-show");
                if(now_layout_class)
                    $("body").addClass(now_layout_class);

                let nav_second_classes = $(".main-sidebar").attr('data-nav-classes'),
                    nav_second = $(".main-sidebar");

                if(now_layout_class == 'layout-3' && nav_second.hasClass('main-sidebar')) {
                    nav_second.find(".sidebar-menu li a.has-dropdown").off('click');
                    nav_second.find('.sidebar-brand').remove();
                    nav_second.removeAttr('class');
                    nav_second.addClass(nav_second_classes);

                    let main_sidebar = $(".navbar-secondary");
                    main_sidebar.find('.sidebar-wrapper').addClass('container').removeClass('sidebar-wrapper');
                    main_sidebar.find('.sidebar-menu').addClass('navbar-nav').removeClass('sidebar-menu');
                    main_sidebar.find('.dropdown-menu').hide();
                    main_sidebar.removeAttr('style');
                    main_sidebar.removeAttr('tabindex');
                    main_sidebar.removeAttr('data-nav-classes');
                    $(".main-wrapper").addClass("container");
                }else if(now_layout_class == 'layout-2') {
                    $("body").addClass("layout-2");
                }else{
                    update_sidebar_nicescroll();
                }
            }
        }
        toggleLayout();
        $(window).resize(toggleLayout);

        $("[data-toggle='search']").on('click',function() {
            var body = $("body");

            if(body.hasClass('search-gone')) {
                body.addClass('search-gone');
                body.removeClass('search-show');
            }else{
                body.removeClass('search-gone');
                body.addClass('search-show');
            }
        });

        $("[data-toggle='tooltip']").tooltip();

        $('[data-toggle="popover"]').popover({
            container: 'body'
        });

        if(jQuery().select2) {
            $(".select2").select2();
        }

        if(jQuery().selectric) {
            $(".selectric").selectric({
                disableOnMobile: false,
                nativeOnMobile: false
            });
        }

        $(".notification-toggle").dropdown();
        $(".notification-toggle").parent().on('shown.bs.dropdown', function() {
            $(".dropdown-list-icons").niceScroll({
                cursoropacitymin: .3,
                cursoropacitymax: .8,
                cursorwidth: 7
            });
        });

        $(".message-toggle").dropdown();
        $(".message-toggle").parent().on('shown.bs.dropdown', function() {
            $(".dropdown-list-message").niceScroll({
                cursoropacitymin: .3,
                cursoropacitymax: .8,
                cursorwidth: 7
            });
        });

        if($(".chat-content").length) {
            $(".chat-content").niceScroll({
                cursoropacitymin: .3,
                cursoropacitymax: .8,
            });
            $('.chat-content').getNiceScroll(0).doScrollTop($('.chat-content').height());
        }

        if(jQuery().summernote) {
            $(".summernote").summernote({
                dialogsInBody: true,
                minHeight: 250,
            });
            $(".summernote-simple").summernote({
                dialogsInBody: true,
                minHeight: 150,
                toolbar: [
                    ['style', ['bold', 'italic', 'underline', 'clear']],
                    ['font', ['strikethrough']],
                    ['para', ['paragraph']]
                ]
            });
        }

        if(window.CodeMirror) {
            $(".codeeditor").each(function() {
                let editor = CodeMirror.fromTextArea(this, {
                    lineNumbers: true,
                    theme: "duotone-dark",
                    mode: 'javascript',
                    height: 200
                });
                editor.setSize("100%", 200);
            });
        }

        $('.follow-btn, .following-btn').each(function() {
            var me = $(this),
                follow_text = 'Follow',
                unfollow_text = 'Following';

            me.on('click',function() {
                if(me.hasClass('following-btn')) {
                    me.removeClass('btn-danger');
                    me.removeClass('following-btn');
                    me.addClass('btn-primary');
                    me.html(follow_text);

                    eval(me.data('unfollow-action'));
                }else{
                    me.removeClass('btn-primary');
                    me.addClass('btn-danger');
                    me.addClass('following-btn');
                    me.html(unfollow_text);

                    eval(me.data('follow-action'));
                }
                return false;
            });
        });

        $("[data-dismiss]").each(function() {
            var me = $(this),
                target = me.data('dismiss');

            me.on('click',function() {
                $(target).fadeOut(function() {
                    $(target).remove();
                });
                return false;
            });
        });

        $("[data-collapse]").each(function() {
            var me = $(this),
                target = me.data('collapse');

            me.on('click',function() {
                $(target).collapse('toggle');
                $(target).on('shown.bs.collapse', function(e) {
                    e.stopPropagation();
                    me.html('<i class="fas fa-minus"></i>');
                });
                $(target).on('hidden.bs.collapse', function(e) {
                    e.stopPropagation();
                    me.html('<i class="fas fa-plus"></i>');
                });
                return false;
            });
        });

        $(".gallery .gallery-item").each(function() {
            var me = $(this);

            me.attr('href', me.data('image'));
            me.attr('title', me.data('title'));
            if(me.parent().hasClass('gallery-fw')) {
                me.css({
                    height: me.parent().data('item-height'),
                });
                me.find('div').css({
                    lineHeight: me.parent().data('item-height') + 'px'
                });
            }
            me.css({
                backgroundImage: 'url("'+ me.data('image') +'")'
            });
        });
        if(jQuery().Chocolat) {
            $(".gallery").Chocolat({
                className: 'gallery',
                imageSelector: '.gallery-item',
            });
        }

        $("[data-background]").each(function() {
            var me = $(this);
            me.css({
                backgroundImage: 'url(' + me.data('background') + ')'
            });
        });

        $("[data-tab]").each(function() {
            var me = $(this);

            me.on('click',function() {
                if(!me.hasClass('active')) {
                    var tab_group = $('[data-tab-group="' + me.data('tab') + '"]'),
                        tab_group_active = $('[data-tab-group="' + me.data('tab') + '"].active'),
                        target = $(me.attr('href')),
                        links = $('[data-tab="'+me.data('tab') +'"]');

                    links.removeClass('active');
                    me.addClass('active');
                    target.addClass('active');
                    tab_group_active.removeClass('active');
                }
                return false;
            });
        });

        $(".needs-validation").on('submit',function() {
            var form = $(this);
            if (form[0].checkValidity() === false) {
                event.preventDefault();
                event.stopPropagation();
            }
            form.addClass('was-validated');
        });

        $(".alert-dismissible").each(function() {
            var me = $(this);

            me.find('.close').on('click',function() {
                me.alert('close');
            });
        });

        if($('.main-navbar').length) {
        }

        $('[data-crop-image]').each(function(e) {
            $(this).css({
                overflow: 'hidden',
                position: 'relative',
                height: $(this).data('crop-image')
            });
        });

        $('[data-toggle-slide]').on('click',function() {
            let target = $(this).data('toggle-slide');

            $(target).slideToggle();
            return false;
        });

        $("[data-dismiss=modal]").on('click',function() {
            $(this).closest('.modal').modal('hide');

            return false;
        });

        $('[data-width]').each(function() {
            $(this).css({
                width: $(this).data('width')
            });
        });

        $('[data-height]').each(function() {
            $(this).css({
                height: $(this).data('height')
            });
        });

        if($('.chocolat-parent').length && jQuery().Chocolat) {
            $('.chocolat-parent').Chocolat();
        }

        if($('.sortable-card').length && jQuery().sortable) {
            $('.sortable-card').sortable({
                handle: '.card-header',
                opacity: .8,
                tolerance: 'pointer'
            });
        }

        if(jQuery().daterangepicker) {
            if($(".datepicker").length) {
                $('.datepicker').daterangepicker({
                    locale: {format: 'YYYY-MM-DD'},
                    singleDatePicker: true,
                });
            }
            if($(".datetimepicker").length) {
                $('.datetimepicker').daterangepicker({
                    locale: {format: 'YYYY-MM-DD HH:mm'},
                    singleDatePicker: true,
                    timePicker: true,
                    timePicker24Hour: true,
                });
            }
            if($(".daterange").length) {
                $('.daterange').daterangepicker({
                    locale: {format: 'YYYY-MM-DD'},
                    drops: 'down',
                    opens: 'right'
                });
            }
        }

        if(jQuery().timepicker && $(".timepicker").length) {
            $(".timepicker").timepicker({
                icons: {
                    up: 'fas fa-chevron-up',
                    down: 'fas fa-chevron-down'
                }
            });
        }
    });
})(jQuery);
