function AJAXHelper()
{
	
}

AJAXHelper.prototype.CallSelfReturnXML= function(returnVariable, params)
{
	var requestURL;
	var queryString; 
	
	requestURL=window.location.pathname;
	
	queryString=this.ArrayToQueryString(Params);
			
	this.DoAJAX(requestURL, elementID, queryString);
	return returnVariable;
}

//호출페이지와 실행페이지가 같은 경우
AJAXHelper.prototype.CallSelf = function(elementID, Params)
{
	var requestURL;
	var queryString; 
	
	requestURL=window.location.pathname;
	
	queryString=this.ArrayToQueryString(Params);
			
	this.DoAJAX(requestURL, elementID, queryString);
	return;
}

//호출페이지와 실행페이지가 같은 경우
//Form전체를 파라미터로 사용하는 경우
AJAXHelper.prototype.CallSelfForForm = function(elementID, docForm, formatOpts)
{
	var requestURL;
	var queryString;
	
	requestURL=window.location.pathname;
	
	queryString=this.FormDataToQueryString(docForm, formatOpts);
	
	this.DoAJAX(requestURL, elementID, queryString);
	return;
}

//호출페이지와 실행페이지가 다른 경우
AJAXHelper.prototype.CallAnother=function(requestURL, elementID, Params)
{
	var queryString;
	
	queryString=this.ArrayToQueryString(Params);

	this.DoAJAX(requestURL, elementID, queryString);
	return;
}

//호출페이지와 실행페이지가 같은 경우
//Form전체를 파라미터로 사용하는 경우
AJAXHelper.prototype.CallAnotherForForm = function(requestURL, elementID, docForm, formatOpts)
{
	var queryString;
	
	queryString=this.FormDataToQueryString(docForm, formatOpts);
	
	this.DoAJAX(requestURL, elementID, queryString);
	return;
}

//XML형식의 값리턴
AJAXHelper.prototype.CallAnotherReturnValue=function(requestURL, Params)
{
	var queryString;
	
	queryString=this.ArrayToQueryString(Params);

	this.DoAJAXReturnValue(requestURL, queryString);
	return;
}

//XML형식의 값리턴
AJAXHelper.prototype.CallAnotherReturnValueForForm=function(requestURL, docForm, formatOpts)
{
	var queryString;
	
	queryString=this.FormDataToQueryString(docForm, formatOpts);

	this.DoAJAXReturnValue(requestURL, queryString);
	return;
}

//XML형식의 값리턴
AJAXHelper.prototype.CallAnotherReturnCustom=function(requestURL, Params, returnMethod)
{
	var queryString;
	
	queryString=this.ArrayToQueryString(Params);
	this.DoAJAXReturnCustom(requestURL, queryString, returnMethod);
	return;
}

//XML형식의 값리턴
AJAXHelper.prototype.CallAnotherReturnCustomForForm=function(requestURL, docForm, formatOpts, returnMethod)
{
	var queryString;
	
	queryString=this.FormDataToQueryString(docForm, formatOpts);

	this.DoAJAXReturnCustom(requestURL, queryString, returnMethod);
	return;
}

//XML Http 객체 실행
AJAXHelper.prototype.DoAJAX=function(requestURL, elementID, queryString)
{
	//Start AJAX Section 
	var XmlHttpRequest;
	
	XmlHttpRequest=new AJAXConnector();
	XmlHttpRequest.DoCallBack(requestURL, elementID, queryString);
	
	return;
}

AJAXHelper.prototype.DoAJAXReturnValue = function(requestURL, queryString)
{
	var XmlHttpRequest;
	
	XmlHttpRequest=new AJAXConnector();
	XmlHttpRequest.DoCallBackReturnValue(requestURL, queryString);
	
	return; 
}

AJAXHelper.prototype.DoAJAXReturnCustom = function(requestURL, queryString, returnMethod)
{
	var XmlHttpRequest;
	
	XmlHttpRequest=new AJAXConnector();
	XmlHttpRequest.DoCallBackReturnCustom(requestURL, queryString, returnMethod);
	
	return; 
}


//받은 문자열을 QueryString으로 변환
AJAXHelper.prototype.ArrayToQueryString=function(arrParams)
{
	var queryString;	// return 될 쿼리스트링
	
	queryString='';		// 초기화
	
	if(arrParams.length != -1)
	{
		for(i=0; i < arrParams.length; i++)
		{
			var arrParameter;
			var paramName;
			var paramValue;

			arrParameter = arrParams[i];
			
			paramName = escape(arrParameter[0]);
			//paramValue = escape(arrParameter[1].replace(/\+/g, "%2B;")); //전송시 한글이 깨지는 것을 방지
			
			// Edited by 임지원 c++ 문제 해결
			try
			{
				if (arrParameter[1].indexOf("+") != -1)
				{
					paramValue = arrParameter[1].replace(/\+/g, "%2B");
				}
				else
				{
					paramValue = escape(arrParameter[1]);
				}
			}
			catch(e)
			{
				paramValue = escape(arrParameter[1]);
			}
			

			if(i==0)
			{
				queryString +=  paramName + '=' + paramValue;
			}
			else
			{
				queryString += '&' + paramName + '=' + paramValue;
			}
		}
	}
	//alert(queryString);
	return queryString;
}

//Form데이터를 QueryString으로 변환
AJAXHelper.prototype.FormDataToQueryString=function(docForm, formatOpts)
{
  
  var opts = formatOpts || {};
  var str = '';
  var formElem;
  var lastElemName = '';
  
  for (i = 0; i < docForm.elements.length; i++) 
  {
    formElem = docForm.elements[i];

    switch (formElem.type) 
    {
        case 'text':
        case 'hidden':
        case 'password':
        case 'textarea':
        case 'select-one':
            str += formElem.name + '=' + escape(formElem.value) + '&'
			break;

        // Multi-option select
        case 'select-multiple':
            var isSet = false;
            for(var j = 0; j < formElem.options.length; j++) {
              var currOpt = formElem.options[j];
              if(currOpt.selected) {
                if (opts.collapseMulti) {
                  if (isSet) {
                    str += ',' + escape(currOpt.value);
                  }
                  else {
                    str += formElem.name + '=' + escape(currOpt.value);
                    isSet = true;
                  }
                }
                else {
                  str += formElem.name + '=' + escape(currOpt.value) + '&';
                }
              }
            }
            if (opts.collapseMulti) {
              str += '&';
            }
            break;

        // Radio buttons
        case 'radio':
            if (formElem.checked) 
            {
              str += formElem.name + '=' + escape(formElem.value) + '&'
            }
            break;

        // Checkboxes
        case 'checkbox':
            if (formElem.checked) 
            {
             
              if (opts.collapseMulti && (formElem.name == lastElemName))
               {
             
                if (str.lastIndexOf('&') == str.length-1) 
                {
                  str = str.substr(0, str.length - 1);
                }
             
                str += ',' + escape(formElem.value);
              }
              else {
                str += formElem.name + '=' + escape(formElem.value);
              }
              str += '&';
              lastElemName = formElem.name;
            }
            break;
    }
  }
  // Remove trailing separator
  str = str.substr(0, str.length - 1);
  return str;
}