
/**
* Class to give user interface feedback to the user when typing in the
* customer number in the given text field element and output error messages
* to the given label element.
*
* @author	Jimmy Chin
* @date		30 August 2006
*/

function CustomerNumberTextFieldErrorChecking(
	pTextFieldElement,
	pErrorMessageLabelElement,
	pEnterFunction)
{
	this.textFieldElement			= pTextFieldElement;
	this.errorMessageLabelElement	= pErrorMessageLabelElement;
	this.enterFunction				= pEnterFunction;
}

CustomerNumberTextFieldErrorChecking.prototype =
{
	textFieldElement : null
	,
	errorMessageLabelElement : null
	,
	enterFunction : null
	,
	// static
	setup : function(
		pTextFieldElement,
		pErrorMessageLabelElement,
		pEnterFunction)
	{
		dojo.event.connect(
			pTextFieldElement,
			"onkeypress",
			function(){
				var errorChecking = new CustomerNumberTextFieldErrorChecking(
					pTextFieldElement,
					pErrorMessageLabelElement,
					pEnterFunction);
				errorChecking.customerNumberTextFieldOnKeyPress();
			}
		);

		dojo.event.connect(
			pTextFieldElement,
			"onkeydown",
			function(){
				var errorChecking = new CustomerNumberTextFieldErrorChecking(
					pTextFieldElement,
					pErrorMessageLabelElement,
					pEnterFunction);
				errorChecking.customerNumberTextFieldOnKeyDown();
			}
		);
	}
	,
	isDigitAscii : function(pAsciiCode)
	{
		return (pAsciiCode >= 48 && pAsciiCode <= 57);
	}
	,
	setCustomerNumberErrorMessage : function(pMessage)
	{
		var element = this.errorMessageLabelElement;
		element.innerHTML = pMessage;
	}
	,
	customerNumberTextFieldOnKeyPress : function()
	{
		var keyCode = dojo.event.browser.currentEvent.keyCode;
		var isDigit = this.isDigitAscii(keyCode);
		var len = this.textFieldElement.value.length;
		
		if (! isDigit)
		{
			if (keyCode === 13 && this.enterFunction !== null)
				this.enterFunction();
			else
				this.setCustomerNumberErrorMessage("(only digits accepted)");

			dojo.event.browser.stopEvent(
				dojo.event.browser.currentEvent);
		}
		else if (len < 5)
		{
			this.setCustomerNumberErrorMessage("("+(6-len-1)+" more digits needed)");
		}
		else if (len === 6)
		{
			this.setCustomerNumberErrorMessage("(no more digits needed)");
			dojo.event.browser.stopEvent(
				dojo.event.browser.currentEvent);
		}
		else
			this.setCustomerNumberErrorMessage("");
	}
	,
	customerNumberTextFieldOnKeyDown : function()
	{
		this.setCustomerNumberErrorMessage("");
	}
}
