// made by iNum 2007.01.28 (Hwang In-weon, inumiz@gmail.com)
function AjaxClass(cName, handleFunc){

		// XML COM OBJECT
		if(cName == null || cName == "") return errorStr("변수명이 필요합니다.");
		//if(handleFunc == null){
		//	alert("Ajax객체에 쓰일 핸들함수를 넣어주셔야 합니다");
		//	return null;
		//}
		var handleFunction = function(){ eval(cName + ".handle();"); }; //handleFunc;
		var className = "AjaxClass";
		var myID = Math.round(Math.random() * 10000000);
		var xmlhttp = createXMLHttpRequest();
		var style = { 
			elementName : null,
			method : "POST",
			async : true,
			loadedAction:null,
			isLoading:false
		};
		var XMLHIT = null;

		var cMode = "AJAX";
		var AHAH_DATA = "";

		var requestTimer = null;

		
		// I_METHOD
		function createXMLHttpRequest() {
			try{
				if (window.ActiveXObject) {
					return new ActiveXObject("Microsoft.XMLHTTP");
				} 
				else if (window.XMLHttpRequest) {
					return new XMLHttpRequest();
				}
			}catch(e){ errAlert(e, className + ".createXMLHttpRequest"); }
		}
		
		//Specially Method.. 
		function handleStateChange() {
			try{
				//setLoadingStat = function(id, isLoaded){
				
				if(xmlhttp.readyState == 1){
					style.isLoading = true;
					if(LMgr != null) LMgr.addProcess(myID);	
				}else if(xmlhttp.readyState == 4) {
					style.isLoading = false;
					if(LMgr != null) LMgr.delProcess(myID);	
					//if(sMgr != null) sMgr.setLoadingStat(myID, true);						
					if(xmlhttp.status == 200) {
						if(cMode == "AJAX"){
							xml = xmlhttp.responseXML;
							XMLHIT = xml.getElementsByTagName(style.elementName);
							style.loadedAction(XMLHIT);
						}else if(cMode=="AHAH"){
							AHAH_DATA = xmlhttp.responseText;
//							GEID('debugDiv').innerHTML += AHAH_DATA;
							style.loadedAction(AHAH_DATA);
						}
					}
				}
				if(requestTimer != null) {
					try{
						clearTimeout(requestTimer); 
					}catch(e){

					}
					requestTimer = null;
				}
				/*else{
					alert("잠시 후 시도해 주십시오. : J_AC_HS :" + xmlhttp.readyState);
				}*/
//				alert(xmlhttp.readystate);
			}catch(e){
				errAlert(e, "AjaxMgr.handleStateChange("+cName+")");
			}
		}
		
		
		
		// PS_METHOD
		this.getXML = function(){
			return XMLHIT;
		}

		this.getAHAH = function(){
			return AHAH_DATA;
		}
		
		this.isLoadingChk = function(){
			try{
				if(style.isLoading) {
					//alert("로딩중입니다");
					setTimeout(new Function(className + ".isLoadingCheck()"), 50);
					if(xmlhttp.readyState == 4){
						isLoading=false;
						return true;
					}
					return false;
				}
			}catch(e) { errAlert(e, className + ".isLoadingCheck()"); }
		
		}

	this.getXMLData = function (url, nowFunc, query, eName) {
		try{
			cMode = "AJAX";
			if(this.isLoadingChk()) return;			
			
			XMLHIT = null;
			
			style.loadedAction = nowFunc;
			
			if(style.loadedAction == null) {
				alert("handle function을 설정해 주십시오");
				return;
			}
			
			if(xmlhttp == null) xmlhttp = createXMLHttpRequest();
			style.elementName = eName;
			
			var queryString  = createQuery(query);
			with(xmlhttp){
				if(AJAX_CONFIG.timeout > 0) requestTimer = setTimeout(function(){eval(cName + ".abort();")}, AJAX_CONFIG.timeout);
				open(style.method, url, style.async);
				onreadystatechange = handleFunction;
				setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
				send(queryString);
			}
			
		}catch(e){
			errAlert(e, "AjaxMgr.getXMLData");
		}
	}

	this.getAHAHData = function(url, nowFunc, query){
		try{
			
			cMode = "AHAH";
			if(this.isLoadingChk()) return;			
			style.loadedAction = nowFunc;

			if(style.loadedAction == null) {
				alert("handle function을 설정해 주십시오");
				return;
			}
			
			if(xmlhttp == null) xmlhttp = createXMLHttpRequest();
			
			var queryString  = createQuery(query);
			with(xmlhttp){
				if(AJAX_CONFIG.timeout > 0) requestTimer = setTimeout(function(){eval(cName + ".abort();")}, AJAX_CONFIG.timeout);

				open(style.method, url, true);
				//timeout = 10;
				//onTimeout = function(){alert("timeOut"); };
				onreadystatechange = handleFunction;
				setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
				send(queryString);
			}

		}catch(e){
			errAlert(e, className + ".getAHAHData()");
		}
	}

	this.abort = function(msg){
		if(msg==null) msg=true;
		if(msg) alert("서버와의 통신이 길어지고 있습니다....");
		xmlhttp.abort();
	}

	
	this.handle = function(){
		handleStateChange();
	}
	
	this.toString = function(){
		return className + " Class (NewAjaxControll.js)";
	}

}
				

// -- AJAX CLASS END
