/**
 * Ajax pagination 
 * 
 * @param String key Short name of the instance, so it can be retrieved with AjaxPagination.getInstance(key);
 * @param String url Url to use for AJAX calls
 * @param DOMElement contents Pagination contents DOM element
 * @param DOMElement pagination Pagination widget
 */
var AjaxPagination = function (key, url, contents, pagination) {

	// pass new instance to AjaxPagination.instances
	try 
	{
		AjaxPagination.instances[key] = this;
	}
	catch (e)
	{
		AjaxPagination.instances = {};
		AjaxPagination.instances[key] = this;
	}

	// pass DOM objects to instance vars
	this.contents = contents;
	this.key = key;
	this.pagination = pagination;
	this.url = url;
	
	/**
	 * Loads new page in contents
	 * 
	 * @param Integer page
	 */
	this.setPage = function (page)
	{
		// temporarily set proper class on clicked page
		var links = jQuery('a', pagination);
		for (var l = 0; l < links.length; l++)
		{
			if (jQuery(links[l]).html() == page)
			{
				jQuery(links[l]).parent().addClass('active');
			}
			else
			{
				jQuery(links[l]).parent().removeClass('active');
			}
		}
		
		// visual effect
		jQuery('.contents', this.contents).fadeTo('fast', 0.5);
		
		// perform AJAX query
		var contents = this.contents;
	    jQuery.get(this.url, {'page': page, 'instance': this.key}, function (data) {
	    	jQuery(contents).html(data).fadeTo('fast', 1);
	    });
	};
	
};

/**
 * Returns AjaxPagination instance
 * 
 * @param String key Short name of the instance
 * @returns AjaxPagination AjaxPagination instance on success (error will be thrown if does not exist) 
 * @static
 */
AjaxPagination.getInstance = function (key)
{
	return AjaxPagination.instances[key];
}
