'use strict';

var WOW;

(function ($) {

WOW = function WOW() {

  return {

    init: function init() {

      var animationName = [];

      var once = 1;

      function mdbWow() {

        var windowHeight = window.innerHeight;
        var scroll = window.scrollY;

        $('.wow').each(function () {

          if ($(this).css('visibility') == 'visible') {
            return;
          }

          if (windowHeight + scroll - 100 > getOffset(this) && scroll < getOffset(this) || windowHeight + scroll - 100 > getOffset(this) + $(this).height() && scroll < getOffset(this) + $(this).height() || windowHeight + scroll == $(document).height() && getOffset(this) + 100 > $(document).height()) {

            var index = $(this).index('.wow');

            var delay = $(this).attr('data-wow-delay');

            if (delay) {

              delay = $(this).attr('data-wow-delay').slice(0, -1

              );
              var self = this;

              var timeout = parseFloat(delay) * 1000;

              $(self).addClass('animated');
              $(self).css({
                'visibility': 'visible'
              });
              $(self).css({
                'animation-delay': delay
              });
              $(self).css({
                'animation-name': animationName[index]
              });

              var removeTime = $(this).css('animation-duration').slice(0, -1) * 1000;

              if ($(this).attr('data-wow-delay')) {

                removeTime += $(this).attr('data-wow-delay').slice(0, -1) * 1000;
              }

              var self = this;

              setTimeout(function () {

                $(self).removeClass('animated');
              }, removeTime);
            } else {

              $(this).addClass('animated');
              $(this).css({
                'visibility': 'visible'
              });
              $(this).css({
                'animation-name': animationName[index]
              });

              var removeTime = $(this).css('animation-duration').slice(0, -1) * 1000;

              var self = this;

              setTimeout(function () {

                $(self).removeClass('animated');
              }, removeTime);
            }
          }
        });
      }

      function appear() {

        $('.wow').each(function () {

          var index = $(this).index('.wow');

          var delay = $(this).attr('data-wow-delay');

          if (delay) {

            delay = $(this).attr('data-wow-delay').slice(0, -1);

            var timeout = parseFloat(delay) * 1000;

            $(this).addClass('animated');
            $(this).css({
              'visibility': 'visible'
            });
            $(this).css({
              'animation-delay': delay + 's'
            });
            $(this).css({
              'animation-name': animationName[index]
            });
          } else {

            $(this).addClass('animated');
            $(this).css({
              'visibility': 'visible'
            });
            $(this).css({
              'animation-name': animationName[index]
            });
          }
        });
      }

      function hide() {

        var windowHeight = window.innerHeight;
        var scroll = window.scrollY;

        $('.wow.animated').each(function () {

          if (windowHeight + scroll - 100 > getOffset(this) && scroll > getOffset(this) + 100 || windowHeight + scroll - 100 < getOffset(this) && scroll < getOffset(this) + 100 || getOffset(this) + $(this).height > $(document).height() - 100) {

            $(this).removeClass('animated');
            $(this).css({
              'animation-name': 'none'
            });
            $(this).css({
              'visibility': 'hidden'
            });
          } else {

            var removeTime = $(this).css('animation-duration').slice(0, -1) * 1000;

            if ($(this).attr('data-wow-delay')) {

              removeTime += $(this).attr('data-wow-delay').slice(0, -1) * 1000;
            }

            var self = this;

            setTimeout(function () {

              $(self).removeClass('animated');
            }, removeTime);
          }
        });

        mdbWow();

        once--;
      }

      function getOffset(elem) {

        var box = elem.getBoundingClientRect();

        var body = document.body;
        var docEl = document.documentElement;

        var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;

        var clientTop = docEl.clientTop || body.clientTop || 0;

        var top = box.top + scrollTop - clientTop;

        return Math.round(top);
      }

      $('.wow').each(function () {

        $(this).css({
          'visibility': 'hidden'
        });
        animationName[$(this).index('.wow')] = $(this).css('animation-name');
        $(this).css({
          'animation-name': 'none'
        });
      });

      $(window).scroll(function () {

        if (once) {

          hide();
        } else {

          mdbWow();
        }
      });

      appear();
    }
  };
};

})(jQuery);