function AJAX (){
	var xmlHttp = null;
	var strActionUrl;
	var strMethodType;
	var strFormName;
	var strParameter;
	var onSuccess;
	var onFailure;

	this.getXMLHttpRequest = function()
	{
		if(window.XMLHttpRequest)
		{
			this.xmlHttp = new XMLHttpRequest();
		}
		else if (window.ActiveXObject && !(navigator.userAgent.indexOf('Mac') >= 0 && navigator.userAgent.indexOf("MSIE") >= 0))
		{
			this.xmlHttp = this.getActiveXObject(["Microsoft.XMLHTTP","Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP"]);
		}

		if (xmlHttp == null)
		{
		}
	}

	this.getActiveXObject = function (arrayList)
	{
		var returnObject;

		for (var i = 0; i < arrayList.length; i++)
		{
			try	{
				returnObject = new ActiveXObject(arrayList[i]);
				break;
			}
			catch (e) {
			}
		}

		return returnObject;
	}

	this.RequestForm = function(url, method, form, onSuccess, onFailure)
	{
		this.strActionUrl		= url;
		this.strMethodType		= method;
		this.strFormName		= form;
		this.strParameter		= this.getFormData();
		this.onSuccess			= onSuccess;
		this.onFailure			= onFailure;

		//post,get Àº ¹«Á¶°Ç ¼Ò¹®ÀÚ Ã³¸®
		if(this.strMethodType) this.strMethodType = this.strMethodType.toLowerCase();

		this.getXMLHttpRequest();
		this.sendData();
	}

	this.sendData = function()
	{
		if(this.strMethodType == 'get')
		{
			this.xmlHttp.open("GET",this.strActionUrl + '?' + this.strParameter, false);
		}
		else if(this.strMethodType == 'post')
		{
			this.xmlHttp.open("POST",this.strActionUrl, true);
		}

		this.xmlHttp.setRequestHeader("Content-type", this.strMethodType == 'post' ? "application/x-www-form-urlencoded" : "text/xml");
		this.xmlHttp.setRequestHeader("Cache-Control", "no-cache");
		this.xmlHttp.setRequestHeader("Pragma", "no-cache");
		this.xmlHttp.setRequestHeader("Referer", this.strActionUrl);

		if(this.strMethodType == 'post')
		{
			this.xmlHttp.onreadystatechange = function()
			{
				if(Ajax.xmlHttp.readyState == 4)
				{
					if(Ajax.xmlHttp.status == 200){
						Ajax.onSuccess(Ajax.xmlHttp.responseText);
					}
					else {
						Ajax.onFailure(Ajax.xmlHttp.responseText);
					}
				}
			}

			this.xmlHttp.send(this.strParameter);
		}
		else if(this.strMethodType == 'get')
		{
			this.xmlHttp.send(null);

			if (this.xmlHttp.status == 200) {
				Ajax.onSuccess();
			}
			else {
				Ajax.onFailure();
			}
		}
	}

	this.getFormData = function ()
	{
		var strReturnData = '';
		var objForm = eval('document.forms["' + this.strFormName + '"]');
		var objFormElements;
		var strLastName;

		for( var i = 0; i < objForm.elements.length; i++ )
		{
			objFormElements = objForm.elements[i];

			if( objFormElements.type == 'text' || objFormElements.type == 'hidden' ||
				objFormElements.type == 'password' || objFormElements.type == 'textarea')
			{
				strReturnData += objFormElements.name + '=' + escape(objFormElements.value) + '&';
			}
			else if(objFormElements.type == 'select-one' &&  objFormElements.selectedIndex > -1)
			{
				strReturnData += objFormElements.name + "=" + escape( objFormElements.options[objFormElements.selectedIndex].value) + '&';
			}
			else if( objFormElements.type == 'checkbox' && objFormElements.checked )
			{
				if ( objFormElements.name == strLastName )
				{
					if ( strReturnData.lastIndexOf('&') == strReturnData.length - 1 )
					{
						strReturnData = strReturnData.substr(0, strReturnData.length - 1);
					}

					strReturnData += ',' + escape(objFormElements.value);
				}
				else
				{
					strReturnData += objFormElements.name + '=' + escape(objFormElements.value);
				}

				strReturnData += '&';
				strLastName = objFormElements.name;
			}
			else if( objFormElements.type == 'radio' && objFormElements.checked )
			{
				strReturnData += objFormElements.name + '=' + escape(objFormElements.value) + '&';
			}
		}

		strReturnData = strReturnData.substr(0, strReturnData.length - 1);
		return strReturnData;
	}
}

var Ajax = new AJAX();