resultNavigatorContainer = new ResultNavigatorContainer();

function ResultNavigatorContainer() {
	this.navigators = [];
	this.addNavigator = resultNavigatorContainer_add;
}

function resultNavigatorContainer_add(navigator) {
	var act_pos = this.navigators.length;
	this.navigators[act_pos] = navigator;
	return act_pos;
}

function ResultNavigatorFactory() {
	this.create = resultNavigatorFactory_create;
}

function resultNavigatorFactory_create() {
	var navigator = new ResultNavigator();
	var containerPos = resultNavigatorContainer.addNavigator(navigator);
	navigator.containerPos = containerPos;
	return navigator;
}

function ResultNavigator() {
	//Instance variables
	this.containerPos = -1;

	this.nextDisplay = 'Next';
	this.previousDisplay = 'Previous';
	this.firstDisplay = 'First';
	this.lastDisplay = 'Last';

	this.cursorPosition = 0;
	this.initialResultSetSize = 10;
	this.maxNoOfHits = 0;
	this.displayPageCount = 13;

	//Objects
	this.form = null;
	this.pipeletCursorPosition = null;
	
	//Methods
	this.next = resultNavigator_next;
	this.previous = resultNavigator_previous;
	this.jumpToPage = resultNavigator_jumpToPage;

	this.hasNext = resultNavigator_hasNext;
	this.hasPrevious = resultNavigator_hasPrevious;

	this.printNext = resultNavigator_printNext;
	this.printPrevious = resultNavigator_printPrevious;

	this.printPageList = resultNavigator_printPageList;
}

function resultNavigator_next() {
	var next_cp = this.cursorPosition + this.initialResultSetSize;
	this.pipeletCursorPosition.value = next_cp;
	this.form.submit();
}

function resultNavigator_previous() {
	var previous_cp = this.cursorPosition - this.initialResultSetSize;
	this.pipeletCursorPosition.value = previous_cp;
	this.form.submit();
}

function resultNavigator_jumpToPage(page) {
	page--;
	var jump_cp = page * this.initialResultSetSize;
	this.pipeletCursorPosition.value = jump_cp;
	this.form.submit();
}

function resultNavigator_hasNext() {
	var next_cp = this.cursorPosition + this.initialResultSetSize;
	return (next_cp < this.maxNoOfHits);
}

function resultNavigator_hasPrevious() {
	var previous_cp = this.cursorPosition - this.initialResultSetSize;
	return (previous_cp >= 0);
}

function resultNavigator_printNext() {
	var pageCount = Math.ceil(this.maxNoOfHits / this.initialResultSetSize);
	if (this.hasNext())
	{	document.write('<a href="javascript: resultNavigatorContainer.navigators[' + this.containerPos + '].next()">' + this.nextDisplay + '</a>&nbsp;');
		document.write('<a href="javascript: resultNavigatorContainer.navigators[' + this.containerPos + '].jumpToPage(' + pageCount + ')">' + this.lastDisplay + '</a>');
	}
	else
		document.write('&nbsp;');
}

function resultNavigator_printPrevious() {
	if (this.hasPrevious())
	{	document.write('<a href="javascript: resultNavigatorContainer.navigators[' + this.containerPos + '].jumpToPage(' + 1 + ')">' + this.firstDisplay + '</a>&nbsp;');
		document.write('<a href="javascript: resultNavigatorContainer.navigators[' + this.containerPos + '].previous()">' + this.previousDisplay + '</a>');
	}
	else
		document.write('&nbsp;');
}

function resultNavigator_printPageList() {
	var pageCount = Math.ceil(this.maxNoOfHits / this.initialResultSetSize);
	var maxPages = this.displayPageCount;
	var startWith = 1;
	var actPos = Math.floor(this.cursorPosition / this.initialResultSetSize) + 1;
	if (pageCount < maxPages) {
		maxPages = pageCount;
	} else {
		var actPos = Math.floor(this.cursorPosition / this.initialResultSetSize) + 1;
		if (actPos <= 7)
			startWith = 1;
		else
			startWith = actPos - 6;
		maxPages += startWith - 1;
		if (maxPages > pageCount) {
			maxPages = pageCount;
			startWith = maxPages - this.displayPageCount;
		}
	}
	if (maxPages > 1) 
		for (var i = startWith; i <= maxPages; i++) {
			if (i == actPos) {
				document.write('<b>' + i + '</b>&nbsp;');
			} else {
			document.write('<a href="javascript: resultNavigatorContainer.navigators[' + this.containerPos + '].jumpToPage(' + i + ')">' + lz(i) + '</a>&nbsp;');
			}
		}
	if (pageCount == 1)
		document.write('<b>' + 1 + '</b>&nbsp;');
}

function lz(number) {
	if (number < 10)
		return number;
	else
		return number;
}

