if (typeof (Telerik) == "undefined")
{
	Telerik = {};
}
if (Telerik.TextInputEvents == null)
{
	Telerik.TextInputEvents = {};
}

Telerik.TextInputEvents.ValueListener = function(ownerControl)
{
	this.Owner = ownerControl;
	this.EventRequest = null;
};

Telerik.TextInputEvents.ValueListener.prototype =
{
	AddChangeEventRequest: function(newValue, oldValue)
	{
		if (this.EventRequest == null)
		{
			this.EventRequest = {New: newValue, Old: oldValue};
		}
		else
		{
			this.EventRequest.New = newValue;
		}
	},
	
	QueueChangeEventRequest: function(newValue, oldValue)
	{
		this.CancelPreviousRequest();
		this.AddChangeEventRequest(newValue, oldValue);
            
        var listener = this;    
        var processAction = function()
            {
            	listener.ValueChangedAction = null;	
                listener.ProcessEvents();
            };
        
        if (this.Owner.DelayValueChangedEvent())
        {
            this.ValueChangedAction = window.setTimeout(processAction, 300);
        }
        else
        {
            processAction();
        }
	},
	
	CancelPreviousRequest: function()
	{
		if (this.ValueChangedAction != null)
		{
			window.clearTimeout(this.ValueChangedAction);
			this.ValueChangedAction = null;
		}
	},
	
	Dispose: function()
	{
		this.CancelPreviousRequest();
	},
	
	ProcessEvents: function()
	{	
		if (this.EventRequest != null)
		{
			this.Owner.RaiseValueChangedEvent(this.EventRequest.New, this.EventRequest.Old);
			this.EventRequest = null;
		}
	}
}