/* eslint strict: 0, no-var: 0 */
"use strict";

/*
 * This is a separate file for two reasons:
 * 1. CSP policy does not allow inline javascript
 * 2. It has to be a small javascript executed before all other scripts,
 *    so that the timeout can be triggered while slow JS is loading
 */

(function() {
	var displayReload = function displayReload() {
		var loadingReload = document.getElementById("loading-reload");

		if (loadingReload) {
			loadingReload.style.display = "block";
		}
	};

	var loadingSlowTimeout = setTimeout(function() {
		var loadingSlow = document.getElementById("loading-slow");

		// The parent element, #loading, is being removed when the app is loaded.
		// Since the timer is not cancelled, `loadingSlow` can be not found after
		// 5s. Wrap everything in this block to make sure nothing happens if the
		// element does not exist (i.e. page has loaded).
		if (loadingSlow) {
			loadingSlow.style.display = "block";
			displayReload();
		}
	}, 5000);

	document.getElementById("loading-reload").addEventListener("click", function() {
		location.reload();
	});

	window.g_LoungeErrorHandler = function LoungeErrorHandler(e) {
		var title = document.getElementById("loading-title");
		title.textContent = "An error has occured";

		var message = document.getElementById("loading-page-message");
		message.textContent = "An error has occured that prevented the client from loading correctly.";

		var summary = document.createElement("summary");
		summary.textContent = "More details";

		var data = document.createElement("pre");
		data.textContent = e.message; // e is an ErrorEvent

		var info = document.createElement("p");
		info.textContent = "Open the developer tools of your browser for more information.";

		var details = document.createElement("details");
		details.appendChild(summary);
		details.appendChild(data);
		details.appendChild(info);
		message.parentNode.insertBefore(details, message.nextSibling);

		window.clearTimeout(loadingSlowTimeout);
		displayReload();
	};

	window.addEventListener("error", window.g_LoungeErrorHandler);
})();