/**
 * @author buenger
 */
var PageManager = {
	
	containerDiv: null,
	containerDivId: "formMainContainer",
	defaultContainerClass: "spalte white slot9",
	
	pages: [],
	activePages: [],
	idMap: new Hash(),
	
	currentPage: null,
	currentPageNum: null,
	
	numPages: 0,
	numPagesLoaded: 0,
	nextPageButton: null,
	previousPageButton: null,
	
	nextPageButtonId: null,
	previousPageButtonId: null,
	stepButtonContainerId: null,
	
	addItem: function (a_page) {
		this.pages.push(a_page);
		this.activePages.push(a_page);
		this.idMap[a_page.id] = a_page;
		this.numPages = this.activePages.length;
		a_page.addEvent ("loadComplete", this.setupPages.bind(this));	
	},
	
	setNextButtonVisibility: function  (a_visibility) {
		this.nextPageButton.style.display = a_visibility ? "inline": "none";
	},
	
	setPreviousButtonVisibility: function  (a_visibility) {
		this.previousPageButton.style.display = a_visibility ? "inline": "none";
	},
	
	setPageByNum: function (a_pageNum, a_disableChecking) {
		this.activatePage(this.activePages[a_pageNum], a_disableChecking);
	},
	
	setNextPage: function (a_disableChecking) {
		this.setPageByNum(this.currentPageNum+1, a_disableChecking);
	},
	
	setPreviousPage: function (a_disableChecking) {
		this.setPageByNum(this.currentPageNum-1, a_disableChecking);
	},
	
	getPageById: function (a_pageId) {
		return this.idMap[a_pageId];
	},
	
	
	setPageSet: function () {
		var ary = [];
		for (var i = 0; i < arguments.length; i++) {
			ary.push(this.idMap[arguments[i]]);
		}
		this.activePages = ary;
		this.numPages = this.activePages.length;
		
		$A(this.pages).each (function (a_item){
			if ($A(this.activePages).contains(a_item) == false) {
				a_item.setCheckable(false);
			} else a_item.setCheckable(true);
			
		}.bind(this))
	},
	
	activatePage: function (a_page, a_disableChecking) {
		if (!a_disableChecking && this.currentPage != null) {
			if (this.currentPage.check() == false) {
				this.fireErrorEvent();
				return;	
			}
		}
		if (this.currentPage != null) this.currentPage.setVisibility(false);
		this.currentPage = a_page;
		this.currentPage.setVisibility (true);
		this.currentPageNum = this.activePages.indexOf(a_page);
		
		
		if (this.currentPage.containerClass != "") {
			this.containerDiv.className = this.currentPage.containerClass
		} else {
			this.containerDiv.className = this.defaultContainerClass
		}
		
		StepButtonManager.setRight(this.currentPage.stepButtonOffset);
		StepButtonManager.setPage(this.currentPageNum);
		
		/*if (this.currentPageNum >= this.activePages.length-1) this.setNextButtonVisibility(false);
		else this.setNextButtonVisibility(true);
		
		if (this.currentPageNum <= 0) this.setPreviousButtonVisibility(false);
		else this.setPreviousButtonVisibility(true);
		*/
		var isLastPage = (this.currentPageNum >= this.numPages -1);
		this.fireEvent("newPage", new Array (this.currentPageNum, isLastPage));
		
	},
	
	registerButtons: function (a_nextPageButtonId, a_previousPageButtonId) {
		this.nextPageButtonId = a_nextPageButtonId;
		this.previousPageButtonId = a_previousPageButtonId;
	},
	
	handleNextButtonClick: function () {
		this.setNextPage();
	},
	
	handlePreviousButtonClick: function () {
		this.setPreviousPage(true);
	},
	
	handlePageButtonClick: function (a_id) {
		this.setPageByNum(a_id, true);
	},
	
	fireErrorEvent: function () {
		ErrorBox.show();
	},
	
	setupPages: function (a_page) {
		
		this.numPagesLoaded++;
		a_page.removeEvent ("loadComplete", this.setupPages);	
		if (this.numPagesLoaded < this.numPages) return;
				
		this.pages.each(function(a_item, a_index) {
			a_item.setVisibility(false);
			a_item.setPageNum(a_index);
		});
		this.setPageByNum(0, true);
	},
	
	handleWindowLoad: function () {
		this.containerDiv = $(this.containerDivId);
		StepButtonManager.addEvent ("pageClick", this.handlePageButtonClick.bind(this));
	},
	
	init: function () {
		$extend(this, new Events());
		window.addEvent("load", this.handleWindowLoad.bind(this));
	}
}

