/**
 * Separate a documents sections and display only one at a time. Builds
 * a menu for navigation sections
 *
 * The class name defining the sections can be given as an input to the
 * constructor
 *
 * rootElement      - The root of the sections to be gathered
 * defaultSection	- The id of the default section to show
 * sectionClassName	- The class name of the sections, default 'section'
 */
function PagedDocument(rootElement, defaultSection, sectionClassName) {
	// Properties
	this.defaultSection = defaultSection;
	this.sectionClassName = sectionClassName || 'section';
	this.menu = null;
	this.activeItem = null;
	this.activeMenuItem = null;
	this.sections = new Array();
	this.root = $(rootElement);
	// Methods
	this.collectSections = pagedDocumentCollectSections;
	this.display = pagedDocumentDisplaySection;
	this.getMenu = pagedDocumentGetMenu;
	this.collectSections(this.sectionClassName);
}
	/**
	 * Collect the settings and build the menu.
	 */
	function pagedDocumentCollectSections(sectionClassName) {
		var elements = $C(sectionClassName, 'div', this.root);
		this.menu = HTMLDOMUtil.createElement('ul', 'navigation');
		var header, a, li;
		for (var i = 0; i < elements.length; i++) {
			this.sections[elements[i].id] = elements[i];
			HTMLDOMUtil.addClass(elements[i], 'paged_view');
			if (elements[i].getElementsByTagName('h2') && elements[i].getElementsByTagName('h2').length > 0) {
				header = elements[i].getElementsByTagName('h2')[0].innerHTML;
				a = HTMLDOMUtil.createElement('a', null, null, header);
				a.pagedDocument = this;
				a.onclick = function(e) { this.pagedDocument.display(this.href.split('#')[1]); return false; };
				a.href = '#' + elements[i].id;
				li = HTMLDOMUtil.createElement('li', null, null, a);
				this.menu.appendChild(li);
				if (elements[i].id == this.defaultSection || (this.defaultSection == null && i == 0)) {
					this.activeItem = elements[i];
					this.activeMenuItem = li;
					li.className = 'active';
				} else { HTMLDOMUtil.addClass(elements[i], 'hidden'); }
				className = null;
			} else {
				HTMLDOMUtil.addClass(elements[i], 'hidden');
			}
		}
	}
	/**
	 * Display a section
 	*/
	function pagedDocumentDisplaySection(section) {
		if (this.activeMenuItem)
			HTMLDOMUtil.removeClass(this.activeMenuItem, 'active');
		if (this.activeItem)
			HTMLDOMUtil.addClass(this.activeItem, 'hidden');
		HTMLDOMUtil.removeClass(this.sections[section], 'hidden');
		this.activeItem = this.sections[section];
		for (var i = 0; i < this.menu.getElementsByTagName('a').length; i++)
			if (this.menu.getElementsByTagName('a')[i].href.split('#')[1] == section)
				this.activeMenuItem = this.menu.getElementsByTagName('a')[i].parentNode;
		HTMLDOMUtil.addClass(this.activeMenuItem, 'active');
		this.activeMenuItem.blur();
	}
	/**
	 * Return the menu
	 */
	function pagedDocumentGetMenu(id, className) {
        if (id != null) this.menu.id = id;
        if (className != null) HTMLDOMUtil.addClass(this.menu, className);
		return this.menu;
	}

