if(typeof ajax == "undefined") ajax = new Ajax();
if(typeof initObjects != "undefined") initObjects.push(ajax);

function Ajax() {
	this.after = "";
	this.loader = "none";
	this.target = "";
	
	this.request = null;
	
	this.init = function() {
		ajax.request = null;
		
		try {
	    ajax.request = new XMLHttpRequest();
	  }
	  catch (exc_ms) {
	    try {
	      ajax.request = new ActiveXObject("Msxml2.XMLHTTP");
	    }
	    catch (exc_nonms) {
	      try {
	        ajax.request = new ActiveXObject("Microsoft.XMLHTTP");
	      }
	      catch (exc) {
	        ajax.request = null;
	      }
	    }
	  }
		
		if(ajax.request != null) {		
			ajax.request.onreadystatechange = ajax.stateChange;
		}
	};
	
	this.stateChange = function() {
		switch(ajax.request.readyState) {
			case 1:
				if(ajax.loader == "none") break;
				
				var loadingInfo = "";
				if(ajax.loader == "default") {
					loadingInfo = "<table style=\"width:100%;height:100%;\"><tr><td style=\"width:100%;text-align:center\"><img border='0' src=\"/community/img/ajax/loader-small.gif\" /></td></tr></table>";
				}
				else if(ajax.loader == "clear") {
					loadingInfo = "";
				}
				else {
					loadingInfo = ajax.loader;
				}
				
				loadingInfo = "<table style=\"width:100%;height:100%;\"><tr><td style=\"width:100%;text-align:center;font:inherit\">lade...</td></tr></table>";
				
				if(document.getElementById(ajax.target)) document.getElementById(ajax.target).innerHTML = loadingInfo;
				break;
				
      case 4:
        if(ajax.request.status != 0 && ajax.request.status != 200) {
          // error handling
          //alert("Error: " + ajax.request.status);
          return false;
        }
        else{
          // write the answer into the specified container
					
          if(document.getElementById(ajax.target)) document.getElementById(ajax.target).innerHTML = ajax.request.responseText;
					if(ajax.after != "") eval(ajax.after);
        }
				
				// memory handling
				ajax.request.onreadystatechange = null;
				delete ajax.request.onreadystatechange;
				
        break;

      default:
        return false;
        break;
    }
		
	};

	this.setAndDo = function(query, target, next, loader) {
		// append random parameter
	  var rnd = Math.round(Math.random() * 10000);
		query += (query.indexOf("?") == -1 ? "?" : "&") + "ajaxrnd=" + rnd;
		
		this.after = next;
		this.target = target;
		
		if(this.setAndDo.arguments.length >= 4) {
			this.loader = loader;
		}
		else {
			this.loader = "...";
		}
		
		var objThis = this;
		
	  // memory handling
	  try {ajax.request.onreadystatechange = null;} catch(e) {}
		
		// open the request
		ajax.request.open("GET", query, true);
		
		// memory handling
		try {ajax.request.onreadystatechange = null;} catch(e) {}
		try {delete ajax.request.onreadystatechange;} catch(e) {}
		
		ajax.request.onreadystatechange = function() {ajax.stateChange();};
		ajax.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
		ajax.request.send(null);
	};
}