ajaxRunning = false;

function AjaxQuery(anId) {
//alert('AjaxQuery');
	// define object's properties
  this._params = new Array();
  this._id = anId;
  this._params[this._params.length] = "QID=" + anId;
  this._handler = new Object();
  this._handler._callback = '';
  this._handler.processResponse = function (aRequestObject) {
    if (aRequestObject.readyState == 4) { // Complete
      if (aRequestObject.status == 200) { // OK response
  
       //var aResponseText = aRequestObject.responseText  
      // aResponseText = aResponseText.replace(/%%r%/g,"\\r").replace(/%%n%/g,"\\n");
      //aResponseText = replaceResponseText(aResponseText);
       //var result = eval('(' + (aResponseText || "null") + ')');

       if (this._callback) {
         eval(this._callback+"()");
        }
      }
      else {
        alert("Error: "+aRequestObject.statusText+" ("+aRequestObject.status+")");   
      }
      ajaxRunning--;      
    }
  }
}

AjaxQuery.prototype.setParam = AjaxQuery_setParam;
AjaxQuery.prototype.execute = AjaxQuery_execute;

function AjaxQuery_setParam(aName, aValue) {
	this._params[this._params.length] = aName + "=" + escape(aValue);
}

function AjaxQuery_execute(aCallbackFunctionName) {  
//alert('AjaxQuery_execute');
  this._handler._callback = aCallbackFunctionName;
  var xhr = new XmlRequest(this._id);
  xhr.actionUrl = this.actionUrl;
  xhr.XmlResponseProcessor = this._handler;
  xhr.sendList = true;
  xhr.addCustomCleanUrl(this._params.join("&"));  
  xhr.async = false;
  xhr.doSendRequest(); 
  ajaxRunning++;
  
}

function addLineBreakForString(aString) {
  return aString.replace(/%%r%/g,"\r").replace(/%%n%/g,"\n");
}

/**
 * excute query 
 */
function executeQuery(anAjaxQueryName, aParams, aParamValues, aCallbackFunc) {
//alert('executeQuery');
  var qry = new AjaxQuery(anAjaxQueryName);
  if (!(aParams == null || aParams.constructor != Array)) {
    for (var i=0; i<aParams.length; i++) {
      qry.setParam(aParams[i], aParamValues[i]);
    }
  }
  qry.execute(aCallbackFunc); 
}

// replaces response text with a good version.
function replaceResponseText(aResponseText) {
//alert('replaceResponseText');
   aResponseText = aResponseText.replace(/%%r%/g,"\\r").replace(/%%n%/g,"\\n");
   aResponseText = aResponseText.replace(/%%"%/g,'\\"');
//alert('aResponseText: ' + aResponseText);
   return aResponseText;

}
