/* 
-----------------------------------------------------
	Page segmentation JavaScript ver 1.2
	
	created by EDO.
	
	http://css-eblog.com
-----------------------------------------------------
*/

function showPara(){
	/* -----------------------------------------------------
		function of initialize.
	----------------------------------------------------- */

	this.ini = function(num){

		//set to unit of pageing.(default=10)
		if(!num){
			maxList = 10;
		} else {
			maxList = num;
		}
			
		//initializing current page.
		currentPage = 1;

		//initializing current group.
		currentPageGroup = 1;
		
		//hide to not current.
		var chkObj = this.getObj('paraGroup');
		var p = location.href.split('#')[1]; //if link on page, get it.
		if( p ){
			if(p.match(/[0-9]+/) > chkObj.length){
				var pn = 'no1';
			} else {
				var pn = 'no' + p.match(/[0-9]+/);
				currentPage = parseInt(p.match(/[0-9]+/));
			}
		} else {
			var pn = 'no1';
			p = '1';
		}

		//set to page-group of selected.
		if(p.match(/[0-9]+/) > chkObj.length){
			currentPageGroup = 1;
		} else if(currentPage % maxList != 0){
			currentPageGroup = Math.floor(currentPage / maxList) + 1;
		} else {
			currentPageGroup = Math.floor(currentPage / maxList);
		}

		//create paging.
		this.createPaging(currentPageGroup);
		
		//display current page.
		this.showContents(pn);
	}
	
	/* -----------------------------------------------------
		get object list.
	----------------------------------------------------- */
	
	this.getObj = function(o){
		//search for same classis.
		var dObj = document.getElementsByTagName('div');
		
		var dList = new Array();
		for(i=0; i<dObj.length; i++){
			if(dObj.item(i).className.indexOf(o) != -1){
				dList.push(dObj.item(i));
			}
		}
		
		if(dList.length != 0){
			return dList;
		} else {
			return null;
		}
	}

	/* -----------------------------------------------------
		display contents.
	----------------------------------------------------- */

	this.showContents = function(id){
		//get current and display each element, if ID is "next" or "prev".
		if(id == 'next'){
		
			var allObj = this.getObj('paraGroup');
			
			if(currentPage != allObj.length && currentPage+1 <= currentPageGroup*maxList){
				
				id = 'no' + (currentPage + 1);
				
			} else if(currentPage != allObj.length && currentPage+1 > currentPageGroup*maxList){
				
				var tempCurr = currentPage;
				this.createPaging('nextPageGroup');
				currentPage = tempCurr;
				id = 'no' + (currentPage + 1);
				
			} else {
				
				return;
				
			}
			
		} else if(id == 'prev'){

			var allObj = this.getObj('paraGroup');
			
			if((currentPage-1 < allObj.length-(maxList-1) && currentPage-1 < ((currentPageGroup*maxList)-(maxList-1))) && currentPageGroup != 1){
				
				var tempCurr = currentPage;
				this.createPaging('prevPageGroup');
				currentPage = tempCurr;
				id = 'no' + (currentPage - 1);
				
			} else if(currentPage != 1){
				
				id = 'no' + (currentPage - 1);
				
			} else {
				
				return;
				
			}
		}
		
		//if current page, stop processing.
		if(currentPage == parseInt(id.match(/[0-9]+/))){
			return;
		}
		
		//display selected page.
		var lObj = this.getObj('paraGroup');
		
		for(i=0; i<lObj.length; i++){
			
			if(i+1 == parseInt(id.match(/[0-9]+/)) && lObj[i].className.indexOf('curGroup') == -1){
				
					lObj[i].className += ' curGroup';
					lObj[i].style.display = 'block';
					
					//over write current page.
					currentPage = parseInt(id.match(/[0-9]+/));
					location.href = location.href.split('#')[0] + '#' + id;
					
			} else if(i+1 == parseInt(id.match(/[0-9]+/))){
				
				lObj[i].style.display = 'block';
				
				//over write current page.
				currentPage = parseInt(id.match(/[0-9]+/));
				location.href = location.href.split('#')[0] + '#' + id;
				
			}else {
				
				if(lObj[i].className.indexOf(' curGroup') != -1){
					
					lObj[i].className = lObj[i].className.replace(' curGroup','');
					lObj[i].style.display = 'none';
					
				} else if(lObj[i].className.indexOf('curGroup') != -1){
					
					lObj[i].className = lObj[i].className.replace('curGroup','');
					lObj[i].style.display = 'none';
					
				}
			}
		}
		
		//high-light to selected page.(paging)
		var pObj = this.getObj('paging');
		
		if(pObj != null){
			
			for(i=0; i<pObj.length; i++){
				
				//get list content.
				var plObj = pObj[i].getElementsByTagName('ul');

				for(j=0; j<plObj.length; j++){
					
					var pl = plObj[j].getElementsByTagName('li');
					
					for(k=0; k<pl.length; k++){
						
						if(parseInt(pl[k].id.match(/[0-9]+/)) == parseInt(id.match(/[0-9]+/))){
							
							if(pl[k].className.indexOf(' currentPage') != -1 || pl[k].className.indexOf('currentPage') != -1) return;
							pl[k].className += ' currentPage';
							
						} else {
							
							pl[k].className = pl[k].className.replace(' currentPage','');
							pl[k].className = pl[k].className.replace('currentPage','');
							
						}
					}
				}
			}
		}
	}
	
	/* -----------------------------------------------------
		create page.
	----------------------------------------------------- */
	
	this.createPaging = function( cp ){
		//create paging.
		if(!cp){
			
			cp = 1;
			
		} else if(cp == 'prevPageGroup'){
			
			if(currentPageGroup <= 1) return;
			currentPageGroup -= 1;
			cp = currentPageGroup;
			
		} else if(cp == 'nextPageGroup'){
			
			var t = this.getObj('paraGroup');
			if(currentPageGroup == Math.ceil(t.length/maxList)) return;
			currentPageGroup += 1;
			cp = currentPageGroup;
			
		}
		
		//The number of partitions is acquired. 
		var cpObj = this.getObj('paraGroup');
		var cpage = cpObj.length;
		
		var pEnd = cp * maxList;
		
		if(cpage < pEnd) pEnd = cpage;
		
		if(pEnd > maxList){
			var pStart = pEnd - (maxList-1);
		} else {
			var pStart = 1;
		}
		
		var pObjs = this.getObj('paging');
		
		for(i=0; i<pObjs.length; i++){
			var ulo = document.createElement('ul');
			
			var g = new Array(4);
			var ga = new Array(4);
			var gt = new Array(4);
			
			gt[0] = document.createTextNode('<<');
			gt[1] = document.createTextNode('<');
			gt[2] = document.createTextNode('>');
			gt[3] = document.createTextNode('>>');
			
			for(gi=0; gi<g.length; gi++){
				g[gi] = document.createElement('li');
				ga[gi] = document.createElement('a');
				ga[gi].href = '#';
			}
			
			ga[0].rel = 'prevGroup';
			ga[0].className = 'prevPageGroup';
			ga[1].rel = 'prev';
			ga[1].className = 'prevPage';
			ga[2].rel = 'next';
			ga[2].className = 'nextPage';
			ga[3].rel = 'nextGroup';
			ga[3].className = 'nextPageGroup';
			
			ga[0].onclick = function(){
					var pa = new showPara();
					pa.createPaging('prevPageGroup');
					return false;
			}
			
			ga[1].onclick = function(){
					var pa = new showPara();
					pa.showContents('prev');
					return false;
			}
			
			ga[2].onclick = function(){
					var pa = new showPara();
					pa.showContents('next');
					return false;
			}
			
			ga[3].onclick = function(){
					var pa = new showPara();
					pa.createPaging('nextPageGroup');
					return false;
			}
			
			for(gi=0; gi<g.length; gi++){
				ga[gi].appendChild(gt[gi]);
				g[gi].appendChild(ga[gi]);
			}
			
			//added prev.
			if(cpage > maxList) ulo.appendChild(g[0]);
			ulo.appendChild(g[1]);
			
			for(j=pStart; j<=pEnd; j++){
				//create li element.
				var o = document.createElement('li');
				
				//create a element.
				var a = document.createElement('a');
				var t = document.createTextNode(j);

				a.appendChild(t);
				a.href = '#no' + j;
				a.rel = 'no' + j;
				a.onclick = function(){
					var pa = new showPara();
					pa.showContents(this.rel);
					return false;
				}
				
				//CurrentPage is added for the first element. 
				if(j == pStart){
					o.className = 'currentPage';
				}
				
				o.appendChild(a);
				o.setAttribute('id','p'+j);
				ulo.appendChild(o);
			}
			
			//added next.
			ulo.appendChild(g[2]);
			if(cpage > maxList) ulo.appendChild(g[3]);
		
			//clear for paging content.
			pObjs[i].innerHTML = '';
			//insert paging of creation.
			pObjs[i].appendChild(ulo);
		}
		
		//current page moved and it move to minimum page.
		this.showContents('no'+pStart);
		currentPage = pStart;
	}
}