function UI(langPar, guestPar, adminPar, formPar){
	// Data members.
	this.language;
	this.guest;
	this.administrator;
	this.uiForm;

	// Member functions.
	this.onChangeMenu = onChangeMenu;
	this.onChangeLanguage = onChangeLanguage;
	this.onClickSubmit = onClickSubmit;
	this.onClickReset = onClickReset;
	this.validate = validate;
	
	// Psuedo-Constructor.
	this.language = langPar;
	this.guest = guestPar;
	this.administrator = adminPar;
	this.uiForm = formPar;
}

	function onChangeMenu(){
		this.uiForm.submit();
	}

	function onChangeLanguage(){
		this.uiForm.submit();
	}

	function onChangeLanguage(){
		this.uiForm.submit();
	}

	function onClickSubmit(){
		if (this.validate()) this.uiForm.submit();
	}

	function onClickReset(){
		if (this.language == "fr"){
			var message = "[Are you sure you wish to reset the form?]";
		}
		else {
			var message = "Are you sure you wish to reset the form?";
		}
		if (confirm(message)) this.uiForm.reset();
	}

	function validate(){
		window.alert("JS EXCEPTION: UI::Validate() function must be overloaded."); return false;

		var message = "";

		// Validate form data.
		if (this.language == "fr"){
			if (false /*this.uiForm.Object1.value == ""*/) message += "- [Message 1].\n";
			if (false /*this.uiForm.Object2.value == ""*/) message += "- [Message 2].\n";
			// ...
			if (false /*this.uiForm.ObjectN.value == ""*/) message += "- [Message N].\n";
		}
		else {
			if (false /*this.uiForm.Object1.value == ""*/) message += "- Message 1.\n";
			if (false /*this.uiForm.Object2.value == ""*/) message += "- Message 2.\n";
			// ...
			if (false /*this.uiForm.ObjectN.value == ""*/) message += "- Message N.\n";
		}

		if (message == ""){
			return true;
		}
		else {
			if (this.language == "fr"){
				window.alert("[The following must be resolved before submitting]:\n\n" + message);
			}
			else {
				window.alert("The following must be resolved before submitting:\n\n" + message);
			}

			return false;
		}
	}
