//--------------------------------------------------------------
// ELEVATING NAVIGATOR
// Original Script (C) 2001 HP-DESIGN.NET http://hp-design.net/
// Modified by pmakino http://www.sfc.keio.ac.jp/~pmakino/
//
// No reproduction, No republication without written permission.
// 無断転載・配付は禁止です。この著作権表示は消さない事。
//--------------------------------------------------------------

//window.onload= ENInit('LeftBox',0,100,0);
//on page load call tb_init
$('#LeftBox').ready(function(){
	//ENInit('LeftBox',0,	1150,0);
	if($("#LeftBox").size() > 0 ){
		ENInit('LeftBox',0,600);
	}
});

// Browser Checker
function browserCheck(){ 
	this.ver=navigator.appVersion
	this.agent=navigator.userAgent
	this.dom=document.getElementById?1:0
	this.opera6=((this.agent.indexOf("Opera 6")>-1) && this.dom)?1:0;
	this.ie5=((this.ver.indexOf("MSIE 5")>-1) && this.dom && !this.opera6)?1:0; 
	this.ie6r=((this.ver.indexOf("MSIE 6")>-1) && this.dom && (document.compatMode == "BackCompat"))?1:0;
	this.ie6s=((this.ver.indexOf("MSIE 6")>-1) && this.dom && (document.compatMode == "CSS1Compat"))?1:0;
	this.ie7=((this.ver.indexOf("MSIE 7")>-1) && this.dom) ?1:0;
	this.ie8=((this.ver.indexOf("MSIE 8")>-1) && this.dom) ?1:0;
	this.ie4=(document.all && !this.dom)?1:0;
	this.ie=(this.ie4||this.ie5||this.ie6r||this.ie6s)?1:0;
	this.mac=(this.agent.indexOf("Mac")>-1)?1:0;
	this.ns6=(this.dom && (parseInt(this.ver) >= 5)) ?1:0; 
	this.ns4=(document.layers && !this.dom)?1:0;
	this.ns=(this.ns4||this.ns6)?1:0;
	this.bw5=(this.ie5||this.ie6r)?1:0;
	this.bw6=(this.ie6s||this.ns6||this.ie7||this.ie8||this.opera6)?1:0;
	this.bw=(this.ie6r||this.ie6s||this.ie5||this.ns6||this.ie7||this.ie8||this.opera6)?1:0;
	return this;
}

// Global Variables
var ENMarginTop, ENMarginBottom, ENTop;
var ENDivName, ENObject, ENCurrentY;
var OFFSet,OFFSetBottom;

function ENInit(id, mt, mb, tp) // DIVid, margin-top, margin-bottom, position-top,
{
	bw=new browserCheck;
	if (bw.bw) {
		ENDivName = bw.bw5 ? document.all(id) : bw.bw6 ? document.getElementById(id) : 0;
		ENObject = ENDivName.style;
		//ENObject.position = 'relative';
		ENObject.position = 'absolute';
		ENMarginTop = mt ? mt : 0; // 引数mt省略時は0
		ENMarginBottom = mb ? mb : 0; // 引数mb省略時は0
		ENCurrentY = ENTop = tp ? tp : ENDivName.offsetTop; //引数tp省略時は自動取得
		ENSmoothMove();
		//OFSet = ENDivName.getBoundingClientRect().top;
		//(bw.ie6s||bw.ie7||bw.ie8) ? document.documentElement.scrollTop : bw.bw5 ? document.body.scrollTop : (bw.ns6||bw.opera6) ? window.pageYOffset : 0;
		OFFSet = getElementPosition(ENDivName).top;
		BottomElem = bw.bw5 ? document.all('Footer') : bw.bw6 ? document.getElementById('Footer') : 0;
		OFFSetBottom = getElementPosition(BottomElem).top - OFFSet;
		//alert(OFFSetBottom +"←最下層");
	} 
}


function getElementPosition(elem)
{
	// スクロール幅を取得
	var html = document.documentElement;
	var body = document.body;
	var scrollLeft = (body.scrollLeft || html.scrollLeft);
	var scrollTop  = (body.scrollTop || html.scrollTop);

	// 画面内座標を取得
	var pos = getElementScreenPosition(elem);

	// スクロール幅を加算
	var left = pos.left + scrollLeft;
	var top  = pos.top + scrollTop;
	return {left:left, top:top};
}

function getElementScreenPosition(elem)
{
	var html = document.documentElement;
	var rect = elem.getBoundingClientRect();
	var left = rect.left - html.clientLeft;
	var top = rect.top - html.clientTop;
	return {left:left, top:top};
}


function ENSmoothMove()
{
	var winh = (bw.ie6s||bw.ie7||bw.ie8) ? document.documentElement.clientHeight : (bw.ns6||bw.opera6) ? innerHeight : bw.bw5 ? document.body.clientHeight : 0 ;
	var yt = (bw.ie6s||bw.ie7||bw.ie8) ? document.documentElement.scrollTop : bw.bw5 ? document.body.scrollTop : (bw.ns6||bw.opera6) ? window.pageYOffset : 0;
	var divh = ENDivName.offsetHeight;
	var MaxY = OFFSetBottom - divh;
	
	if(yt > OFFSet){yt = yt - OFFSet ;}else{yt = 0;}
	//yt = yt - ENDivName.getBoundingClientRect().top;
	
	//winh = winh - ENMarginBottom;
	
	
	if(yt != ENCurrentY){
			//alert(ENDivName.getBoundingClientRect().top);
			//alert(yt +" --- " +ENCurrentY + " --- " + MaxY);
	}
	
	if (winh >= ENMarginTop + divh + ENMarginBottom) {
		yt = Math.max(yt + ENMarginTop, ENTop);
	} else {
		// 下へ向かう力
		var yt1 = Math.max(yt + ENMarginTop, ENTop);
		
		var f1 = (yt1 > ENCurrentY) ? 1 : 0;
		
		// 上へ向かう力
		//var yt2 = yt - (divh + ENMarginBottom - winh);
		var yt2 = yt;
		if(yt2 >= MaxY){yt2 = MaxY;}
		//yt2 = Math.max(yt2, ENTop);
		var f2 = (yt2 < ENCurrentY) ? 1 : 0;
		// 両方の力が働いている場合は相殺
		if (f1 && f2) yt = ENCurrentY;
		else yt = f2 ? Math.max(yt1, yt2) : Math.min(yt1, yt2);
	}

	if (yt != ENCurrentY) {
		// 目標値に徐々に近づける
		var vy = (yt - ENCurrentY) * 0.20;
		if (Math.abs(vy) < 1) vy = (vy > 0) ? 1 : (vy < 0) ? -1 : 0;
		ENCurrentY += Math.round(vy);
		ENObject.top = ENCurrentY + 'px';
	}
	setTimeout('ENSmoothMove()', 20);
}


// スムーズに戻る
var scrj = 1;
function softScrollBack(){
	if(navigator.appName == "Microsoft Internet Explorer" && document.compatMode == "CSS1Compat"){
		var scdist = document.body.parentNode.scrollTop;
	} else {
		var scdist = document.body.scrollTop;
	}
	if(scrj<50 && scdist){
		scdist = (scdist>2) ? Math.ceil(scdist*.2) : 1;
		scrj++;
		scrollBy(0,-scdist);
		setTimeout("softScrollBack()",20);
	} else {
		scrollTo(0,0);
		scrj = 1;
	}
}
