/*-----------------------------------------------------------------------------
前後のエントリ取得

$Id: AroundEntries.js,v 1.4 2004/08/21 13:01:32 okamura Exp $
Copyright (C) 2004 OKAMURA Yuji, all rights reserved.
-----------------------------------------------------------------------------*/
/*--------------------------------------
現在表示しているエントリの entryUUID から前後のエントリの entryUUID を探し出す。
引数
	entryUUID - 現在表示しているエントリの entryUUID
戻り値
	各要素が次のような長さ 4 の配列
		0 番目 - 同じカテゴリの前のエントリの entryUUID
		1 番目 - 前のエントリの entryUUID
		2 番目 - 次のエントリの entryUUID
		3 番目 - 同じカテゴリの次のエントリの entryUUID
	該当するものがないときは未代入の配列の要素になる。
注意
	iBlog 1.3.8 より前の iBlog の場合 entry.js による順序を元にしている。
	entry.js の順序は同じ日のエントリが複数あると、その日のエントリ間の順序は
	正しくないことがある。
--------------------------------------*/
function GetAroundEntries(entryUUID) {
	var	around = new Array(4);	// 返す配列

	// iBlog 1.3.8 以降のバージョンの場合
	if (entryUUIDsList) {
		var	nowNth;	// 現在表示しているエントリの entryUUIDsList 上の添字
		var	categoryUUID;	// 現在表示しているエントリの categoryUUID
		var	i;

		// 現在表示しているエントリの nowNth と categoryUUID を求める
		for (nowNth = 0; nowNth < entryUUIDsList.length; nowNth++) {
			if (entryUUIDsList[nowNth] == entryUUID) break;
		}
		if (nowNth == entryUUIDsList.length) return around;
		categoryUUID = Entry[entryUUID].m_CategoryUUID;

		// around の内容を作成する
		if (nowNth > 0) {
			// 同じカテゴリの前のエントリの entryUUID を around に格納
			for (i = nowNth - 1; i >= 0; i--) {
				if (Entry[entryUUIDsList[i]].m_CategoryUUID == categoryUUID) {
					break;
				}
			}
			if (i >= 0) {
				around[0] = entryUUIDsList[i];
			}

			// 前のエントリの entryUUID を around に格納
			around[1] = entryUUIDsList[nowNth - 1];
		}
		if (nowNth + 1 < entryUUIDsList.length) {
			// 次のエントリの entryUUID を around に格納
			around[2] = entryUUIDsList[nowNth + 1];

			// 同じカテゴリの次のエントリの entryUUID を around に格納
			for (i = nowNth + 1; i < entryUUIDsList.length; i++) {
				if (Entry[entryUUIDsList[i]].m_CategoryUUID == categoryUUID)
					break;
			}
			if (i < entryUUIDsList.length) {
				around[3] = entryUUIDsList[i];
			}
		}
	}
	// iBlog 1.3.8 より前のバージョンの場合
	else {
		var	nowNth;	// 現在表示しているエントリの entryUUIDsList 上の添字
		var	categoryUUID;	// 現在表示しているエントリの categoryUUID
		var	i;

		// 現在表示しているエントリの nowNth と categoryUUID を求める
		for (nowNth = 0; nowNth < EntryUUID.length; nowNth++) {
			if (EntryUUID[nowNth] == entryUUID) break;
		}
		if (nowNth == EntryUUID.length) return around;
		categoryUUID = Entry[entryUUID].m_CategoryUUID;

		// around の内容を作成する
		if (nowNth + 1 < Entry.length) {
			// 同じカテゴリの前のエントリの entryUUID を around に格納
			for (i = nowNth + 1; i < Entry.length; i++) {
				if (Entry[i].m_CategoryUUID == categoryUUID) break;
			}
			if (i >= 0) {
				around[0] = Entry[i];
			}

			// 前のエントリの entryUUID を around に格納
			around[1] = Entry[nowNth + 1];
		}
		if (nowNth > 0) {
			// 次のエントリの entryUUID を around に格納
			around[2] = Entry[nowNth - 1];

			// 同じカテゴリの次のエントリの entryUUID を around に格納
			for (i = nowNth - 1; i >= 0; i--) {
				if (Entry[i].m_CategoryUUID == categoryUUID) break;
			}
			if (i < Entry.length) {
				around[3] = Entry[i];
			}
		}
	}

	return around;
}

/*--------------------------------------
エントリページ用のエントリへのリンクを出力する。
引数
	entryUUID - リンク先のエントリの entryUUID
	linkStr - リンクの文言
		省略した場合、そのエントリのタイトルが用いられる。
戻り値
	成功か失敗を BOOL 値で返す。
機能
	次のようなリンクを document に書き出す。
	linkStr が与えられている場合
		<a href="{entryUUIDを持つエントリへの相対 URI}" title="{entryUUIDを持つエントリのタイトル}">{linkStrの値}</a>
	linkStr が与えられなかった場合
		<a href="{entryUUIDを持つエントリへの相対 URI}" title="{entryUUIDを持つエントリのタイトル}">{entryUUIDを持つエントリのタイトル}</a>
--------------------------------------*/
function WriteEntryLink4EntryPage(entryUUID, linkStr) {
	var	entry;

	if (!entryUUID) return false;
	entry = Entry[entryUUID];

	if (entry) {
		var	href = '../../'+entry.m_CategoryUUID+'/'+entryUUID+'/index.html';
		var	title = entry.m_Title;

		if (!linkStr) linkStr = title;

		// 属性値の中の改行をスペースに置き換える
		title = title.replace('\n', ' ');
		href = href.replace('\n', ' ');

		// リンクを書き出す
		document.write('<a href="'+href+'" title="'+title+'">'+linkStr+'</a>');

		return true;
	}
	return false;
}