// グローバル変数
var httpObj_Array = new Array();
var timerId_Array = new Array();
var timeout_sec = 10; //タイムアウトの秒数
var timeout_Array = new Array();

// 引数に与えられたURLにHTTPリクエストを行ない、指定された関数を実行
function httpRequest(target_url, funcitonReference) {
	// httpオブジェクトの生成※整合性のためひたすら溜めまくるので、大量のリクエストには注意！！
    var Pos = httpObj_Array.length;
    try {
        if(window.XMLHttpRequest) {
            httpObj_Array[Pos] = new XMLHttpRequest();
        } else if(window.ActiveXObject) {
            httpObj_Array[Pos] = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            httpObj_Array[Pos] = false;
        }
    } catch(e) {
        httpObj_Array[Pos] = false;
    }
    if(! httpObj_Array[Pos]) {
        httpObjGenerateFail();
    }
    // タイマーをセット
    timerId_Array.push(setInterval('timeoutCheck('+Pos+')', 1000));
    timeout_Array.push( timeout_sec );

    httpObj_Array[Pos].open("GET", target_url, true);
    httpObj_Array[Pos].onreadystatechange = function() {
        if (httpObj_Array[Pos].readyState == 4) {
            clearInterval(timerId_Array[Pos]);
            if (httpObj_Array[Pos].status == 200) {
                funcitonReference(httpObj_Array[Pos].responseText);
            } else {
                //alert( "ajax error : " + httpObj_Array[Pos].status + ' : ' + httpObj_Array[Pos].statusText);
                //alert( "ajax error : " + target_url);
                return false;
            }
        }
    }
    httpObj_Array[Pos].send('');
}

// XMLHttpRequestオブジェクト生成に失敗した場合の処理
function httpObjGenerateFail() {
    alert('ご利用のブラウザーでは、当サイトをご利用頂けません。');
    return false;
}

// HTTPタイムアウト処理
function timeoutCheck( Pos ) {
    var time_remain = -- timeout_Array[Pos] ;
    if(time_remain <= 0) {
        clearInterval(timerId_Array[Pos]);
        httpObj_Array[Pos].abort();
        alert('タイムアウトが発生しました。少し時間を置いてページをリロードしてください。');
        return false;
    }
}
