/**
 * µ¿ÀÛ°¡´ÉÇÑ ºê¶ó¿ìÀú ÆÇÁ¤
 * 
 * @sample		: if(chkAjaBrowser()) { location.href = 'nonajax.html'; }
 * 
 * @sample		: oj = new chkAjaBrowser(); if(oj.bw.safari) { // Safari ÄÚµå  }
 * @return		: ¶óÀÌºê·¯¸®°¡ µ¿ÀÛ°¡´ÉÇÑ ºê¶ó¿ìÀú¸¸ true  true | false
 *
 * [Ensable List] : v 0.38ÇöÀç
 * ====================================
 * Window IE 5.5+
 * Konqueror 3.3+
 * AppleWebKit°è (Safari, OmniWeb, Shiira) 124+
 * Mozilla°è (Firefox, Netscape, Galeon, Epiphany, K-Meleon, Sylera) 20011128+
 * Opera 8+
 */
function chkAjaBrowser() {

	var a, ua = navigator.userAgent ;
	this.bw = {
		safari		: ((a=ua.split('AppletWbKit/')[1])	? a.split('(')[0] : 0) >= 1024,
		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.ActiveObject) ? (!!createHttpRequest()) : false
	}

	return (this.bw.safari || this.bw.konqueror || this.bw.mozes || this.bw.opera || this.bw.msie) ;

}

var G_INCOMPAT = false;
function GBrowserIsCompatible() {
	if (G_INCOMPAT) return false;
	if (!window.RegExp) return false;
	var AGENTS = ["opera","msie","safari","firefox","netscape","mozilla"];
	var agent = navigator.userAgent.toLowerCase();
	for (var i = 0; i < AGENTS.length; i++) {
		var agentStr = AGENTS[i];
		if (agent.indexOf(agentStr) != -1) {
			var versionExpr = new RegExp(agentStr + "[ \/]?([0-9]+(\.[0-9]+)?)");
			var version = 0;
			if (versionExpr.exec(agent) != null) {
				version = parseFloat(RegExp.$1);
			}
			if (agentStr == "opera") 
				return version >= 7;
			if (agentStr == "safari") 
				return version >= 125;
			if (agentStr == "msie") 
				return (version >= 5.5 && agent.indexOf("powerpc") == -1);
			if (agentStr == "netscape") 
				return version > 7;
		}
	}
	return document.getElementById;
}


/**
 * XMLHttpRequest Object Create
 *
 * @sample		: oj = createHttpRequest()
 * @return		: XMLHttpRequest ¿ÀºêÁ§Æ®(ÀÎ½ºÅÏ½º)
 */
function createHttpRequest() {

	if(window.ActiveXObject) {

		/**
		 * Window IE4, IE5, IE6 ¿ë
		 */
		try{

			return new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{

				return new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e2){
				return null ;
			}
		}
	}else if(window.XMLHttpRequest){
		/** 
		 * Window Mac Linux (Mozilla 1.x, Firefox 1.x, Opera 8.x) | Mac (Safari 1.x) | Linux Konqueror 3.x ¿ë 
		 */
		return new XMLHttpRequest();
	}else{
		return null ;
	}

}

/**
 * ¼Û¼ö½Å ÇÔ¼ö
 *
 * @sample				: sendRequest(onloaded, '&prog=1', 'POST', './about.php', true, true)
 * @param	callback	: ¼Û¼ö½Å½Ã¿¡ ±âµ¿ÇÏ´Â ÇÔ¼ö ÀÌ¸§
 * @param	data		: ¼Û½ÅÇÏ´Â µ¥ÀÌÅÍ (&ÀÌ¸§1=°ª1&ÀÌ¸§2=°ª2...)
 * @param	method		: "POST" ¶Ç´Â "GET"
 * @param	url			: ¿äÃ»ÇÏ´Â ÆÄÀÏÀÇ URL
 * @param	async		: ºñµ¿±â¶ó¸é true, µ¿±â¶ó¸é false
 * @param	sload		: ¼öÆÛ·Îµå true·Î °­Á¦ »ý·« ¶Ç´Â false´Â ±âº»
 * @param	user		: ÀÎÁõ ÆäÀÌÁö¿ë »ç¿ëÀÚ ÀÌ¸§
 * @param	password	: ÀÎÁõ ÆäÀÌÁö¿ë ¾ÏÈ£
 * @return				: XMLHttpRequest ¿ÀºêÁ§Æ®(ÀÎ½ºÅÏ½º)
 */
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 ;

	/**
	 * ¼Û½ÅÃ³¸®
	 * opera´Â onreadystatechange¿¡ Áßº¹ÀÀ´äÀÌ ÀÖÀ» ¼ö ÀÖ¾î onload°¡ ¾ÈÀü
	 * Moz, FireFox´Â oj.readyState== 3¿¡¼­µµ ¼ö½ÅÇÏ¹Ç·Î º¸ÅëÀº onload°¡ ¾ÈÀü
	 * Win IE¿¡¼­´Â onload°¡ µ¿ÀÛÇÏÁö ¾Ê´Â´Ù
	 * KonquerorÀº onload°¡ ºÒ¾ÈÁ¤
	 * Âü°í http://jsgt.org/ajax/ref/test/response/responsetext/try1.php
	 */
	if(opera || safari || mozes){
		oj.onload = function() { callback(oj); } 
	}else{
		oj.onreadystatechange = function()
		{
			if(oj.readystate == 4){
				callback(oj);
			}
		}
	}

	/** URLÀÎÄÚµù */
	if(method.toUpperCase() == 'GET'){
		url += data ;
	}else{
		data = uriEncode(data);
		url += data ;
	}

	/** 
	 * open ¸Þ¼Òµå 
	 */
	oj.open(method, url, async, user, password);

	/** 
	 * Çì´õ application/x-www-form-urlendcoded ¼³Á¤ 
	 */
	setEncHeader(oj);

	/** µð¹ö±× */
	//alert("////jslb_ajaxxx.js//// \n data:"+data+" \n method:"+method+" \n url:"+url+" \n async:"+async);

	/** 
	 * send ¸Þ¼Òµå 
	 */
	oj.send(data);

	/** 
	 * URI ÀÎÄÚµù Çì´õ ¼³Á¤ 
	 */
	function setEncHeader(oj){
		/**
		 * Çì´õ application/x-www-form-urlendcoded ¼³Á¤
		 * @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 Opera 8.0¿¡¼­ ¿À·ù°¡ ³ª¹Ç·Î ºÐ±â (8.01Àº OK)
		 * //var contentTypeUrlenc = 'application/x-www-form-urlencoded; charset=UTF-8' ;
		 */
		
		var contentTypeUrlenc = 'application/x-www-form-urlencoded' ;
		if(!window.opera){
			oj.setRequestHeader('Content-Type',contentTypeUrlenc);
		}else{
			if((typeof oj.setRequestHeader) == 'function'){
				oj.setReqeustHeader('Content-Type',contentTypeUrlenc);
			}
		}

		return oj;
	}

	/**
	 * URL Encoding 
	 */
	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 ;
}

