/*
 * program by -kem-
 */
// GlobalObject
var diary = new Diary();
var calendar = 0;;
function Diary(){
	// 0        1        2            3        4
	// 作成日付,カテゴリ,サブカテゴリ,タイトル,ファイルパス（日記のデフォルトパスからの相対パス）
	this.listData = new Array();
}

/******************************************************************************/
/*┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓*/
/*┃XMLファイルのデータから各コンテンツを作成                               ┃*/
/*┣━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2007/xx/xx┃作成                                                      ┃*/
/*┣━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2008/06/25┃カレンダーとスライドダウンメニューの作成をリスト生成時に  ┃*/
/*┃            ┃移動（処理速度改善）                                      ┃*/
/*┗━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛*/
/******************************************************************************/
Diary.prototype.showDiaryContents = function(httpObj){
	// リスト要素の取得、カレンダーの作成、スライドダウンメニューの作成
	this.makeListData(httpObj);
	// latestDiaryの作成
	$('diaryMain').innerHTML += '最新日記データの作成...';
	this.makeLatestDiary(10);
	$('diaryMain').innerHTML += '完了<br />';
	// 日記の指定があれば表示。無ければ最新の日記を表示
	var strUrl = '';
	if(location.search.substr(1)){
		strUrl = location.search.substr(1);
	}else{
		strUrl = diary.listData[diary.listData.length-1][4];
	}
	changeDiary(strUrl);
}

/******************************************************************************/
/*┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓*/
/*┃changeDiary無し。日記ファイル直接表示用。                               ┃*/
/*┣━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2008/05/22┃作成                                                      ┃*/
/*┣━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2008/06/25┃カレンダーとスライドダウンメニューの作成をリスト生成時に  ┃*/
/*┃            ┃移動（処理速度改善）                                      ┃*/
/*┗━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛*/
/******************************************************************************/
Diary.prototype.showDiaryContents2 = function(httpObj){
	if(location.search.substr(1)){
		$('diaryMain').innerHTML = '<span class="loading">読み込み中...</span>';
	}
	// リスト要素の取得、カレンダーの作成、スライドダウンメニューの作成
	this.makeListData(httpObj);
	/* latestDiaryの作成 */
	this.makeLatestDiary(10);
	// 日記の指定があれば表示。無ければindex.htmlの内容を表示
	var strUrl = '';
	if(location.search.substr(1)){
		strUrl = location.search.substr(1);
		changeDiary(strUrl);
	}else{
		$('uajbbs_main').hide();
	}
}

/******************************************************************************/
/*┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓*/
/*┃XMLファイルからリストデータを作成                                       ┃*/
/*┣━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2007/xx/xx┃作成                                                      ┃*/
/*┗━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛*/
/******************************************************************************/
Diary.prototype.makeListData = function(httpObj){
	$('diaryMain').innerHTML = '日記データの読み込み...';

	// XMLデータの取得
	var xmlData = httpObj.responseXML;
	// 一行づつに分割
	var rowData = xmlData.getElementsByTagName('Row');

	// カレンダー用変数
	calendar  = new Epoch('epoch_multi','flat',$('diaryCalendar'),true,this.listData);
	var addDate = new Array();

	// リストデータ用変数
	var main = document.createElement('UL');
	main.id = 'slideDowmMenuUlMain';
	$('dhtmlgoodies_slidedown_menu').appendChild(main);

	// コメント用変数
	var innerHTML_org = $('diaryMain').innerHTML;

	mainElementLength = new Array();			// メインカテゴリ用
	subElementLength  = new Array();			// サブカテゴリ用
	// 一行目はコメント行なので無視
	for(i=1;i<rowData.length;i++){
		// データタグが存在すればlistに追加
		if(rowData[i].getElementsByTagName('Data').length){
			// コメントの表示更新
			$('diaryMain').innerHTML = innerHTML_org + Math.floor((i/(rowData.length-1))*100) + '％';

			var lineData = rowData[i].getElementsByTagName('Data');
			this.listData[i-1] = new Array();
			for(j=0;j<lineData.length;j++){
				this.listData[i-1][j] = lineData[j].childNodes[0].nodeValue;
			}
			// カレンダーに日付情報の追加
			// 日付、URL、コメント（マウスオーバー時に表示）を渡す
			var tmpArray = new Array();
			var tmp = this.listData[i-1][0].split('/');
			tmpArray.push(new Date(tmp[0],tmp[1] - 1,tmp[2]));
			tmpArray.push(this.listData[i-1][4]);
			tmpArray.push(this.listData[i-1][1] + '　>>　' + this.listData[i-1][2] + '　>>　' + this.listData[i-1][3]);
			addDate.push(tmpArray);

			// リストデータの作成
			var mainMenu	= this.listData[i-1][1];	/* メインカテゴリ */
			var subMenu		= this.listData[i-1][2];	/* サブカテゴリ   */
			var strTitle	= this.listData[i-1][3];	/* タイトル       */
			var strUrl		= this.listData[i-1][4];	/* URL            */
			/* メインカテゴリ */
			if($(mainMenu) == null){
				li = document.createElement('LI');
				li.id = mainMenu;
				$(main.id).appendChild(li);
				a = document.createElement('A');
				a.href = 'javascript:void(0);';
				a.id = 'a_main' + mainMenu;
				/* メインカテゴリに含まれるelementの数を取得 */
				mainElementLength[mainMenu] = 1;
				$(mainMenu).appendChild(a);
			}else{
				mainElementLength[mainMenu] = mainElementLength[mainMenu] + 1;
			}
			$('a_main' + mainMenu).innerHTML = mainMenu + '( ' + mainElementLength[mainMenu] + ' )';
			/* サブカテゴリ */
			if($(subMenu) == null){
				if($(mainMenu + 'sub') == null){
					sub = document.createElement('UL');
					sub.id = mainMenu + 'sub';
					$(mainMenu).appendChild(sub);
				}
				li = document.createElement('LI');
				li.id = subMenu;
				$(mainMenu + 'sub').appendChild(li);
				a = document.createElement('A');
				a.href = 'javascript:void(0);';
				a.id = 'a_sub' + subMenu;
				/* サブカテゴリに含まれるelementの数を取得 */
				subElementLength[subMenu] = 1;
				$(subMenu).appendChild(a);
			}else{
				subElementLength[subMenu] = subElementLength[subMenu] + 1;
			}
			$('a_sub' + subMenu).innerHTML = subMenu + '( ' + subElementLength[subMenu] + ' )';
			/* タイトル */
			if($(subMenu + 'title') == null){
				title = document.createElement('UL');
				title.id = subMenu + 'title';
				$(subMenu).appendChild(title);
			}
			li = document.createElement('LI');
			li.id = strTitle;
			li.url = strUrl;
			li.onclick = function(){changeDiary(this.url);};
			$(subMenu + 'title').appendChild(li);
			a = document.createElement('A');
			a.href = "#";
			a.innerHTML = strTitle;
			$(strTitle).appendChild(a);
		}
	}
	$('diaryMain').innerHTML = innerHTML_org;
	$('diaryMain').innerHTML += '完了<br />';
	// カレンダーに日付の追加
	$('diaryMain').innerHTML += 'カレンダーの初期化...';
	calendar.addDates(addDate,true);
	$('diaryMain').innerHTML += '完了<br />';
	// リストデータの初期化
	$('diaryMain').innerHTML += 'リストデータの初期化...';
	initSlideDownMenu();
	$('diaryMain').innerHTML += '完了<br />';
}

/******************************************************************************/
/*┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓*/
/*┃最新日記コンテンツの作成                                                ┃*/
/*┣━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2007/xx/xx┃作成                                                      ┃*/
/*┗━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛*/
/******************************************************************************/
Diary.prototype.makeLatestDiary = function(num){
	$('latestDiary').innerHTML = '';
	var ol = document.createElement('OL');
	ol.id = 'latestDiaryList';
	$('latestDiary').appendChild(ol);
	for(i=0;i<this.listData.length;i++){
		strTitle	= this.listData[this.listData.length - i - 1][3];	/* タイトル       */
		strUrl		= this.listData[this.listData.length - i - 1][4];	/* URL            */

		li = document.createElement('LI');
		li.url = strUrl;
		li.id = 'latestDiary' + i + 1;
		li.onclick = function(){changeDiary(this.url);};
		$('latestDiaryList').appendChild(li);
		a = document.createElement('A');
		a.href = "#";
		a.innerHTML = strTitle;
		$(li.id).appendChild(a);
		/* 全件表示したら終了 */
		if(num && (num - 1 == i))break;
	}
}

/******************************************************************************/
/*┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓*/
/*┃日記本文の表示                                                          ┃*/
/*┣━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2007/xx/xx┃作成                                                      ┃*/
/*┣━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2008/03/09┃日記へのリンクがIEとOperaで表示されなかった不具合修正     ┃*/
/*┣━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2008/06/17┃日記投稿欄を日記表示時に表示するよう変更                  ┃*/
/*┗━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛*/
/******************************************************************************/
Diary.prototype.showDiary = function(responseHttpObj,strUrl){
	// コメント投稿欄を表示
	$("uajbbs_main").show();

	var i = 0;
	for(i=0;i<this.listData.length;i++){
		if(this.listData[i][4] == strUrl) break;
	}
	// 作成日付
	var strDiary = this.listData[i][0] + '<br />';
	// カテゴリ
	strDiary += this.listData[i][1] + '　>　' + this.listData[i][2] + '<br /><br />';
	// タイトル
	strDiary += '<h1>' + this.listData[i][3] + '</h1><br />';
	// 本文
	strDiary += responseHttpObj.responseText;

	// 日記へのリンク先
	var strPath = 'http://' + location.hostname + location.pathname;
	// 最後が[/]でアクセスされた場合を考慮
	if(location.pathname.charAt(location.pathname.length - 1) == '/'){
		strPath +=  'index.html?';
	}else{
		strPath += '?';
	}
	strPath += this.listData[i][4]
	var strLinkurl = '<form action="">この日記へのリンク：<input type="text" size=75 readonly value=' + strPath + ' onfocus="this.select()"></input></form>';
	$("diaryMain").innerHTML = strDiary + '<br /><br /><br />' + strLinkurl + '<br /><br /><br />';
	// $("diaryMain").innerHTML = strDiary + '<br /><br /><br />';

	var j = 0;
	// 前の日記
/*	カテゴリ順⇒日付順に表示するよう変更
	for(j=i-1;j>=0;j--){
		if( (this.listData[j][1]==this.listData[i][1]) && (this.listData[j][2]==this.listData[i][2]) ){
			var aTag = document.createElement('A');
			aTag.href = '#';
			aTag.innerHTML =  '<< ' + this.listData[j][3];
			aTag.className = 'left';
			aTag.url = this.listData[j][4]
			aTag.onclick = function(){changeDiary(this.url);};
			$('diaryMain').appendChild(aTag);
			break;
		}
	}
*/
	if(i != 0){
			var aTag = document.createElement('A');
			aTag.href = '#';
			aTag.innerHTML =  '<< ' + this.listData[i-1][3];
			aTag.className = 'left';
			aTag.url = this.listData[i-1][4]
			aTag.onclick = function(){changeDiary(this.url);};
			$('diaryMain').appendChild(aTag);
	}
	// 次の日記
/*	カテゴリ順⇒日付順に表示するよう変更
	for(j=i+1;j<this.listData.length;j++){
		if( (this.listData[j][1]==this.listData[i][1]) && (this.listData[j][2]==this.listData[i][2]) ){
			var aTag = document.createElement('A');
			aTag.href = '#';
			aTag.innerHTML = this.listData[j][3] + ' >>';
			aTag.className = 'right';
			aTag.url = this.listData[j][4]
			aTag.onclick = function(){changeDiary(this.url);};
			$('diaryMain').appendChild(aTag);
			break;
		}
	}
*/
	if(i != this.listData.length){
			var aTag = document.createElement('A');
			aTag.href = '#';
			aTag.innerHTML = this.listData[i+1][3] + ' >>';
			aTag.className = 'right';
			aTag.url = this.listData[i+1][4]
			aTag.onclick = function(){changeDiary(this.url);};
			$('diaryMain').appendChild(aTag);
	}

	// カレンダーを選択された月に変更
	var date = this.listData[i][0].split("/");
	calendar.goToMonth( Number(date[0]),Number(date[1])-1 );
}

// Global funcions
/******************************************************************************/
/*┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓*/
/*┃スライドダウンメニュー、最新または指定された日記の読み込み              ┃*/
/*┣━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2007/xx/xx┃作成                                                      ┃*/
/*┗━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛*/
/******************************************************************************/
function loadDiaryContents(){
	slideDownMenuAjax = new Ajax.Request(
		"list.xml", 
		{
			method: 'get', 
			onComplete:function(httpObj){
				diary.showDiaryContents(httpObj);
			}
		});
}

/******************************************************************************/
/*┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓*/
/*┃changeDiary無し。日記ファイル直接表示用。                               ┃*/
/*┣━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2008/05/22┃作成                                                      ┃*/
/*┗━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛*/
/******************************************************************************/
function loadDiaryContents2(){
	slideDownMenuAjax = new Ajax.Request(
		"/diary/miyoshi/list.xml", 
		{
			method: 'get', 
			onComplete:function(httpObj){
				diary.showDiaryContents2(httpObj);
			}
		});
}

/******************************************************************************/
/*┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓*/
/*┃日記の切り替え。カレンダーやメニュークリックでの日記切り替え時に使用。  ┃*/
/*┣━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2007/xx/xx┃作成                                                      ┃*/
/*┗━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛*/
/******************************************************************************/
function changeDiary(strUrl){
	$("diaryMain").innerHTML = '<span class="loading">読み込み中...</span>';
	diaryMainAjax = new Ajax.Request(
		strUrl,
		{
			method: 'get', 
			onComplete:function(responseHttpObj){
				diary.showDiary(responseHttpObj,strUrl);
			}
		});
	// コメントの切り替え
	var strLocation = location.pathname.split('/');
	var strFname = strUrl.split('/');
//	uajbbs_logfile =  './log/' +  strLocation[2] + '/';
	var strTmp =  './log/' +  strLocation[2] + '/';
	for(i=0;i<strFname.length;i++){
//		if(i) uajbbs_logfile += '_';
//		uajbbs_logfile += strFname[i];
		if(i) strTmp += '_';
		strTmp += strFname[i];
	}
//	uajbbs_logfile += '.log';
	strTmp += '.log';
	UAJBBS_chgbbs(strTmp);
	UAJBBS_post();
}

/******************************************************************************/
/*┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓*/
/*┃最新日記の表示を指定された引数の数に書き換える                          ┃*/
/*┣━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2007/xx/xx┃作成                                                      ┃*/
/*┗━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛*/
/******************************************************************************/
function changeLatestDiary(num){
	diary.makeLatestDiary(num);
}

/******************************************************************************/
/*┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓*/
/*┃検索でひっかかったりして直接日記ファイルにアクセスされた時に日記ページを┃*/
/*┃表示する                                                                ┃*/
/*┣━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2008/03/08┃作成                                                      ┃*/
/*┗━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛*/
/******************************************************************************/
function reLoadDiary(){
	// pathには[/diary/miyoshi/travel/080303/index.html]が入っている
	var path = location.pathname.split("/");
	if(path.length > 2){
		var tmp = 'http://' + location.hostname + '/' + path[1] + '/' + path[2] + '/index.html?';
		for(i=3;i<path.length;i++){
			// 最後がindex.htmlかindex.htmの場合は付加しない。list.xmlにも書かないこと
			if( (path[i] == 'index.html') || (path[i] == 'index.htm') ){
				break;
			}
			tmp += path[i];
			if(i != (path.length - 1) ){
				tmp += '/';
			}
		}
		location.href = tmp;
	}
}

/******************************************************************************/
/*┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓*/
/*┃日記のコメントを表示                                                    ┃*/
/*┣━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫*/
/*┃  2008/06/17┃作成                                                      ┃*/
/*┗━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛*/
/******************************************************************************/
function openComment(strUrl){
	// コメント投稿欄を隠す
	$('uajbbs_main').hide();
	$('diaryMain').innerHTML = '<span class="loading">読み込み中...</span>';
	diaryMainAjax = new Ajax.Request(
		strUrl,
		{
			method: 'get', 
			onComplete:function(responseHttpObj){
				$('diaryMain').innerHTML = '';
				var strTmp = responseHttpObj.responseText;
				// レスポンスデータをコメント毎に分割
				var strComment = strTmp.split('\n');
				// テーブルの作成
				var tmp = document.createElement('TABLE');
				tmp.id = 'tmp';
				$('diaryMain').appendChild(tmp);
				var table = document.createElement('TBODY');
				table.id = 'commentTable';
				$(tmp.id).appendChild(table);
				// テーブルヘッダーの作成
				var tr = document.createElement('TR');
				tr.id = 'tr_header';
				$(table.id).appendChild(tr);
				var th;
				var htContents = new Array('日記','投稿者','コメント','投稿日時');
				for(i=0;i<htContents.length;i++){
					th = document.createElement('TH');
					th.innerHTML = htContents[i];
					$(tr.id).appendChild(th);
				}
				var strContents;
				var td;
				var strTmp1,strTmp2,strTmp3;
				// ループ回数は、最後の改行を抜くのでー１する。
				for(i=0;i<strComment.length-1;i++){
					// 最後の行は改行
					strContents = strComment[strComment.length-2-i].split('\t');
					// テーブルデータの作成
					tr = document.createElement('TR');
					tr.id = 'tr' + i;
					$(table.id).appendChild(tr);
					for(j=0;j<strContents.length;j++){
						// 日記へのリンク
						if( j==0 ){
							strTmp1 = strContents[j].split('/');
							strTmp2 = strTmp1[3].split('_');
							strTmp1 = '';
							for(k=0;k<strTmp2.length;k++){
								if( k != (strTmp2.length-1) ){
									strTmp1 += strTmp2[k];
									// 高ちゃん用
									if( (strTmp2[strTmp2.length-1] != '.log') && (k == 2)){
										if(Number(strTmp2[k]) > 0){
											strTmp1 += '_';
										}else{
											strTmp1 += '/';
										}
									}else{
										strTmp1 += '/';
									}
								}else{
									if ( strTmp2[k] != '.log' ){
										strTmp3 = strTmp2[k].split('.');
										strTmp1 += strTmp3[0] + '.' + strTmp3[1];
									}
								}
							}
							for(k=0;k<diary.listData.length;k++){
								if(diary.listData[k][4] == strTmp1){
									break;
								}
							}
							if(k == diary.listData.length){
//								strContents[j] = "<span class='caution'>存在しない日記です</span>";
								strContents[j] = strTmp1;
							}else{
								strContents[j] = "<a href='javascript:void(0);' onclick='changeDiary(\"" + strTmp1 + "\");'>" + diary.listData[k][3] + '</a>';
							}
						}
						// 色とIPは表示しない
						if( (j != 2) && (j != 5) ){
							td = document.createElement('TD');
							td.innerHTML = strContents[j];
							$(tr.id).appendChild(td);
						}
					}
				}
			}
		});

/* PopUpWindow表示Ver
	var win = new Window("win", {
		title: 'コメント一覧',
		className: "alphacube",
		url: strUrl,
		top:180, left:180,
		width:480, height:460,
		zIndex: 100,
		showEffect:Effect.Appear,
		hideEffect:Effect.Fade,
		resizable: true,
		draggable: true
		});
	win.setDestroyOnClose();
	win.showCenter(true);
*/
}
