﻿//簡易クロスブラウザライブラリ
//参考：『入門Ajax』SoftBankCreative発行

var flgDbg = 0;

//動作可能ブラウザ判定
function chkAjaBrowser()
{
	var a,ua = navigator.userAgent;
	this.bw= {
		safari	:((a=ua.split('AppleWebKit/')[1])?a.split('(')[0]:0)>=124,
		konqueror	:((a=ua.split('Konqueror/')[1])?a.split(';')[0]:0)>=3.3,
		mozes	:((a=ua.split('Gecko/')[1])?a.split(" ")[0]:0)>=20011128,
		opera	:(!!window.opera) && ((typeof XMLHttpRequest)=='function'),
		msie	:(!!window.ActiveXObject)?(!!createHttpRequest()):false
	}
	return (this.bw.safari||this.bw.konqueror||this.bw.mozes||this.bw.opera||this.bw.msie)
}

//XMLHttpRequestオブジェクト生成
function createHttpRequest()
{
	if(window.ActiveXObject){
		//WinIE e4,e5,e6用
		try{
			DebugMsg("XMLHttpRequest：Msxml2.XMLHTTP")
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				DebugMsg("XMLHttpRequest：Microsoft.XMLHTTP")
				return new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				DebugMsg("XMLHttpRequest：null")
				return null;
			}
		}
	} else if(window.XMLHttpRequest){
		//WinIE以外のAjaxブラウザ
		DebugMsg("XMLHttpRequest：XMLHttpRequest")
		return new XMLHttpRequest();
	} else {
		//上記以外
		DebugMsg("XMLHttpRequest：null")
		return null;
	}
}

//送受信関数
function sendRequest(callback,data,method,url,async,sload,user,password)
{
	DebugMsg("Start sendRequest")

	//XMLHttpRequestオブジェクト生成
	var oj = createHttpRequest();
	if (oj == null) return null;

	//強制ロードの設定
	var sload = (!!sendRequest.arguments[5])?sload:false;
	if (sload || method.toUpperCase() == 'GET') url += "?";
	if (sload) url=url+"t="+(new Date()).getTime();

	//ブラウザ判定
	var bwoj = new chkAjaBrowser();
	var opera = bwoj.bw.opera;
	var safari = bwoj.bw.safari;
	var konqueror = bwoj.bw.konqueror;
	var mozes = bwoj.bw.mozes;

	//受信処理
	if (opera || safari || mozes){
		DebugMsg("受信処理：opera || safari || mozes")
		oj.onload = function(){callback(oj);}
	} else {
		DebugMsg("受信処理：opera || safari || mozes　以外")
		oj.onreadystatechange = function()
		{
			if (oj.readyState == 4){
				callback(oj);
			}
		}
	}

	//URLエンコード
	//data = uriEncode(data)
	if (method.toUpperCase() == 'GET'){
		url += data
	}

	//openメソッド
	oj.open(method,url,async,user,password);

	//ヘッダ application/x-www-form-urlencodeセット
	setEncHeader(oj)

	//デバッグ
	DebugMsg("////jslb_ajaxxx.js//// \n data:" + data + "\n method:" + method + "\n url:" + url + "\n async:" + async);

	//sendメソッド
	oj.send(data);

	//URIエンコードヘッダセット
	function setEncHeader(oj){
		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){
		if(data != ""){
			//&と=で一旦分解しencode
			var encdata = '';
			var datas = data.split('&');
			for (i=0;i<datas.length;i++)
			{
				var dataq = datas[i].split('=');
				encdata += '&' + encodeURIComponent(dataq[0])+'='+encodeURIComponent(dataq[1]);
			}
		} else {
			encdata="";
		}
		return encdata;
	}

	return oj
}

function DebugMsg(strMsg)
{
	if (flgDbg == 1){
		alert(strMsg)
	}
}

function $(tagId)
{
	return document.getElementById(tagId);
}
