jQuery.fn.pageinate = function (settings) {
	
	// Default settings
	var settings = jQuery.extend({
		row: function (container, item, i) {},
		page: function (i) {},
		url: "",
		show: 10,
		start_page:1
	}, settings);
	
	// jQuery-wrap element used for page list
	settings.pagelist_selector = jQuery(settings.pagelist_selector);
	
	return this.each(function(_, element){
		// jQuery-wrap element
		element = $(element);
		
		var page_link_callback_creator = function(i) {
			return function(_, el) {
				update(i);
			}
		};
		
		var update = function (page) {
			// Null posts + pages lists
			
			jQuery.getJSON(settings.url, {page:page, show:settings.show}, function(data){
				element.html("");
				settings.pagelist_selector.html("");

				// Returned data from JSON-request
				pages = data['pages'];
				posts = data['posts'];
				
				// Populate rows
				for (i in posts) {
					settings.row(element, posts[i], i);
				}
				
				// Build page-list
				for (i=1; i <= pages; i++) {
					selected = page==i
					page_link = settings.page(i, selected);
					settings.pagelist_selector.append(page_link);
					
					if(!selected) {
						page_link.click(page_link_callback_creator(i));
					}
				}
			});
		};
		
		// Run initial update when page loads
		update(settings.start_page);
	});
}
