var ajaxDebug = true;
var _ajaxTimeOutUrl = '';

function ValidateInput(url)
{
  var check  = "";
  check = /(https?:\/\/\w{1}[\w-:.]*\w{1}\/)?\w{1}[\w-?\/&.+%#]*\w{1}/;
  if ( !check.test(url) ) {
    if (ajaxDebug) {
      alert('Error: Invalid Url.');
    }
    return false;
  }
  return true;
}

function GetXmlHttpObject(xmlData)
{
  var obj = null;
  if (window.ActiveXObject) {
    try {
      obj = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        obj = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        obj = null;
      }
    }
  } else if (window.XMLHttpRequest) {
    obj = new XMLHttpRequest();   // IE7, Mozilla, Safari, ...
    if(xmlData == true && obj.overrideMimeType) {
      obj.overrideMimeType('text/xml');
    }
  }
  return obj;
}

function SendHttpRequest(url, params, callbackFunc, waitMsg, appendUniqueId, xmlData, errorFunc)
{
  var objHttpRequest = null;
  var responseNode = null;
  var strError = "";
  xmlData = (typeof xmlData == "undefined") ? false : xmlData;

  if ( !ValidateInput(url) ) {
    return false;
  }

  if (appendUniqueId) {
    url += (url.indexOf("?") > -1) ? "&" + new Date().getTime() : "?" + new Date().getTime();
    params += "&random=" + new Date().getTime();
  }

  objHttpRequest = GetXmlHttpObject(xmlData);

  if (objHttpRequest) {
    if (waitMsg) {
      //waitMessage(waitMsg);
    }
    objHttpRequest.onreadystatechange = function() { ProcessHttpResponse(objHttpRequest, callbackFunc, errorFunc) };
    objHttpRequest.open( "POST", url, true );
    objHttpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    if (params != '' || params != null) {
      objHttpRequest.setRequestHeader("Content-length", params.length);
    }
    objHttpRequest.setRequestHeader("Connection", "close");
    if (params != '' || params != null) {
      objHttpRequest.send(params);
    }
  } else {
    return false;
  }
  return true;
}

function ProcessHttpResponse(objHttpRequest, callbackFunc, errorFunc)
{
  if (objHttpRequest.readyState == 4 || objHttpRequest.readyState == "complete") {
    if (objHttpRequest.status == 200) {
      if (typeof callbackFunc == "function") {
        callbackFunc(objHttpRequest);
      } else {
        //strResponse = objHttpRequest.responseText;
        //document.getElementById(idResponseNode).innerHTML = strResponse;
        alert ("function " + callbackFunc + "() not found");
      }
    } else { // response not success
      if (typeof errorFunc == "function") {
        errorFunc(objHttpRequest);
      } else if (_ajaxTimeOutUrl != null && _ajaxTimeOutUrl != '') {
        window.location.href = _ajaxTimeOutUrl;
      }
    }
  }
  objHttpRequest = null;
}

function getXMLDoc(objHttpRequest)
{
  var xmlDoc = null;
  var strValue = strtrim(objHttpRequest.responseText);
  if (strValue.indexOf('<?xml') != 0) {
    return xmlDoc;
  }
  if (typeof strValue != 'undefined') {
    if (window.ActiveXObject) {
      xmlDoc = new ActiveXObject('Msxml2.DOMDocument');
      xmlDoc.loadXML(strValue);
    } else if (objHttpRequest.responseXML) {
      xmlDoc = objHttpRequest.responseXML;
    } else {
      // alert("Unable to parse return XML : " + objHttpRequest);
      // document.write(strValue);
    }
  }
  return xmlDoc;
}

// END
