jQuery.fn.pageSlide = function(activeSelector, controlPosition) {
	var elementCount = parseInt($(this).size(), 10);
	if (elementCount > 1) {
		var index = 1;
		switch(controlPosition)
		{
			case 'LEFTRIGHT':
				var $pos = $(this).position();
				var $width = $(this).width();
				$(this)
		    .wrapAll(
		        '<div class="pageSlideWrapper" style="padding-bottom:.3em;"></div>')
		    .parent()
		    .append('<p class="pageSlideControl"> \
		    		<a class="back" style="z-index:0;position:absolute;margin:0;padding:0;left:' + ($pos.left - 20) + 'px;top:' + ($pos.top + 4) + 'px;" href="#">&lt;</a> \
		    		<span class="pageNumber" style="display:none;">1</span> \
		    		<a class="next" style="z-index:0;position:absolute;margin:0;padding:0;left:' + ($pos.left + $width + 10) + 'px;top:' + ($pos.top + 4) + 'px;" href="#">&gt;</a> \
		    		</p>');
				break;
			case 'BOTTOM':
			default:
				$(this)
		    .wrapAll(
		        '<div class="pageSlideWrapper"></div>')
		    .parent()
		    .append('<p class="pageSlideControl"> \
		    		<a class="back" href="#">&lt;</a> \
		    		<span class="pageNumber">1</span> \
		    		von ' + elementCount + ' \
		    		<a class="next" href="#">&gt;</a> \
		    		</p>');
				break;
		}
		$(this)
		.parent()
    .find('.pageSlideControl a.back').click(function() {
    	var pageNumber = parseInt($(this).parent().find('.pageNumber').text(), 10);
    	if(pageNumber > 1)
    	{
	    	$(this).closest('.pageSlideWrapper').find('.pageSlidePage' + pageNumber).hide();
	    	$(this).closest('.pageSlideWrapper').find('.pageSlidePage' + (pageNumber - 1)).fadeIn(300);
	    	$(this).parent().find('.pageNumber').text('' + (pageNumber - 1));
    	}
    	return false;
    })
    .end()
    .find('.pageSlideControl a.next').click(function() {
    	var pageNumber = parseInt($(this).parent().find('.pageNumber').text(), 10);
    	if(pageNumber < elementCount)
    	{
	    	$(this).closest('.pageSlideWrapper').find('.pageSlidePage' + pageNumber).hide();
	    	$(this).closest('.pageSlideWrapper').find('.pageSlidePage' + (pageNumber + 1)).fadeIn(300);
	    	$(this).parent().find('.pageNumber').text('' + (pageNumber + 1));
    	}
    	return false;
    });

		var maxHeight = 0;
	  $(this).each(function() {
	  	if($(this).height() > maxHeight)
	  	{
	  		maxHeight = $(this).height();
	  	}
	  });
	  
		$(this).each(function() {
			var activePageIndex = null;
			if(activeSelector)
			{
				if($(this).find(activeSelector).size() == 0)
				{
					if (index > 1) {
						$(this).hide();
					}
				} else {
					if(index > 1)
					{
			    	$(this).closest('.pageSlideWrapper').find('.pageSlidePage1').hide();
					}
					$(this).closest('.pageSlideWrapper').find('.pageNumber').text('' + index);					
				}
			}
			else
			{
				activePageIndex = 1;
				if (index > 1) {
					$(this).hide();
				}
			}
			$(this)
				.addClass('pageSlidePage')
				.addClass('pageSlidePage' + index)
				.css( { 'height' : maxHeight + 'px' } );
			index++;
		});

		return $(this).each(function() {
			$(this).find('a').each(function() {
			  var $a = $(this);
				if($a.attr('href')[0] == '#')
				{
					var targetId = $a.attr('href');
					var $target = $a.closest('.pageSlideWrapper').find(targetId);
					if($target.size() == 1)
					{
						$a.click(function() {
							var pageNumber = parseInt($(this).closest('.pageSlideWrapper').find('.pageNumber').text(), 10);
							var targetPageNumber = parseInt($target.closest('.pageSlidePage').attr('class').replace(/^.*pageSlidePage([1-9]{1}[0-9]*).*$/, '$1'), 10);
							if(targetPageNumber)
							{
								$(this).closest('.pageSlideWrapper').find('.pageSlidePage' + pageNumber).hide();
								$(this).closest('.pageSlideWrapper').find('.pageSlidePage' + targetPageNumber).fadeIn(300);
								$(this).closest('.pageSlideWrapper').find('.pageNumber').text('' + targetPageNumber);
							}
							return false;
						});
					}
				}
			});
		});
	}
};

