﻿/////////////////////////////////////////////////////////////////////////////////
//
//	AJAX_ORIDINAL_LIBRALY 作成
//	
//	Histtory：
//	2006-11-15	Ishii	Postリクエストに対応
//	2006-04-27	Ishii	XMLオブジェクト生成関数ならびに、コールバック登録タイプのsendRequestを実装
//
//	Base: 暫定版Ajax用ライブラリを参考(著作権フリー)
//	http://jsgt.org/mt/archives/01/000409.html
//
/////////////////////////////////////////////////////////////////////////////////

///
///	XMLオブジェクト生成
///
function createXMLHttpRequest()
{
	if(window.XMLHttpRequest)
	{
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		try{
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e)
		{
			try{
				return new ActiveXObject("Microsoft.XMLHTTP");		
			} catch (e2) {
				return null;
			}
		}
	} else {
		return null;
	}
}

///
///	コールバック登録タイプのsendRequest実装
///
/// callback	受信データを処理する関数を指定
/// data		送信データ
/// method		POST or GET
/// url			送信先URL
///
function sendRequest(callback,data,method,url,async)
{
	//XMLオブジェクト生成
	var xmlObj = createXMLHttpRequest();
	if( xmlObj == null ) return null;
	
	//callback関数を分解
	var callback_onload;
	var callback_onbeforsetheader;
	if(typeof callback == 'object')
	{
		callback_onload = callback.onload;
		callback_onbeforsetheader = callback.onbeforsetheader;
	} else 
	{
		callback_onload = callback;
		callback_onbeforsetheader = null;
	}
	
	//受信処理
	
	xmlObj.onreadystatechange = function()
	{
		if ( xmlObj.readyState == 4 )
		{
			if( xmlObj.status == 200 ) {
				callback_onload(xmlObj);
			}
		}
	}
	
	//URLエンコード
	data = uriEncode(data,url) + "&cache="+(new Date()).getTime();
	if(method.toUpperCase() == 'GET' ) {
		url += data;
	}
	//open
	if('undefined'==typeof(async))
	{
	    async=true;
	}
	xmlObj.open(method,url,async);
	//xmlObj.open("GET",url + "?test=1" + data,true);
	// xmlObj.setRequestheader('Content-Type','XMLHttpRequest');
	setEncHeader(xmlObj);
	//xmlObj.send(null);
	//send
	xmlObj.send(data);
	
	return xmlObj;
}

//URIエンコードヘッダセット
function setEncHeader(oj){
	
	//ヘッダapplication/x-www-form-urlencodedセット
	// @see  http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#h-17.13.3
	// @see  #h-17.3
	//   ( enctype のデフォルト値は "application/x-www-form-urlencoded")
	//   h-17.3により、POST/GET問わず設定
	//   POSTで"multipart/form-data"を指定する必要がある場合はカスタマイズしてください。
	//
	//  このメソッドがWin Opera8.0でエラーになったので分岐(8.01はOK)
	var contentTypeUrlenc = 'application/x-www-form-urlencoded; charset=UTF-8';
	if(!window.opera){
		oj.setRequestHeader('Content-Type',contentTypeUrlenc);
	} else {
		if((typeof oj.setRequestHeader) == 'function')
			oj.setRequestHeader('Content-Type',contentTypeUrlenc);
	}	
	return oj
}
		
//URLエンコード
function uriEncode(data,url)
{
	var encdata = (url.indexOf('?')==-1)?'?dmy':'';
	if(typeof data=='object')
	{
		for(var i in data)
		{
			encdata+='&' +encodeURIComponent(i)+'='+encodeURIComponent(data[i]);
		}
	} else if(typeof data=='string'){
		if(data=="") return "";
		var encdata='';
		var datas = data.split('&');
		for(var i=1;i<datas.length;i++)
		{
			var dataq = datas[i].split('=');
			encdata += '&' +encodeURIComponent(dataq[0])+'='+encodeURIComponent(dataq[1]);//i]);
		}
		return encdata;
	}
}
