/**
 * class	CS_Popin
 * author	Paul Kruijt
 */
var CS_Popin = new Class(
{
	/**
	 * initialize
	 * @param	string	root_node_id
	 * @return	void
	 */
	initialize: function(root_node_id)
	{
		// nodes
		this.root_node = document.getElement('body');

		// id's
		this.popin_outer_id		= 'cs_popin_outer';
		this.popin_inner_id		= 'cs_popin_inner';
		this.popin_close_id		= 'cs_popin_close';
		this.popin_blocker_id	= 'cs_popin_blocker';

		// classes
		this.popin_class	= 'cs_popin';
	},

	/**
	 * start
	 * @return void
	 */
	start: function()
	{
		if (this.root_node)
		{
			this.setEvents();
		}
	},

	/**
	 * set events
	 * @return void
	 */
	setEvents: function()
	{
		var _this				= this;
		var popin_nodes			= this.root_node.getElements('.'+this.popin_class);
		var total_popip_nodes	= popin_nodes.length;

		if (total_popip_nodes > 0)
		{
			popin_nodes.each(function(popin_node)
			{
				popin_node.removeEvents();
				popin_node.addEvents(
				{
					'click': function()
					{
						_this.create(this);

						return false;
					}
				});
			});
		}
	},

	/**
	 * create
	 * @return void
	 */
	create: function(handler_node)
	{
		var _this = this;

		if (handler_node)
		{
			var handler_location	= handler_node.href;
			var popin_outer_node	= $(this.popin_outer_id);

			if (handler_location && !popin_outer_node)
			{
				this.popin_outer_node	= new Element('div', {'id' : this.popin_outer_id});
				this.popin_inner_node	= new Element('div', {'id' : this.popin_inner_id});
				this.popin_close_node	= new Element('div', {'id' : this.popin_close_id});
				this.popin_blocker_node	= new Element('div', {'id' : this.popin_blocker_id});

				this.popin_outer_node.inject(this.root_node);
				this.popin_inner_node.inject(this.popin_outer_node);
				this.popin_close_node.inject(this.popin_outer_node);
				this.popin_blocker_node.inject(this.root_node);

				this.popin_close_node.removeEvents();
				this.popin_close_node.addEvents(
				{
					'click': function()
					{
						_this.remove();

						return false;
					}
				});
				
				this.popin_blocker_node.removeEvents();
				this.popin_blocker_node.addEvents(
				{
					'click': function()
					{
						_this.remove();

						return false;
					}
				});

				this.loadContent(handler_location);
			}
		}
	},

	/**
	 * load content with http request
	 * @return	void
	 */
	remove: function()
	{
		var popin_outer_node	= $(this.popin_outer_id);
		var popin_blocker_node	= $(this.popin_blocker_id);

		if (popin_outer_node)	popin_outer_node.dispose();
		if (popin_blocker_node)	popin_blocker_node.dispose();
	},

	/**
	 * load content with http request
	 * @param	string	url_location
	 * @return	void
	 */
	loadContent: function(url_location)
	{
		if (url_location)
		{
			var content_node = $(this.popin_inner_id);

			if (content_node)
			{
				// make request
				var http_request = new Request.HTML(
				{
					url			: url_location,
					method		: 'get',
					update		: content_node,
					evalScripts	: true
				});

				http_request.send();
			}
		}
	}
});
