/************************************************
 * 指定領域スクロールJS
 ************************************************/
function ScrollArea(target,parent,relative,tween) {
	var self = this;
	this._interval = 500;
	this._marginTop = 0;
	this._marginBottom = 0;
	this._tween = true;
	this._timerId = null;

	this.onLoadEvent = function(){
		if (this.Position.init()) {this.onTimerEvent();}
	}
	this.onTimerEvent = function(){
		var delay = (this.Position.checkUpdate(this,this._tween))?20:this._interval;
		setTimeout(function(){self.onTimerEvent(this)},delay);
	}
	this.createPosition = function(target, parent, relative){
		var targetArea = new Object();
		var parentArea = new Object();
		var relativeArea = new Object();
		targetArea._element = target;
		parentArea._element = parent;
		relativeArea._element = relative;
		return {
			init:function(){
				targetArea._object = document.getElementById(targetArea._element) || null;
				parentArea._object = (parentArea._element)?document.getElementById(parentArea._element):targetArea._object.parentNode;
				relativeArea._object = (relativeArea._element)?document.getElementById(relativeArea._element):null;
				return (targetArea._object&&parentArea._object);
			},
			checkUpdate:function(target,tween){
				targetArea.top = this.getOffset(targetArea._object);
				parentArea.top = this.getOffset(parentArea._object);
				var scrollNew = (Math.max(this.getScrollTop(),(relativeArea._object)?this.getOffset(relativeArea._object)+relativeArea._object.offsetHeight:parentArea.top)+target._marginTop) || 0;
				scrollNew = Math.min((parentArea.top+this.getHeight(parentArea._object))-(targetArea._object.offsetHeight+target._marginBottom),scrollNew);
				if (scrollNew != targetArea.top) {
					targetArea._object.style.top = ((tween)?targetArea.top+this.getTween(targetArea.top,scrollNew):scrollNew)+'px';
					return true;
				}
				return false;
			},
			getTween:function(before, after){
				var plus = (after>before)?1:-1;
				return Math.round((after-before)*0.314)+plus;
			},
			getScrollTop:function(){
				return document.body.scrollTop || document.documentElement.scrollTop || 0;
			},
			getHeight:function(target){
				return target.offsetHeight || document.documentElement.scrollHeight || document.body.scrollHeight || 0;
			},
			getOffset:function(target){
				var offTop = target.offsetTop;
				while (target = target.offsetParent) {
					offTop += target.offsetTop;
				}
				return offTop;
			}
		}
	}
	if (tween != null) {this._tween = tween;}
	this.Position = this.createPosition(target, parent, relative);
}