/**
 * NBR.AjaxPagenate
 *
 * @version  1.2 [2010/09/16]
 * @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.pageNaviClass     = "ajax-page-navi";
		this.pageNaviNextClass = "ajax-page-navi-next";
		this.pageNaviPrevClass = "ajax-page-navi-prev";
		this.pageNaviNextElement  = "NEXT &raquo;";
		this.pageNaviPrevElement  = "&laquo; PREV ";
		
		this.aObjPageNavi = NBR.AjaxPagenate.getElementsByClassName(this.pageNaviClass);
		
		var bodyNode = document.getElementsByTagName('body').item(0);
		this.topNode = document.createElement("div")
		bodyNode.insertBefore(this.topNode,bodyNode.childNodes[0]);
		
		this.nCurrentPage = 0;
		this.aPages = [];
	},
	//
	addPage: function(a) {
		if (a.constructor === Array) {
			// if Array
			//this.aPages.push(a);
			this.aPages[this.aPages.length] = a;
		} else if (typeof a == 'string') {
			// if String
			//this.aPages.push([a]);
			this.aPages[this.aPages.length] = [a];
		}
	},
	//
	init: function() {
		if (location.hash) {
			var hash = location.hash.replace(/^#/, '');
			if( 0 < hash && hash < this.aPages.length ) {
				this.nCurrentPage = hash;
			} else {
				this.nCurrentPage = 0;
			}
		}
		else {
			this.nCurrentPage = 0;
		}
		this._show(this.nCurrentPage);
		this._createNavi();
	},
	//
	show: function(nIndex) {
		this.nCurrentPage = nIndex;
		this._show(nIndex);
		location.href = "#" + this.nCurrentPage;
		this._createNavi();
	},
	//--------------------------------------------
	//
	// private method
	//
	_show: function(nIndex) {
		var aPages = this.aPages;
		var nLength = aPages.length;
		for ( i = 0; i < nLength; i++ ) {
			for ( j = 0; j < aPages[i].length; j++) {
				NBR.AjaxPagenate.hide(aPages[i][j]);
			}
		}
		for ( j = 0; j < aPages[nIndex].length; j++ ) {
			NBR.AjaxPagenate.show(aPages[nIndex][j]);
		}
		this.topNode.id = this.nCurrentPage;
	},
	//
	_createNavi: function() {
		var nLength = this.aObjPageNavi.length;
		for ( i = 0; i < nLength; i++ ) {
			var objPageNavi = this.aObjPageNavi[i];
			objPageNavi.innerHTML = "";
			if (this.nCurrentPage != 0) {
				// PREV anchor
				var objPrevNavi = document.createElement("a");
				objPrevNavi.setAttribute("href", "javascript:void(0)");
				objPrevNavi.thisObj = this;
				objPrevNavi.onclick = function(){
					this.thisObj.show(--this.thisObj.nCurrentPage);
				}
			} else {
				// PREV span
				var objPrevNavi = document.createElement("span");
			}
			objPrevNavi.className = this.pageNaviPrevClass;
			objPrevNavi.innerHTML = this.pageNaviPrevElement;
			objPageNavi.appendChild(objPrevNavi);
			
			// PageNumber anchor
			var objNumNaviSet = document.createElement('span');
			objNumNaviSet.className = 'ajax-page-navi-numbers';
			var nPageTotal = this.aPages.length;
			for (j = 0; j < nPageTotal; j++) {
				if (j == this.nCurrentPage) {
					var objNumNavi = document.createElement("span");
					objNumNavi.className = 'ajax-page-current';
				}
				else {
					var objNumNavi = document.createElement("a");
					objNumNavi.setAttribute("href", "javascript:void(0)");
					objNumNavi.thisObj = this;
					objNumNavi.idNum = j;
					objNumNavi.onclick = function(){
						this.thisObj.show(this.idNum);
					}
					
				}
				objNumNavi.innerHTML = j + 1;
				objNumNaviSet.appendChild(objNumNavi);
			}
			objPageNavi.appendChild(objNumNaviSet);
			
			if ( this.nCurrentPage < this.aPages.length - 1) {
				// NEXT anchor
				var objNextNavi = document.createElement("a");
				objNextNavi.setAttribute("href", "javascript:void(0)");
				objNextNavi.thisObj = this;
				objNextNavi.onclick = function() {
					this.thisObj.show(++this.thisObj.nCurrentPage);
				}
			} else {
				// NEXT span
				var objNextNavi = document.createElement("span");
			}
			objNextNavi.className = this.pageNaviNextClass;
			objNextNavi.innerHTML = this.pageNaviNextElement;
			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;
};
