//グローバル変数の定義
var connections = new Array();		//コネクション情報格納配列
var TexttimerId = false;				//HTTP通信用タイマーオブジェクト
var getrequest = new Array();			//GETリクエスト収納


//Text通信
function TextConnection(httpObj, timeout_sec) {
	this.httpObj = httpObj;				//HTTP通信用オブジェクト
	this.timeout_sec = timeout_sec;	//HTTP通信タイムアウト秒数
}

function httpRequest(get_or_post, target_url, funcitonReference, post_str) {

	var httpObj = false;
	if(window.XMLHttpRequest) {
		httpObj = new XMLHttpRequest();
    } else {
		try {
			httpObj = new ActiveXObject("Msxml2.XMLHTTP");
			MSXMLHTTP = true;
		} catch (e) {
			try {
				httpObj = new ActiveXObject("Microsoft.XMLHTTP");
				MSXMLHTTP = true;
			} catch (E) {
				httpObj = false;
			}
		}
	}

	if(httpObj) {
		var connection_pushnum;
		//タイマーがセットされてなかったらセット
		if(TexttimerId == false)	TexttimerId = setInterval('httpTextTimeoutCheck()', 1000);
		httpObj.open(get_or_post, target_url, true);
		if(funcitonReference) {
			connection_pushnum = connections.push(new TextConnection(httpObj, 30));
			connections[connection_pushnum - 1].httpObj.onreadystatechange = function() {
				if (connections[connection_pushnum - 1].httpObj.readyState == 4) {
					if(connections[connection_pushnum - 1].timeout_sec != 0) {	//abort時も来るのでtimeout_secを確認
						if (connections[connection_pushnum - 1].httpObj.status == 200) {
							funcitonReference(connections[connection_pushnum - 1].httpObj.responseText);
						}
						delete connections[connection_pushnum - 1];
					}
				}
			}
		} else {
			connection_pushnum = connections.push(new TextConnection(httpObj, 1));
		}
		httpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		httpObj.send(post_str);
	}
}


//HTTPタイムアウト処理
function httpTextTimeoutCheck() {
	for(key in connections) {
		if(connections[key].timeout_sec != 0) {
			connections[key].timeout_sec --;
			if(connections[key].timeout_sec == 0) {
				//HTTPリクエストを中断する
				connections[key].httpObj.abort();
				delete connections[key];
			}
		}
	}
}


//すべてのHTTP中断処理
function httpAllAbort() {
	for(key in connections) {
		//HTTPリクエストを中断する
		connections[key].httpObj.abort();
		delete connections[key];
	}
}


//GETリクエストを配列に収納
function httpRetrieveGETRequest() { 
	var query = window.location.search.substring(1); 
	var parms = query.split('&'); 
	for(var i=0; i<parms.length; i++) { 
		var pos = parms[i].indexOf('='); 
		if (pos > 0) { 
			var key = parms[i].substring(0,pos); 
			var val = parms[i].substring(pos+1); 
			getrequest[key] = val; 
		} 
	} 
}


