/**********************************************************************

  入力内容チェック

**********************************************************************/

var sendFlag = false;

//記事入力内容チェック
function checkDiaryForm(form) {
	if (form.subj && !form.subj.value) {
		alert('題名が入力されていません。');
		return false;
	}
	if (form.text && !form.text.value) {
		alert('本文が入力されていません。');
		return false;
	}

	if (sendFlag == true) {
		alert('二重投稿は禁止です。');
		return false;
	} else {
		sendFlag = true;
	}

	return true;
}

//コメント入力内容チェック
function checkCommentForm(form) {
	if (form.name && !form.name.value) {
		alert('名前が入力されていません。');
		return false;
	}
	if (form.text && !form.text.value) {
		alert('本文が入力されていません。');
		return false;
	}

	if (sendFlag == true) {
		alert('二重投稿は禁止です。');
		return false;
	} else {
		sendFlag = true;
	}

	return true;
}

/**********************************************************************

  カレンダー

**********************************************************************/

//本日のセル色を変更
function setCalendar() {
	var today = new Date();
	var year  = new String(today.getFullYear());
	var month = new String(today.getMonth() + 1);
	var date  = new String(today.getDate());

	while (month.length < 2) {
		month = '0' + month;
	}
	while (date.length < 2) {
		date = '0' + date;
	}

	var node_calendar_cel = document.getElementById('calendar_' + year + month + date);
	if (node_calendar_cel) {
		node_calendar_cel.className = 'today';
	}

	return;
}

/**********************************************************************

  処理開始

**********************************************************************/

//読み込み完了時
window.onload = function() {
	//トップウインドウ更新用
	if (top.location != self.location) {
		var node_a = document.getElementsByTagName('a');
		for (var i in node_a) {
			if (node_a[i].className == 'top') {
				node_a[i].onclick = function() {
					window.top.location = this.href;
				};
			}
		}
	}

	//カレンダー用
	setCalendar();

	//入力内容チェック
	var node_diary_form = document.getElementById('diary_form');
	if (node_diary_form) {
		node_diary_form.onsubmit = function() {
			return checkDiaryForm(node_diary_form);
		};
	}
	var node_comment_form = document.getElementById('comment_form');
	if (node_comment_form) {
		node_comment_form.onsubmit = function() {
			return checkCommentForm(node_comment_form);
		};
	}
};

/**********************************************************************

  アクセス解析

**********************************************************************/

/**
 * イベントリスナを追加する関数
 * 基本的には IE でも Firefox でも Safari でも Opera でも同じように使えるようにしてある. 
 * IE ではイベントリスナが受け取る引数のプロパティに currentTarget がないが, 
 * この関数を使うと自動的に追加してくれる. 
 * イベントリスナ内での this による参照は IE とその他で互換性を保っていないので, 
 * イベントリスナ内で現在のイベントターゲットを取得するときは, this を使うのではなく
 * 引数の currentTarget プロパティを使用すること. 
 *
 * 使い方:
 *     addListener( target, type, func );
 * パラメータ等:
 *     @param target イベントリスナを追加する対象. window オブジェクトや element オブジェクト.
 *     @param type イベントリスナが受け取るイベントのタイプ. "click" や "load" など. 
 *     @param func イベントリスナそのもの. 普通は関数. 
 *     @return 戻り値は boolean. addEventListener か attachEvent が実装されていれば true が返り, 
 *             それ以外の場合は false.
 *     @see http://www.vividcode.info/js/event/eventListener.xhtml
 */
var addListener = (function(){
	if (window.addEventListener) {
		// DOM Events 実装ブラウザ用
		return function(target, type, func){
			target.addEventListener(type, func, false);
			return true;
		};
	}
	else 
		if (window.attachEvent) {
			// IE 用
			return function(target, type, func){
				// ----- 局所変数の宣言 -----
				var i = 0;
				var hasBeenAdded = false;
				// ----- 処理 -----
				// target のプロパティに管理用配列を追加
				if (!target._vividcode_el) {
					target._vividcode_el = new Array(0);
					// unload 時に解体
					window.attachEvent("onunload", function myself(evt){
						// 配列の中身を null に
						for (i = 0; i < target._vividcode_el.length; i++) {
							target._vividcode_el[i][0] = null;
							target._vividcode_el[i][1] = null;
							target._vividcode_el[i] = null;
						}
						// 配列への参照をなくす
						target._vividcode_el = null;
						// 自分自身を detachEvent
						window.detachEvent("onunload", myself);
					});
				}
				// 既に登録済みかどうかチェックする
				hasBeenAdded = false;
				for (i = 0; i < target._vividcode_el.length; i++) {
					if (target._vividcode_el[i][0] === func) {
						hasBeenAdded = true;
						break;
					}
				}
				// 未登録の場合, 登録する
				if (!hasBeenAdded) {
					i = target._vividcode_el.length;
					target._vividcode_el[i] = new Array(func, function(evt){
						// evt.currentTarget を指定
						evt.currentTarget = target;
						// EventListener 起動
						func(evt);
					});
				}
				// addEventListener の方では, 同じ関数を二重に登録しようとすると 2 個目は破棄される. 
				// attachEvent の方だと 2 個目は破棄されない. 同一の動作になるよう, まず detachEvent する. 
				target.detachEvent("on" + type, target._vividcode_el[i][1]);
				target.attachEvent("on" + type, target._vividcode_el[i][1]);
				// unload 時に detachEvent しなければメモリリークを起こすとどこかで読んだので念のため. 
				// 必要以上に detachEvent する場合もあるが実害はないと思う 
				// (さすがに動作時間はそんなに変わらないでしょう) ので気にしないことにする.
				window.attachEvent("onunload", (function(){
					// target._vividcode_el も onunload イベントで解体するので, 
					// 下手すると参照前に解体されている可能性もある. 
					// よって, あらかじめ局所変数に読み込んでおく.
					var func = target._vividcode_el[i][1];
					return function myself(evt){
						target.detachEvent("on" + type, func);
						window.detachEvent("onunload", myself);
					};
				})());
				return true;
			};
		}
		else {
			// addEventListener も attachEvent も持ってないブラウザ用
			return function(target, type, func){
				return false;
			};
		}
})();
/**
 * Access Analyze
 */
addListener(window, "load", function(){
	var setAnalyzeImage = function(url){
		var imgElem = document.createElement("img");
		imgElem.setAttribute("src", url);
		imgElem.setAttribute("alt", "");
		imgElem.setAttribute("width", "1");
		imgElem.setAttribute("height", "1");
		var pElem = document.createElement("p");
		pElem.appendChild(imgElem);
		pElem.style.visibility = "hidden";
		document.body.appendChild(pElem);
	};
	var accurl = ["./cgi-bin/acc/acclog.cgi?referrer=", document.referrer, "&width=", screen.width, "&height=", screen.height, "&color=", screen.colorDepth].join("");
	var waurl = ["./cgi-bin/analyze.cgi?", screen.width, 'x', screen.height, '&', screen.colorDepth, '&', document.referrer].join("");
	setAnalyzeImage(accurl);
	setAnalyzeImage(waurl);
});
