(function(){
// クッキー操作オブジェクト
function Cookie(name){ this.$name = name; var allcookies = document.cookie; if(allcookies == "") return; var cookies = allcookies.split('; '); var cookie = null; for(var i = 0; i<cookies.length; i++){ if(cookies[i].substring(0, name.length+1) == (name + "=")){ cookie = cookies[i]; break;}
}
if(cookie == null) return; var cookieval = cookie.substring(name.length+1); var a = cookieval.split("&"); for(var i = 0; i<a.length; i++)
a[i] = a[i].split(":"); for(var i=0; i<a.length; i++){ this[a[i][0]] = decodeURIComponent(a[i][1]);}
}
Cookie.prototype.store = function(daysToLive, path, domain, secure){ var cookieval = ""; for(var prop in this){ if((prop.charAt(0)=='$') || ((typeof this[prop])=='function'))
continue; if(cookieval != "") cookieval += '&'; cookieval += prop + ':' + encodeURIComponent(this[prop]);}
var cookie = this.$name + '=' + cookieval; if(daysToLive || daysToLive == 0){ cookie += "; max-age=" + (daysToLive*24*60*60);}
if(path) cookie += "; path=" + path
if(domain) cookie += "; domain=" + domain; if(secure) cookie += "; secure"; document.cookie = cookie;}
Cookie.prototype.remove = function(path, domain, secure){ for(var prop in this){ if(prop.charAt(0) != '$' && typeof this[prop] != 'function')
delete this[prop];}
this.store(0, path, domain, secure);}



// 文字拡大縮小機能（縮小なし/拡大1段階）
var Zoom = function(c){
	this.size = [83, 100];
	this.breadcrumbsPd = [8, 6];
	this.defaultIdx = 0;
	this.selectedIdx = 0;
	this.container = c;
	this.cookie = new this.Cookie("fontsize");
	if(this.cookie.sizeIdx){
		this.selectedIdx = this.cookie.sizeIdx;
		this.change();
		this.setBreadcrumbs();
	}
}
Zoom.prototype.up = function(){ if(this.selectedIdx==this.size.length-1) return; this.selectedIdx++; this.change();}
Zoom.prototype.resetZoom = function(){ this.selectedIdx = this.defaultIdx; this.change();}
Zoom.prototype.change = function(){ this.cookie.sizeIdx = this.selectedIdx; this.cookie.store(null, "/"); document.getElementById(this.container).style.fontSize = this.size[this.selectedIdx]+"%"; }
Zoom.prototype.Cookie = Cookie;
Zoom.prototype.setBreadcrumbs = function(){
	var myObj = document.getElementById("breadcrumbs");		
	if(myObj){
		document.getElementById("breadcrumbs").style.paddingTop= this.breadcrumbsPd[this.selectedIdx]+"px";
	}
}

//文字サイズ変更イベントの設定
function setZoomEvent(){
	if(!!document.getElementById("zoomLarge")){
		var zoom = new Zoom('container');
		setFontSizePos();
		
		//set event
		contentsdata.addEvent(document.getElementById("zoomReset"), "click", function(){zoom.resetZoom(); zoom.setBreadcrumbs(); setFontSizePos(); return false;}, false);
		contentsdata.addEvent(document.getElementById("zoomLarge"), "click", function(){zoom.up(); zoom.setBreadcrumbs(); setFontSizePos(); return false;}, false);
	}
	
	function setFontSizePos(){
		var classname = "fontDefault";
		if(zoom.selectedIdx < zoom.defaultIdx){
			classname = "fontSmall";
		} else if(zoom.selectedIdx > zoom.defaultIdx){
			classname = "fontLarge";
		}
		document.getElementById("funcZoom").className = classname;
	}
}




//画像キャプションブロックのサイズ設定
function setCaptionSize(){
	var elems = contentsdata.getElementsByClassName('image', document.body, 'div');
	for(var i=0; i<elems.length; i++){
		var max = 0;
		var target = [];
		var flg = false;
		for(var j=0; j<elems[i].childNodes.length; j++){
			var obj = elems[i].childNodes.item(j);
			if(obj.nodeName.toLowerCase()=='img')
				max = Math.max(max,obj.offsetWidth);
			if(obj.className){
				if(obj.className.match(/caption/)){
					target.push(obj);
					flg = true;
				}
			}
		}
		if(flg && max>0){
			for(idx in target)
				target[idx].style.width = max + 'px';
			elems[i].style.width = max + 'px';
		}
	}
}

//スムーズスクロールのイベント設定
var targetObj;
var posY = 0;
function setSmoothScroll(){
	var elems = document.getElementsByTagName("a");
	var pathname = location.pathname;
	if(pathname.charAt(pathname.length-1) == "/") pathname += 'index.html';
	for(var i=0; i<elems.length; i++){
	var h = elems[i].href;
	if(h.match(/#\w+/)){
	var tmp = h.split("/");
	if(!tmp[tmp.length - 1].match(/.\htm/)) tmp[tmp.length - 1] =
	'index.html'+tmp[tmp.length - 1];
	h = tmp.join("/");
	if(h.indexOf(pathname) -1) elems[i].onclick = startSmoothScroll;
	}
	}
	}
function startSmoothScroll(evt){
	//クリックされたオブジェクトの取得
	var evtObj;
	if(document.all && !window.opera){
		evtObj = event.srcElement;
		event.returnValue = false;
	}
	else{
		evtObj = evt.target;
		evt.preventDefault();
	}
	while(evtObj.nodeName.toLowerCase()!='a'){
		if(!evtObj.parentNode) return false;
		evtObj = evtObj.parentNode;	
	}
		
	//移動先のオブジェクトを取得
	var n = evtObj.href.substr(evtObj.href.lastIndexOf("#")+1);
	var elems=document.all || document.getElementsByTagName("*");
	for(var i=0; i<elems.length; i++){
		if(elems[i].id==n || elems[i].name==n){
			targetObj = elems[i];
			break;
		}
	}
	if(targetObj){		
		//ページサイズ、表示領域サイズを取得
		var ph = getPageHeight();
		var wh = getWindowHeight();
		if(ph<wh) ph = wh;
		
		//イベント発生要素の位置を取得
		var offsetTrail = evtObj;
		posY = 0;
		while(offsetTrail){
			posY += offsetTrail.offsetTop;
			offsetTrail = offsetTrail.offsetParent;
		}
		//ターゲット要素の位置を取得
		offsetTrail = targetObj;
		targetObj.posY = 0;
		while(offsetTrail){
			targetObj.posY += offsetTrail.offsetTop;
			offsetTrail = offsetTrail.offsetParent;
		}
		if(targetObj.posY<0) targetObj.posY = 0;
		if(targetObj.posY>(ph-wh)) targetObj.posY = ph-wh;
		loop();
	}
}
function loop(){	
	//スクロール位置を取得
	scrollY = document.body.scrollTop || document.documentElement.scrollTop;
	//移動量
	var moveY = (targetObj.posY - posY - (posY - scrollY)) / 4;		
	//移動位置
	posY += moveY;
	if((moveY<0 && posY>scrollY) || (moveY>0 && posY<scrollY)) posY = scrollY;
	
	//移動終了
	if(Math.abs(posY-targetObj.posY)<2) {
		scroll(0, targetObj.posY);
		return false;
	}
	//スクロール
	scroll(0, posY);
	setTimeout(loop, 33);
}
function getPageHeight(){
	var ph;
	if(window.innerHeight && window.scrollMaxY)
		ph = window.innerHeight + window.scrollMaxY;
	else if(document.body.scrollHeight>document.body.offsetHeight)
		ph = document.body.scrollHeight;
	else
		ph = document.body.offsetHeight;
	return ph;
}
function getWindowHeight(){
	var wh;
	if(window.innerHeight)
		wh = window.innerHeight;
	else if(document.documentElement && document.documentElement.clientHeight)
		wh = document.documentElement.clientHeight;
	else if(document.body)
		wh = document.body.clientHeight;
	return wh;
}


//ロード時処理
contentsdata.addEvent(window, "load", setZoomEvent);
contentsdata.addEvent(window, "load", setCaptionSize);
contentsdata.addEvent(window, "load", setSmoothScroll);
})();
