//-------------------------------------------------
//		Quick Pager jquery plugin
//		Created by dan@geckonm.com
//		www.geckonewmedia.com
// 
//		Add prev and next link to page navigation.
//		modified by wonchan.lee@gmail.com
//		twitter.com/chanlee
//-------------------------------------------------

(function($) {
	    
	$.fn.quickPager = function(options) {
	
		var defaults = {
            pageSize: 10,
            naviSize: 5,
            currentPage: 1,
			holder: ""
    	};
    	var options = $.extend(defaults, options);
	  	
		//leave this

		var selector = $(this);
		var totalRecords = $(this).children().length;
		var pageCounter = 1;

		selector.children().each(function(i){
			if(i < pageCounter*options.pageSize && i >= (pageCounter-1)*options.pageSize) {
				$(this).addClass("page"+pageCounter);
			}
			else {
				$(this).addClass("page"+(pageCounter+1));
				pageCounter ++;
			}	
		});
		 
		//show/hide the appropriate regions 
		selector.children().hide();
		$(".page"+options.currentPage).show();
		if (totalRecords != 0)
		{
		// For the Showing Results tag on Page Load 
		var firstPageLinkPageLength = $("LI.page1").length;			       						
		var endPageResultNumber = (1*options.pageSize) - (options.pageSize - firstPageLinkPageLength);					
		$(".resultsShowing").html("<p>Showing results 1-"+endPageResultNumber+" of "+totalRecords+" results found</p>");
		}
		
		
		//first check if there is more than one page. If so, build nav
		if(pageCounter > 1) {
			//Build pager navigation
			var pageNav = "<ul class='pageNav'>";	
			pageNav += "<li class=\"prev\"><a rel=\"prev\" href=\"#\">< Prev</a></li>";

			for (i=1;i<=pageCounter;i++)
			{
				if (i==options.currentPage)
				{
					pageNav += "<li class=\"currentPage pageNav"+i+"\"'><a rel='"+i+"' href='#'>"+i+"</a></li>";	
				} else
				{
					pageNav += "<li class='pageNav"+i+"'><a rel='"+i+"' href='#'>"+i+"</a></li>";
				}
			
			}
			pageNav += "<li class=\"next\"><a rel=\"next\" href=\"#\">Next ></a></li>";

			pageNav += "</ul>";
			
			if(options.holder == "") {
				selector.after(pageNav);
			}
			else {
				$(options.holder).append(pageNav);
			}
			
			var start = 1;
			var end = options.naviSize;
			
			var liSize = ($("UL.pageNav LI").length)/2;
					
			
			liSize = liSize - 2;
			
			// all hide and show start to end page with navigation.
			$('.pageNav').children().hide();
			for (i=start; i<=end; i++) {
				if (i == end) {
					$('.prev').hide();
					$('.next').show();
				} else if (i == start) {
					$('.next').hide();
					$('.prev').show();
				}
				
				$('.pageNav'+i).show();
					
			}
			
			$('.currentPage').show();
			
			//pager navigation behaviour
			$(".pageNav a").click(function()
			 {			
				//grab the REL attribute 
				var clickedLink = $(this).attr("rel");
				
				// For the Showing Results tag on Page Navigation Link
				var clickedLinkPagePreviousLength = $("LI.page"+(clickedLink-1)).length;
				var clickedLinkPageLength = $("LI.page"+clickedLink).length;				
				var startResultNumber = ((clickedLink-1)*clickedLinkPagePreviousLength)+1;				
				var endResultNumber = (clickedLink*options.pageSize) - (options.pageSize - clickedLinkPageLength);				
				$(".resultsShowing").html("<p>Showing results "+startResultNumber+"-"+endResultNumber+" of "+totalRecords+" results found</p>");
				
				if (clickedLink > 1 && clickedLink < liSize)
				 {
				$('.prev').show();
				$('.next').show();
				}
				else if(clickedLink == 1)
				{
				$('.prev').hide();
				$('.next').show();
				}
				else if(clickedLink == liSize)
				{
				$('.prev').show();
				$('.next').hide();
				}
				if($(this).text()=='< Prev')
				 {
					var clickedLink = $("li.currentPage A").attr("rel");

                    var clickedLink = parseInt(clickedLink) - 1;
                    end = Math.ceil(clickedLink / options.naviSize) * options.naviSize;
                    
					start = end - options.naviSize+1;
					
					// For the Showing Results tag on Page Previous Link
					var clickedLinkPagePreviousLength = $("LI.page"+(clickedLink-1)).length;				
					var clickedLinkPageLength = $("LI.page"+clickedLink).length;						
					var startResultNumber = ((clickedLink-1)*clickedLinkPagePreviousLength)+1;							
					var endResultNumber = (clickedLink*options.pageSize) - (options.pageSize - clickedLinkPageLength);									
					$(".resultsShowing").html("<p>Showing results "+startResultNumber+"-"+endResultNumber+" of "+totalRecords+" results found</p>");
				
					$('.pageNav').children().hide();
					
					 for (i=start; i<=end; i++)
					  {
						
						 if (clickedLink > 1 && clickedLink < liSize)
						 {
						 $('.prev').show();
						 $('.next').show();
						 }
						 else
						 {
							$('.prev').hide();
							$('.next').show();
						 }
						
						
						$('.pageNav'+i).show();
						
					  }
						
						
					
				} else if ($(this).text() == 'Next >')
				 {
				
				var clickedLink = $("li.currentPage A").attr("rel");
				start = Math.floor(clickedLink / options.naviSize) * options.naviSize + 1;
					
				var clickedLink = parseInt(clickedLink) + 1;
				
				// For the Showing Results tag on Page Next Link
				var clickedLinkPagePreviousLength = $("LI.page"+(clickedLink-1)).length;				
				var clickedLinkPageLength = $("LI.page"+clickedLink).length;					
				var startResultNumber = ((clickedLink-1)*clickedLinkPagePreviousLength)+1;					
				var endResultNumber = (clickedLink*options.pageSize) - (options.pageSize - clickedLinkPageLength);				
				$(".resultsShowing").html("<p>Showing results "+startResultNumber+"-"+endResultNumber+" of "+totalRecords+" results found</p>");
				
					end = start + (options.naviSize-1);
				
					$('.pageNav').children().hide();
					
				    for (i=start; i<=end; i++)
					  {
						if ((clickedLink >= start) && (clickedLink <= end))
						 {
						 if (clickedLink < liSize)
						 {
						 $('.prev').show();
						 $('.next').show();
						 }
						 else
						 {
							$('.prev').show();
							$('.next').hide();
						  }
						}
					
						
					$('.pageNav'+i).show();		
					}
					
				}
				
				
				options.currentPage = clickedLink;
				//remove current current (!) page
				$("li.currentPage").removeClass("currentPage");
				//Add current page highlighting
				$("ul.pageNav").find("a[rel='"+clickedLink+"']").parent("li").addClass("currentPage");
				//$(this).parent("li").addClass("currentPage");
				//hide and show relevant links				
				selector.children().hide();			
				selector.find(".page"+clickedLink).show();
				
				
				//return false;
			});
			
		}
			  
	}
	

})(jQuery);




