(function($){

	// ページネーションの分割
	var splitN = 15;
	
	var hash = window.location.hash,
		pageN = hash.indexOf('page') != -1 ? (parseInt( hash.replace(/#page/,'') ) -1) : 0,
		pageS = 0;
		
	function hashLink ( element ){
		// 画面を遷移
		var target = element.attr('href');
		if(pageN >= 0) target = element.attr('href') +'#page'+ (pageN+1);
		window.location = target;
	}

	function changeList ( element ){
		var k = element.parent().attr('class');
		if(k === 'old'){
			if(pageN <= pageS && pageN !== pageS) {
				pageN++;
			}
		} else {
			if(pageN <= pageS && pageN !== 0) {
				pageN--;
			}
		}
		changeControls();
		$('#sideNav dl.active').removeClass('active');
		$('#sideNav dl:eq('+ pageN +')').addClass('active');
		window.location.hash = '#page'+ (pageN+1);
	}

	function changeControls (  ){
		if(pageN <= pageS && pageN !== pageS) {
			$('#sideNav .controls .old a').removeClass('passive').addClass('active');
		} else {
			$('#sideNav .controls .old a').removeClass('active').addClass('passive');
		}
		if(pageN <= pageS && pageN !== 0) {
			$('#sideNav .controls .new a').removeClass('passive').addClass('active');
		} else {
			$('#sideNav .controls .new a').removeClass('active').addClass('passive');
		}
	}

	function buildPages (  ){
		
		var $list = $('#sideNav .pages dl > *'),
			keeper,
			keeper1='',
			keeper2='',
			counter_dt = 0,
			counter_dd = 0,
			flag = 0,
			size_dl = $list.length,
			size_dt = $('#sideNav .pages dl > dt').length,
			size_dd = $('#sideNav .pages dl > dd').length,
			dds = '';
			html = '<dl>';
		
		$list.each(function(i){
			var tag = $(this).get(0).tagName.toLowerCase();
			if(tag === 'dt'){
				counter_dt++;
				if (keeper1==='') {
					keeper1 = $(this).html();
					keeper = '<dt>'+ keeper1 +'</dt>';					
				} else {
					keeper2 = $(this).html();
					keeper = '<dt>'+ keeper1 + ' - ' + keeper2 +'</dt>';
				}					
			}

			if(tag === 'dd'){
				counter_dd++;
				dds += '<dd>'+ $(this).html() +'</dd>';
				if((counter_dd) % splitN === 0 && i !== 0 && (i+1) !== size_dl){
					html += keeper;
					html += dds;
					html += '</dl><dl>';
					flag = i+1;
					if (keeper2!==''){
						keeper1 = keeper2;
						keeper2='';						
					}
					keeper = '<dt>'+ keeper1 +'</dt>';
					dds ='';
				}
				if((counter_dd) % splitN === 1){
					if (keeper2!==''){
						keeper1 = keeper2;
						keeper2='';						
					}
					keeper = '<dt>'+ keeper1 +'</dt>';
				}
			}

			// finish
			if((i+1) === size_dl){
				html += keeper;
				html += dds;
				html += '</dl>';
				$('#sideNav .pages').html(html)
				pageS = $('#sideNav .pages dl').length -1;
				$('#sideNav dl:eq('+ pageN +')').addClass('active');
				// ナビゲーションを表示
				setTimeout(function(){
					$('html').removeClass('js');
				}, 100);
			}
		});
	}

	// ナビゲーション構築前に表示させないためのトリック
	$('html').addClass('js');

	$(function(){
		$('#sideNav').addClass('pagination');
		buildPages();
		$('#sideNav').append('<div class="controls"><p class="new"><a href="#">New</a></p><p class="old"><a href="#">Old</a></p></div>');
		var $links = $('#sideNav a, .ngg-gallery-list a');
		var $controls = $('#sideNav .controls a');
		changeControls();
		
		$links.bind('click', function(event){
			event.preventDefault();
			hashLink($(this));
			return false;
		});
		
		$controls.bind('click', function(event){
			changeList($(this));
			return false;
		});
	});		
	
})(jQuery);

