
FDPages = FD.Form.Pages = new Array();
FDPages.Count = 0;
FDPages.Current = 1;
FDPages.PreviousPage = 0;
FDPages.vpp_force = false;
FDPages._tmr = 0;
FDPages._pno_init = false;

FDPages.Add = function(cpPage, opPage) {
	this[cpPage] = this.length;
	opPage.display = true;
	opPage.displayed = false;
	opPage.checked = false;
	this.push(opPage);
	this.Count = this.length - 1;
}
FDPages.GoTo = function(npPage, lpAbs, lpSkipEvents, lpInit, lpChecked) {
	window.clearTimeout(FDPages._tmr);
	if (typeof npPage != 'number') {
		if (npPage == 'last') npPage = this.Count;
		else npPage = Number.int(npPage);
	}

	var nRel = (lpAbs ? 1 : npPage), i = 0, oArg, lChanged = false;

	if (npPage > 0 || !lpAbs) {
		npPage = Math.min(Math.max((lpAbs ? npPage : this.Current + npPage), 1), this.Count), nPageOrg = npPage, nSafe = 0;
		while (!this[npPage].display && nSafe < (this.Count * 2)) { // oPage && !parseInt( oPage.getAttribute( 'display' ) ) 
			nSafe++, npPage += nRel;
			if (npPage > this.Count) npPage = 1;
			if (npPage == nPageOrg) { npPage = 0; break; }
		}

		var oPage = $('Page' + npPage);
		if (npPage != this.Current) {

			if (typeof FD.Form.Info.vpp != 'undefined' && FD.Form.Info.vpp && !lpChecked && (npPage > this.Current || this[this.Current].checked || this.vpp_force)) { // validate per page
				this.Check(npPage, true);
				return;
			}

			lChanged = true;
			oArg = { currentpage: this.Current, nextpage: npPage };
			if (!FDEvents.FireEvent('BeforePageChange', oArg)) return;

			if (nPageCurr > 0)
				setDisplay(document, 'Page' + this.Current, false);
			if (npPage > 0) {
				setDisplay(null, oPage, true);
			}
			if (!lpInit) {
				focusElement(document, 'bmTop');
				if (typeof window.scrollTo != 'undefined') window.scrollTo(0, 0);
			}
		}
		if (npPage != this.Current || !this._pno_init) {
			this.setPNOs((npPage > 0 ? npPage : 0));
		}
	} else if (this.Current > 0) {
		lChanged = true;
		oArg = { currentpage: this.Current, nextpage: npPage };
		if (!FDEvents.FireEvent('BeforePageChange', oArg)) return;
		setDisplay(document, 'Page' + this.Current, false);
		this.setPNOs(0);
	}

	this.PreviousPage = this.Current;
	this.Current = nPageCurr = npPage;

	this.DisplayButtons(lpSkipEvents);
	if (lChanged || lpInit) {
		this[this.Current].displayed = true;
		FDEvents.FireEvent('AfterPageChange', oArg);
	}
}
FDPages.Next = function() {
	this.GoTo(1);
}
FDPages.Previous = function() {
	this.GoTo(-1);
}
FDPages.Display = function(npPage, lpDisp, lpKeepEnabled) {
	if (typeof npPage == 'string') npPage = this[npPage];
	if (npPage > nPageCount) return;
	var oPage = $('Page' + npPage)
	var lDisp = this[npPage].display;
	if (lDisp != lpDisp) {
		if (!lpKeepEnabled) {
			for (var i = 0; i < this[npPage].fields.length; i++)
				setDisabled(document, this[npPage].fields[i], !lpDisp, false, true);
		}
		this[npPage].display = lpDisp;
		if (typeof setFilter != 'undefined') {
			setFilter('divPage' + npPage, !lpDisp);
			if (lpDisp && typeof Dependencies != 'undefined') Dependencies(npPage);
			if (lpDisp && typeof Calculate != 'undefined') Calculate(npPage);
		} else if (!lpDisp) setDisplay(document, 'Page' + npPage, false);
	}
}
FDPages.checkDisplay = function(npPage) {
	return this[npPage].display;
}
FDPages.checkDisplayAll = function() {
	for (var i = 1; i < this.Count; i++) {
		if (this[i].display) return true;
	}
	return false;
}
FDPages.DisplayButtons = function() { } // to be overriden by inserted script
FDPages.Check = function(npPage, lpABS) {
	if (typeof FDValidate == 'undefined') return;
	lpABS = lpABS || false;
	if (FDValidate._mode == 0) {
		FDPages[FDPages.Current].checked = false;
		aChecks.funcFinish = "FDPages[FDPages.Current].checked=true;FDPages.GoTo(" + npPage + "," + (lpABS ? 'true' : 'false') + ",false,false,true);";
		CheckForm(true, -1, FDPages.Current);
	} else {
		FDPages.GoTo(npPage, lpABS, false, false, true);
	}
}
FDPages.setPNOs = function(npPage) {
	var oEl, i = 1;
	this._pno_init = true;
	while ((oEl = $('pnoCurr' + i))) {
		layerWrite(null, oEl, npPage);
		i++;
	}
}

//--> depricated functions since 7/6/2007
function goPage(page, abs, skipevents, init) {
	window.clearTimeout(FDPages._tmr);
	FDPages._tmr = FDPages.GoTo.delay(FDPages, 200, page, abs, skipevents, init);
}
function displayPage(npPage, lpDisp, lpKeepEnabled) {
	FD.Debug.trace('displayPage', 'depricated! use FD.Page.Display instead');
	FDPages.Display(npPage, lpDisp, lpKeepEnabled);
}
function CheckPage(npPage) {
	FD.Debug.trace('CheckPage', 'depricated! use FD.Page.Check instead');
	FDPages.Check(npPage);
}
function setPNOs(npPage) {
	FD.Debug.trace('setPNOs', 'depricated! use FD.Page.setPNOs instead');
	FDPages.setPNOs(npPage);
}
//<--