﻿///
///	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)
{
	//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;
	}
	
	//受信処理

    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 

	if(window.opera || safari || konqueror || mozes)
	{
		xmlObj.onload = function()
		{
			if ( xmlObj.readyState == 4 )
			{
				//if( xmlObj.status == 200 ) {
					callback_onload(xmlObj);
				//}
			}
		}
	} else {
		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
	xmlObj.open(method,url,false);
	//xmlObj.open("GET",url + "?test=1" + data,true);
	//xmlObj.setRequestheader('Content-Type','XMLHttpRequest');
	setEncHeader(xmlObj);
	//xmlObj.send(null);
	//send
	xmlObj.send(data);
	
	return xmlObj;
}

function sendRequestFile(callback,data,method,url)
{
	//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();
	//open
	xmlObj.open(method,url,false);
	//xmlObj.open("GET",url + "?test=1" + data,true);
	//xmlObj.setRequestheader('Content-Type','XMLHttpRequest');
	setEncHeaderFile(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
}

function setEncHeaderFile(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 = 'multipart/form-data; 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;
	}
}