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)
}


//객체 생성함수
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 ;
	}
}
function sendRequest(callback,data,method,url,async,sload,user,password)
{
	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();

//gta일 경우 인코딩 안함
	var gta = (!!sendRequest.arguments[6])?gta:false;

	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 인코딩 - GTA 자료는 XML이므로 encoding 안함
	data = uriEncode(data)
	if(method.toUpperCase() == 'GET') {
		url += data
	}
	
	//open 메소드
	oj.open(method,url,async,user,password);

	//헤더 application/x-www-form-urlencoded 설정
	setEncHeader(oj)

	//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=1;i<datas.length;i++)
			{
				var dataq = datas[i].split('=');
				if(i==1) encdata += escape(dataq[0])+'='+escape(dataq[1]);
				else encdata += "&" + escape(dataq[0])+'='+escape(dataq[1]);
			}
		} else {
			encdata = "";
		}
		return encdata;
	}
	return oj
}

// used to find the Automation server name
function getDomDocumentPrefix() {
	if (getDomDocumentPrefix.prefix)
		return getDomDocumentPrefix.prefix;
	
	var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
	var o;
	for (var i = 0; i < prefixes.length; i++) {
		try {
			// try to create the objects
			o = new ActiveXObject(prefixes[i] + ".DomDocument");
			return getDomDocumentPrefix.prefix = prefixes[i];
		}
		catch (ex) {};
	}
	
	throw new Error("Could not find an installed XML parser");
}

function getXmlHttpPrefix() {
	if (getXmlHttpPrefix.prefix)
		return getXmlHttpPrefix.prefix;
	
	var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
	var o;
	for (var i = 0; i < prefixes.length; i++) {
		try {
			// try to create the objects
			o = new ActiveXObject(prefixes[i] + ".XmlHttp");
			return getXmlHttpPrefix.prefix = prefixes[i];
		}
		catch (ex) {};
	}
	
	throw new Error("Could not find an installed XML parser");
}

//////////////////////////
// Start the Real stuff //
//////////////////////////


// XmlHttp factory
function XmlHttp() {}

XmlHttp.create = function () {


	try {
		if (window.XMLHttpRequest) {
			var req = new XMLHttpRequest();

			// some versions of Moz do not support the readyState property
			// and the onreadystate event so we patch it!
			if (req.readyState == null) {
				req.readyState = 1;
				req.addEventListener("load", function () {
					req.readyState = 4;
					if (typeof req.onreadystatechange == "function")
						req.onreadystatechange();
				}, false);
			}

			return req;
		}
	
		if (window.ActiveXObject) {
			return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
		}
	}
	catch (ex) {}
	// fell through
	throw new Error("Your browser does not support XmlHttp objects");
};

// XmlDocument factory


function XmlDocument() {}

XmlDocument.create = function () {
	try {
		// DOM2
		if (document.implementation && document.implementation.createDocument) {
			var doc = document.implementation.createDocument("", "", null);
			
			// some versions of Moz do not support the readyState property
			// and the onreadystate event so we patch it!
			if (doc.readyState == null) {
				doc.readyState = 1;
				doc.addEventListener("load", function () {
					doc.readyState = 4;
					if (typeof doc.onreadystatechange == "function")
						doc.onreadystatechange();
				}, false);
			}
			
			return doc;
		}
		if (window.ActiveXObject)
			return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
	}
	catch (ex) {}
	throw new Error("Your browser does not support XmlDocument objects");
};

// Create the loadXML method and xml getter for Mozilla
if (window.DOMParser &&
	window.XMLSerializer &&
	window.Node && Node.prototype && Node.prototype.__defineGetter__) {

	// XMLDocument did not extend the Document interface in some versions
	// of Mozilla. Extend both!
	XMLDocument.prototype.loadXML = 
	Document.prototype.loadXML = function (s) {
		
		// parse the string to a new doc	
		var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
		
		// remove all initial children
		while (this.hasChildNodes())
			this.removeChild(this.lastChild);
			
		// insert and import nodes
		for (var i = 0; i < doc2.childNodes.length; i++) {
			this.appendChild(this.importNode(doc2.childNodes[i], true));
		}
	};
	
	
	/*
	 * xml getter
	 *
	 * This serializes the DOM tree to an XML String
	 *
	 * Usage: var sXml = oNode.xml
	 *
	 */
	// XMLDocument did not extend the Document interface in some versions
	// of Mozilla. Extend both!
	XMLDocument.prototype.__defineGetter__("xml", function () {
		return (new XMLSerializer()).serializeToString(this);
	});
	Document.prototype.__defineGetter__("xml", function () {
		return (new XMLSerializer()).serializeToString(this);
	});
}

// 동기 방식 STD //

dynamic = {};
dynamic.load = function(sUri, sFormat, method, data) {
	var xmlHttp = XmlHttp.create();
	var ret;
	xmlHttp.open(method, sUri, false);
	xmlHttp.send(null);
 
	try {
		switch (sFormat) {
			case 'xml':
				ret = xmlHttp.responseXML.xml;
				break;
			case 'text': case 'html': default:
				ret = xmlHttp.responseText;
				break;
		}

	} catch (e) {
 
		ret = ('Error while loading...');
	} finally {
		return ret;
	}
}

dynamic.loadText = function(sUri) {
	return dynamic.load(sUri,'text', 'GET', '');
}
dynamic.loadHtml = function(sUri) {
	return dynamic.load(sUri,'html', 'GET', '');
}
dynamic.loadXml = function(sUri) {
	return dynamic.load(sUri,'xml', 'GET', '');
}
dynamic.loadXmlPOST = function(sUri,method, data) {
	return dynamic.load(sUri,'xml', method, data);
}
// 동기 방식 STD //

// 비동기 방식 STD //
dynamic_true = {};
dynamic_true.load = function(sUri, sFormat, method, data) {
	var xmlHttp = XmlHttp.create();
 	xmlHttp.open(method, sUri, false);
	xmlHttp.send(null);
 
	try {
		switch (sFormat) {
			case 'xml':
				var ret = xmlHttp.responseXML.xml;
				break;
			case 'text': case 'html': default:
				if(xmlHttp.readyState==4){
				 var ret = xmlHttp.responseText;
				}
				break;
		}

	} catch (e) {
		ret = ('Error while loading...');
	} finally {
		return ret;
	}
}

dynamic_true.loadText = function(sUri) {
	return dynamic_true.load(sUri,'text', 'GET', '');
}
dynamic_true.loadHtml = function(sUri) {
	return dynamic_true.load(sUri,'html', 'GET', '');
}
dynamic_true.loadXml = function(sUri) {
	return dynamic_true.load(sUri,'xml', 'GET', '');
}
dynamic_true.loadXmlPOST = function(sUri,method, data) {
	return dynamic_true.load(sUri,'xml', method, data);
}

// 비동기 방식 END //
