(function () {
	window.onload = function () {
		window.setTimeout(fadeout, 300);
	};
	function fadeout() {
		document.querySelector(".preloader").style.opacity = "0";
		document.querySelector(".preloader").style.display = "none";
	}
	window.onscroll = function () {
		var header_navbar = document.querySelector(
			".hero-section-wrapper-2 .header"
		);
		var sticky = header_navbar.offsetTop;
		if (window.pageYOffset > sticky) {
			header_navbar.classList.add("sticky");
		} else {
			header_navbar.classList.remove("sticky");
		}
		var backToTo = document.querySelector(".scroll-top");
		if (
			document.body.scrollTop > 50 ||
			document.documentElement.scrollTop > 50
		) {
			backToTo.style.display = "flex";
		} else {
			backToTo.style.display = "none";
		}
	};
	let navbarToggler2 = document.querySelector(".header-2 .navbar-toggler");
	var navbarCollapse2 = document.querySelector(".header-2 .navbar-collapse");
	document.querySelectorAll(".header-2 .page-scroll").forEach((e) =>
		e.addEventListener("click", () => {
			navbarToggler2.classList.remove("active");
			navbarCollapse2.classList.remove("show");
		})
	);
	navbarToggler2.addEventListener("click", function () {
		navbarToggler2.classList.toggle("active");
	});
	function onScroll(event) {
		var sections = document.querySelectorAll(".page-scroll");
		var scrollPos =
			window.pageYOffset ||
			document.documentElement.scrollTop ||
			document.body.scrollTop;
		for (var i = 0; i < sections.length; i++) {
			var currLink = sections[i];
			var val = currLink.getAttribute("href");
			var refElement = document.querySelector(val);
			var scrollTopMinus = scrollPos + 73;
			if (
				refElement.offsetTop <= scrollTopMinus &&
				refElement.offsetTop + refElement.offsetHeight > scrollTopMinus
			) {
				document
					.querySelector(".page-scroll")
					.classList.remove("active");
				currLink.classList.add("active");
			} else {
				currLink.classList.remove("active");
			}
		}
	}
	window.document.addEventListener("scroll", onScroll);
	GLightbox({
		href: "assets/video/video.mp4",
		type: "video",
		source: "local",
		width: 900,
		autoplayVideos: true,
	});
	imagesLoaded("#gallery", function () {
		var elem = document.querySelector(".grid");
		var iso = new Isotope(elem, {
			itemSelector: ".grid-item",
			masonry: {columnWidth: ".grid-item"},
		});
	});
	var cu = new counterUp({
		start: 0,
		duration: 2000,
		intvalues: true,
		interval: 100,
		append: " ",
	});
	cu.start();
	new WOW().init();
})();

(function (root, factory) {
	"use strict";
	if (typeof define === "function" && define.amd) {
		define([], factory);
	} else if (typeof exports === "object") {
		module.exports = factory();
	} else {
		root.ContactForm = factory();
	}
})(this, function () {
	"use strict";
	var ContactForm = function (form, options) {
		if (!this || !(this instanceof ContactForm)) {
			return new ContactForm(form, options);
		}
		if (!form || !options) {
			return;
		}
		this.form = form instanceof Node ? form : document.querySelector(form);
		this.endpoint = options.endpoint;
		this.send();
	};
	ContactForm.prototype = {
		hasClass: function (el, name) {
			return new RegExp("(\\s|^)" + name + "(\\s|$)").test(el.className);
		},
		addClass: function (el, name) {
			if (!this.hasClass(el, name)) {
				el.className += (el.className ? " " : "") + name;
			}
		},
		removeClass: function (el, name) {
			if (this.hasClass(el, name)) {
				el.className = el.className
					.replace(new RegExp("(\\s|^)" + name + "(\\s|$)"), " ")
					.replace(/^\s+|\s+$/g, "");
			}
		},
		each: function (collection, iterator) {
			var i, len;
			for (i = 0, len = collection.length; i < len; i += 1) {
				iterator(collection[i], i, collection);
			}
		},
		template: function (string, data) {
			var piece;
			for (piece in data) {
				if (Object.prototype.hasOwnProperty.call(data, piece)) {
					string = string.replace(
						new RegExp("{" + piece + "}", "g"),
						data[piece]
					);
				}
			}
			return string;
		},
		empty: function (el) {
			while (el.firstChild) {
				el.removeChild(el.firstChild);
			}
		},
		removeElementsByClass: function (className) {
			var elements = document.getElementsByClassName(className);
			while (elements.length > 0) {
				elements[0].parentNode.removeChild(elements[0]);
			}
		},
		post: function (path, data, success, fail) {
			var xhttp = new XMLHttpRequest();
			xhttp.open("POST", path, true);
			xhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
			xhttp.setRequestHeader(
				"Content-Type",
				"application/x-www-form-urlencoded; charset=UTF-8"
			);
			xhttp.onreadystatechange = function () {
				if (this.readyState === 4) {
					if (this.status === 200) {
						var response = "";
						try {
							response = JSON.parse(this.responseText);
						} catch (err) {
							response = this.responseText;
						}
						success.call(this, response);
					} else {
						fail.call(this, this.responseText);
					}
				}
			};
			xhttp.send(data);
			xhttp = null;
		},
		param: function (data) {
			var params =
				typeof data === "string"
					? data
					: Object.keys(data)
							.map(function (k) {
								return (
									encodeURIComponent(k) +
									"=" +
									encodeURIComponent(data[k])
								);
							})
							.join("&");
			return params;
		},
		send: function () {
			this.form.addEventListener(
				"submit",
				function (e) {
					e.preventDefault();
					var elements = document.querySelectorAll(".form-input"),
						formData;
					this.each(
						elements,
						function (el, i) {
							if (this.hasClass(el.parentNode, "has-error")) {
								this.removeClass(el.parentNode, "has-error");
								this.removeElementsByClass("help-block");
							}
						}.bind(this)
					);
					formData = {
						name: document.querySelector('input[name="name"]')
							.value,
						email: document.querySelector('input[name="email"]')
							.value,
						number: document.querySelector('input[name="number"]')
							.value,
						subject: document.querySelector('input[name="subject"]')
							.value,
						message: document.querySelector(
							'textarea[name="message"]'
						).value,
					};
					this.post(
						this.endpoint,
						this.param(formData),
						this.feedback.bind(this),
						this.fail.bind(this)
					);
				}.bind(this),
				false
			);
		},
		feedback: function (data) {
			if (!data.success) {
				if (data.errors.name) {
					var name =
							document.querySelector(
								'input[name="name"]'
							).parentNode,
						error;
					this.addClass(name, "has-error");
					error = this.template(
						'<span class="help-block">{report}</span>',
						{report: data.errors.name}
					);
					name.insertAdjacentHTML("beforeend", error);
				}
				if (data.errors.email) {
					var email = document.querySelector(
							'input[name="email"]'
						).parentNode,
						error;
					this.addClass(email, "has-error");
					error = this.template(
						'<span class="help-block">{report}</span>',
						{report: data.errors.email}
					);
					email.insertAdjacentHTML("beforeend", error);
				}
				if (data.errors.subject) {
					var subject = document.querySelector(
							'input[name="subject"]'
						).parentNode,
						error;
					this.addClass(subject, "has-error");
					error = this.template(
						'<span class="help-block">{report}</span>',
						{report: data.errors.subject}
					);
					subject.insertAdjacentHTML("beforeend", error);
				}
				if (data.errors.message) {
					var message = document.querySelector(
							'textarea[name="message"]'
						).parentNode,
						error;
					this.addClass(message, "has-error");
					error = this.template(
						'<span class="help-block">{report}</span>',
						{report: data.errors.message}
					);
					message.insertAdjacentHTML("beforeend", error);
				}
			} else {
				var success = this.template(
					'<div class="alert alert-success">{report}</div>',
					{report: data.message}
				);
				this.empty(this.form);
				this.form.insertAdjacentHTML("beforeend", success);
			}
		},
		fail: function (data) {
			console.log(data);
		},
	};
	return ContactForm;
});
