/*! lg-hash - v1.0.4 - 2017-12-20
* http://sachinchoolur.github.io/lightGallery
* Copyright (c) 2017 Sachin N; Licensed GPLv3 */

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module unless amdModuleId is set
        define(['jquery'], function (a0) {
            return (factory(a0));
        });
    } else if (typeof exports === 'object') {
        // Node. Does not work with strict CommonJS, but
        // only CommonJS-like environments that support module.exports,
        // like Node.
        module.exports = factory(require('jquery'));
    } else {
        factory(jQuery);
    }
}(this, function ($) {

    (function () {

        'use strict';

        var defaults = {
            hash: true
        };

        var Hash = function (element) {

            this.core = $(element).data('lightGallery');

            this.core.s = $.extend({}, defaults, this.core.s);

            if (this.core.s.hash) {
                this.oldHash = window.location.hash;
                this.init();
            }

            return this;
        };

        Hash.prototype.init = function () {
            var _this = this;
            var _hash;

            // Change hash value on after each slide transition
            _this.core.$el.on('onAfterSlide.lg.tm', function (event, prevIndex, index) {
                if (history.replaceState) {
                    history.replaceState(null, null, window.location.pathname + window.location.search + '#lg=' + _this.core.s.galleryId + '&slide=' + index);
                } else {
                    window.location.hash = 'lg=' + _this.core.s.galleryId + '&slide=' + index;
                }
            });

            // Listen hash change and change the slide according to slide value
            $(window).on('hashchange.lg.hash', function () {
                _hash = window.location.hash;
                var _idx = parseInt(_hash.split('&slide=')[1], 10);

                // it galleryId doesn't exist in the url close the gallery
                if ((_hash.indexOf('lg=' + _this.core.s.galleryId) > -1)) {
                    _this.core.slide(_idx, false, false);
                } else if (_this.core.lGalleryOn) {
                    _this.core.destroy();
                }

            });
        };

        Hash.prototype.destroy = function () {

            if (!this.core.s.hash) {
                return;
            }

            // Reset to old hash value
            if (this.oldHash && this.oldHash.indexOf('lg=' + this.core.s.galleryId) < 0) {
                if (history.replaceState) {
                    history.replaceState(null, null, this.oldHash);
                } else {
                    window.location.hash = this.oldHash;
                }
            } else {
                if (history.replaceState) {
                    history.replaceState(null, document.title, window.location.pathname + window.location.search);
                } else {
                    window.location.hash = '';
                }
            }

            this.core.$el.off('.lg.hash');

        };

        $.fn.lightGallery.modules.hash = Hash;

    })();


}));
