//<a href="#hoge">〜</a>の際に自動でスクロール移動
//別ページのアンカー箇所に移動する場合は<a href="hoge.html#hoge" rel="noscroll">〜</a>とする
//

//動作設定
	var slt = 10;         //スクロール速度（移動コマ数）
	var rep = 10;         //スクロール速度(コマ移動速度)
	var top = "container";//ページの先頭のid属性
	var fix = 20;         //スクロール移動時に、xピクセル上まで移動する
	var act = 0;          //リンク元のrel属性が"scroller"の箇所のみに適応

//scroller.jsの設置
function setScroller(){
	//aタグ取得
		var elms = document.getElementsByTagName("a");

	//ページ内リンクにonClick属性追加（aタグが0個の場合は終了）
	for (i = 0; i < elms.length; i++){
		var targetTag = elms[i];

		//設置対象タグ特定と設置
		var href = targetTag.getAttribute('href');
		var rel = targetTag.getAttribute('rel');

		//actが1かつ、rel属性が scroller の場合のみ設置
		if(rel != "scroller" && act == 1){
			href = null;
		}

		//rel属性が noscroll の時はスクロール移動しない
		if(rel == "noscroll"){
			href = null
		}

		if(href && href.match(/#/)){
			setEventHandler(targetTag,"onclick",'scroller("'+ href +'");return false');
		}
	}
}

//座標計算
function scroller(tar){
	//ターゲットのID名取得
	tar.match(/#/);
	tarID = RegExp.rightContext;

	var tarpos = 0; //ウィンドウ最上部からターゲット（移動先）までの距離
	var winpos = 0; //ウィンドウ最上部から現在のウィンドウ上部までの距離

	//tarpos
		//ターゲットがid属性の場合
		if(document.getElementById(tarID)){
			tar = document.getElementById(tarID);
			tarpos = getOffsetTop(tar);
		}
		//ターゲットがname属性の場合
		if(document.getElementsByName(tarID)[0]){
			tar = document.getElementsByName(tarID)[0];
			tarpos = getOffsetTop(tar);
		}
		if(tarID == top){tarpos = -1;}
		tarpos = tarpos - fix;

	//winpos
		winpos = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;
		if(winpos == null){winpos = 0;}

	//移動距離
	dist = tarpos - winpos;
	if(!document.getElementById(tarID) && !document.getElementsByName(tarID)[0]){dist = 0}//移動箇所IDが不明な場合は移動しない

	move();
}

// 要素のy座標取得
function getOffsetTop(targetElement){
	var parentTag = targetElement.offsetParent.tagName.toLowerCase();
	if(parentTag == "body" || parentTag == "html"){
		return targetElement.offsetTop + targetElement.offsetParent.offsetTop;
	}else{
		return targetElement.offsetTop + getOffsetTop(targetElement.offsetParent);
	}
}

// スクロール実行
function move(){
	//移動距離を分割率で割る
	var pdist = Math.floor(dist / slt);

	//上記座標へ相対移動
	window.scrollBy(0, pdist);

	//移動距離が1より大きい限りこの処理を繰り返す
	if(Math.abs(dist -= pdist) > 1){
		setTimeout("move()" , rep);
	}
}

//イベントハンドラの設定
function setEventHandler(target,handler,event){
	if(document.all && !window.opera){
		target.setAttribute(handler,new Function(event));
	}else{
		target.setAttribute(handler,event);
	}
}

// 複数onload対応
function addOnloadEvent(func){
	var oldonload = window.onload;
	if(typeof oldonload != "function"){
		window.onload = func;
	}else{
		window.onload = function(){
			oldonload();
			func();
		}
	}
}
addOnloadEvent(setScroller);


