(function () {
    jQuery(document).ready(function ($) {
        var dataprefix = "data-sticky";

        function attrName(name) {
            return name ? dataprefix + "-" + name : dataprefix;
        }

        var stickyElements = $('[' + dataprefix + ']');
        stickyElements.each(function (index, el) {
            var $el = $(el);

            if ($el.data('stickData')) {
                return;
            }

            var distance = parseInt($el.attr(attrName()));
            var stickyOnMobile = $el.attr(attrName("mobile")) == "1";
            var stickyOnTablet = true; //$el.attr(attrName("tablet")) == "1" ;
            var useShrink = $el.attr(attrName("shrinked")) == "1";
            var toBottom = $el.attr(attrName("to")) == "bottom";

            if (useShrink) {
                $el.attr(attrName(), "initial");
            }

            var stickData = {
                center: true,
                responsiveWidth: true,
                zIndex: (10000 + index),
                topSpacing: distance,
                stickyOnMobile: stickyOnMobile,
                stickyOnTablet: stickyOnTablet,
                useShrink: useShrink,
                toBottom: toBottom,
                useNativeSticky: false
            }

            if (useShrink) {
                return;
            }


            if (distance === 0 && jQuery('#wpadminbar').length && jQuery('#wpadminbar').css('position') === "absolute") {
                distance = 0;
            }

            stickData['topSpacing'] = distance;
            stickData['top'] = distance;

            $el.data('stickData', stickData);
            $el.fixTo('body', stickData);
        });

        var resizeCallback = function () {
            var stickyElements = this.$els;

            if (window.innerWidth < 1024) {
                stickyElements.each(function (index, el) {
                    var data = $(this).data();
                    var stickData = data.stickData;

                    if (!stickData) {
                        return;
                    }

                    var fixToInstance = data.fixtoInstance;
                    if (!fixToInstance)
                        return true;

                    if (window.innerWidth <= 767) {
                        if (!stickData.stickyOnMobile) {
                            fixToInstance.stop();
                        }
                    } else {
                        if (!stickData.stickyOnTablet) {
                            fixToInstance.stop();
                        }
                    }
                });
            } else {
                stickyElements.each(function (index, el) {
                    var data = $(this).data();
                    if (!data) {
                        return;
                    }
                    var fixToInstance = data.fixtoInstance;
                    if (!fixToInstance)
                        return true;
                    fixToInstance.start();
                })
            }
        }
            .bind({
                "$els": stickyElements
            })

        $(window).bind('resize.sticky orientationchange.sticky', function () {
            setTimeout(resizeCallback, 50);
        });
        $(window).trigger('resize.sticky');
    });

})()
