var loRequest = null;
var loClassXMLHTTPInfo = null;



//------------------------------------------------------------------------------
// XMLHTTP 정보를 저장하는 클래스
//------------------------------------------------------------------------------
function ClassXMLHTTPInfo()
{
  this.METHOD_GET  = "GET";
  this.METHOD_POST = "POST";
  this.RESPONSE_TYPE_TXT = "TXT";
  this.RESPONSE_TYPE_XML = "XML";

  this.loRequest     = null;   // Microsoft.XMLHTTP 객체
  this.lsRequestType = null;   // "POST", "GET"
  this.lsURL         = null;
  this.loForm        = null;   // "POST" 일때의 폼
  this.lsQueryString = null;   // Query string
  this.lsResponseType = null;
  this.lsResponseFunctionName = null;   // 응답을 받을 함수명

  //------------------------------------------------------------------------------
  // 사용자의 브라우져를 체크한다.
  //------------------------------------------------------------------------------
  this.lfCheckBrowser =
  function()
  {
    this.loRequest = null;

    if(!window.ActiveXObject) return false;
    
    this.loRequest = new ActiveXObject("Microsoft.XMLHTTP");
    if(!this.loRequest) this.loRequest = new ActiveXObject("Msxml2.XMLHTTP");
    
    if(!this.loRequest) return false;
  
    return true;
  }


  //------------------------------------------------------------------------------
  // POST 방식을 GET 방식의 문자열로 변환한다.
  //------------------------------------------------------------------------------
  this.lfSetQueryString = 
  function()
  {
    this.lsQueryString = "";

    if(this.loForm == null) return;

    for(var i=0; i<this.loForm.elements.length; i++)
    {
      // 아래의 문장은 한글을 넘길때... 깨진다.
      //if(i < this.loForm.elements.length-1)
      //  this.lsQueryString += this.loForm.elements[i].name + "=" + encodeURIComponent(this.loForm.elements[i].value) + "&";
      //else
      //  this.lsQueryString += this.loForm.elements[i].name + "=" + encodeURIComponent(this.loForm.elements[i].value);

      // 아래의 문장은 한글을 넘겨도 안깨진다.
      if(i < this.loForm.elements.length-1)
        this.lsQueryString += this.loForm.elements[i].name + "=" + escape(this.loForm.elements[i].value) + "&";
      else
        this.lsQueryString += this.loForm.elements[i].name + "=" + escape(this.loForm.elements[i].value);
    }
  }


  //------------------------------------------------------------------------------
  // 서버로 데이타 전송
  //------------------------------------------------------------------------------
  this.lfRequestSendData = 
  function()
  {
    if(this.lsRequestType == this.METHOD_POST) this.lfSetQueryString();

    try
    {
      //if(this.lsResponseType == this.RESPONSE_TYPE_TXT)
      //  this.loRequest.onReadyStateChange = lfHandleResponseTXT;
      //else
      //  this.loRequest.onReadyStateChange = lfHandleResponseXML;

      this.loRequest.onReadyStateChange = this.lsResponseFunctionName;

      this.loRequest.open(this.lsRequestType, this.lsURL, true);
      this.loRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=euc-kr");

      if(this.lsRequestType == this.METHOD_POST)
        this.loRequest.send(this.lsQueryString);
      else
        this.loRequest.send(null);
    }
    catch(err)
    {
      alert("에러발생\n" + err.message);
    }
  }


  //------------------------------------------------------------------------------
  // 서버로부터 데이타를 받는다 (Text)
  //------------------------------------------------------------------------------
  //function lfHandleResponseTXT()
  //{
  //  // 4 : Complete
  //  if(loClassXMLHTTPInfo.loRequest.readyState != 4) return;
  //
  //  // 200 : OK
  //  if(loClassXMLHTTPInfo.loRequest.status != 200) return;
  //
  //  //alert(loClassXMLHTTPInfo.loRequest.responseText);
  //}


  //------------------------------------------------------------------------------
  // 서버로부터 데이타를 받는다 (XML)
  //------------------------------------------------------------------------------
  function lfHandleResponseXML()
  {
    // 4 : Complete
    if(loClassXMLHTTPInfo.loRequest.readyState != 4) return;
  
    // 200 : OK
    if(loClassXMLHTTPInfo.loRequest.status != 200) return;
  
    //alert(loClassXMLHTTPInfo.loRequest.responseXML);
  }

}



//------------------------------------------------------------------------------
// 서버로 데이타 전송
// sRequestType : "post", "get"
// oForm : 폼 참조값, "post" 일때 만 사용, "get" 일때는 null 값을 넘겨주면 됨.
// sURL : 서버페이지 주소
//------------------------------------------------------------------------------
function gfSendData(sRequestType, oForm, sURL, sResponseFunctionName)
{
  loClassXMLHTTPInfo = new ClassXMLHTTPInfo();

  loClassXMLHTTPInfo.lsRequestType = sRequestType.toUpperCase();
  loClassXMLHTTPInfo.lsURL = sURL;
  loClassXMLHTTPInfo.loForm = oForm;
  loClassXMLHTTPInfo.lsResponseType = loClassXMLHTTPInfo.RESPONSE_TYPE_TXT;
  loClassXMLHTTPInfo.lsResponseFunctionName = sResponseFunctionName;

  if(!loClassXMLHTTPInfo.lfCheckBrowser())
  {
    alert("사용할수 없는 브라우져 입니다");
    return;
  }

  loClassXMLHTTPInfo.lfRequestSendData();
}




function gfResponse()
{
  if(loClassXMLHTTPInfo.loRequest.readyState != 4) return false;   // 4 : Complete
  if(loClassXMLHTTPInfo.loRequest.status != 200) return false;     // 200 : OK

  return true;
}


