// ********************************
//    Ajax ¶óÀÌºê·¯¸®
//
//    [ ¸Þ¼­µå Á¤ÀÇ ]
//    getHttpReqObj : °¢ ºê¶ó¿ìÁ®¿¡ ÀûÇÕÇÑ XMLHttpRequest °³Ã¼ »ý¼º
//    getReqMessage : POST / GETÀ¸·Î µ¥ÀÌÅ¸ Àü¼Û ¹× ¸®ÅÏµÈ °ªÀ» ¹Þ´Â ºÎºÐ
//    getParamParse : ¹è¿­¿¡ ÀúÀåµÈ °ªÀ» POST / GET Àü¼Û¿¡ ÀûÇÕÇÏµµ·Ï º¯È¯
//    getTransData : XML¿¡ XLST¸¦ Àû¿ëÇÏ¿© º¯È¯ ÀÛ¾÷
//    Dispose : Ajax ÀÚ¿ø ÇØÁ¦
//
// ********************************
var Ajax = function()
{
	this.req_obj = this.getHttpReqObj();

	if (!this.req_obj)
	{
		return false;
	}
}

// ********************************
// XMLHttpRequest ¼Ò¸ê
// ********************************
Ajax.prototype.Dispose = function ()
	{
		this.req_obj = null;
	}

// ********************************
// XMLHttpRequest »ý¼º
// ********************************
Ajax.prototype.getHttpReqObj = function ()
	{
		try
		{
			var req_obj;

			// Mozilla / Safari
			if (window.XMLHttpRequest)
			{
				req_obj = new XMLHttpRequest();
				if (req_obj.overrideMimeType)
				{
					req_obj.overrideMimeType ("text/xml");
				}
			}
			// IE
			else if (window.ActiveXObject)
			{
				req_obj = new ActiveXObject ("Microsoft.XMLHTTP");
			}
			else
			{
				alert ("XMLHttpRequest¸¦ Áö¿øÇÏÁö ¾Ê´Â ºê¶ó¿ìÁ® ÀÔ´Ï´Ù.");
				req_obj = false;
			}

			return req_obj;
		}
		catch (e)
		{
			alert (e);
			return false;
		}
	}

// ********************************
// XMLHttpRequest¸¦ ÀÌ¿ëÇÑ POST/GET Àü¼Û ¹× °á°ú °ª ¼ö½Å3
//
//	req_method : POST·Î Àü¼Û ÇÒÁö GETÀ¸·Î Àü¼ÛÇÒÁö ¹æ½Ä ¼³Á¤ ("POST" or "GET")
//	req_url : Àü¼Û ÇÒ ¼­¹ö ÆäÀÌÁö URL
//	req_sync : µ¿±â / ºñµ¿±â ¹æ½Ä ¼±ÅÃ (true = ºñµ¿±â, false = µ¿±â)
//	ret_type : ¸®ÅÏµÈ ResponseÀ» ¾î¶² Çü½ÄÀ¸·Î ¹ÞÀ» Áö ¼³Á¤ ("XML" or "TEXT")
//	arr_values : ¼­¹ö ÆäÀÌÁö·Î Request ¿äÃ» ½Ã º¸³¾ °ª (¹è¿­ Çü½Ä)
//	fn_name : °á°ú ¼ö½Å ÈÄ ½ÇÇà ÇÒ ÇÔ¼ö ¸í
// ********************************
Ajax.prototype.getReqMessage = function (req_method, req_url, req_sync, ret_type, arr_values, fn_name)
	{
		if (req_method != "" && req_url != "" && ret_type != "")
		{
			var ret_value;
			var req = this.req_obj;

			try
			{
				if (req)
				{
					//var d1 = new Date();

					var par_val = this.getParamParse (arr_values);

					req.open (req_method.toUpperCase(), req_url, req_sync);
					// Àü¼Û ÇÒ µ¥ÀÌÅ¸°¡ FormÀÇ Àü¼Û ¹æ½Ä°ú °°ÀÌ Àü¼Û µÈ´Ù´Â °ÍÀ» ¼³Á¤
					req.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");

					if (req_sync)
					{
						/* ºñµ¿±â ¹æ½Ä */

						req.onreadystatechange = function() 
							{
								// Request Complete
								if (req.readyState == 4)
								{
									// Response OK
									if (req.status == 200)
									{
										if (ret_type.toUpperCase() == "TEXT")
										{
											// Text Çü½ÄÀ¸·Î °ªÀ» ¹ÞÀ½
											ret_value = req.responseText;
										}
										else if (ret_type.toUpperCase() == "XML")
										{
											// XML Çü½ÄÀ¸·Î °ªÀ» ¹ÞÀ½
											ret_value = req.responseXML;
										}
										else
										{
											// ±âº»Àº TEXT Çü½Ä
											ret_value = req.responseText;
										}

										// ¿¬°á Á¾·á (¸¸¾àÀ» À§ÇÏ¿© ¿¬°á Á¾·áÀ» ¸í½Ã ÇØ ÁÜ)
										req.abort();

										// Àü¼Û ¿Ï·á ÈÄ ½ÇÇà ÇÔ¼ö°¡ ¼³Á¤ µÇ¾î ÀÖÀ¸¸é ÇØ´ç ÇÔ¼ö·Î °á°ú °ªÀ» ³Ñ°Ü ÁÖ°í
										// ¸¸¾à ½ÇÇà ÇÔ¼ö°¡ ¾øÀ» °æ¿ì °á°ú¸¦ ±×´ë·Î ¸®ÅÏÇÑ´Ù.
										
										//var d2 = new Date();
										 //writeline("i" + d1.getMinutes() + ':' + d1.getSeconds() + ':' + d1.getMilliseconds() + '\n');
										//writeline("i" + d2.getMinutes() + ':' + d2.getSeconds() + ':' + d2.getMilliseconds() + "\n");

										if (fn_name != "")
										{
											eval (fn_name + "ret_value);");
										}
										else
										{
											return ret_value;
										}
									}
								}
							};
						req.send (par_val);	
					}
					else
					{
						/* µ¿±â ¹æ½Ä */

						req.send (par_val);	

						if (ret_type.toUpperCase() == "TEXT")
						{
							// Text Çü½ÄÀ¸·Î °ªÀ» ¹ÞÀ½
							ret_value = req.responseText;
						}
						else if (ret_type.toUpperCase() == "XML")
						{
							// XML Çü½ÄÀ¸·Î °ªÀ» ¹ÞÀ½
							ret_value = req.responseXML;
						}
						else
						{
							// ±âº»Àº TEXT Çü½Ä
							ret_value = req.responseText;
						}

						// ¿¬°á Á¾·á (¸¸¾àÀ» À§ÇÏ¿© ¿¬°á Á¾·áÀ» ¸í½Ã ÇØ ÁÜ)
						req.abort();

						// Àü¼Û ¿Ï·á ÈÄ ½ÇÇà ÇÔ¼ö°¡ ¼³Á¤ µÇ¾î ÀÖÀ¸¸é ÇØ´ç ÇÔ¼ö·Î °á°ú °ªÀ» ³Ñ°Ü ÁÖ°í
						// ¸¸¾à ½ÇÇà ÇÔ¼ö°¡ ¾øÀ» °æ¿ì °á°ú¸¦ ±×´ë·Î ¸®ÅÏÇÑ´Ù.
						if (fn_name != "")
						{
							eval (fn_name + "ret_value);");
						}
						else
						{
							return ret_value;
						}
					}
				}
				else
				{
					alert ("XMLHttpRequest°¡ Àß¸ø »ý¼º µÇ¾ú½À´Ï´Ù.");
					return false;
				}
			}
			catch (e)
			{
				alert (e);
				return false;
			}
		}
		else
		{
			alert ("ÀÎ¼ö ¼³Á¤ÀÌ Àß¸ø µÇ¾ú½À´Ï´Ù.");
			return false;
		}
	}

// ********************************
// ¹è¿­·Î Àü¼ÛµÈ °ªÀ» POST °¡´ÉÇÑ ÆÄ¶ó¹ÌÅÍ·Î º¯°æ 
// ********************************
Ajax.prototype.getParamParse = function (arr_values)
	{
		var par_val = "";

		if (arr_values != null && arr_values.length)
		{
			for (i=0; i < arr_values.length; i++)
			{
				par_val += arr_values[i] + "&"
			}
		}

		if (par_val.length > 0)
		{
			par_val = par_val.substr(0, par_val.length - 1);
		}
		else
		{
			par_val = null;
		}

		return par_val;
	}


// ********************************
// XML¿¡ XSLT¸¦ Àû¿ëÇÑ °á°ú ¹®ÀÚ¿­
// ********************************
Ajax.prototype.getTransData = function (xml_doc, xml_style)
	{
		var result;

		if (xml_doc && xml_style)
		{
			// Mozilla / Safari
			if (window.XMLHttpRequest)
			{
				var xsltProcess = new XSLTProcessor();
				xsltProcess.importStylesheet (xml_style);

				result = xsltProcess.transformToDocument (xml_doc).childNodes[0].innerHTML;
			}
			// IE
			else if (window.ActiveXObject)
			{
				result = xml_doc.transformNode (xml_style);
			}
			else
			{
				alert ("XMLHttpRequest¸¦ Áö¿øÇÏÁö ¾Ê´Â ºê¶ó¿ìÁ® ÀÔ´Ï´Ù.");
				result = false;
			}
		}
		else
		{
			alert ("XML Document¿Í StyleÀÌ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù.");
			result = false;
		}

		return result;
	}
