/**
 * @name pagination
 * @desc JavaScript component van de paginatie, staat op de to-do lijst om te worden vervangen door een serverside implementatie (v2).
 * @author Jonathan van 't Ende
 * @version 1.6
 */
function pagination()
{
	this.pageSelect = 'pagination'
	this.pageLink = 'pageLink';
	this.pageLinkActive = 'pageLinkActive';
	this.pageLinkInActive = 'pageLinkInActive';
	this.pageLinkMore = 'pageLinkMore';
	this.maxPages = 10;
	this.pageNum = 1;
	this.pageChar = '';
	this.hrefChar;
	this.startPage;
	this.endPage;
	this.pages;
	this.href;
	
	/**
	 * @name create
	 */
	this.create = function()
	{
		this.reset();
		this.setChar();
		if(this.pages > 1)
		{
			this.createFirst();
			this.createPrev();
			this.createNumbering();
			this.createNext();
			this.createLast();
		}
	}
	
	/**
	 * @name reset
	 */
	this.reset = function()
	{
		$('.' + this.pageSelect).empty();
	}
	
	/**
	 * @name setChar
	 */
	this.setChar = function()
	{
		if(this.pageChar.length > 0)
			this.hrefChar = '/char/' + this.pageChar;
		else this.hrefChar = '';
	}
	
	/**
	 * @name createNumbering
	 */
	this.createNumbering = function()
	{
		if(this.pages > this.maxPages)
		{
			if(this.pageNum > Math.round(this.maxPages / 2))
				this.startPage = this.pageNum - Math.round(this.maxPages / 2);
			else this.startPage = 1;
			
			this.endPage = this.startPage +  this.maxPages;
			
			if(this.endPage > this.pages)
			{
				this.startPage -= (this.endPage - this.pages);
				this.endPage = this.pages;
			}
		}
		else
		{
			this.startPage = 1;
			this.endPage = this.pages;
		}
		
		if(this.startPage > 1)
		{
			this.startPage = this.startPage + 1;
			this.createItem('...', this.pageLinkMore);
		}
		
		if(this.endPage < this.pages)
		{
			this.endPage = this.endPage - 1;
		}
		
		for(page = this.startPage; page <= this.endPage; page++)
		{
			var href = this.hrefChar + '/page/' + page + '.html#pagination';
			
			if(this.pageNum == page)
				this.createItem(page, this.pageLinkActive);
			else this.createItem(page, this.pageLink, true, href);
		}
		
		if(this.endPage < this.pages)
		{
			this.createItem('...', this.pageLinkMore);
		}
	}
	
	/**
	 * @name createItem
	 * @param string caption, string className, boolean link, string href
	 */
	this.createItem = function(caption, className, link, href)
	{
		if(link)
		{
			var item = $('<a>' + caption + '</a>');
			item.attr({href : this.href + href});
		}
		else var item = $('<span>' + caption + '</span>');
		
		item.addClass(className);
		
		$('.' + this.pageSelect).append(item);
	}
	
	/**
	 * @name createPrev
	 */
	this.createPrev = function()
	{
		var caption = '<strong>&laquo;</strong> vorige';
		
		if(parseInt(this.pageNum) > 1)
		{
			var pev = (parseInt(this.pageNum) - 1);
			var href = this.hrefChar + '/page/' + pev + '.html#pagination';
			
			this.createItem(caption, this.pageLink, true, href);
		}
		else this.createItem(caption, this.pageLinkInActive);
	}
	
	/**
	 * @name createNext
	 */
	this.createNext = function()
	{
		var caption = 'volgende <strong>&raquo;</strong>';
		
		if(parseInt(this.pageNum) < parseInt(this.pages))
		{
			var next = (parseInt(this.pageNum) + 1);
			var href = this.hrefChar + '/page/' + next + '.html#pagination';
			
			this.createItem(caption, this.pageLink, true, href);
		}
		else this.createItem(caption, this.pageLinkInActive);
	}
	
	/**
	 * @name createFirst
	 */
	this.createFirst = function()
	{
		var caption = '<strong>&laquo;</strong> eerste';
		
		if(parseInt(this.pageNum) > 1)
		{
			var href = this.hrefChar + '/page/1.html#pagination';
			
			this.createItem(caption, this.pageLink, true, href);
		}
		else this.createItem(caption, this.pageLinkInActive);
	}
	
	/**
	 * @name createLast
	 */
	this.createLast = function()
	{
		var caption = 'laatste <strong>&raquo;</strong>';
		
		if(parseInt(this.pageNum) < parseInt(this.pages))
		{
			var href = this.hrefChar + '/page/' + this.pages + '.html#pagination';
			
			this.createItem(caption, this.pageLink, true, href);
		}
		else this.createItem(caption, this.pageLinkInActive);
	}
}
