// 2011-04-13 mic21残件対応 #132 Y.Yokoyama
// オプションメニューのajax対応

//ajax非同期通信クライアントの生成
function createHttpRequest() {
	var xmlhttp = null;

	if (window.ActiveXObject) {
		try {
			// MSXML2以降用
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				// 旧MSXML用
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {

			}
		}
	} else if (window.XMLHttpRequest) {
		// Win Mac Linux m1,f1,o8 Mac s1 Linux k3用
		xmlhttp = new XMLHttpRequest();
	} else {

	}
	if (xmlhttp == null) {
		alert("Can not create an XMLHTTPRequest instance");
	}

	return xmlhttp;
}

// ajax送信処理
//
// xmlhttp httpクライアント
// method  メソッド(POST,GETなど)
// url     通信先URL
// async   通信失敗にかかわらず処理継続を行うかどうか(true：処理を継続しない。false:継続する)
// param   リクエストパラメータ
// callbak 処理完了時に呼ばれるコールバック関数
function sendRequest(xmlhttp, method, url, async, param, callback) {
	// ブラウザ判定
	var ua = navigator.userAgent;
	var safari = ua.indexOf("Safari") != -1;
	var konqueror = ua.indexOf("Konqueror") != -1;
	var mozes = ((a = navigator.userAgent.split("Gecko/")[1]) ? a.split(" ")[0]
			: 0) >= 20011128;

	// サーバーからの受信処理
	// opera : onreadystatechange に多重レスバグがあるので onload が安全
	// Moz,FireFox : readyState==3 でも受信するので通常は onload が安全
	// Win ie : onload が動作しない
	// Konqueror : onload が不安定
	if (window.opera || safari || mozes) {
		xmlhttp.onload = function() {
			callback(xmlhttp);
		}
	} else {
		xmlhttp.onreadystatechange = function() {
			// サーバーからの応答判定
			// 0 : 初期化されていません
			// 1 : 読み込み中です
			// 2 : 読み込み完了
			// 3 : 双方向に扱えます
			// 4 : すべて完了しました
			if (xmlhttp.readyState == 4) {

				// サーバーの応答コード判定
				// 200 : OK
				if (xmlhttp.status == 200) {
					callback(xmlhttp);
				} else {
					alert('There was a problem with the request.');
				}
			}
		}
	}

	// サーバーからの送信処理
	xmlhttp.open(method, url, async);
	xmlhttp.setRequestHeader("Content-Type",
			"application/x-www-form-urlencoded");
	xmlhttp.send(param);
}

//ajax送信処理（オーバロード)
//
//url     通信先URL
//param   リクエストパラメータ
//callbak 処理完了時に呼ばれるコールバック関数
function sendPostRequest(url, param, callBack){
	var xmlhttp = createHttpRequest();
	if (xmlhttp == null) {
		return null;
	}	
	sendRequest(xmlhttp, "POST", url, false, param, callBack);	
}

//response結果を指定のオプションメニューに設定する。
//responseのIF仕様は以下のとおり。
//response = id1/name1,id2/id2, ・・・ ,idN/nameN
//(データが存在しない場合は、1バイトの制御文字
//
//xmlhttp Httpクライアント
//options 設定対象のオプションメニュー
function setOption(xmlhttp, options, selValue) {
	// 初期化
	for (i = options.length - 1; i >= 1; i--) {
		options[i] = null;
	}
	var result = xmlhttp.responseText;
	if ( result != null && result.length > 1){
		var resArray = result.split(",");
		for (i = 0; i < resArray.length; i++) {
			var list = resArray[i].split("__");
			options[i + 1] = new Option(list[1], list[0]);
			if (options[i + 1].value ==  selValue){
				options[i + 1].selected = true;
			}
		}
	}
	// alert("result =" + result);
}

