(function($){  
	$.fn.pager = function(options) {  
		var defaults = {
			ajax_text_class: 'loading',
			items_per_page: 9
		};  
		
		options = $.extend(defaults, options); 
		
		pagerCnt = $(options.pages_container);
		sorterCnt = $(options.sort_form);
        pageCnt = $(this);
		//	Internal vars

		var query = {};
		var pager_options = {
			num_edge_entries: 1,
			num_display_entries: 4,
			items_per_page: options.items_per_page,
			next_text: false,
			prev_text: false,
			ellipse_text: '…',
			callback: getItems
		};
		
		function drawLoadingText () {
			if(options.ajax_text_class) {
				pageCnt
					.addClass(options.ajax_text_class)
					.html('');
				}
		}
		
		function removeLoadingText () {
			if(options.ajax_text_class) {
				pageCnt.removeClass(options.ajax_text_class);
				}
		}		
		
		function getItems (page_id) {
			
			drawLoadingText (); 
			query.page_id = page_id;
			query.items_per_page = options.items_per_page;
	
			$.getJSON (
				options.current_page_path,
				query,
				function ( resp ) {
				options.draw_items( resp );
				removeLoadingText();
				}
			);
		}
		
		function getFilteredTotal ( query ) {
		
            query.page_id = 0;

			drawLoadingText (); 
			$.getJSON (
				options.first_load_path,
				query,
				function ( resp ) {
					if(resp.items_per_page){
						pager_options.items_per_page = resp.items_per_page;
					}else{
						pager_options.items_per_page = options.items_per_page;
					}
					pagerCnt.pagination( resp.total, pager_options );
					options.draw_items ( resp.firstpage );

					removeLoadingText();
				}
			);
		}
		
		$.fn.extend({
			playPager: function () {
				getFilteredTotal(query);
			}
		});

		
		return this.each( function () {
				
				$('input', sorterCnt)
				.each ( function () { if( this.checked ) query[this.name] = this.value; })
				.click( function() { 
					query[this.name] = this.value; 
					getFilteredTotal(query);
				});
				
				$('select', sorterCnt)
				.each ( function () { query[this.name] = $('option:selected', this).val(); })
				.change ( function() { 
					query[this.name] = $('option:selected', this).val(); 
					getFilteredTotal(query);
				});
										
			$.fn.playPager(); 
			
			});
	};
})(jQuery);  