/* 
-----------------------------------------------------
	ページ分割Javascript ver 1.1
	
	created by EDO.
-----------------------------------------------------
*/

function showPara(){
	/* 
	-----------------------------------------------------
		初期化関数
	-----------------------------------------------------
	*/

	this.ini = function(num){

		//ページング単位を設定
		if(!num){
			maxList = 20;
		} else {
			maxList = num;
		}
			
		//カレントページを初期化
		currentPage = 1;

		//カレントページグループを初期化
		currentPageGroup = 1;
		
		//該当のもの以外を非表示
		var chkObj = this.getObj('paraGroup');
		var p = location.href.split('#')[1]; //ページ内リンクが指定されていたらそれを取得
		if( p && p!="calendar"){//アンカーリンクは、条件から外す
			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';
		}

		//選択されたページのページグループを設定
		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);
		}

		//ページングを生成
		this.createPaging(currentPageGroup);
		
		//設定されたページを表示
		this.showContents(pn);
	}
	
	/* 
	-----------------------------------------------------
		オブジェクト一覧を取得
	-----------------------------------------------------
	*/
	
	this.getObj = function(o){
		//同じクラスをもった要素を検索
		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;
		}
	}

	/* 
	-----------------------------------------------------
		コンテンツ表示
	-----------------------------------------------------
	*/

	this.showContents = function(id){
		//idがnextか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(currentPage == parseInt(id.match(/[0-9]+/))){
			return;
		}
		
		//選択されたページを表示
		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';
					
					//カレントページを書き換え
					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';
				
				//カレントページを書き換え
				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';
					
				}
			}
		}
		
		//選択されたページをハイライト（ページング）
		var pObj = this.getObj('paging');
		
		if(pObj != null){
			
			for(i=0; i<pObj.length; i++){
				
				//リスト内容を取得

				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','');
							
						}
					}
				}
			}
		}
	}
	
	/* 
	-----------------------------------------------------
		ページ生成
	-----------------------------------------------------
	*/
	
	this.createPaging = function( cp ){
		//ページングを生成します。
		if(!cp){
			
			cp = 1;
			
		} else if(cp == 'prevPageGroup'){
			
			if(currentPageGroup <= 1) return; //ページグループが1の場合は処理を抜ける
			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;
			
		}
		
		//分割数を取得
		var cpObj = this.getObj('paraGroup');
		var cpage = cpObj.length;
		
		var pEnd = cp * maxList;
		
		//カレントページグループの最後より総数が少ない場合は、総数をpEndにセット。
		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);
			var st = new Array();/*ページングをテキスト<>（リンクなし）で囲む*/

			/*ページングを囲む*/
			st[0] = document.createTextNode('<');
			st[1] = document.createTextNode('>');

			/*次の、前のページ用*/
			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]);
			}

/*
			//prevを追加
			if(cpage > maxList) ulo.appendChild(g[0]); //分割数が表示数以上の場合はページグループ移動を追加
			ulo.appendChild(g[1]);
*/

				//「<」を追加
				var stfirst = document.createElement('li');
				stfirst.appendChild(st[0]);
				ulo.appendChild(stfirst);

				for(j=pStart; j<=pEnd; j++){
				//li要素を生成
				var o = document.createElement('li');
				
				//a要素を生成
				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を追加
				if(j == pStart){
					o.className = 'currentPage';
				}
				
				o.appendChild(a);
				o.setAttribute('id','p'+j);
				ulo.appendChild(o);
			}

/*
			//nextを追加
			ulo.appendChild(g[2]);
			if(cpage > maxList) ulo.appendChild(g[3]); //分割数が表示数以上の場合はページグループ移動を追加
*/		

			//「>」を追加
				var stlast = document.createElement('li');
				stlast.appendChild(st[1]);
				ulo.appendChild(stlast);	

			//pagingの内容物をクリア
			pObjs[i].innerHTML = '';

			//生成したページング部分を挿入
			pObjs[i].appendChild(ulo);
		}
		
		//カレントページを移動したあとの最小ページへ
		this.showContents('no'+pStart);
		currentPage = pStart;
	}
}