/* require cookies.js */

var ViewMode = 1;

var WindowHeight = 0;
var PageHeight = 0;

var PositionList = new Array();
var PositionSaList = new Array();
var PositionSaList2 = new Array();
var ListFirstNum = 0;
var ListLastNum = 0;

var TargetTop = 0;
var CurrentLeft = 0;
var CurrentTop = 0;

var ScrollerOnmove = false;
var ScrollStartTime = 0;
var ScrollEndTime = 0;
var ScrollStartTop = 0;
var ScrollRyo = 0;
var ScrollTime = 0;
var ScrollScale = 210;
var StandardScrollLength = 864;

var NowTime = 0;
var Keika = 0;
var KeikaWariai = 0;
var NowScrollTop = 0;

function SetFirstAndLastNum(){	
	for(i = 1; ListFirstNum === 0 || ListLastNum === 0; i++){
		if(ListFirstNum === 0 && document.getElementById('Page' + i)){
			ListFirstNum = i;
		}else if(ListFirstNum && ListLastNum === 0 && !document.getElementById('Page' + (i + 1))){
			ListLastNum = i;
		}
	}
	
	// window.status = 'ListFirstNum' + ListFirstNum + ' ListLastNum' + ListLastNum;
}

function SetPositionList(){
	if(window.innerHeight){
		WindowHeight = window.innerHeight;
	}else if(document.documentElement.clientHeight){
		WindowHeight = document.documentElement.clientHeight;
	}
	PageHeight = document.getElementById('Page' + ListFirstNum).offsetHeight;
	
	var tempMode;
	
	CurrentTop = document.body.scrollTop || document.documentElement.scrollTop;
	
	PositionList.length = 0;
	if(WindowHeight < PageHeight / 2){
		// 超小画面用1/3ビュー
		ViewMode = 3;
		for(i = 0; i + ListFirstNum <= ListLastNum; i++){
			PositionList[i * 3]     = GetYPositionTopById('Page' + (i + ListFirstNum));
			PositionList[i * 3 + 1] = GetYPositionById('Page' + (i + ListFirstNum));
			PositionList[i * 3 + 2] = PositionList[i * 3] + PageHeight - WindowHeight;
			
			if(i + ListFirstNum === ListLastNum){
				PositionList[(i + 1) * 3] = GetYPositionById('NextNavigation');
			}
		}
	}else if(WindowHeight < PageHeight * 0.9234){
		// 小画面用ハーフビュー
		ViewMode = 2;
		for(i = 0; i + ListFirstNum <= ListLastNum; i++){
			PositionList[i * 2]     = GetYPositionTopById('Page' + (i + ListFirstNum));
			PositionList[i * 2 + 1] = PositionList[i * 2] + PageHeight - WindowHeight;
			
			if(i + ListFirstNum === ListLastNum){
				PositionList[(i + 1) * 2] = GetYPositionById('NextNavigation');
			}
		}
	}else{
		// 大画面用フルビュー
		ViewMode = 1;
		for(i = 0; i + ListFirstNum <= ListLastNum; i++){
			PositionList[i] = GetYPositionById('Page' + (i + ListFirstNum));
			if(i + ListFirstNum === ListLastNum){
				PositionList[i + 1] = GetYPositionById('NextNavigation');
			}
		}
	}
	PositionList.unshift(0);
	
	if(ListFirstNum != ListLastNum){
		StandardScrollLength = Math.abs(GetYPositionTopById('Page' + (ListFirstNum + 1)) - GetYPositionTopById('Page' + ListFirstNum));
	}
	
	//window.status = PositionList.join(", ");
}
window.onresize = SetPositionList;

function GetYPositionById(id){
	var Object = document.getElementById(id);
	if(!Object){ return 0; }
	
	var Recty = Object.getBoundingClientRect();
	//return ObjectTop - parseInt((WindowHeight - Object.offsetHeight) / 2);
	return Math.round(Recty.top + CurrentTop - (WindowHeight - Object.offsetHeight) / 2);
}
function GetYPositionTopById(id){
	var Object = document.getElementById(id);
	if(!Object){ return 0; }
	
	var Recty = Object.getBoundingClientRect();
	//return ObjectTop;
	return Math.round(Recty.top + CurrentTop);
}

function GoNextButtonByClick(obj){
	if(!obj){ return true; }
	
	if(StandardScrollLength < WindowHeight && ViewMode == 1){
		CurrentTop = document.body.scrollTop || document.documentElement.scrollTop;
		
		obj = obj.offsetParent;
		var objTop = 0;
		var ele = obj;
		while(ele){
			objTop += ele.offsetTop;
			ele = ele.offsetParent;
		}
		var objPoint = objTop - parseInt((WindowHeight - obj.offsetHeight) / 2);
		var objCenter = objTop + PageHeight / 2;
		
		if(objPoint < CurrentTop - StandardScrollLength + 10 && objTop < CurrentTop){
			return FindCurrentAndGoNext(true);
		}else{
			return FindCurrentAndGoNext();
		}
	}else{
		return FindCurrentAndGoNext();
	}
}

function FindCurrentAndGoNext(itsback){
	if(ScrollerOnmove){
		return false;
	}
	ScrollerOnmove = true;
	
	CurrentLeft = document.body.scrollLeft || document.documentElement.scrollLeft;
	CurrentTop = document.body.scrollTop || document.documentElement.scrollTop;
	
	if(itsback){
		for(i = PositionList.length; 0 <= i; i--){
			if(CurrentTop - 10 > PositionList[i]){
				TargetTop = PositionList[i];
				break;
			}
		}
	}else{
		for(i = 0; PositionList.length > i; i++){
			if(CurrentTop + 10 < PositionList[i]){
				TargetTop = PositionList[i];
				break;
			}
		}
	}
	
	ScrollStartTime = (new Date()).getTime();
	
	ScrollStartTop = CurrentTop;
	ScrollRyo = TargetTop - ScrollStartTop;
	
	ScrollTime = Math.sqrt(Math.abs(ScrollRyo) / StandardScrollLength) * ScrollScale;
	
	Scrolling();
	
	return false;
}

function Scrolling(){
	NowTime = (new Date()).getTime();
	Keika = NowTime - ScrollStartTime;
	KeikaWariai = Keika / ScrollTime;
	
	if(KeikaWariai < 0.5){
		KeikaWariai = 2 * KeikaWariai * KeikaWariai;
	}else{
		KeikaWariai = -2 * (KeikaWariai - 1) * (KeikaWariai - 1) + 1;
	}
	
	NowScrollTop = ScrollStartTop + ScrollRyo * KeikaWariai;
	if(Keika < ScrollTime){
		window.scrollTo(CurrentLeft, NowScrollTop);
		setTimeout(Scrolling, 5);
	}else{
		window.scrollTo(CurrentLeft, TargetTop);
		ScrollerOnmove = false;
	}
}

var ShiftMode = false;

function EnableKeyinputToScroll(){
	if(window.addEventListener){
		window.addEventListener("keydown", keyDowned, false);
		window.addEventListener("keyup", keyUpped, false);
		window.addEventListener("keypress", keyPressed, false);
	}else{
		window.onkeydown = keyDowned;
		window.onkeyup = keyUpped;
		window.onkeypress = keyPressed;
	}
}

function keyDowned(event){
	if(event.keyCode == 16){
		ShiftMode = true;
		//ScrollScale = 2100;
	}else if(event.keyCode == 32 || event.keyCode == 39 || event.keyCode == 40 || event.keyCode == 98 || event.keyCode == 102 || event.keyCode == 34){
		event.preventDefault();
		event.stopPropagation();
		if(ScrollerOnmove == false){
			FindCurrentAndGoNext();
		}
	}else if(event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 100 || event.keyCode == 104 || event.keyCode == 33){
		event.preventDefault();
		event.stopPropagation();
		if(ScrollerOnmove == false){
			FindCurrentAndGoNext(true);
		}
	}
	//window.status = event.keyCode;
}
function keyUpped(event){
	if(event.keyCode == 32 || event.keyCode == 33 || event.keyCode == 34 || event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40 || event.keyCode == 98 || event.keyCode == 102 || event.keyCode == 100 || event.keyCode == 104){
		event.preventDefault();
		event.stopPropagation();
	}else if(event.keyCode == 16){
		ShiftMode = false;
		//ScrollScale = 210;
	} 
}
function keyPressed(event){
	if(event.keyCode == 32 || event.keyCode == 33 || event.keyCode == 34 || event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40 || event.keyCode == 98 || event.keyCode == 102 || event.keyCode == 100 || event.keyCode == 104){
		event.preventDefault();
		event.stopPropagation();
	}
}