/*
 * Pager.js - A jQuery plug-in making pages in an HTML file
 * Programmed by Rik Lomas (http://rikrikrik.com/jquery/pager/)
 * Modified by Keiji Ohno (http://museum.city.kawagoe.saitama.jp/)
 * There was no description of license in the original.
 * And that, I couldn't contact with Author, Rik Lomas.
 * As his other scripts are licensed under the MIT and GPL dual licenses.
 * So I added lines 27-38 and 150-165.
 * If there's any problem, please inform me with e-mail(hakubutsukan@city.kawagoe.saitama.jp).
 */

$.fn.pager = function(clas, options) {
	
	var settings = {		
		navId: 'item',
		navClass: 'nav',
		navAttach: 'prepend',
		highlightClass: 'highlight',
		prevText: '&laquo;',
		nextText: '&raquo;',
//		配列'linkText'は下で定義
//		linkText: null,
		linkWrap: '<div class="linkwrap"></div>',
		height: null
	}
	
	//追加部分。ページ番号を降順にする
	//Start of additional parts by Keiji OHNO
	var itemObj = $("div.item");
	var m = itemObj.length;
	var n = m;	//アイテム数を格納する変数（mとn）。下のfor文でnは不変、mは操作用
	settings.linkText = new Array();	//オブジェクト'settings'の中に配列'linkText'を生成
	for (j=0; j < n; j++){
		settings.linkText[j] = m;
		m--;
	}	//配列'linkText'の各プロパティに数値を降順で格納する
	//追加部分ここまで
	//End of additional parts

	if(options) $.extend(settings, options);
		
	return this.each( function () {
		
		var me = $(this);
		var size;
	  	var i = 0;
		var navid = '#'+settings.navId;
		
		function init () {
			size = $(clas, me).not(navid).size();
			if(settings.height == null) {			
				settings.height = getHighest();
			}
			if(size > 1) {
				makeNav();
				show();
				highlight();
			}			
			sizePanel();
			if(settings.linkWrap != null) {
				linkWrap();
			}
		}
		function makeNav () {		
			var str = '<div id="'+settings.navId+'" class="'+settings.navClass+'">';
			str += '<a href="#" rel="prev">'+settings.prevText+'</a>';
			for(var i = 0; i < size; i++) {
				var j = i+1;
				str += '<a href="#" rel="'+j+'">';
				str += (settings.linkText == null) ? j : settings.linkText[j-1];
				str += '</a>';
			}
			str += '<a href="#" rel="next">'+settings.nextText+'</a>';
			str += '</div>';
			switch (settings.navAttach) {		
				case 'before':
					$(me).before(str);
					break;
				case 'after':		
					$(me).after(str);
					break;
				case 'prepend':
					$(me).prepend(str);
					break;
				default:
					$(me).append(str);
					break;
			}
		}
		function show () {
			$(me).find(clas).not(navid).hide();
			var show = $(me).find(clas).not(navid).get(i);
			$(show).show();
		}		
		function highlight () {
			$(me).find(navid).find('a').removeClass(settings.highlightClass);
			var show = $(me).find(navid).find('a').get(i+1);
			$(show).addClass(settings.highlightClass);
		}

		function sizePanel () {
			if($.browser.msie) {
				$(me).find(clas).not(navid).css( {
					height: settings.height
				});	
			} else {
				$(me).find(clas).not(navid).css( {
					minHeight: settings.height
				});
			}
		}
		function getHighest () {
			var highest = 0;
			$(me).find(clas).not(navid).each(function () {
				
				if(this.offsetHeight > highest) {
					highest = this.offsetHeight;
				}
			});
			highest = highest + "px";
			return highest;
		}
		function getNavHeight () {
			var nav = $(navid).get(0);
			return nav.offsetHeight;
		}
		function linkWrap () {
			$(me).find(navid).find("a").wrap(settings.linkWrap);
		}
		init();
		$(this).find(navid).find("a").click(function () {	//ナビゲーションをクリックしたときの挙動

			if($(this).attr('rel') == 'next') {
				if(i + 1 < size) {
					i = i+1;
				}
			} else if($(this).attr('rel') == 'prev') { 
				if(i > 0) {	
					i = i-1;
				}
			} else {		
				var j = $(this).attr('rel');	
				i = j-1;		
			}
			show();
			highlight();
			return false;
		});
		
		//追加部分。URLの最後に#itemXXXと入れるとその記事を表示
		//同じページの中にリンクを貼る場合は<a>タグに属性onclick="location.href = './hoge.html#item001';location.reload(false);"を追加すること
		function part_display(){
			var currrent_url = document.URL;
			var regex = /#item/;
			
			if(regex.test(currrent_url) == true){	//URLに#itemが含まれていれば
				divided_url = new Array();
				divided_url = currrent_url.split(navid);	//URLを#itemを区切りとして分割し、それぞれを要素とする配列に
				i = n - parseInt(divided_url[1],10);	//divided_url[1]を10進数の数値に変換し、記事の総数から引く
				show();
				highlight();
			}
			return false;
		}
		part_display();
		
	});	
}

//ページ分割を実行
$(function(){
	$("#items").pager("div.item");
});

