var CtAjaxLink = Class.create(CtComponent_Abstract, {

	status: null,

	initialize: function(htmlElement) {
		this.element = $(htmlElement);
		this.id = this.element.identify();
		this.status = new CtComponent_Message();
		this.element.insert({top: this.status.element});

		this.reassembly();

		CtPage.addComponent(this);
	},

	reassembly: function() {
		this.element.select('.ctAjaxLink-item').each(function(linkElement) {
			linkElement.observe('click', this.clickHandler.bindAsEventListener(this, linkElement));
		}.bind(this));
	},

	clickHandler: function(event, linkElement) {
		Event.stop(event);

		var request = CtPage.getRequest(this.id, 'iframe');
		request.url = linkElement.readAttribute('href');
		request.send();
	},

	refresh: function(response) {
		if (response && response.content) {
			this.element.insert({before: this.status.element});
			this.element.update(response.content);
			this.element.insert({top: this.status.element});
			this.reassembly();
		}
		if (response && response.json && response.json.messages) {
			this.status.show(response.json.messages);
		}

	}


});



var CtAjaxLink_Factory = new (Class.create({
	initialize: function() {
		Event.observe(window, 'load', function() { this.refresh() }.bind(this));
	},

	refresh: function(htmlElement) {
		var elements = [];
		if (htmlElement) {
			elements = $(htmlElement).select('.ctAjaxLink');
		} else {
			elements = $$('.ctAjaxLink');
		}
		for (var i = 0; i < elements.length; i++) {
			elements[i].removeClassName('ctAjaxLink');
			new CtAjaxLink(elements[i]);
		}
	}
}));

CtPage.registerScript("CtAjaxLink");

