/*
 * 対象の要素までなめらかにページ内スクロールするためのJavaScriptです。
 * 
 * 【使用例】
 * 
 * ① ページのトップ（一番上）までスクロールする時
 * 
 * <a href="#top" onclick="retrurn backToTop();">ページのトップへ</a>
 * 
 *  → 引数は必要ありません。強制的にy座標=0まで移動します。
 *  → JavaScriptが無効な場合の対策として、a要素のhref属性には、"#"か任意のID（例：#top）を記入してください。
 * 
 * 
 * ② ページ内の特定要素までスクロールする時
 * 
 * <a href="#title01" onclick="retrurn moveTo('title01');">要素1へ</a>
 * 
 *  → 引数にはスクロールしたい要素のID名を指定してください。
 *  → JavaScriptが無効な場合の対策として、a要素のhref属性には、対象要素のIDを記入してください。
 * 
 * 
 */

// スクロールする時の間隔（ミリ秒）
var scrollSec = 25;

var pageScrollTimer = null;
var isIE = false;

if (navigator.appName.indexOf("Microsoft Internet Explorer", 0) == 0) {
	isIE = true;
}

/* 
 * ページのトップ部分までスクロールする
 */
function backToTop() {
	scrollPage(0);
	return false;
}

/* 
 * idが指定されたエレメントまでスクロールする
 */
function moveTo(id) {
	var el = document.getElementById(id);
	var targetTop = el.offsetTop;
	if (isIE) {
		while ((el = el.offsetParent) != null) {
			targetTop += el.offsetTop;
		}
	}

	var winHeight;
	if (document.documentElement.clientHeight) {
		winHeight = document.documentElement.clientHeight;
	} else if (window.innerHeight) {
		winHeight = window.innerHeight;
	}
	var scrollHeight = document.documentElement.scrollHeight;

	if (scrollHeight - targetTop < winHeight) {
		targetTop = scrollHeight - winHeight;
	}

	scrollPage(targetTop);

	return false;
}

/* 
 * スクロール処理
 */
function scrollPage(targetTop, prevTop) {
	if (pageScrollTimer) {
		clearTimeout(pageScrollTimer);
		pageScrollTimer = null;
	}
	var nowLeft = document.body.scrollLeft || document.documentElement.scrollLeft;
	var nowTop = document.body.scrollTop || document.documentElement.scrollTop;

	if (prevTop) {
		if (nowTop == prevTop) {
			return;
		}
	}

	var sabunX = 0 - nowLeft;
	var sabunY = targetTop - nowTop;

	// 移動位置（X座標）を算出する
	var setLeft;
	if (Math.abs(sabunX) == 1) {
		setLeft = nowLeft + sabunX;
	} else {
		setLeft = nowLeft + Math.floor(sabunX / 2);
	}

	// 移動位置（Y座標）を算出する
	var setTop;
	if (Math.abs(sabunY) == 1) {
		setTop = nowTop + sabunY;
	} else {
		setTop = nowTop + Math.floor(sabunY / 2);
	}

	if (setLeft == 0 && setTop == targetTop) {
		clearTimeout(pageScrollTimer);
		pageScrollTimer = null;
	} else {
		window.scrollTo(setLeft, setTop);
		pageScrollTimer = window.setTimeout("scrollPage(" + targetTop + ", " + nowTop + ")", scrollSec);
	}
}

