/* [otohane.net]
 * Summary: common script
 * LastModified: 2009-06-09
 * This script requires jquery.js
 */

/*----------------------------------------------------------------------------
 Global Object
----------------------------------------------------------------------------*/
var otohane;
if(!otohane) otohane = {};

/*----------------------------------------------------------------------------
 Utilities
----------------------------------------------------------------------------*/
otohane.util = {
	/* Cookie制御 ----------------------*/
	createCookie: function(name,value) {
		var expires = 'expires=Tue, 1-Jan-2030 00:00:00 GMT';
			//2030年1月1日（火）を有効期限に指定（無期限）
		document.cookie = name + '=' + value + '; ' + expires + '; path=/';
	},
	readCookie: function(name) {
		var nameEQ = name + "=";
		var cItem = document.cookie.split(";");
		for(var i=0, l=cItem.length; i<l; i++) {
			var c = cItem[i];
			while (c.charAt(0) == " ") {c = c.substring(1, c.length);}
			if (c.indexOf(nameEQ) == 0) {return c.substring(nameEQ.length, c.length);}
		}
		return null;
	}
}

/* [文字サイズ変更]
----------------------------------------*/
otohane.fontSize = {
	setStyle: function(fValue) {
		var btn = $("#fontsize-change a");
		btn.each(function() { this.className = ""; });
		
		switch(fValue) {
			case "L" : var value = "L";  btn[1].className = "cr"; break;
			case "XL": var value = "XL"; btn[2].className = "cr"; break;
			default: var value = "M";   btn[0].className = "cr"; break;
		}
		otohane.util.createCookie("style", value);
		
		document.body.className = this.initClass;
		$(document.body).addClass("fontsize" + value);
	},
	init: function() {
		this.initClass = document.body.className;
		var c = otohane.util.readCookie("style");
		this.setStyle(c);
	},
	setup: function() {
		var c = otohane.util.readCookie("style");
		var s = '<dl>';
		s += '<dt>文字サイズを変更</dt>'
		if(c == "M" || !c) {
			s += '<dd class="m"><a href="#" onclick="otohane.fontSize.setStyle(\'M\'); return false;">標準</a></dd>';
		} else {
			s += '<dd class="m"><a href="#" onclick="otohane.fontSize.setStyle(\'M\'); return false;">標準</a></dd>';
		}
		if(c == "L") {
			s += '<dd class="l"><a href="#" onclick="otohane.fontSize.setStyle(\'L\'); return false;">大</a></dd>';
		} else {
			s += '<dd class="l"><a href="#" onclick="otohane.fontSize.setStyle(\'L\'); return false;">大</a></dd>';
		}
		if(c == "XL") {
			s += '<dd class="xl"><a href="#" onclick="otohane.fontSize.setStyle(\'XL\'); return false;">最大</a></dd>';
		} else {
			s += '<dd class="xl"><a href="#" onclick="otohane.fontSize.setStyle(\'XL\'); return false;">最大</a></dd>';
		}
		s += '</dl>';
		document.write(s);
	}
}

/* set current for [Global Navigation]
----------------------------------------*/
otohane.currentNav = function() {
	var path = location.pathname;
	if(path.indexOf("/about/") == -1) $("#global-nav ul").css("display", "none");
};

/* [自動ロールオーバー]
----------------------------------------*/
otohane.rollOverImg = function() {
	var active = "_on"; // active時のファイル名設定
	var _class = "img.rollover, input[type=image].rollover"; // 要素指定
	
	var img = [], preLoadImg = [], srcs = [];
	var src, srcOn, extpos, path, i, l;
	$(_class).each(function() {img.push(this);});
	for(i=0, l=img.length; i<l; i++) {
		src = img[i].getAttribute("src");
		extpos = src.lastIndexOf(".");
		path = src.substring(0, extpos);
		preLoadImg.push(new Image());
		// 既にactiveの場合は処理中止
		if(path.substring(path.length - 3, path.length) === active) continue;
		// preload
		preLoadImg[i].src = path + active + src.substring(extpos, src.length);
		// イベント設定
		img[i].onmouseover= function() {
			src = this.getAttribute("src");
			extpos = src.lastIndexOf(".");
			srcOn = (src.substring(0, extpos) + active + src.substring(extpos, src.length));
			this.setAttribute("src", srcOn);
		};
		img[i].onmouseout = function() {
			if(!src) return;
			this.setAttribute("src", src);
		};
	}
}

/* トラックバック＆コメントを見る/閉じる
----------------------------------------*/
otohane.trackbacksAndComments = function() {
	var c = {
		tTextOpen: "トラックバックを見る",
		tTextClose: "トラックバックを閉じる",
		cTextOpen: "コメントを見る",
		cTextClose: "コメントを閉じる",
		fTextOpen: "コメントを書き込む",
		fTextClose: "このフォームを閉じる"
	};
	var trackbacks = $("#trackbacks");
	var comments = $("#comments");
	var show_trackbacks = $("#show-trackbacks");
	var show_comments = $("#show-comments");
	if(location.hash == "#trackbacks-anchor") {
		show_trackbacks.parent("span").addClass("on");
		show_trackbacks.text(c.tTextClose);
	} else {
		trackbacks.css("display", "none");
	}
	if(!document.getElementById("mt-community-forum")) {
		if(location.hash == "#comments-anchor") {
			show_comments.parent("span").addClass("on");
			show_comments.text(c.cTextClose);
		} else {
			comments.css("display", "none");
		}
	}
	
	show_trackbacks.click(function() {
		trackbacks.slideToggle("normal");
		comments.slideUp("normal");
		var parent = $(this).parent("span");
		parent.toggleClass("on");
		if(parent.hasClass("on")) {
			$(this).text(c.tTextClose);
		} else {
			$(this).text(c.tTextOpen);
		}
		show_comments.text(c.cTextOpen).parent("span").removeClass("on");
		return false;
	});
	show_comments.click(function() {
		trackbacks.slideUp("normal");
		comments.slideToggle("normal");
		var parent = $(this).parent("span");
		parent.toggleClass("on");
		if(parent.hasClass("on")) {
			$(this).text(c.cTextClose);
		} else {
			$(this).text(c.cTextOpen);
		}
		show_trackbacks.text(c.tTextOpen).parent("span").removeClass("on");
		return false;
	});
	
	// コメントを書き込む
	var comments_open = $("#comments-open");
	var comments_content = $("#comments-open div.comments-open-content");
	var comments_switch = $("#comments-open-switch");
	comments_switch.text(c.fTextClose);
	comments_switch.click(function() {
		comments_content.slideToggle("normal");
		comments_open.toggleClass("off");
		if(comments_open.hasClass("off")) {
			$(this).text(c.fTextOpen);
		} else	{
			$(this).text(c.fTextClose);
		}
		return false;
	});
}

/*----------------------------------------------------------------------------
 するするスクロールナビゲーション
----------------------------------------------------------------------------*/
otohane.scrollNav = {
	timer: null,
	
	init: function() {
		otohane.scrollNav.scrollEvent();
		$(window).scroll(otohane.scrollNav.scrollEvent);
	},
	
	scrollEvent: function() {
		var box = $("#alpha");
		var container = $("container");
		box.stop();
		if(this.timer) clearTimeout(this.timer);
		this.timer = setTimeout(scrollMenu, 300);
		
		function scrollMenu() {
			var win = $(window);
			var defaultTop = box.css("top").slice(0, -2) - 0;
			
			if( win.scrollTop() < (defaultTop - 20) ) {
				scrollReset();	
			} else if( (box.height() + win.scrollTop()) < $("#container").height() ){
				box.animate({ 
					marginTop: win.scrollTop() + 20 - defaultTop + "px"
				}, 500);
			} else {
				return;
				/* box.animate({ 
					marginTop: $("#container").height() - box.height() - 20 - defaultTop + "px"
				}, 500); */
			}
		}
		function scrollReset() {
			box.animate({
				marginTop: "0px"
			}, 500 );			
		}
	}
};


/* 外部リンクを別ウィンドウで開く
----------------------------------------*/
otohane.externalLink = function() {
	var e = $("a[href^='http://'], a[href^='https://']").not("a[href^='http://otohane.net/']").not("a[href^='http://blog.otohane.net/']");
	e.click(function() { window.open(this.href); return false; });
};

/*----------------------------------------------------------------------------
 onload event function
----------------------------------------------------------------------------*/
$(document).ready(function() {
otohane.fontSize.init();
otohane.currentNav();
otohane.rollOverImg();
otohane.trackbacksAndComments();
otohane.scrollNav.init();
otohane.externalLink();
});

