function AJAX(){
	this.attr = '';
	this.display = false;
	this.loadingIcon = '/scripts/ajax-loader.gif';

    this.getValue=function(name,defaultValue){
        var config = new RegExp(name+"=([^,]+)", "i"); //get name/value config pair (ie: width=400px,)
        return (config.test(this.attr)) ? RegExp.$1:defaultValue; //return value portion or 0 (false) if none found
    }//

    this.setAttr=function(attr){
        this.attr = attr;
    }//

	this.getResponseType=function(){
		return this.responseType;
	}//

	this.getRequest=function(){
		if(window.ActiveXObject) //IE Browser
			return new ActiveXObject("Microsoft.XMLHTTP");

		if(window.XMLHttpRequest)//Other Browser
			return new XMLHttpRequest();
		return false;
	}//

	this.actionRequestIcon=function(){
		var icon = document.createElement('img')
		icon.setAttribute('border',0);
		icon.setAttribute('src',this.getValue('icon',this.loadingIcon));
		return icon;
	}

	this.actionRequest=function(request,obj){
		/*
		0: 요청이 개시되지 않음.(open()을 호출하기 전)
		1: 요청을 설정했지만 전송되지는 않았음.(send()를 호출하기 전)
		2: 요청을 설정한 다음 처리 중(이 시점에서 일반적으로 응답에서 나온 컨텐트 헤더를 얻는다.)
		3: 요청 처리 중; 종종 응답에서 부분적인 데이터를 사용할 수 있다. 하지만 서버는 자체 응답이 완료되지 않았다.
		4: 응답 완료. 서버 응답을 얻은 다음 이를 활용한다.
		*/
		return function() {
			switch(request.readyState){
				case 4:
					obj.setResponse(request);
					break;	
				default:
					//obj.display.appendChild(obj.actionRequestIcon());
					break;
			}
		}
	}//

	this.setResponseByType=function(request){
		responseType = request.getResponseHeader("Content-type");
		switch(responseType.toLowerCase()){
			case "application/xml" :
				var xml = new XML();
				xml.setAttr('display='+obj.display.getAttribute('id'));
				xml.run(xml.loadString(request.responseText));
				break;
			default: //text/plan or text/html
				this.display.innerHTML = request.responseText;
				break;
		}
	}//

	this.setResponse=function(request) {
		switch(request.status){
			case 200://정상
				this.setResponseByType(request);
				break;
			case 404:
				this.display.appendChild(document.createTextNode("Request URL does not exist"));
				break;
			default:
				this.display.appendChild(this.actionRequestIcon());
				break;
		}
	}//

	this.run=function(obj,queryString){
		var url = this.getValue('url',false);
		if(!url){
			alert('get URL:'+url+' error');
			return false;
		}

		this.display = document.getElementById(this.getValue('display',false));
		if(!this.display){
			alert('get Display Element Error');
			return false;
		}

		var request = this.getRequest();
		if(!request)
			alert("XMLHttpRequest Create Fail!!");
		request.open(this.getValue('method','GET'),url,this.getValue('async',true));
		request.onreadystatechange = this.actionRequest(request,this);
		//request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		request.send(queryString);
	}//
}//AJAX
