function addScriptHandle(file)
{
  var script = document.createElement('script');
  script.src = file;
  script.type = 'text/javascript';
  document.getElementsByTagName('head')[0].appendChild(script);
  return script;
}

var connections = new openConnectionList();
function openConnectionList() {
	this.openConnections = 0;
	this.openConnectionArr = new Array(0);
	
	this.onUpdate = function() {};
	
	this.addConnection = function (url)
	{
		this.openConnectionArr.push(url);
		this.openConnections++;
		this.onUpdate();
	}
	
	this.remConnection = function (url)
	{
		var id = -1;
		for(i in this.openConnectionArr)
			if(this.openConnectionArr[i] == url)
				id = i;
		if(id > -1)
		{
			this.openConnectionArr.splice(id, 1);
			this.openConnections--;
		}
		this.onUpdate();
	}
}

function sack(file) {
  this.requestFile = file;
  this.scriptHandle = null;
  this.response = "";
  
  this.onCompletion = function() { };
  this.postCompletion = function() { };
  
  this.reqID = "";
  
  this.elementObj = null;
  
  this.runAJAX = function() {
      this.reqID = "r"+Math.random().toString().substr(2);
      
      if(this.requestFile.indexOf('?') != -1)
        this.requestFile += "&reqID="+this.reqID;
      else
        this.requestFile += "?reqID="+this.reqID;
      
      this.cleanup = function(responseVar) {
        self.response = responseVar;
        self.onCompletion();
        if (self.elementObj) {
          var elemNodeName = self.elementObj.nodeName;
          elemNodeName.toLowerCase();
          if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea"){
            self.elementObj.value = self.response;
          } else {
            self.elementObj.innerHTML = self.response;
          }
        }
        self.postCompletion();
        
        self.scriptHandle.parentNode.removeChild(self.scriptHandle);
        self.scriptHandle = null;
				connections.remConnection(self.requestFile);
        window[self.reqID] = null;
        
      }
      
      window[this.reqID] = this.cleanup;
      this.scriptHandle = addScriptHandle(this.requestFile);
			
			connections.addConnection(this.requestFile);
      
  }
  
  var self = this;
}