/*
 * ServiceForPage.js : °¢ À¥ ÆäÀÌÁö¿¡ ÀÚ¹Ù·Î Á¢±Ù½Ã »ç¿ëµÉ ±âÃÊ ÇÔ¼ö ¸ðÀ½
 * 
 * Version 1.0
 * 
 * Created  : 2006/07/14  °³¹ßÀÚ
 * Updated  : 2007/01/19  °³¹ßÀÚ  common, webapps µî ¿©Å¸ xml ÆÄÀÏ È£Ãâ °¡´ÉÄÉ º¯°æ, ¼­¹ö ÆÄÀÏ Á¦°Å ·çÆ¾ Ã·°¡
 */

var g_ObjXmlHttp  = null;
var g_ObjXmlHttpWithHandler  = null;

//
// Å¬·¡½º ¾ÆÀÌµð¿¡ ÀÏÄ¡ÇÏ´Â ActiveX Object¸¦ »ý¼º
//
function af_CreateXmlHttp(clsid) 
{
  var objXmlHttp = null;

  try
  {
    objXmlHttp = new ActiveXObject(clsid);
  }
  catch(e)
  {
  }

  return objXmlHttp;
}

//
// MsXmlHttp Object¸¦ »ý¼º
//
function af_GetMSXmlHttp()
{
  var objXmlHttp  = null;
  var clsids = ["Msxml2.XMLHTTP.6.0",
                "Msxml2.XMLHTTP.4.0",
                "Msxml2.XMLHTTP.3.0"];
/*
  MSXML5¸¦ »ç¿ëÇÏÁö ¾ÊÀº °ÍÀ¸·Î °¡Á¤ÇÔ. 
  MS Office ¿ëÀÓ.
  
                 "Msxml2.XMLHTTP.2.6","Microsoft.XMLHTTP.1.0", 
                 "Microsoft.XMLHTTP.1","Microsoft.XMLHTTP"
*/

  for(var i=0; i<clsids.length && objXmlHttp == null; i++) 
    objXmlHttp = af_CreateXmlHttp(clsids[i]);

  return objXmlHttp;
}

//
// MsXmlHttp Object »ý¼º ¹× ÄÝ¹é ÇÚµé·¯ ¼³Á¤
//
function af_GetXmlHttpObject(handler)
{ 
  var objXmlHttp = null;
  if (!window.XMLHttpRequest)
  {
    // Microsoft
    objXmlHttp = af_GetMSXmlHttp();
    if (objXmlHttp != null)
    {
      if (handler != null)
        objXmlHttp.onreadystatechange = handler;
    }
  } 
  else
  {
    // Mozilla | Netscape | Safari
    objXmlHttp = new XMLHttpRequest();
    if (objXmlHttp != null)
    {
      if (handler != null)
      {
        objXmlHttp.onload   = handler;
        objXmlHttp.onerror  = handler;
      }
    }
  } 
  return objXmlHttp; 
}

//
// ÇØ´ç »çÀÌÆ®·Î ¼­ºñ½º¸¦ ¿äÃ»ÇÑ´Ù.
//
function af_SendXmlHttpRequest(xmlHttp, url) 
{ 
  xmlHttp.open('GET', url, false); 

  xmlHttp.send(null);
}
/* // µ¿ÀÛ ¾ÈÇÔ.. ÀÀ....
function af_SendXmlHttpPostRequest(xmlHttp, pageName, params) 
{
  xmlHttp.open('POST', pageName, false);
  xmlHttp.send(params);
}
*/
function af_ExceptionControl(xmlHttp)
{
  var exceptShow = "»óÅÂ ÄÚµå: " + xmlHttp.status;
  exceptShow += ",  ºñÁ¤»óÀ¸·Î Á¾·áµÇ¾ú½À´Ï´Ù.";
  alert(exceptShow);
}

function af_ExtractKeyValue(XmlObject, Key)
{
  var TmpObject = XmlObject.getElementsByTagName(Key);

  var ReturnValue;

  if (TmpObject[0].childNodes[0] == null)
    ReturnValue = "";
  else
    ReturnValue = TmpObject[0].childNodes[0].nodeValue;

  return ReturnValue;
}

// ****************************************************
// ¿ÜºÎ¿¡¼­ È£ÃâÇØ¾ß µÉ ÇÔ¼ö - ½ÃÀÛ
// ****************************************************

//  url ·Î ¼³Á¤µÈ ÇÔ¼öÀÇ ¼­ºñ½º ¿äÃ»
//
//    url : http://localhost/ÆäÀÌ¸í.aspx?func_id=GetPpName&comp_class=1111&dept_code=200341"
//
//  ÁÖÀÇ -
//    ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ±â Àü¿¡ CommonCallbackMethod ÇÔ¼ö¸¦ Á¤ÀÇÇØ¾ß ÇÔ
//    ¿øÇü :
//      function CommonCallbackMethod(FuncId, Result, ProcMsg, ResType, ResultObject)
//
function af_ExecuteCommonCallWithHandler(url)
{ 
  try
  { 
    if (g_ObjXmlHttpWithHandler == null)
      g_ObjXmlHttpWithHandler = af_GetXmlHttpObject(af_Inner_CommonCallbackMethod);
    
    af_SendXmlHttpRequest(g_ObjXmlHttpWithHandler, url);
  }
  catch(e)
  {
    alert("[af_ExecuteCommonCallWithHandler] : " +e.message);
  }
}

// ****************************************************
// ¿ÜºÎ¿¡¼­ È£ÃâÇØ¾ß µÉ ÇÔ¼ö - ½ÃÀÛ
// ****************************************************

//
// È£ÃâÇÑ ÆäÀÌÁö¸¦ ÀÌ¿ëÇØ¼­ cmdid¿¡ ÇØ´çÇÏ´Â Äõ¸® °á°ú¸¦ ³Ñ±ä´Ù.
// ÁøÇà½Ã ¹ß»ýÇÏ´Â ¿¡·¯ ¸Þ¼¼Áö´Â º» ÇÔ¼ö¿¡¼­ Ãâ·ÂÇÔ.
//    cmdid       : È£ÃâÇÑ Äõ¸® ¾ÆÀÌµð
//    parameters  : Á¶È¸ Á¶°Ç¿¡ »ç¿ëµÉ °ª
function af_ExecutePageCall(cmdId /* ,  parameters */)
{
  if (cmdId == null || cmdId == "")
  {
    alert("Cmd Id ¸¦ ¼³Á¤ÇÏ¼¼¿ä.");
    return null;
  }
  var inValues  = af_MakeParamsString(arguments);

  return af_ExecutePageCommonCall("", cmdId, inValues);
}

//
// È£ÃâÇÑ ÆäÀÌÁö¸¦ ÀÌ¿ëÇØ¼­ cmdid¿¡ ÇØ´çÇÏ´Â Äõ¸® °á°ú¸¦ ³Ñ±ä´Ù.
// cmdid´Â ¸ðµÎ ÇØ´ç xml ³»¿¡ ÀÖ¾î¾ß ÇÑ´Ù.
//    cmdid       : È£ÃâÇÑ Äõ¸® ¾ÆÀÌµð
//    parameters  : Á¶È¸ Á¶°Ç¿¡ »ç¿ëµÉ °ª
function af_ExecutePageCallForCommon(cmdId /* ,  parameters */)
{
  if (cmdId == null || cmdId == "")
  {
    alert("Cmd Id ¸¦ ¼³Á¤ÇÏ¼¼¿ä.");
    return null;
  }
  var inValues  = af_MakeParamsString(arguments);

  return af_ExecutePageCommonCall("common", cmdId, inValues);
}

//
// È£ÃâÇÑ ÆäÀÌÁö¸¦ ÀÌ¿ëÇØ¼­ cmdid¿¡ ÇØ´çÇÏ´Â Äõ¸® °á°ú¸¦ ³Ñ±ä´Ù.
// cmdid´Â ¸ðµÎ ÇØ´ç xml ³»¿¡ ÀÖ¾î¾ß ÇÑ´Ù.
//    cmdid       : È£ÃâÇÑ Äõ¸® ¾ÆÀÌµð
//    parameters  : Á¶È¸ Á¶°Ç¿¡ »ç¿ëµÉ °ª
function af_ExecutePageCallForWebApps(cmdId /* ,  parameters */)
{
  if (cmdId == null || cmdId == "")
  {
    alert("Cmd Id ¸¦ ¼³Á¤ÇÏ¼¼¿ä.");
    return null;
  }
  var inValues  = af_MakeParamsString(arguments);

  return af_ExecutePageCommonCall("webapps", cmdId, inValues);
}

//
// AFCommon ÆäÀÌÁö¸¦ ÀÌ¿ëÇØ¼­ cmdid¿¡ ÇØ´çÇÏ´Â ÇÔ¼ö¸¦ ½ÇÇà½ÃÅ²´Ù.
//    cmdid       : ½ÇÇàÇÒ ÇÔ¼ö ¾ÆÀÌµð
//    parameters  : ÀÎÀÚ¿¡ »ç¿ëµÉ ÀÎ¼ö
function af_ExecutePageCallForCommonFuncs(cmdId /* ,  parameters */)
{
  if (cmdId == null || cmdId == "")
  {
    alert("Cmd Id ¸¦ ¼³Á¤ÇÏ¼¼¿ä.");
    return "false";
  }
  var inValues  = af_MakeParamsString(arguments);

  var url = "/common/AFCommon.aspx?" + "af_cmdid=" + cmdId + "&af_cmdid_params=" + inValues;
  var result  = af_ExcuteCallCommonFuncs(url);

  return eval(result);
}

// ****************************************************
// ¿ÜºÎ¿¡¼­ È£ÃâÇØ¾ß µÉ ÇÔ¼ö - ³¡
// ****************************************************

//
// ¼­¹ö ÇÔ¼ö¿¡ ³Ñ±æ ÆÄ¶ó¹ÌÅÍ¸¦ ¸¸µç´Ù.
//    befArgs : È£ÃâÇÏ´Â ÇÔ¼ö¿¡¼­ cmdId °¡ Æ÷ÇÔµÈ ÆÄ¶ó¹ÌÅÍ ¹è¿­
function af_MakeParamsString(befArgs)
{
  var paraCount   = befArgs.length;

  var inValues;

  if (paraCount > 1)
  {
    inValues  = new Array;
    
    for (var i=0; i<paraCount-1; i++)
      inValues.push(befArgs[i+1]);  // cmdId Á¦¿ÜÇÔ.
  }
  else
    inValues  = "";
    
  return inValues;
}

//
// Àü´Þ urlÀ» ¸¸µé¾î xmlhttp ¸¦ ¿äÃ»ÇÑ´Ù.
//    commonCmdId : ""-ÀÏ¹ÝÆäÀÌÁö, "common"-common ÆäÀÌÁö, "webapps"-webapps ÆäÀÌÁö
//    cmdId       : xml ³»ÀÇ cmdId
//    cmdIdParams : cmdId °¡ ÇÊ¿äÇÑ ÀÔ·Â ÀÎÀÚ ¹®ÀÚ¿­(, ·Î ±¸ºÐ)
function af_ExecutePageCommonCall(commonCmdId, cmdId, cmdIdParams)
{
  var params  = "af_common_cmdid=" + commonCmdId + "&af_cmdid=" + cmdId + "&af_cmdid_params=" + cmdIdParams;
  var curPageName = ht_GetCurFileName("aspx", true);

  return af_ExcuteCall(curPageName + "?" + params);  
}

//
// ÇØ´ç url ¿¡ ÇØ´ç ¸í·ÉÀ» ½ÇÇàÇÏ°í object ¹è¿­ ÇüÅÂ·Î °á°ú°ªÀ» ¹Þ´Â´Ù.
//    url : ¸í·ÉÀ» ½ÇÇàÇÒ cmdId ¿Í Àü´Þ ÀÎ¼ö ¹®ÀÚ¿­
function af_ExcuteCall(url)
{
  if (g_ObjXmlHttp == null)
  {
    g_ObjXmlHttp = af_GetXmlHttpObject(null);
  }

  af_SendXmlHttpRequest(g_ObjXmlHttp, url);

  var responseXml = g_ObjXmlHttp.responseXML;
  var result, procMsg, resType, resString, resultObject;

  if (g_ObjXmlHttp.status != 200)
  {
    af_ExceptionControl(g_ObjXmlHttp);
    return null;
  }

  try
  {
    result    = af_ExtractKeyValue(responseXml, "result");
    procMsg   = af_ExtractKeyValue(responseXml, "prog_msg");
    resType   = af_ExtractKeyValue(responseXml, "res_type");
    resString = af_ExtractKeyValue(responseXml, "res_string");

    if (result == "false")
    {
      alert(procMsg);
      return null;
    }

    if (resType == "o")
    {
      eval(resString);
      resultObject  = returnValue;
    }
    else
    {
      resultObject  = resString;
    }

    return resultObject;
  }
  catch (e)
  {
    alert( "[af_ExcuteCall] : " + e.name + ":" + e.message);
    return null;
  } 
}

//
// ¹ÝÈ¯°ªÀÌ ¹®ÀÚ¿­ "true", "false" ÀÎ ¼­¹ö ÇÔ¼ö È£Ãâ
//    url : ¸í·ÉÀ» ½ÇÇàÇÒ ÆäÀÌÁö ¹× ¸í·É ÀÎ¼ö ¹®ÀÚ¿­
function af_ExcuteCallCommonFuncs(url)
{
  if (g_ObjXmlHttp == null)
  {
    g_ObjXmlHttp = af_GetXmlHttpObject(null);
  }

  af_SendXmlHttpRequest(g_ObjXmlHttp, url);

  var responseText  = g_ObjXmlHttp.responseText;

  if (g_ObjXmlHttp.status != 200)
  {
    af_ExceptionControl(g_ObjXmlHttp);
    responseText  = "false";
  }

  return responseText;
}

//
// XmlHttp °´Ã¼ÀÇ »óÅÂ°¡ º¯°æµÇ¾úÀ» ¶§ È£Ãâ.
// ÇöÀç´Â ¼­¹ö·ÎºÎÅÍÀÇ È£ÃâÀÌ ¿Ï·áµÇ¾úÀ» °æ¿ì »ç¿ë.
//
function af_Inner_CommonCallbackMethod() 
{
  try
  {
    //
    // »óÅÂ°¡ ¿Ï·áµÇ¾úÀ» °æ¿ì
    //
    if (g_ObjXmlHttpWithHandler.readyState == 4 || 
        g_ObjXmlHttpWithHandler.readyState == 'complete')
    {
    
      if (g_ObjXmlHttpWithHandler.status != 200)
      {
        af_ExceptionControl(g_ObjXmlHttpWithHandler);
        return;
      }
    
//      var response = g_ObjXmlHttpWithHandler.responseText;
      var responseXml = g_ObjXmlHttpWithHandler.responseXML;

      //
      // ¸®ÅÏ XML Å¸ÀÔ
      // <root>
      //    <id>¼­ºñ½º¸¦ ¿äÃ»½Ã func_name °ª</id>
      //    <result>ok || no (¼º°ø:ok, ½ÇÆÐ:no)</result>
      //    <proc_msg>Ã³¸®¸Þ¼¼Áö</proc_msg>
      //    <res_type>s || o(´Ü¼ø¹®ÀÚ¿­:s, ½ÇÇà°´Ã¼¹®ÀÚ¿­:o)</res_type>
      //    <res_string>°á°ú¹®ÀÚ¿­</res_string>
      // </root>

      var FuncId, Result, ProcMsg, ResType, ResString, ResultObject, TmpObject;

      try
      {
        TmpObject = responseXml.getElementsByTagName("id");
      }
      catch(e)
      {
        alert( "af_Inner_CommonCallbackMethod - id part : " + e.name + ":" + e.message);
        return;
      }

      if (TmpObject.length > 0)
      {
        if (typeof(CommonCallbackMethod) == "function")
        {
          try
          {
            FuncId    = TmpObject[0].childNodes[0].nodeValue;
            
            Result    = af_ExtractKeyValue(responseXml, "result");
            ProcMsg   = af_ExtractKeyValue(responseXml, "prog_msg");
            ResType   = af_ExtractKeyValue(responseXml, "res_type");
            ResString = af_ExtractKeyValue(responseXml, "res_string");            
          }
          catch(e)
          {
            alert( "af_Inner_CommonCallbackMethod - params part : " + e.name + ":" + e.message);
            return;
          }

          if (Result == "true")
            Result = true;
          else
            Result = false;

          if (ResType == "o")
            ResultObject  = eval(ResString);
          else
            ResultObject  = ResString;

          CommonCallbackMethod(FuncId, Result, ProcMsg, ResType, ResultObject);
        }
      }
      else
      {
        alert("¼­ºñ½º ÇÔ¼ö È£Ãâ ½ÇÆÐÇß½À´Ï´Ù.");
      }
    }
  }
  catch(e)
  {
    alert("af_Inner_CommonCallbackMethod - " + e.name + " : " + e.message);
  }
}