// Utility functions

function entities(str) {
	// jQuery hack, I don't know how this works either
	return $("<div/>").text(str).html();
}

function animate(element, property, vInitial, vFinal, incr, unit) {
	// Animate a CSS property

	$(element).removeClass("reveal");
	$(element).css(property, vInitial);
	var vCurrent = vInitial;
	
	var id = setInterval(frame, 15);
	function frame() {
		let hasFinished = false;
		if (vInitial < vFinal) {
			hasFinished = vCurrent >= vFinal;
		} else {
			hasFinished = vCurrent <= vFinal;
		}

		if (hasFinished) {
			clearInterval(id);
			$(element).addClass("reveal");
			$(element).css(property, vInitial.toString() + unit);
			return;
		}

		vCurrent += incr;
		$(element).css(property, vCurrent.toString() + unit);
	}
}

function cardHUD(card, time) {
	$("#card-hud").html("<img class='card' src='assets/card_" + card + ".png' />");
	$("#card-hud").removeClass("reveal");
	// The opacity property needs a delay or the animation doesn't work
	// no idea why, better not to ask
	setTimeout(function() {
		$("#card-hud").css("opacity", "1");
	}, 100);

	setTimeout(function() {
		$("#card-hud").css("opacity", "0");

		setTimeout(function() {
			$("#card-hud").empty();
			$("#card-hud").addClass("reveal");
		}, 500);
	}, time);
}

function cardHUD3(cards, time) {
	cards.forEach(function(card) {
		$("#card-hud-3").append("<img class='card' src='assets/card_"+card+".png' />");
	});
	$("#card-hud-3-wrapper").removeClass("reveal");

	setTimeout(function() {
		$("#card-hud-3-wrapper").css("opacity", "1");
	}, 100);

	setTimeout(function() {
		$("#card-hud-3-wrapper").css("opacity", "0");

		setTimeout(function() {
			$("#card-hud-3").empty();
			$("#card-hud-3-wrapper").addClass("reveal");
		}, 500);
	}, time);
}

function modalChoice(cb, question, options, exclude, transform) {
	// NO anti-xss
	
	let modalHud = document.createElement("DIV");
	$(modalHud).addClass("modal-hud");
	let modal = document.createElement("DIV");
	$(modal).addClass("modal");
	$(modal).html("<span>"+question+"</span>");

	let modalOptions = document.createElement("UL");
	$(modalOptions).addClass("modal-options");

	options.forEach(function (opt) {
		if (opt === exclude) {
			return;
		}

		let button = document.createElement("LI");

		if (transform) {
			button.innerHTML = transform(opt);
		} else {
			button.innerHTML = opt;
		}

		button.addEventListener("click", function() {
			cb(opt);

			$(modalHud).css("opacity", "0");
			setTimeout(function() {
				document.getElementById("modal-container").removeChild(modalHud);
			}, 500);
		}, false);
		modalOptions.appendChild(button);
	});

	modal.appendChild(modalOptions);
	modalHud.appendChild(modal);
	document.getElementById("modal-container").appendChild(modalHud);

	setTimeout(function() {
		$(modalHud).css("opacity", "1");
	}, 100);
}
