function AJAXInteraction(url, callback, params) {

    var READY_STATE_UNINITIALIZED=0;
	var READY_STATE_LOADING=1;
	var READY_STATE_LOADED=2;
	var READY_STATE_INTERACTIVE=3;
	var READY_STATE_COMPLETE=4;
    var req = null;
    req = initXMLHTTPRequest();
    
	//req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
       
    function initXMLHTTPRequest() {
		var xmlhttp = null;
		if(typeof XMLHttpRequest != "undefined") {
			xmlhttp = new XMLHttpRequest();
			return xmlhttp;
		}
		var xhrVersion = [ "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "Microsoft.XMLHttp" ];
		for(var i=0; i<xhrVersion.length; i++) {
			try {
				xmlhttp = new ActiveXObject(xhrVersion[i]);
				return xmlhttp;
			} catch (e) { }
		}
	}
    
    function processRequestXML () {
      // readyState of 4 signifies request is complete
      var divLoading = document.getElementById("divLoading");
           
      if (req.readyState == READY_STATE_COMPLETE) {
           divLoading.innerHTML = "";
           if (callback) callback(req.responseXML);        
      }
      else {
      	
      	divLoading.innerHTML = "Loading...";
      }
    }
    
    function processRequestText () {
      // readyState of 4 signifies request is complete
      var divLoading = document.getElementById("divLoading");
      var i=0;
      
      if (req.readyState == READY_STATE_COMPLETE) { 
      		divLoading.innerHTML = "";
      		if (callback)  callback(req.responseText);       
      }
      else {   
    		divLoading.innerHTML = "Loading...";      	   	
      }
      
    }

    this.doGetXML = function() {
      req.onreadystatechange = processRequestXML;
      req.open("GET", url, true);
      req.send(null);    
    }
    
    this.doGetText = function() {
      req.onreadystatechange = processRequestText;
      req.open("GET", url, true);
      req.send(null);    
    }

	this.doPostXML = function() {
	  req.onreadystatechange = processRequestXML;
	  req.open("POST",url, true);
	  req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      req.setRequestHeader("Content-length", params.length);
      req.setRequestHeader("Connection", "close");
      req.send(params);
	}    
    
    this.doPostText = function() {
	  req.onreadystatechange = processRequestText;
	  //req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	  //alert(params);
	  req.open("POST",url, true);
	  req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      req.setRequestHeader("Content-length", params.length);
      req.setRequestHeader("Connection", "close");
      req.send(params);
	}
}
