﻿function getXMLHttp_Full()
{
  if(window.XMLHttpRequest)
  {
    return new XMLHttpRequest();
  }
  else
  {
    var xmlHttps = new Array('MSXML2.XMLHttp.7.0','MSXML2.XMLHttp.6.0','MSXML2.XMLHttp.5.0','MSXML2.XMLHttp.4.0','MSXML2.XMLHttp.3.0','MSXML2.XMLHttp.2.0','Microsoft.XMLHttp');
   
    for(var i=0; i<xmlHttps.length; i++)
    {
      try
      {
        var req = new ActiveXObject(xmlHttps[i]);
        return req;
        
      } catch(oError) {}
    }                
    return null;
  }
}

function getXMLHttp()
{
  try // Firefox, Orera8.0+, Safari, IE7
  { 
    return new XMLHttpRequest();
  }
  catch(e) // IE 5,6
  { 
    try
    {
      return new ActiveXObject('Msxml2.XMLHTTP');
    } 
    catch(e)
    {
      try
      {
        return new ActiveXObject('Microsoft.XMLHTTP');
        
      } catch(e) { return null; /* XMLHTTP 생성 실패 */ }
    }
  }     
}

// 요청한 url 을 ajax 를 통하여 GET 방식으로 호출하여 실행하고 그 실행 결과를 이용하는 함수를 받아 실행하는 함수
function responseByAjax(runfunction, url)
{
   var MAX_WAITING_TIME = 700000;
   var timeout_error = false;

   var xmlhttp = getXMLHttp();
   xmlhttp.open('GET', url, true);

   var waitingTimer = setTimeout( function() { timeout_error = true; xmlhttp.abort(); alert('처리량이 많아 실행 제한 시간이 초과 되었습니다. \n\n잠시 후 다시 시도해 주시기 바랍니다.'); return; }, MAX_WAITING_TIME );

   xmlhttp.onreadystatechange = function() 
   {
      if(xmlhttp.readyState != 4) { return; }

      clearTimeout(waitingTimer);

      if((!timeout_error) && (xmlhttp.status != 200))
      {
         alert('요청하신 작업이 정상적으로 처리되지 않았습니다. \n\n다시 시도하여 보시고 계속 에러가 발생하면 관리자에게 문의 하십시오.');
         return;
      }
      runfunction(xmlhttp.responseText);
   }
   xmlhttp.send(null);
}

/* Sample

function runAjax(valv)
{
   var MAX_WAITING_TIME = 7000;

   var timeout_error = false;

   var xmlhttp = getXMLHttp();

   xmlhttp.open('GET', 'aax_checking.aspx?ukrm=' + Math.random() + '&p1=' + escape(valv), true); // 여기서 Math.random() 를 사용하면 캐시로 인한 오류를 방지할 수 있다. 반드시 escape(valv) 사용하던지 서버측 인코딩 함수 사용

   // 여기서 타이머 실행 기다리다 시간 초과하면 중지시킴
   var waitingTimer = setTimeout( function() { timeout_error = true; xmlhttp.abort(); alert('처리량이 많아 실행 제한 시간이 초과 되었습니다. \n\n잠시 후 다시 시도해 주시기 바랍니다.'); }, MAX_WAITING_TIME );

   xmlhttp.onreadystatechange = function() 
   {
      // 비동기 처리가 완료되지 않는 동안 계속 리턴 시킴
      if(xmlhttp.readyState != 4) { return; }

      // 비 동기 작업 정상 종료됨. 그러므로 타이머 종료
      clearTimeout(waitingTimer);

      // 이제는 결과를 검사해야 함
      if((!timeout_error) && (xmlhttp.status != 200))
      {
         alert('요청하신 작업이 정상적으로 처리되지 않았습니다. \n\n다시 시도하여 보시고 계속 에러가 발생하면 관리자에게 문의 하십시오.');
         return;
      }

      // 여기까지 넘어오면 정상 처리된 것
      document.getElementById('div_result').innerHTML = xmlhttp.responseText;
   }
   xmlhttp.send(null);
}

*/

// 요청한 url 을 ajax 를 통하여 GET 방식으로 호출하여 실행하고 그 실행 결과를 이용하는 함수를 받아 실행하는 함수
function postByAjax(runfunction, url, data)
{
   var MAX_WAITING_TIME = 700000;
   var timeout_error = false;

   var xmlhttp = getXMLHttp();
   xmlhttp.open('POST', url, true);
   xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
   xmlhttp.send(data);

   var waitingTimer = setTimeout( function() { timeout_error = true; xmlhttp.abort(); alert('처리량이 많아 실행 제한 시간이 초과 되었습니다. \n\n잠시 후 다시 시도해 주시기 바랍니다.'); return; }, MAX_WAITING_TIME );

   xmlhttp.onreadystatechange = function() 
   {
      if(xmlhttp.readyState != 4) { return; }

      clearTimeout(waitingTimer);

      if((!timeout_error) && (xmlhttp.status != 200))
      {
         alert('요청하신 작업이 정상적으로 처리되지 않았습니다. \n\n다시 시도하여 보시고 계속 에러가 발생하면 관리자에게 문의 하십시오.');
         return;
      }
      runfunction(xmlhttp.responseText);
   }
   xmlhttp.send(null);
}
