/*
*jQuery paging plugin
*
* @author Swiggers Tom <swiggers.tom@gmail.com>
* @version 1.0 7/1/2009
*
* @param integer maxPerPage max items per page
* @param integer maxVisibleLinks max links
* @param string nextLinkText text to indicate next links
* @param integer previousLinkText text to indicate previous links
* @param integer parentSelectorType the type of the parentSelector ex. . stands for class, # stands for id
* @param integer parentSelectorName name of the parentSelector
* @param integer childSelectorType the type of the childSelector ex. . stands for class, # stands for id
* @param integer childSelectorName name of the childSelector
*
*/
if (jQuery) (function($){
	$.extend({
		paging: function (params) {
			function showBlock(subClass) 
			{
				$(parentSelector + " .list_visible").hide();
				$(parentSelector + " .list_visible").addClass("list_hidden");
				$(parentSelector + " .list_visible").removeClass("list_visible");
				$(parentSelector + " .list_visible").removeClass("selected");
				
				$(parentSelector + " ." + subClass).show();
				$(parentSelector + " ." + subClass).addClass("list_visible");
				$(parentSelector + " ." + subClass).addClass("selected");
				$(parentSelector + " ." + subClass).removeClass("list_hidden");
			}
			
			function showLinks(type)
			{
				for (i=0; i<params.maxVisibleLinks; i++) {
					offset = i + currentLinkOffset;
					$("#link_up_" + offset).hide();
					$("#link_down_" + offset).hide();
				}
				
				if (type == 1) {
					currentLinkOffset = currentLinkOffset + params.maxVisibleLinks;
				} else {
					currentLinkOffset = currentLinkOffset - params.maxVisibleLinks;
				}
				
				for (i=0; i<params.maxVisibleLinks; i++) {
					offset = i + currentLinkOffset;
					$("#link_up_" + offset).show();
					$("#link_down_" + offset).show();
				}
				
				if (currentLinkOffset == 1) {
					$("#link_prev_up").hide();
					$("#link_prev_down").hide();
				} else {
					$("#link_prev_up").show();
					$("#link_prev_down").show();
				}
				
				if ((currentLinkOffset + params.maxVisibleLinks) > totalLinks) {
					$("#link_next_up").hide();
					$("#link_next_down").hide();
				} else {
					$("#link_next_up").show();
					$("#link_next_down").show();
				}
				
				return false;
			}
			
			function createLink(j, upDownType) 
			{
				if (upDownType == 1) {
					var id = "link_up_" + j;
				} else {
					var id = "link_down_" + j;
				}
			
				var lnk = $("<a>"+j+"</a>").bind("click", function () {showBlock("block_" + j); return false;})
										   .attr("href", "#")
										   .attr("id", id);
										   
				if (j > params.maxVisibleLinks) {
					lnk.hide();
				}
				
				return lnk;
			}
			
			function createNextLink(upDownType) 
			{
				if (upDownType == 1) {
					var id = "link_next_up";
				} else {
					var id = "link_next_down";
				}
			
				var lnk = $("<a>"+params.nextLinkText+"</a>").bind("click", function () {showLinks(1); return false;})
										   .attr("href", "#")
										   .attr("id", id);
										   
				if (totalLinks <= params.maxVisibleLinks) {
					lnk.hide();
				}
				
				return lnk;
			}
			
			function createPreviousLink(upDownType) 
			{
				if (upDownType == 1) {
					var id = "link_prev_up";
				} else {
					var id = "link_prev_down";
				}
			
				var lnk = $("<a>"+params.previousLinkText+"</a>").bind("click", function () {showLinks(0); return false;})
										   .attr("href", "#")
										   .attr("id", id);
										   
				lnk.hide();
				
				return lnk;
			}
		
			function getTotalItems()
			{
				var total = 0;
			
				$(childSelector).each(function () {
					
					if ($(this).css("display") != "none") {
						total++;
					}
				});
				
				return total;
			}
			
			function reset()
			{
				var i = 0;
				
				$(childSelector).each(function () {
					
					if ($(this).hasClass("selected")) {
						$(this).removeClass("selected");
					}
					
					if ($(this).hasClass("list_hidden")) {
						$(this).removeClass("list_hidden");
					}
					
					if ($(this).hasClass("list_visible")) {
						$(this).removeClass("list_visible");
					}
					
					var classNames = $(this).attr("class");
					
					var classNameArray = classNames.split(" ");
					
					for (i=0; i<classNameArray.length; i++) {
						className = classNameArray[i];
						
						if (className.substr(0, 5) == "block") {
							$(this).removeClass(className);
						}
					}
				});
				
				$(".paging_up").remove();
				$(".paging_down").remove();
			}
			
			/*Set parameters*/
			if (!params) { 
				var params = {};
			}
			
			if  (params.parentSelectorType == undefined) {
				params.parentSelectorType = ".";
			}
			
			if  (params.parentSelectorName == undefined) {
				params.parentSelectorName = "image4Cols";
			}
			
			if  (params.childSelectorType == undefined) {
				params.childSelectorType = ".";
			}
			
			if  (params.childSelectorName == undefined) {
				params.childSelectorName = "imageItem";
			}
			
			if  (params.maxPerPage == undefined) {
				params.maxPerPage = 32;
			}
			
			if  (params.maxVisibleLinks == undefined) {
				params.maxVisibleLinks = 25;
			}
			
			if  (params.nextLinkText == undefined) {
				params.nextLinkText = 'volgende';
			}
			
			if  (params.previousLinkText == undefined) {
				params.previousLinkText = 'vorige';
			}
			/**/
			
			var parentSelector = params.parentSelectorType + params.parentSelectorName;
			var childSelector = params.childSelectorType + params.childSelectorName;
			
			reset();
			
			var totalItems = getTotalItems();
			var j = 1;
			var x = 0;
			var currentLinkOffset = 1;
			
			if (totalItems > params.maxPerPage) {
				$(parentSelector).prepend('<div class="paging_up"></div>');
				$(parentSelector).append('<div class="paging_down"></div>');
				
				var counter = 0;
				
				var lnkUp = createPreviousLink(1);
				var lnkDown = createPreviousLink(0);
				
				$(parentSelector + " .paging_up").append(lnkUp);
				$(parentSelector + " .paging_down").append(lnkDown);
				
				$(parentSelector + " " + childSelector).each(function (i) {
					
					element = $(this);
					
					if (element.css("display") != "none") {
					
						if ((x % params.maxPerPage == 0 && x != 0)) {
							
							if (j == 1) {
								element.addClass("selected");
							}
							
							var lnkUp = createLink(j, 1);
							var lnkDown = createLink(j, 0);
							
							$(parentSelector + " .paging_up").append(lnkUp);
							$(parentSelector + " .paging_down").append(lnkDown);
							
							j++;
						}
						
						if (x >= params.maxPerPage) {
							element.hide();
							element.addClass("list_hidden");
						} else {
							element.addClass("list_visible");
						}
						
						element.addClass("block_" + j);
						
						i++;
						x++;
						counter = x;
					}
				});
				
				var lnkUp = createLink(j, 1);
				var lnkDown = createLink(j, 0);
				
				$(parentSelector + " .paging_up").append(lnkUp);
				$(parentSelector + " .paging_down").append(lnkDown);
				
				var totalLinks = j;
				
				var lnkUp = createNextLink(1);
				var lnkDown = createNextLink(0);	
				$(parentSelector + " .paging_up").append(lnkUp);
				$(parentSelector + " .paging_down").append(lnkDown);
				
				//$(".paging").clone().prependTo(parentSelector);
			}
		}
	});
}) (jQuery);
