/*!
 * DealSlip Pagination
 *
 * @category    DealSlip
 * @package     js
 * @copyright   Copyright (c) 2010 Worry Free Labs, LLC. (http://worryfreelabs.com/)
 * @author      Oleksandr Bernatskyi
 */
;(function($)
{
	$.fn.extend
	({
		wantacodePagination: function(options)
		{
			var defaults =
			{
				itemsPerPage: 4,
				listingClass: 'listing',
				pagingClass: 'paging'
			};
			
			var options = $.extend(defaults, options);
			
			return this.each
			(
				function()
				{
					var o = options;
					var $this = $(this);
					var $listing = $('.' + o.listingClass + ' > li', $this);
					var $paging = $('.' + o.pagingClass, $this);
					var pagesNumber = Math.ceil($listing.length / o.itemsPerPage);
					
					if (pagesNumber == 0)
					{
						return;
					}
					
					if ($paging.length == 0)
					{
						$paging = $('<ul></ul>')
							.addClass(o.pagingClass)
							.appendTo($this);
					}
					
					
					// Pagination object
					var $pagination = null;
					
					// Current page number
					function getCurrentPage()
					{
						var currentPage = $pagination.filter('.active').index();
						return currentPage;
					}
					
					// Simulate the click on pagination link
					function performClick(pageNumber)
					{
						$pagination.slice(pageNumber - 1, pageNumber)
							.find('a').trigger('click');
					}
					
					// Actual click on pagination link
					var pageClick = function(event)
					{
						event.preventDefault();
						
						// Active link
						$pagination.removeClass('active');
						$(this).parent().addClass('active');
						
						// Display the page content
						var currentPage = getCurrentPage();
						var start = (currentPage - 1) * o.itemsPerPage;
						var end = currentPage * o.itemsPerPage;
						
						$listing.hide().slice(start, end).show();
					};
					
					
					// Pages Generator
					var $pages = $('<ul></ul>');
					var index;
					
					// Pages links
					for (index = 1; index <= pagesNumber; index++)
					{
						$('<a href="#"></a>')
							.attr('title', 'Page ' + index)
							.text(index)
							.bind('click', pageClick)
							.wrap('<li></li>')
							.parent().appendTo($pages);
					}
					
					// Prev link
					var prevPageClick = function(event)
					{
						event.preventDefault();
						
						var currentPage = getCurrentPage();
						
						if (currentPage > 1)
						{
							performClick(currentPage - 1);
						}
					};
					
					$('<a href="#" title="Previous page">Prev</a>')
						.bind('click', prevPageClick)
						.wrap('<li class="prev"></li>')
						.parent().prependTo($pages);
					
					// Next link
					var nextPageClick = function(event)
					{
						event.preventDefault();
						
						var currentPage = getCurrentPage();
						
						if (currentPage < pagesNumber)
						{
							performClick(currentPage + 1);
						}
					};
					
					$('<a href="#" title="Next page">Next</a>')
						.bind('click', nextPageClick)
						.wrap('<li class="next"></li>')
						.parent().appendTo($pages);
					
					
					// Build the pagination
					$paging.prepend($pages.children());
					
					// Prepare the pagination object
					$pagination = $('li', $paging).not('.prev, .next, .more');
					
					// Activate first page
					performClick(1);
				}
			);
		}
	});
})(jQuery);
