

document.addEventListener("DOMContentLoaded", function() {
	var lazyImages = [].slice.call(document.querySelectorAll("source[data-srcset], img.lazy"));
	var lazyVideos = [].slice.call(document.querySelectorAll("iframe[data-src]"));
	let activeImages = false;
	let activeVideos = false;

	if ('IntersectionObserver' in window &&
		'IntersectionObserverEntry' in window &&
		'intersectionRatio' in window.IntersectionObserverEntry.prototype) {
		if(!('isIntersecting' in IntersectionObserverEntry.prototype)) {
			Object.defineProperty(window.IntersectionObserverEntry.prototype, 'isIntersecting', {
				get: function () {
					return this.intersectionRatio > 0
				}
			})
		}
		let lazyImageObserver = new IntersectionObserver(function(entries, observer) {
			entries.forEach(function(entry) {
				if (entry.isIntersecting) {
					let lazyImage = entry.target;
					if(lazyImage.dataset.src) {
						lazyImage.src = lazyImage.dataset.src;
						lazyImage.classList.remove('lazy');
						lazyImage.onload = function(){
							if(lazyImage.offsetParent.classList.contains('imgFullCover'))
								lazyImage.offsetParent.style.backgroundImage = "url('" + lazyImage.currentSrc + "')"
						}
					}
					else
						lazyImage.srcset = lazyImage.dataset.srcset;
					lazyImageObserver.unobserve(lazyImage);
				}
			});
		}, {
			rootMargin: "0px 0px 256px 0px"
		});

		lazyImages.forEach(function(lazyImage) {
			lazyImageObserver.observe(lazyImage);
		});

		let lazyVideoObserver = new IntersectionObserver(function(entries, observer) {
			entries.forEach(function(video) {
				if (video.isIntersecting) {
					video.target.src = video.target.dataset.src;

					lazyVideoObserver.unobserve(video.target);
				}
			});
		});

		lazyVideos.forEach(function(lazyVideo) {
			lazyVideoObserver.observe(lazyVideo);
		});
	} else {
		const lazyLoadImages = function() {
			if (activeImages === false) {
				activeImages = true;

				setTimeout(function() {
					lazyImages.forEach(function(lazyImage) {
						if ((lazyImage.getBoundingClientRect().top <= window.innerHeight && lazyImage.getBoundingClientRect().bottom >= 0) && getComputedStyle(lazyImage).display !== "none") {
							lazyImage.classList.remove('lazy');
							if(lazyImage.dataset.src) {
								lazyImage.src = lazyImage.dataset.src;
								lazyImage.onload = function(){
									if(lazyImage.offsetParent.classList.contains('imgFullCover'))
										lazyImage.offsetParent.style.backgroundImage = "url('" + lazyImage.dataset.src + "')"
								}
							}
							else
								lazyImage.srcset = lazyImage.dataset.srcset;
							lazyImage.classList.remove("lazy");

							lazyImages = lazyImages.filter(function(image) {
								return image !== lazyImage;
							});

							if (lazyImages.length === 0) {
								document.removeEventListener("scroll", lazyLoadImages);
								window.removeEventListener("resize", lazyLoadImages);
								window.removeEventListener("orientationchange", lazyLoadImages);
							}
						}
					});
					activeImages = false;
				}, 200);
			}
		};
		const lazyLoadVideos = function() {
			if (activeVideos === false) {
				activeVideos = true;

				setTimeout(function() {
					lazyVideos.forEach(function(lazyVideo) {
						if ((lazyVideo.getBoundingClientRect().top <= window.innerHeight && lazyVideo.getBoundingClientRect().bottom >= 0) && getComputedStyle(lazyVideo).display !== "none") {
							if(lazyVideo.dataset.src) {
								lazyVideo.src = lazyVideo.dataset.src;
							}
							lazyVideos = lazyVideos.filter(function(video) {
								return video !== lazyVideo;
							});

							if (lazyVideos.length === 0) {
								document.removeEventListener("scroll", lazyLoadVideos);
								window.removeEventListener("resize", lazyLoadVideos);
								window.removeEventListener("orientationchange", lazyLoadVideos);
							}
						}
					});

					activeVideos = false;
				}, 200);
			}
		};

		document.addEventListener("scroll", lazyLoadVideos);
		window.addEventListener("resize", lazyLoadVideos);
		window.addEventListener("orientationchange", lazyLoadVideos);
		document.addEventListener("scroll", lazyLoadImages);
		window.addEventListener("resize", lazyLoadImages);
		window.addEventListener("orientationchange", lazyLoadImages);
		if($(document).scrollTop() == 0)
			$('html,body').animate({
				scrollTop: 1
			}, 1);
	}
});