//scroll_menu.js

var speed = 20;
var steps = 10;
var stepsFF = 15; // FF用
var current_pos;  // 対象要素の現在のoffsetTop値
var limiter;      // 下降移動時のストッパー位置
var moveObj;

// FFなら移動量を増やす（IEの速度に合わせる）
if (navigator.appName.indexOf("Microsoft") < 0) {
   steps = stepsFF;
}

// スクロール量を求める
function GetScrollSize () {
	this.X = (window.pageXOffset) ? window.pageXOffset :
			 (document.documentElement.scrollLeft) ? document.documentElement.scrollLeft :
			 (document.body) ? document.body.scrollLeft :
			 undefined;

	this.Y = (window.pageYOffset) ? window.pageYOffset :
			 (document.documentElement.scrollTop) ? document.documentElement.scrollTop :
			 (document.body) ? document.body.scrollTop :
			 undefined;
	return this;
}

function GoScroll () {
	var size = new GetScrollSize();
	var temp_steps = steps;
	var distance;
	
	distance = Math.abs(size.Y - current_pos);
	
	// スクロールの移動量が大きい場合スピードアップして追いかける
	if(moveObj.offsetHeight * 2 < distance) {
		temp_steps = steps * 10;
	}
	
	// 目的地に近づいたら減速する
	if(distance < 25) {
		temp_steps = 1;
	}
	
	// body（親要素）の下限を超えて移動させない
	if(limiter <= size.Y) {
		size.Y = limiter;
		current_pos   = limiter;
	}

	if(current_pos > size.Y) {
		current_pos -= temp_steps; // 上昇
	} else if(current_pos < size.Y) {
		current_pos += temp_steps; // 下降
	}

	if(distance != 0) {
		moveObj.style.top = current_pos + "px";
	}
}

function initScrollMenu (e) {
	var i;
	var ii;
	var pos = new GetScrollSize();
	
	moveObj = document.getElementById("sideNavi");
	moveObj.style.position = "absolute";
	moveObj.style.left     = "0px";
	current_pos = pos.Y;
	moveObj.style.top = current_pos + "px";
	
	setInterval("GoScroll()", speed);

	limiter = document.body.offsetHeight - (moveObj.offsetHeight + 250);
}

function addListener (elem, eventType, func, cap) {
	if (elem.addEventListener) {
		elem.addEventListener(eventType, func, cap);
	} else if (elem.attachEvent) {
		elem.attachEvent('on' + eventType, func);
	} else {
		window.alert("Sorry... Please use Internet Explorer or Firefox.");
		return false;
	}
}

addListener(window, 'load', initScrollMenu, false);
