(function () {
	"use strict";

	let savedErrors = [], timeout;

	/**
	 * @param {ErrorEvent} event
	 */
	function handleEvent(event) {
		savedErrors.push(event);
		if (event.cancelable) {
			event.preventDefault();
			event.stopImmediatePropagation();
		}
		sendReports();
	}

	/**
	 * @param {ErrorEvent} event
	 */
	function sendReport(event) {
		let message = {
			message: event.message,
			file: event.filename,
			line: event.lineno,
			column: event.colno,
			url: document.location.href,
			error: event.error || null
		};

		let request = new XMLHttpRequest();

		request.open('POST', '/error/reporterror');
		request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
		request.setRequestHeader('Content-Type', 'application/json');
		request.send(JSON.stringify(message));
	}

	function sendReports() {
		let pending = savedErrors.length;

		if (pending > 0) {
			console.info('Sending ' + pending + ' reports');
			while (savedErrors.length > 0) {
				sendReport(savedErrors.shift());
			}
		}
	}

	if (document.location.host.indexOf('local') === -1) {
		window.addEventListener('error', handleEvent);
	}

	window.BundleSites = window.BundleSites || {};
	window.BundleSites.reportError = function (msg) {
		handleEvent(new ErrorEvent('error', new Error(msg)));
	};
})();


(function () {
	"use strict";

	function showElement() {
		// noinspection ES6ConvertVarToLetConst
		var warning = document.getElementById('old-browser');

		if (warning) {
			warning.removeAttribute('hidden');
		}
		else if (document.readyState !== 'complete') {
			window.setTimeout(showElement, 100);
		}
	}

	if (!(
		(window.InstallTrigger && 'paintOrder' in document.documentElement.style) || // FF >= v60
		(window.chrome && 'fontDisplay' in document.documentElement.style) || // Chrome >= v60 or Opera Equivalent
		(window.ApplePayError && window.RTCPeerConnectionIceEvent) // Safari >= v12
	)) {
		if (document.addEventListener) {
			document.addEventListener('readystatechange', showElement);
		}
		else {
			window.setTimeout(showElement, 100);
		}
	}
})();

