//グローバル変数の定義
var httpObj;               // HTTP通信用オブジェクト
var timerId;               // HTTP通信用タイマーオブジェクト
var timeout_sec = 10;      // HTTP通信タイムアウト秒数
var i;					   // for文用

// ボタンごとのHTMLファイルURLの定義
var list = new Array('default','h2010','h2011','h2012','h2101','h2102','h2103','h2104','h2105','h2106','h2107','h2108','h2109','h2110','h2111','h2112','h2201','h2202','h2203','h2204','h2205','h2206','h2207','h2208','h2209','h2210','h2211','h2212','h2301','h2302','h2303','h2304','h2305','h2306','h2307','h2308','h2309','h2310','h2311','h2312','h2401');  

function loadHtml(e) {
    // 押されたボタンを特定し、ボタンの参照を取得する
    var target_button = getTargetNode(e);
	// ボタンが１番最近のものなら再読込をする
	if(target_button.id == 'default') {
		location.reload();
        quit();
	}
    // 現在表示されているHTML情報を削除する
    var displayframe = document.getElementById('comment');
    while(displayframe.lastChild) {
        displayframe.removeChild(displayframe.lastChild);
    }
    // XMLをHTTP通信で取得
	for(i = 0; i< list.length; i++) {
		if(list[i] == target_button.id) break;
	}
	var url = 'comment/' + list[i] + '.html';
    httpHtmlRequest(url, 'GET', '', httpError);
    // バブリングとデフォルトイベントアクションの停止
    stopDefaultAndPropagation(e);
    return false;
}

function httpError(error) {
    alert(error);
}

// 引数に与えられたURLにHTTPリクエストを行ない、指定された関数を実行
function httpHtmlRequest(target_url, method, data, error_func) {
    try {
        if(window.XMLHttpRequest) {
            httpObj = new XMLHttpRequest();
        } else if(window.ActiveXObject) {
            httpObj = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            httpObj = false;
        }
    } catch(e) {
        httpObj = false;
    }
    if(! httpObj) {
        httpObjGenerateFail();
    }
    timerId = setInterval('timeoutCheck()', 1000);
    httpObj.open(method, target_url, true);
    httpObj.onreadystatechange = function() {
        if (httpObj.readyState == 4) {
            clearInterval(timerId);
            if (httpObj.status == 200 || httpObj.status == 0) {
                document.getElementById('comment').innerHTML = httpObj.responseText;
            } else {
                error_func(httpObj.status + ' : ' + httpObj.statusText);
                return false;
            }
        }
    }
    httpObj.send(data);
}

// HTTPタイムアウト処理
function timeoutCheck() {
    timeout_sec --;
    if(timeout_sec <= 0) {
        // タイマーをストップする
        clearInterval(timerId);
        // HTTPリクエストを中断する
        httpObj.abort();
        // エラーダイアログを表示
        alert('タイムアウトです。');
        return false;
    }
}

// バブリングとデフォルトイベントアクションの停止
function stopDefaultAndPropagation(e) {
    // バブリング停止
    if(e.stopPropagation) {
        e.stopPropagation();
    }
    if(window.event) {
        window.event.cancelBubble = true;
    }
    // デフォルトイベントアクションを停止する
    if(e.preventDefault) {
        e.preventDefault();
    }
    if(window.event) {
        window.event.returnValue = false;
    }
}

function getTargetNode(e) {
    // 対象要素の参照を取得
    var target_node;
    if(e.target) {
      target_node = e.target;
    } else {
      target_node = e.srcElement;
    }
    // Safari対策
    if (target_node.nodeType == 3) {
        target_node = target_node.parentNode;
    }
    return target_node;
}

// load時の処理
function setListeners(e) {
    // ボタン要素にclickイベントリスナーをセット
	var button = new Array();
	for(i = 0; i < list.length; i++) {
		button[i] = document.getElementById(list[i]);
		addListener(button[i], 'click', loadHtml, false);
	}
}

// イベントリスナー登録
function addListener(elem, eventType, func, cap) {
    if(elem.addEventListener) {
        elem.addEventListener(eventType, func, cap);
    } else if(elem.attachEvent) {
        elem.attachEvent('on' + eventType, func);
    } else {
        alert('ご利用のブラウザーはサポートされていません。');
        return false;
    }
}

// load時のイベントリスナーをセットする
addListener(window, 'load', setListeners, false);

function chVisible(id) {
	var id_style = document.getElementById(id).style;
	if(id_style.visibility) {
		id_style.visibility = hidden;
	} else {
		id_style.visibility = visible;
	}
}
