function Input(input_id, msg_box_id, validators)
{
	this.input;
	this.msg_box;
	this.input_id = input_id;
	this.msg_box_id = msg_box_id;
	this.validators = validators;
	
	Input.prototype._show_msg_box = function()
	{
		this.msg_box.setVisibilityMode(Ext.Element.DISPLAY);
		this.msg_box.show();
	};

	Input.prototype._hide_msg_box = function()
	{
		this.msg_box.setVisibilityMode(Ext.Element.DISPLAY);
		this.msg_box.hide();
	};

	Input.prototype.check = function()
	{
		var i;
		var validator;
		var msg;
		var v;
		var text_element;

		if (!this.input || !this.msg_box || !this.validators || !this.validators.length || this.validators.length==0)
		{
			return false;
		}

		v = Ext.query('#'+this.msg_box_id+' .warning-msg');
			
		if (v && v.length && v.length>0)
		{
			text_element = v[0];						
		}
		else
		{
			return false;
		}

		for (i=0; i<this.validators.length; ++i)
		{
			validator = this.validators[i];

			if (!validator.validate || !(validator.validate instanceof Function) || !validator.msg)
			{
				continue;
			}

			if (!validator.validate(this.input))
			{
				msg = validator.msg;
				break;
			}
		}
		if (msg)
		{
			text_element.innerHTML = msg;
			this._show_msg_box();

			return false;
		}
		else
		{
			this._hide_msg_box();

			return true;
		}
	};

	Input.prototype.init = function()
	{
		this.input = Ext.get(this.input_id);
		this.msg_box = Ext.get(this.msg_box_id);

		if (this.input && this.msg_box)
		{
			this._hide_msg_box();

			this.input.on(
				'keydown', 
				function(event, obj)
				{
					this._hide_msg_box();
				},
				this
			);

			this.input.on(
				'blur',
				function(event, obj)					
				{
					this.check();
				},
				this
			);		
		}
	};

	Input.prototype.get_text = function()
	{
		if (this.input)
		{
			return this.input.dom.value;
		}
	};
}

