/*  jquery.pager.plus.js (2008/06/13)
 *
 *  ■文法
 *
 *    $('分割するエリアのID').pager('分割するタグ', {
 *        オプション
 *    });
 *
 *    ※オプションは「,」で区切る。
 *      最後のオプションには「,」をつけない (つけるとIEで動作しない)。
 *
 *  ■オプション
 *
 *    - navNum
 *        表示件数。記述なしの場合、1件。
 *
 *    - navId
 *        ページ送りを表示するエリアのID。
 *
 *    - prevText
 *        前の数件へのリンク文言。記述なしの場合「&laquo;」を表示。
 *
 *    - nextText
 *        次の数件へのリンク文言。記述なしの場合「&raquo;」を表示。
 *
 *    - linkText
 *        ページ数のリンク文言。記述なしの場合、表示しない。
 *        linkText: 'number', とした場合、数字のみを表示。
 *
 *        例) linkText: ['1件目','2件目','3件目','4件目']
 *
 *    - linkWrap
 *        linkTextを囲むタグ。
 *
 *        例) linkWrap: '<p></p>'
 *
 *    - height
 *        分割するエリアの高さ。記述なしの場合、高さ合わせはしない。
 *        height: 'auto', とした場合、自動で高さを合わせる。
 *        表示件数が1件のとき、数値 + 単位でも指定可。
 *
 *        例) height: '120px'
 *
 *---------------------------------------------------------------------------*/


/* Setting
-----------------------------------------------------------------------------*/

$(function(){
	$('#pagerMain').pager('div', {
		navNum: 20,
		navId: "pager"
	});
	$("#pager img").hover(
		function(){ this.src = this.src.replace("_off.gif","_on.gif"); },
		function(){ this.src = this.src.replace("_on.gif","_off.gif"); }
	);
});


/* Core
-----------------------------------------------------------------------------*/

$.fn.pager = function(clas, options) {
	
	var settings = {
		navNum: 1,
		navId: 'nav',
		navClass: 'nav',
		navAttach: 'append',
		highlightClass: 'highlight',
		prevText: '&laquo;',
		nextText: '&raquo;',
		linkText: null,
		linkWrap: null,
		height: null
	}
	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 == "auto") {
				settings.height = getHighest();
			}
			if(size > settings.navNum) {
				makeNav();
				show();
				highlight();
			}
			if(settings.height != null) {
				sizePanel();
			}
			if(settings.linkWrap != null) {
				linkWrap();
			}
		}
		function makeNav () {		
			var str = '<ul id="'+settings.navId+'" class="'+settings.navClass+'">';
			str += '<li class="prev"><a href="#header" rel="prev"><img class="hover" src="/common/image/pager_prev_off.gif" alt="Prev" width="53" height="21" /></a></li>';
			for(var i = 0; i < size/settings.navNum; i++) {
				var j = i+1;
				if(settings.linkText){
					str += '<a href="#" rel="'+j+'">';
					str += (settings.linkText == 'number') ? j : settings.linkText[j-1];				
					str += '</a>';
				}
			}
			str += '<li class="next"><a href="#header" rel="next"><img class="hover" src="/common/image/pager_next_off.gif" alt="Next" width="52" height="21" /></a></li>';
			str += '</ul>';
			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();
			for(var n = i; n < i + settings.navNum; n++) {
				if(n < size) {
					show[n] = $(me).find(clas).not(navid).get(n);
					$(show[n]).show();
				}
			}
		}
		function highlight () {
			$(me).find(navid).find("a").removeClass(settings.highlightClass).find('img').attr("src", function(){ this.src = this.src.replace("_none.","_off.") });
			if(settings.linkText) {
				var show = $(me).find(navid).find('a').get(Math.ceil(i/settings.navNum)+1);
				$(show).addClass(settings.highlightClass);
			}
			if(i == 0){
				$(navid + ' li.prev')
					.find("a").addClass(settings.highlightClass)
					.find("img").attr("src","/common/image/pager_prev_none.gif");
			}
			if(i+settings.navNum >= size){
				$(navid + ' li.next')
					.find("a").addClass(settings.highlightClass)
					.find("img").attr("src","/common/image/pager_next_none.gif");
			}
		}

		function sizePanel () {
			if (settings.height){
				if (settings.navNum != 1){
					var diffheight = n = 0;
					$(me).find(clas).not(navid).each(function () {
						n++;
						diffheight += $(this).height();
						if(n%settings.navNum == 0 || n == size) {
							diffheight = settings.height - diffheight + $(this).height();
							if($.browser.msie) {
								$(this).css( {
									height: diffheight + "px"
								});	
							} else {
								$(this).css( {
									minHeight: diffheight + "px"
								});
							}
							diffheight = 0;
						}
					});
				} else {
					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;
			var pendinghighest = n = 0;
			$(me).find(clas).not(navid).each(function () {
				n++;
				pendinghighest += this.offsetHeight;
				if(n%settings.navNum == 0) {
					if(pendinghighest > highest) {
						highest = pendinghighest;
					}
					pendinghighest = 0;
				}
			});
			return highest;
		}
		function getNavHeight () {
			var nav = $(navid).get(0);
			return nav.offsetHeight;
		}
		function linkWrap () {
			if(settings.linkText) {
				$(me).find(navid+" > a").wrap(settings.linkWrap);
			}
		}
		init();
		$(this).find(navid).find("a").click(function () {

			if($(this).attr('rel') == 'next') {
				if(i + settings.navNum < size) {
					i = i+settings.navNum;
				}
			} else if($(this).attr('rel') == 'prev') {
				if(i-settings.navNum >= 0) {
					i = i-settings.navNum;
				}
			} else {
				var j = $(this).attr('rel');
				i = (j-1)*settings.navNum;
			}
			show();
			highlight();
		});
	});	
}