/***動作可能なブラウザ判定*********************************/
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);
}

/***XMLHttpResquestオブジェクト生成************************/
function createHttpRequest(){
	if(window.ActiveXObject){
		//Win e4,e5,e6
		try{
			return new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				return new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e2){
				return null;
			}
		}
	}else if(window.XMLHttpRequest){
		//Win Mac Linux m1,f1,o8 Mac s1 Linux k3
		return new XMLHttpRequest();
	}else{
		return null;
	}
}

/***Ajax送受信関数*****************************************/
//callback : 受信時に起動する関数
//async : 同期
//sload : スーパーロード

function sendRequest(callback,data,method,url,async,sload,user,password){
	//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){
		oj.onload = function(){
			callback(oj);
		}
	}else{
		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);

	//ヘッダセット
	setEncHeader(oj);

	//デバッグ
	//alert("///class-ajax.js/// \n data:"+data+" \n method:"+method+" \n url:"+url+" \n async:"+async);

	//sendメソッド
	oj.send(data);

	/***エンコードヘッダセット関数***/
	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=1;i<datas.length;i++){
				var dataq = datas[i].split('=');
				encdata += '&' + encodeURIComponent(dataq[0])+'='+encodeURIComponent(dataq[1]);
			}
		}else{
			encdata = "";
		}

		return encdata;
	}

	return oj;
}
