////
//// PageList
////
//// 目次リストと同ページ内のブロックに目次のリンク先を読み込みます
//// ・init() にて 引数default_url を指定していると 最初にそのページを開いておけます
//// ・URLに#つづきでリンク先ページを指定すればdefaultを無視して最初にそのページが開きます

var PageList = {

	////
	//// 設定項目
	////

	// 目次リストにしたいaタグにつけるクラス名
	list_anchor_class_name : "content_link",
	// 現在選択されているリスト項目に付ける見ばえ用クラス名
	selected_list_anchor_class_name : "selected",
	// リンク先のページを表示する領域のID
	content_area_id : "joint",

	////
	//// 以下プログラム
	////

	current_selected_index : null, // 現在選択されているリストの項番
	link_array : null, // リスト項目

	init : function(default_url)
	{
		this.link_array = $$("."+this.list_anchor_class_name);
		//// クリック時挙動付加
		this.link_array.each(function(dom, i){Event.observe(dom, "click", function(){PageList.open_page(i);}, false);}); // iはdom.relも可
		//// Unique URLs
		if(!this.open_page(location.hash.substr(1)) && default_url) this.open_page(default_url);
	},

	// 予め用意された項目リストから
	// 指定した項目またはインデックス番号のリンク先を開く
	// p : index or url
	open_page : function(p)
	{
		if(p==="") return false; // "" は数値の0ではなく空の場合
		index = (isNaN(p)) ? this.link_array.pluck("rel").indexOf(p) : p;

		var url = p;

		// クリック時のClass変更
		if(this.current_selected_index != null) Element.removeClassName(this.link_array[this.current_selected_index], this.selected_list_anchor_class_name); // 前回分を解除
		this.current_selected_index = null;

		// 目次リストに含まれる項目の場合
		if(0 <= index)
		{
			dom = this.link_array[index];
			// クリック時のClass変更
			Element.addClassName(dom, this.selected_list_anchor_class_name); // 今回分の選択
			this.current_selected_index = index;
			url = dom.rel;
		}

		// リンク実行
		this.open_url(url);

		return true;
	},

	// 指定ＵＲＬをcontentに読み込む
	open_url : function(url)
	{
		var idx = url.indexOf("#");
		var delim = 1;
		if(idx<0) {idx = url.indexOf("%23"); delim = 3;} // for Safari
		var anchor = null;
		if(0 < idx)
		{
			anchor = url.substr(idx + delim);
			url = url.substr(0, idx);
		}
		new Ajax.Updater(this.content_area_id, url, {method:"GET", evalScripts:true, onSuccess:function(){
			// アンカー指定があった場合、そこまでスクロールする
			if(anchor != null) setTimeout(function(){Element.scrollTo(anchor);}, 100);
			else scrollTo(0,0);
		}});
	}
};

