	//	Dice Form Callbacks.

	function setDieSidesDirty(eSides) {
		var tf = eSides.options[eSides.selectedIndex].text != 'dOther';
		var eOther = document.getElementById('other_sides');
		eOther.disabled = tf;
		setDirty();
	}

	function validateDiceRequest(form) {
		if (form == null)
			return false;

		if (! setRequestTimestamp(form)) {
			alert('Dice Request Timestamp Error!');
			return false;
		}
		if (! spamCheck(form)) {
			alert('Dice Request Spam Check Failure!');
			return false;
		}

		//	Field Validation.
		var foundError = false;
		clearErrorMessages();

		var eSides = document.getElementById('sides');
		if (eSides == null) {
			alert('Internal Error: Expected to find a field named sides');
			foundError = true;
		}
		if (eSides.options[eSides.selectedIndex].text == 'dOther') {
			if (! isValidNumber('other_sides')) {
				showErrorMessage('sides_error', 'Invalid or Missing Entry');
				foundError = true;
			}
		}
		if (! isValidNumber('dpr')) {
			showErrorMessage('dpr_error', 'Invalid or Missing Entry');
			foundError = true;
		}
		if (! isValidNumber('mpd')) {
			showErrorMessage('mpd_error', 'Invalid or Missing Entry');
			foundError = true;
		}
		if (! isValidNumber('mpr')) {
			showErrorMessage('mpr_error', 'Invalid or Missing Entry');
			foundError = true;
		}
		if (! isValidNumber('nrolls')) {
			showErrorMessage('nrolls_error', 'Invalid or Missing Entry');
			foundError = true;
		}
		if (! isValidNumber('rpl')) {
			showErrorMessage('rpl_error', 'Invalid or Missing Entry');
			foundError = true;
		}

		if (foundError) {
			setDirty();
			return false;
		}

		//alert('Dice Validation Succeeded!');
		return true;
	}
