class Foundation {
	static initiateFrontendExecution() {
		initiateFrontendExecution();
	}
}

window.addEventListener("load", Foundation.initiateFrontendExecution);

Object.equals = function(x, y) {
	if (x === y) return true;
	//If both x and y are null or undefined and exactly the same.

	if (!(x instanceof Object) || !(y instanceof Object)) return false;
	//If they are not strictly equal, they both need to be Objects.

	if (x.constructor !== y.constructor) return false;
	//They must have the exact same prototype chain, the closest we can do is to test their constructor.

	for (var p in x) {
		if (!x.hasOwnProperty(p)) continue;
		//Other properties were tested using x.constructor === y.constructor.

		if (!y.hasOwnProperty(p)) return false;
		//Allows to compare x[p] and y[p] when set to undefined.

		if (x[p] === y[p]) continue;
		//If they have the same strict value or identity then they are equal.

		if (typeof(x[p]) !== "object") return false;
		//Numbers, Strings, Functions and Booleans must be strictly equal.

		if (!Object.equals(x[p], y[p])) return false;
		//Objects and Arrays must be tested recursively.
	}

	for (p in y) {
		if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) return false;
		//Allows x[p] to be set to undefined.
	}
	return true;
};

String.prototype.toKebabCase = function() {
	return this.replace(/([a-z])([A-Z])/g, '$1-$2').replace(/[\s_]+/g, '-').toLowerCase();
};

String.prototype.replaceAll = function(search, replacement) {
    var target = this;
    return target.replace(new RegExp(search, 'g'), replacement);
};