var PhotoBlock = Class.create(
{
	initialize: function(container, getPageActionUrl, requestParams, pagerUrlVarName)
	{
		this.container = $(container);
		this.ident = this.container.id;
		this.requestParams = requestParams;

		this.getPageActionUrl = getPageActionUrl;
		this.pagerUrlVarName = pagerUrlVarName;
		this.content = "";

		this.transactions = new RequestTransactionsManager(this.container);

		CtPage.scriptIsReady("CtComponent", function() {
			this.locker = new CtComponent_BlockLocker(this.container);
		}.bind(this));

		this._refreshPager();
	},

	refresh: function(content)
	{
		this.content = content;
		if(this.transactions.hasActive){
			Event.observe(this.container,'RequestTransactionsManager:transactionsComplete', this._refresh);
			return false;
		} else {
			this._refresh();
			return true;
		}
	},

	_refresh: function()
	{
		Event.stopObserving(this.container,'RequestTransactionsManager:transactionsComplete', this._refresh);
		this.container.innerHTML = this.content;

        this._refreshPager();
	},

	_refreshPager: function()
	{
		var refreshPagerHandler = function(){
			var container = $(this.ident + "-pager");
			if (container) {
				if (!this._pager) {
					this._pager = new Pager(this, container, this.getPageActionUrl, this.requestParams, this.pagerUrlVarName);
				} else {
					this._pager.refresh();
				}
				this._observeToPager();
			}
		}.bind(this);
		CtPage.scriptIsReady("Pager", refreshPagerHandler);
	},

	_observeToPager: function()
	{
		Event.observe(this._pager.container, 'Pager:buttonClick', function(e){
			this._pager.sendRequest();
		}.bind(this));
		Event.observe(this._pager.container, 'Pager:sendRequest', function(e){
			this.locker.show();
			this.transactions.add();
		}.bind(this));
		Event.observe(this._pager.container, 'Pager:receiveResponse', function(e){
			this.transactions.remove();
			this.refresh(this._pager.content);
			this.locker.hide();
		}.bind(this));
	}
});

CtPage.registerScript("PhotoBlock");
