/*
	Initialize:
	- create a new pager by calling var myPager = new eFocus_pager('pag', ['pager1', 'pager2', 'pager3'], 10);
	- 'pag' is the prefix (see below)
	- [] is the array of pagers in the pager (see below)
	- 10 is the number of pages to show lef and right of the current page

	Elements:
	- paging containers should be named as '[prefix]_paging_[postfix]'
	- paging number containers should be named as '[prefix_paging_numbers_[postfix]'
	- .. where [prefix] comes from this.prefix and [postfix] comes from this.pagers
*/


eFocus_pager = function(pPrefix, pPagers, pName, pPageRange, pAClass)
{
	this.item_range = [0,0];	 			// range of currently display items
	this.items = 0;									// total number of items
	this.step = 0;									// number of items to display per page
	this.pages = 0;									// total number of pages = this.items / this.step
	this.page_range = pPageRange; 	// show x pages before and after current page
	this.prefix = pPrefix;					// element prefix for all html elements
	this.pagers = pPagers;					// array of pager postfixes
	this.a_class = pAClass;					// classname of links (a tags)
	this.name = pName;							// current instance name
}

eFocus_pager.prototype.goPage = function(pStart, pEnd)
{
	var el;

  if (pStart >= this.items || pStart < 0) return;

	// hide previous items
	for (var i=this.item_range[0]; i<this.item_range[1]; i++)
	{
		if (el = ge(this.prefix + '_item_' + (i + 1)))
		{
			el.style.display = 'none' ;
			el.disabled = true;
		}
	}

	// show current items
	for (var i=pStart; i<pEnd; i++)
	{
		if (el = ge(this.prefix + '_item_' + (i + 1)))
		{
			el.style.display = '';
			el.disabled = false;
		}
	}

	var range_step = this.step * this.page_range;

	// check all pagers
	for (var i=0; i<this.pagers.length; i++)
	{
		var pager = this.pagers[i];

		// unhilite previous page numbersd
		if (el = ge(this.prefix + '_link_' + this.item_range[0] + '_' + this.item_range[1] + pager)) el.style.fontWeight = 'normal';

		// hilite current page numbers
		if (el = ge(this.prefix + '_link_' + pStart + '_' + pEnd + pager)) el.style.fontWeight = 'bold';

		// show or hide dots
		if (el = ge(this.prefix + '_link_first' + pager)) el.style.display = (pStart > range_step) ? '' : 'none' ;
		if (el = ge(this.prefix + '_link_last' + pager)) el.style.display = (this.items - pEnd > range_step) ? '' : 'none' ;

		// update dropdowns
		if (el = ge(this.prefix + '_step' + pager)) this.setSelValue(el, this.step);

		// hide overflowing page numbers
		var range_step_pre = range_step;
		var range_step_post = range_step;

		if (pStart < range_step)
		{
			range_step_post += range_step - pStart;
		}
		if (this.items - pEnd < range_step)
		{
			range_step_pre += range_step - (this.items - pEnd);
		}

		for (var j=0; j<this.pages; j++)
		{
			var p1 = this.step * j;
			var p2 = this.step * (j + 1);
			if (el = ge(this.prefix + '_link_' + p1 + '_' + p2 + pager)) el.style.display = ((p1 < pStart - range_step_pre) || (p1 > pStart + range_step_post)) ? 'none' : '' ;
		}
	}

	// remember state
	this.item_range = [pStart, pEnd];
}

function ge(pId)
{
  return document.getElementById(pId);
}

eFocus_pager.prototype.writePagers = function(pItems, pStep)
{
	if (pItems > 0 && pStep > 0)
	{
		var el;

		// define common variables
		this.items = pItems;
		this.step = pStep;
		this.pages = Math.ceil(pItems/pStep);

		// create links
		var h = '<span id="' + this.prefix + '_link_first_pos"> .. </span>';

		for (var i=0; i<this.pages; i++)
		{
			var p1 = this.step * i;
			var p2 = this.step * (i + 1);
			h += ' <a id="' + this.prefix + '_link_' + p1 + '_' + p2 + '_pos" href="javascript:' + this.name + '.goPage(' + p1 + ', ' + p2 + ');" class="' + this.a_class + '" title="Pagina ' + (i + 1) + ', items ' + (p1 + 1) + ' t/m ' + p2 + '">' + '[' + (p1 + 1) + '-' + p2 + ']' + '</a> ';
		}


		h += '<span id="' + this.prefix + '_link_last_pos"> .. </span>';

		// show and fill pagers
		for (var i=0; i<this.pagers.length; i++)
		{

			if (el = ge(this.prefix + '_paging' + this.pagers[i])) el.style.display = '';

			if (el = ge(this.prefix + '_paging_numbers' + this.pagers[i]))
			{
				//weggehaald, gaf problemen met smoothbox, en hij lijkt het nu gewoon te doen....
				el.innerHTML = h.replace(/_pos/g, this.pagers[i]);
			}
		}

		// jump to first page
		this.goFirst();

	}
	else
	{
		// hide pagers
		for (var i=0; i<this.pagers.length; i++)
		{
			if (el = ge(this.prefix + '_paging' + this.pagers[i])) el.style.display = 'none';
		}
	}
}

eFocus_pager.prototype.setValue = function(pEl, pVal)
{
    var el = ge(pEl);
	if (el) el.innerHTML = pVal;
}

eFocus_pager.prototype.setSelValue = function(pEl, pVal)
{
	var el = ge(pEl);
	if (el)
	{
		for (var i=0; i<el.options.length; i++)
		{
			if (el.options[i].value == pVal)
			{
				el.selectedIndex = i;
				break;
			}
		}
	}
}

eFocus_pager.prototype.goFirst = function()
{
	this.goPage(0, this.step);
}

eFocus_pager.prototype.goPrev = function()
{
	this.goPage(this.item_range[0] - this.step, this.item_range[1] - this.step);
}

eFocus_pager.prototype.goNext = function()
{
	this.goPage(this.item_range[0] + this.step, this.item_range[1] + this.step);
}

eFocus_pager.prototype.goLast = function()
{
	this.goPage((this.pages - 1) * this.step, this.pages * this.step);
}
