//AJAXHelper
//°³¿ä : XML Http¸¦ »ç¿ëÇÏ±â À§ÇÏ¿© Data¸¦ °¡°øÇÏ°í AJAXConnector¸¦ È£Ãâ
//ÀÛ¼ºÀÚ : °íÈï¸ð
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;
}

//È£ÃâÆäÀÌÁö¿Í ½ÇÇàÆäÀÌÁö°¡ °°Àº °æ¿ì
AJAXHelper.prototype.CallSelfNoEx = function(elementID, Params) {
	var requestURL;
	var queryString;

	requestURL=window.location.pathname;

	queryString=this.ArrayToQueryString(Params);

	this.DoAJAXNoEx(requestURL, elementID, queryString);
	return;
}

//È£ÃâÆäÀÌÁö¿Í ½ÇÇàÆäÀÌÁö°¡ °°Àº °æ¿ì
//FormÀüÃ¼¸¦ ÆÄ¶ó¹ÌÅÍ·Î »ç¿ëÇÏ´Â °æ¿ì
AJAXHelper.prototype.CallSelfForFormNoEx = function(elementID, docForm, formatOpts) {
	var requestURL;
	var queryString;

	requestURL=window.location.pathname;

	queryString=this.FormDataToQueryString(docForm, formatOpts);

	this.DoAJAXNoEx(requestURL, elementID, queryString);
	return;
}

//È£ÃâÆäÀÌÁö¿Í ½ÇÇàÆäÀÌÁö°¡ ´Ù¸¥ °æ¿ì
AJAXHelper.prototype.CallAnotherNoEx=function(requestURL, elementID, Params) {
	var queryString;

	queryString=this.ArrayToQueryString(Params);

	this.DoAJAXNoEx(requestURL, elementID, queryString);
	return;
}

//È£ÃâÆäÀÌÁö¿Í ½ÇÇàÆäÀÌÁö°¡ °°Àº °æ¿ì
//FormÀüÃ¼¸¦ ÆÄ¶ó¹ÌÅÍ·Î »ç¿ëÇÏ´Â °æ¿ì
AJAXHelper.prototype.CallAnotherForFormNoEx = function(requestURL, elementID, docForm, formatOpts) {
	var queryString;

	queryString=this.FormDataToQueryString(docForm, formatOpts);

	this.DoAJAXNoEx(requestURL, elementID, queryString);
	return;
}

//XMLÇü½ÄÀÇ °ª¸®ÅÏ
AJAXHelper.prototype.CallAnotherReturnValueNoEx=function(requestURL, Params) {
	var queryString;

	queryString=this.ArrayToQueryString(Params);

	this.DoAJAXReturnValueNoEx(requestURL, queryString);
	return;
}

//XMLÇü½ÄÀÇ °ª¸®ÅÏ
AJAXHelper.prototype.CallAnotherReturnValueForFormNoEx=function(requestURL, docForm, formatOpts) {
	var queryString;

	queryString=this.FormDataToQueryString(docForm, formatOpts);

	this.DoAJAXReturnValueNoEx(requestURL, queryString);
	return;
}

//XMLÇü½ÄÀÇ °ª¸®ÅÏ
AJAXHelper.prototype.CallAnotherReturnCustomNoEx=function(requestURL, Params, returnMethod) {
	var queryString;

	queryString=this.ArrayToQueryString(Params);

	this.DoAJAXReturnCustomNoEx(requestURL, queryString, returnMethod);
	return;
}

//XMLÇü½ÄÀÇ °ª¸®ÅÏ
AJAXHelper.prototype.CallAnotherReturnCustomForFormNoEx=function(requestURL, docForm, formatOpts, returnMethod) {
	var queryString;

	queryString=this.FormDataToQueryString(docForm, formatOpts);

	this.DoAJAXReturnCustomNoEx(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;
}

//XML Http °´Ã¼ ½ÇÇà
AJAXHelper.prototype.DoAJAXNoEx=function(requestURL, elementID, queryString) {
	//Start AJAX Section
	var XmlHttpRequest;

	XmlHttpRequest=new AJAXConnector();
	XmlHttpRequest.DoCallBackNoEx(requestURL, elementID, queryString);

	return;
}

AJAXHelper.prototype.DoAJAXReturnValueNoEx = function(requestURL, queryString) {
	var XmlHttpRequest;

	XmlHttpRequest=new AJAXConnector();
	XmlHttpRequest.DoCallBackReturnValueNoEx(requestURL, queryString);

	return;
}

AJAXHelper.prototype.DoAJAXReturnCustomNoEx = function(requestURL, queryString, returnMethod) {
	var XmlHttpRequest;

	XmlHttpRequest=new AJAXConnector();
	XmlHttpRequest.DoCallBackReturnCustomNoEx(requestURL, queryString, returnMethod);

	return;
}


//¹ÞÀº ¹®ÀÚ¿­À» QueryStringÀ¸·Î º¯È¯
AJAXHelper.prototype.ArrayToQueryString=function(arrParams) {
	var queryString;

	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]);    //Àü¼Û½Ã ÇÑ±ÛÀÌ ±úÁö´Â °ÍÀ» ¹æÁö

			if(i==0)
			{
				queryString +=  paramName + '=' + paramValue;
			}
			else
			{
				queryString += '&' + paramName + '=' + paramValue;
			}
		}
	}
	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;

			case 'select-multiple':    // Multi-option select

				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;

			case 'radio':    // Radio buttons

				if (formElem.checked) {
					str += formElem.name + '=' + escape(formElem.value) + '&'
				}
				break;

			case 'checkbox':    // Checkboxes

				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;

}
