var hash_tags = window.location.hash.split('#');
var is_open = [];
var elements = {};
window.keepShowProperty = false;

if (window.history.pushState) {
    window.handleBrowserBackBtn = function (element, tag, show, remove = false) {
        is_open[tag] = false;
        Object.keys(is_open).forEach(function (key, value) {
            is_open[key] = false;
        });

        if (show) {
            hash_tags.push(tag);
            elements[tag] = element;
            window.location.hash += '#' + tag;
            setTimeout(function () {
                is_open[tag] = true;
            }, 600)
        } else {
            if (is_open[tag] !== undefined && elements[tag] !== undefined) {
                window.history.back();
            }

            hash_tags = $.grep(hash_tags, function (value, index) {
                return value !== tag;
            });

            if (remove) {
                is_open = $.grep(is_open, function (value, index) {
                    return index !== tag;
                });
            }
        }
    };

    $(document).ready(function () {

        $(window).on('popstate', function () {  //pressed back button
            var name = hash_tags[hash_tags.length - 1];

            if (is_open[name] !== undefined && is_open[name] && elements[name] !== undefined) {
                window.history.pushState('back', null, null);
                var element = elements[name];
                var isSelection = element.find('.selection-toggle[data-name="' + name + '"]');
                var isModal = element.hasClass('modal');

                if (isSelection.length) {
                    handleBrowserBackBtn(element, name, false);
                    isSelection.each(function () {
                        if (element.hasClass('show')) {
                            $(this).selection('toggle');
                            element.removeClass('show');
                            element.find('.selection-dropdown').removeClass('show');
                        }
                    });
                    $('#navSearchElements.show').find('.nav-search-header,.nav-search-footer').removeClass('hidden');
                } else if (isModal) {
                    handleBrowserBackBtn(element, name, false);
                    element.modal('hide');
                } else if (name === 'swiperFullScreenSlider') {
                    handleBrowserBackBtn(element, name, false, true);
                    element.toggle();

                } else if (element.hasClass('show')) {
                    if (name === 'navSearchElements') {
                        element.find('.nav-search-header .nav-search-close').trigger("click")
                        // handleBrowserBackBtn() run in search.js => false
                    } else if (name === 'showNavbarToggle') {
                        handleBrowserBackBtn(element, name, false, true);
                        element.removeClass('show');
                        $('.show-navbar-toggle').addClass('collapsed');
                        $('#navSearchBtn').show();
                        $('html').css({overflow: 'auto'});
                        $('#formSearch .fixme').css({zIndex: 1032});
                    } else {
                        handleBrowserBackBtn(element, name, false);
                        element.removeClass('show');
                    }
                }

                setTimeout(function () {
                    keepShowProperty = false;
                }, 600);

            } else if (name !== '' && is_open[name] !== undefined && !is_open[name]) {
                is_open[name] = true;
            }
        });

        $('body').on('show.ma.selection', '.selection', function (event) {
            var name = $(this).find('.selection-toggle').attr('data-name');
            keepShowProperty = true;
            handleBrowserBackBtn($(this), name, true);
        });

        $('body').on('hide.ma.selection', '.selection', function (event) {
            var name = $(this).find('.selection-toggle').attr('data-name');
            if (is_open[name] !== undefined && is_open[name] && elements[name] !== undefined) {
                handleBrowserBackBtn($(this), name, false);
            }
            setTimeout(function () {
                keepShowProperty = false;
            }, 600);
        });

        /*$('body').on('show.bs.modal', '.modal', function () {
            var name = $(this).attr('id');
            keepShowProperty = true;
            handleBrowserBackBtn($(this), name, true);
        });

        $('body').on('hide.bs.modal', '.modal', function () {
            var name = $(this).attr('id');
            if (is_open[name] !== undefined && is_open[name] && elements[name] !== undefined) {
                handleBrowserBackBtn($(this), name, false);
            }
            setTimeout(function () {
                keepShowProperty = false;
            }, 600);
        });*/
    });
}