// 【exscroll.js】
// copyright (c)2002-2008 econosys system all rights reserved. http://www.econosys.jp/system/
// require jQuery.js
//
// Version 1.02 IE 7 対応
// Version 1.10 jQuery必須。EVENT自動登録
// Version 1.20 bytefx切り離し
// Version 1.30 <a href="#" onclick="....."> のリンクには動作しないように。
// Version 1.31 Safari 3 での不具合を修正
// Version 1.40 速さオプションを変更可能に
// Version 1.41 #id が存在しないときの挙動を選択可能に
// Version 1.42 IE6エラー回避

// usage
// # STEP1
// <script type="text/javascript" src="../js/lib/jquery-pack.js"></script>
// <script type="text/javascript" src="../js/scroll_1.2.js"></script>

// # STEP2
// <a name="top" id="top"> をhtml内に記述すること（idを付け忘れないように）


// SET Option

// 0 〜 10
var exscroll_move_min   = 2;
// 0.01 〜 0.99
var exscroll_move_speed = 0.15;
// 'none' or 'alert' or 'pagetop'
var exscroll_dom_err_flag = 'pagetop';

// SET jQuery
jQuery.noConflict();
var j$ = jQuery;

// DOM ready
j$(document).ready(function(){
	j$('a[@href*="#"]', this).click(function(e){
		parts = this.href.split('#');
		id_name = parts[1];
		if (id_name){
			ECOpagemove(id_name);
		}
		return false;
	});
});


function ECOGetVersion(){
	if (navigator.userAgent.indexOf('Mac',0) != -1){ useos='Mac';}
	else if (navigator.userAgent.indexOf('Win',0) != -1){ useos='Win';}
	else { useos='other'; }
	if (navigator.userAgent.indexOf('MSIE 3.',0) != -1){usebrowser='IE3';}
	else if (navigator.userAgent.indexOf('MSIE 4.',0) != -1){usebrowser='IE4';}
	else if (navigator.userAgent.indexOf('MSIE 5.',0) != -1){usebrowser='IE5';}
	else if (navigator.userAgent.indexOf('MSIE 6.',0) != -1){usebrowser='IE6';}
	else if (navigator.userAgent.indexOf('MSIE 7.',0) != -1){usebrowser='IE7';}
	else if (navigator.userAgent.indexOf('MSIE',0) != -1){usebrowser='OTHER_IE';}
	else if (navigator.userAgent.indexOf('Netscape/7.',0) != -1){usebrowser='NN7';}
	else if (navigator.userAgent.indexOf('Netscape/6.',0) != -1){usebrowser='NN6';}
	else if (navigator.userAgent.indexOf('Mozilla/4.',0) != -1){usebrowser='NN4';}
	else if (navigator.userAgent.indexOf('Safari',0) != -1){usebrowser='Safari_IE';}
	else if (navigator.userAgent.indexOf('Firefox',0) != -1){usebrowser='Firefox_NN';}
	else if (navigator.userAgent.indexOf('Gecko',0) != -1){usebrowser='other_Gecko_NN';}
	else {usebrowser='other_IE';}
	return (usebrowser);
}


function ECOpagemove(Y){

	if (Y.match(/[a-zA-Z]/)){
		var dom_obj = document.getElementById(Y);
		if (! dom_obj){
			     if (exscroll_dom_err_flag == 'none')   { return; }
			else if (exscroll_dom_err_flag == 'alert')  { alert('exscroll.js : cannot find #'+Y); return; }
			else if (exscroll_dom_err_flag == 'pagetop'){ Y = 0; }
		}
		else{
			Y = ECOGetPosition(dom_obj).y;
		}
	}

	var nowY;

	ua = ECOGetVersion();
	if ( ua.indexOf('Safari',0)!= -1){
		nowY = document.body.scrollTop;
	}
	else if ( ua.indexOf('IE',0)!= -1){ 
		windowY = document.body.clientWidth;
		if ( document.compatMode == 'CSS1Compat'){ nowY = document.documentElement.scrollTop; }
		else{ nowY = document.body.scrollTop; }
	}
	else if ( ua.indexOf('NN',0)!= -1){
		nowY =    window.pageYOffset;
		windowY = window.innerWidth;
	}
	if (Y < nowY){ setTimeout("Lscroll("+Y+","+nowY+")",20); }
	else{ setTimeout("Rscroll("+Y+","+nowY+")",8); }
}


function Lscroll(Y,nowY){
	if (Y >= nowY){ return; }
	moveY = Math.ceil( (nowY - Y) * exscroll_move_speed)+ exscroll_move_min;
	if (Y >= (nowY-moveY)){ moveY = nowY-Y; }
	scrollBy(0,-moveY);
	nowY = nowY-moveY;
	setTimeout("Lscroll("+Y+","+nowY+")", 20);
}


function Rscroll(Y,nowY){
	if (Y <= nowY){ return; }
	moveY = Math.ceil( (Y - nowY) * exscroll_move_speed)+ exscroll_move_min;
	if (Y <= (nowY+moveY)){ moveY = Y-nowY;}
	scrollBy(0,moveY);
	nowY = nowY+moveY;
	setTimeout("Rscroll("+Y+","+nowY+")", 20);
}


function ECOGetPosition(element){
	if (! element){ return false; }
	var	position = {x:element.offsetLeft, y:element.offsetTop};
	while(element = element.offsetParent){
		position.x += element.offsetLeft;
		position.y += element.offsetTop;
	};
	return position;
}


