﻿/**************************************************************
 *
 * [loadxml.js] XML file loader with XMLHttpRequest object.
 *       initial at 2006.12.11 by Hiroyuki Nakatsuka rev.1.00
 *          modified at 2008.05.21 by Blow Line Inc. rev.2.00
 *          modified at 2009.04.26 by Blow Line Inc. rev.2.10
 *          modified at 2010.09.02 by Littel Corp.   rev.2.20
 * @author : hiroyu-n@littel.co.jp
**************************************************************/
/* XML data transport functions. */
function createXmlHttp(){
	// Mozilla, Firefox, Safari, IE7
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	// IE5, IE6
	} else if (window.ActiveXObject) {
		try {
			// MSXML3
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			// MSXML2まで
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
	} else {
		return null;
	}
}

// Added at rev.2.10 by Hiroyuki Nakatsuka.
function spt_getPostString(paramObj){
	var resultStr = "";
	var resultArr = [];
	for(var i in paramObj){
		resultArr.push(i + "=" + encodeURIComponent(paramObj[i]))
	}
	resultStr = resultArr.join("&");
	return resultStr;
}

function getContent(URL, METHOD, Params, store, handler){
	if(URL==""||METHOD==""){
		return false;
	}
	// GETの場合のキャッシュ対策
	switch(METHOD){
		case "GET":
		case "get":
			URL = URL+"?rnd="+(new Date().getTime());
			var postdata = "";
			break;
		case "POST":
		case "post":
			var postdata = Params;
			break;
		default:
			return false;
	}
	/* generate Result object storage. */
	document[store] = {};
	/* XMLHttpRequestオブジェクト作成 */
	var xmlhttp = createXmlHttp();
	if (xmlhttp == null) {
		window.alert("データベース サーバと接続できませんでした。\nAjaxに対応したWebブラウザをご利用ください。");
	}
	
	/* レスポンスデータ処理方法の設定 */
	if(xmlhttp.addEventListener){
		xmlhttp.addEventListener("load", handleHttpEvent, false);
	}else{
		xmlhttp.onreadystatechange = handleHttpEvent;
	}
	
	/* レスポンスデータ処理用のコールバック関数を定義 */
	function handleHttpEvent(){
		//alert("status >>\n"+xmlhttp.statusText);
		switch(xmlhttp.readyState){
			case 0:
				//alert("ajax session un-initialized.");
				break;
			case 1:
				//alert("ajax session data loading.");
				break;
			case 2:
				//alert("ajax data loaded.");
				break;
			case 3:
				//alert("ajax data interactive.");
				break;
			case 4:
				//alert("ajax data completed.");
				if (xmlhttp.status == 200) {
					//window.alert(xmlhttp.responseText);	 //レスポンスデータを表示します。
					//Test code.
					if(xmlhttp.responseText.indexOf("404 File Not Found")>-1){
						document[store]['ajaxState'] = "Server Transport Error.(404)";
						return false;
					}else if(xmlhttp.responseText.indexOf("Error 500")>-1){
						document[store]['ajaxState'] = "Server Internal Error.(500)";
						return false;
					}
					if(xmlhttp.responseText.length!=0){
						document[store]['ajaxState'] = "Succeeded.(2xx)";
						document[store]['ajaxText'] = xmlhttp.responseText;
						document[store]['ajaxXml'] = xmlhttp.responseXML;
						//alert(xmlhttp.responseXML.firstChild.nodeValue);
						handler(document[store]);
					}
				} else {
					window.alert("通信エラーが発生しました。\nCode >> " + xmlhttp.status + "\n" + xmlhttp.responseText);
				}
			break;
		}
	}
	
	/* HTTPリクエスト実行 */
	try{
		xmlhttp.open(METHOD, URL, true);
	}catch(e){
		/*if(e){
			var msg = "";
			for(var i in e){
				msg += "[open.THROW]['" + i + "'] = " + e[i];
			}
			//alert(msg);
		}else{
			//alert("xmlhttp.open threw exception.");
		}*/
	}finally{
		//alert("xmlhttp.open called.");
	}
	try{
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xmlhttp.send(postdata);
	}catch(e3){
		/*if(e3){
			var msg3 = "";
			for(var i in e3){
				msg3 += "[send.THROW]['"+i+"'] = "+e3[i];
			}
			//alert(msg3);
		}else{
			//alert("xmlhttp.send threw exception.");
		}*/
	}finally{
		//alert("posted >>\n"+postdata);
	}
	return true;
}
