/* PAGER
***************************************************************************************************/
var Pager = Class.create(
{
//{ Constructor
	initialize: function(owner, containerId, requestUrl, requestParams, urlVarName)
	{
		this.container = $(containerId);
		this.requestUrl = requestUrl;
		this.params = requestParams;
		this.urlVarName = urlVarName;
		this.controlManager = pageControlsManager;
		this.content = null;

		this._activeButton = null;
		this._controls = pageControlsManager.getControlsByContainer(this.container);
//		this._onFailureHandler = owner._onFailureHandler;
		this._transactions = new RequestTransactionsManager(this.container);

		Event.observe(this.container, 'RequestTransactionsManager:transactionsComplete', function(){
			this.container.fire("Pager:transactionsComplete");
		}.bind(this));

		this._observeToEvents();
	},
//}
//{ Public methods
	refresh: function()
	{
		this._activeButton = null;
		this.controlManager.destroyControls(this._controls);
		if (!this.container || !this.container.id) {
			return;
		}
		this.container = $(this.container.id);
		this._controls = pageControlsManager.getControlsByContainer(this.container);
		this._transactions.changeElement(this.container);
		this._observeToEvents();
	},


	_observeToEvents: function()
	{
		var buttonClickDelegate = function(event){
			this._onButtonClick(event.memo.owner);
		}.bind(this);

		for(var i=0; i<this._controls.length; i++){
			Event.observe(this._controls[i].element, 'Control:click', buttonClickDelegate);
		}
		this.controlManager.setStatus(this._controls, "enabled");
	},

	block: function()
	{
		for(var i=0; i<count(this._controls.length); i++){
			this._controls[i].setStatus(this._controls[i].statuses.disabled);
		}
	},


	unblock: function()
	{
		for(var i=0; i<count(this._controls.length); i++){
			this._controls[i].setStatus(this._controls[i].statuses.enabled);
		}
	},


	sendRequest: function()
	{
		this._activeButton.setStatus(this._activeButton.statuses.active);
		var onSuccessHandler = function(transport, json){
			if (json == null){
				showFatalError(transport.responseText);
				return;
			}
			this.content = transport.responseText;
			this.container.fire("Pager:receiveResponse");
			this._transactions.remove();
		}.bind(this);
		var value = this._activeButton.requestParams.page;
		this.params.set(this.urlVarName, value);
		this.container.fire("Pager:sendRequest");
		this._transactions.add();
		new Ajax.Request(this.requestUrl, {
			parameters: this.params.toQueryString(),
			onSuccess: onSuccessHandler,
			onFailure: function(){
				this._transactions.remove();
				alert("Cannot connect to server. Please check your connection settings.");
			}
		});
	},
 //}

//{ Private methods
	_onButtonClick: function(control)
	{
		if(this._activeButton != null){
			this._activeButton.setStatus(this._activeButton.statuses.enabled);
		}
		this._activeButton = control;
		this.container.fire("Pager:buttonClick");
	}
//}
});
CtPage.registerScript("Pager");
