/**
 * NBR.AjaxPagenate
 *
 * @version  1.0.1 [2008/12/19]
 * @author   nbr
 * @usage    
 * <code>
var oPage = new NBR.AjaxPagenate();
oPage.pageTopId = "inBody";            // page top anchor id
oPage.addPage(['page1-1', 'page1-2']); // if array of id
oPage.addPage(['page2-1', 'page2-2']); // if array of id
oPage.addPage('page3');                // if string of id
oPage.init();
 *</code>
 */
if( typeof NBR == 'undefined') NBR = function(){};

NBR.AjaxPagenate = function() {
	this.initialize.apply(this, arguments);
};

NBR.AjaxPagenate.prototype = {
	// Constructor
	initialize: function() {
		this.pageTopId         = "top";
		this.pageNaviClass     = "ajax-page-navi";
		this.pageNaviNextClass = "ajax-page-navi-next";
		this.pageNaviPrevClass = "ajax-page-navi-prev";
		this.pageNaviNextText  = "NEXT &raquo;";
		this.pageNaviPrevText  = "&laquo; PREV ";
		
		this.aObjPageNavi = NBR.AjaxPagenate.getElementsByClassName(this.pageNaviClass);
		
		this.nPage = 0;
		this.aPages = [];
	},
	//
	addPage: function(a) {
		if (a.constructor === Array) {
			// if Array
			this.aPages.push(a);
		} else if (typeof a == 'string') {
			// if String
			this.aPages.push([a]);
		}
	},
	//
	init: function() {
		this.nPage = 0;
		this._show(this.nPage);
		this._createNavi();
	},
	//
	show: function(nIndex) {
		this.nPage = nIndex;
		this._show(nIndex);
		location.href = "#" + this.pageTopId;
		this._createNavi();
	},
	//--------------------------------------------
	//
	// private method
	//
	_show: function(nIndex) {
		var aPages = this.aPages;
		var nLength = aPages.length;
		for ( i = 0; i < nLength; i++ ) {
			if ( i == nIndex ) {
				for ( j = 0; j < aPages[i].length; j++ ) {
					NBR.AjaxPagenate.show(aPages[i][j]);
				}
			} else {
				for ( j = 0; j < aPages[i].length; j++) {
					NBR.AjaxPagenate.hide(aPages[i][j]);
				}
			}
		}
	},
	//
	_createNavi: function() {
		var nLength = this.aObjPageNavi.length;
		for ( i = 0; i < nLength; i++ ) {
			var objPageNavi = this.aObjPageNavi[i];
			objPageNavi.innerHTML = "";
			if ( this.nPage != 0) {
				var objPrevNavi = document.createElement("a");
				objPrevNavi.setAttribute("href", "javascript:void(0)");
				objPrevNavi.setAttribute("class", this.pageNaviPrevClass);
				objPrevNavi.thisObj = this;
				objPrevNavi.onclick = function() { this.thisObj.show(--this.thisObj.nPage); }
				objPrevNavi.innerHTML = this.pageNaviPrevText;
				objPageNavi.appendChild(objPrevNavi);
			}
			if ( this.nPage < this.aPages.length - 1) {
				var objNextNavi = document.createElement("a");
				objNextNavi.setAttribute("href", "javascript:void(0)");
				objNextNavi.setAttribute("class", this.pageNaviNextClass);
				objNextNavi.thisObj = this;
				objNextNavi.onclick = function() { this.thisObj.show(++this.thisObj.nPage); }
				objNextNavi.innerHTML = this.pageNaviNextText;
				objPageNavi.appendChild(objNextNavi);
			}
		}
	}
	
};
//---------------------------
//
// Class Method
//
NBR.AjaxPagenate.show = function(id) {
	var e = document.getElementById(id);
	if(e) e.style.display = "block"; 
};

NBR.AjaxPagenate.hide = function(id) {
	var e = document.getElementById(id);
	if(e) e.style.display = "none"; 
};

NBR.AjaxPagenate.getElementsByClassName = function(sClass) {
	var aAllElements = document.getElementsByTagName('*') || document.all;
	var aElements = [];
	for (var i = 0; i < aAllElements.length; i++) {
		var e = aAllElements[i];
		var classNames = e.className.split(/\s+/g);
		for (var j = 0; j < classNames.length; j++) {
			if (classNames[j] == sClass) {
				aElements.push(e);
				break;
			}
		}
	}
	return aElements;
};