/**
 * @class	CS_AjaxSearch
 * @author	Paul Kruijt
 */
var CS_AjaxSearch = new Class(
{
	/**
	 * initialize
	 * @param	string	handler_id
	 * @param	string	listener_id
	 * @param	string	http_url
	 * @param	unknown	handler_value
	 * @param	string	event_type
	 * @return	void
	 */
	initialize: function(handler_id, listener_id, http_url, handler_value, event_type, limit)
	{
		// nodes
		this.handler_node	= $(handler_id);
		this.listener_node	= $(listener_id);
		
		// strings
		this.http_url			= http_url;
		this.handler_value		= !handler_value ? null : handler_value;
		this.page_prefix		= 'page_';
		this.search_term_prefix	= 'search_';
		
		// settings
		this.event_type	= !event_type ? 'keyup' : event_type;
		this.limit		= !limit ? null : limit;
	},
	
	/**
	 * start
	 * @return	void
	 */
	start: function()
	{
		if (this.handler_node && this.listener_node)
		{
			// set events
			this.setEvents();
			this.setKeyword();
			
			// get data when default value exists
			if (this.handler_value)
			{
				this.handler_node.set('value', this.handler_value);
				this.getData(this.handler_value);
			}
		}
	},
	
	/**
	 * set events
	 * @return	void
	 */
	setEvents: function()
	{
		// set vars
		var _this = this;
		
		if (this.handler_node)
		{
			this.handler_node.removeEvents();
			this.handler_node.addEvent(this.event_type, function(event)
			{
				// get data
				if (this.value.length > 0 || this.value.length == 0)
				{
					_this.getData(this.value, 1);
				}
				
				return false;
			});
			
			// disable enter key if another event is initialised
			if (this.event_type != 'keydown')
			{
				this.handler_node.addEvent('keydown', function(event)
				{
					if (event.key == 'enter') return false;
				});
			}
		}
	},
	
	/**
	 * set keyword
	 * @return	void
	 */
	setKeyword: function()
	{
		// set vars
		var _this = this;
		
		this.keyword_node = $('keyword_input');
		
		if (this.keyword_node)
		{
			this.keyword_node.removeEvents();
			this.keyword_node.addEvent(this.event_type, function(event)
			{
				// get data
				if (this.value.length > 0 || this.value.length == 0)
				{
					_this.getData(this.value, 2);
				}
				
				return false;
			});
			
			// disable enter key if another event is initialised
			if (this.event_type != 'keydown')
			{
				this.keyword_node.addEvent('keydown', function(event)
				{
					if (event.key == 'enter') return false;
				});
			}
		}
	},
	
	/**
	 * get data
	 * @param	unknown	handler_value
	 * @return	void
	 */
	getData: function(handler_value, type_id)
	{
		var _this			= this;
		var regio_value		= null;
		var search_value	= null;
		
		// make request
		var http_request = new Request.HTML(
		{
			url			: this.http_url,
			update		: this.listener_node,
			onRequest	: function()
			{
				
			},
			onComplete	: function()
			{
				// set complete events
				_this.setCompleteEvents();
			}
		});
		
		switch (type_id)
		{
			case 1	: regio_value	= handler_value; break;
			default	: search_value	= handler_value; break;
		}
		
		http_request.get(
		{
			'regio'		: regio_value,
			'search'	: search_value,
			'limit'		: this.limit
		});
	},
	
	/**
	 * handlePaging
	 * @param	listener_id, http_url
	 * @return	void
	 */
	handlePaging: function(listener_id, http_url)
	{
		var _this = this;
		
		if (listener_id && http_url)
		{
			var paging_node = $(listener_id);
			if (paging_node)
			{
				// loop trough paging
				var anchor_nodes		= paging_node.getElements('a');
				var total_anchor_nodes	= anchor_nodes.length;
				if (total_anchor_nodes)
				{
					anchor_nodes.each(function(anchor_node, index)
					{
						anchor_node.removeEvents();
						anchor_node.addEvents(
						{
							'click' : function()
							{
								var page			= this.get('id');
								var search_term 	= this.get('name');
								page				= page.replace(_this.page_prefix, '');
								search_term 		= search_term.replace(_this.search_term_prefix, '');
								
								var http_url = '/http/get_content.php';
								_this.getPaging(search_term, http_url, page);
								return false;
							}
						});
					});
				}
			}
		}
	},
	
	/**
	 * get paging
	 * @param	unknown	handler_value
	 * @return	void
	 */
	getPaging: function(handler_value, http_url, page)
	{
		var _this = this;
		
		// make request
		var http_request = new Request.HTML({
			url			: http_url,
			update		: $('tables_listener'),
			onRequest	: function()
			{
				
			},
			onComplete	: function()
			{
				// set complete events
				//_this.setCompleteEvents();
			}
		});
		
		http_request.get(
		{
			'handler_value'	: handler_value,
			'page'			: page
		});
	},
	
	/**
	 * set complete events
	 * @return	void
	 */
	setCompleteEvents: function()
	{
		// leave empty.
		// if you want a complete events call, please extend this class and create this method in the extended class.
	}
});
