/**
 * NavigationHolder manages the navigation frame.
 */
function NavigationHolder(formHolder) {
	this.formHolder = formHolder;
	this.template = new YAHOO.ext.DomHelper.Template('<a id="id_{id}"><span class="body">{name}</span></a>');
	var navigation = getEl('nav');
	navigation.mon('click', this.pageClicked, this);
}

/**
 * If the user clicks in the navigation frame, set the right item as
 * selected and tell the FormHolder to go to the right page.
 */
NavigationHolder.prototype.pageClicked = function(event) {
	var link = event.findTarget(null, 'a');
	if (link) {
		YAHOO.util.Dom.removeClass(document.getElementsByTagName('a'), 'selected');
		YAHOO.util.Dom.addClass(link, 'selected');
		this.formHolder.gotoPage(link.id.substring(3, link.id.length));
	}
}

/** Set a given page as selected. */
NavigationHolder.prototype.selectPage = function(id) {
	YAHOO.util.Dom.removeClass(document.getElementsByTagName('a'), 'selected');
	for (var i = id; i > 0; i--) {
		element = document.getElementById('id_' + i);
		if (element) {
			YAHOO.util.Dom.addClass(element, 'selected');
			break;
		}
	}
}

/** Take a new page list as input and call layout. */
NavigationHolder.prototype.setPages = function(pages) {
	this.pages = pages;
	this.layout();
}

/**
 * Contruct the page list in the navigation frame.
 * This is done by passing information from the pages struct array to
 * a YAHOO.ext.DomHelper.Template.
 */
NavigationHolder.prototype.layout = function() {
	var navigation = getEl('nav');
	YAHOO.ext.DomHelper.overwrite(navigation.dom, '');
	if (typeof(this.pages) == 'undefined') return;

	var id = 0;
	var nr = 0;
	for (var pi in this.pages) {
   		id = this.pages[pi].pageNr;
   		nr = this.pages[pi].pageNr;
		var page;
		if (this.pages[pi].loopPage) {
			if (this.pages[pi].currentPage) {
				page = {id: id, nr: nr, name: this.pages[pi].caption + '&nbsp;(' + this.pages[pi].currentLoopPageNr + '/' + this.pages[pi].nrOfLoopPages + ')'};
			} else {
				page = {id: id, nr: nr, name: this.pages[pi].caption + '&nbsp;(' + this.pages[pi].nrOfLoopPages + ')'};
			}
		} else {
			page = {id: id, nr: nr, name: this.pages[pi].caption};
		}
		this.template.append(navigation.dom, page);
		if (this.pages[pi].currentPage) {
			this.selectPage(id);
		}
	}
}

/** Get the page number of the current page. */
NavigationHolder.prototype.getCurrentPageNr = function() {
	for (var pi in this.pages) {
		if (this.pages[pi].currentPage) {
			return this.pages[pi].pageNr;
		}
	}
}

