function ElusiveAjax()
{
     	var HttpRequest;
     	var url="ajax.php5";
     	var test_system=0;
		 	var xml;
		 	var ajax_mode="create";
	 		var anzRequests=0;
	 		var tmp;
			var last_query;

     this.Update = function(query, method) {
     	  DoRequest(query, method);
				
				

    }

     var DoRequest = function(query, method) {
        HttpRequest = false;
 
 				Debugger.StartRequest();
 
 				if (typeof(method) == "undefined") method="GET";
 
 
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            HttpRequest = new XMLHttpRequest();
            if (HttpRequest.overrideMimeType) {
                HttpRequest.overrideMimeType('text/xml');
                // zu dieser Zeile siehe weiter unten
            }
        } else if (window.ActiveXObject) { // IE
            try {
                HttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    HttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!HttpRequest) {
            alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
            return false;
        }
        
			query+="&ajax_mode="+ajax_mode;
			if (ajax_mode == "create") {
					ajax_mode = "update";
				
			}
	 			
        
        
        HttpRequest.onreadystatechange = ProcessRequest;
        
        if (method == "POST")
	      {
	        HttpRequest.open(method, url, true);
	        HttpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	        HttpRequest.setRequestHeader("Content-length", query.length);
	        HttpRequest.setRequestHeader("Connection", "close");
	        HttpRequest.send(query);
	        this.last_query="form";
	      
	      }
      	else if (method == "GET")
      	{
      		HttpRequest.open(method, url+"?"+query, true);
	        HttpRequest.send(null);
	        this.last_query=query;
      	}
        
        

        d = new Date();
        year= d.getYear();
        month= d.getMonth();
        day=d.getDay();

        hour = d.getHours();
        min = d.getMinutes();
        sec = d.getSeconds();

        timestamp=Date.UTC(year, month, day, hour, min, sec)/1000;
        lastUpdate=timestamp;

		
				anzRequests=anzRequests+1;
				//alert(query);
        
		
    }
	
	this.CheckRequestState = function(query, GetAnzRequests)
	{
		if(anzRequests == GetAnzRequests)
		{
			if (HttpRequest.readyState < 4)
			alert("Es liegt ein Problem vor!");
		}
	
	
	}

    var ProcessRequest = function() 
		{
			//SetMsg("Request-Status"+HttpRequest.readyState);
			if (HttpRequest.readyState == 4) {
            if (HttpRequest.status == 200) {
                ProcessXML(HttpRequest);
								
				hideLoadingIcon();
				Behaviour.apply();				

				//alert(document.getElementsByTagName('img').length+' / '+document.images.length);
            } else {
                alert('Bei dem Request ist ein Problem aufgetreten. ('+HttpRequest.status+' / '+HttpRequest.responseText+')');
            }
        }

    }
	
	
	var ProcessXML = function(Request) 
	{
		try 
		{
			xml=Request.responseXML;
			
			
			
			Debugger.StopRequest();
			
			system_type="right"
			
			if (xml.firstChild.nodeName == "error") 
			{
				
				throw new Exception('Error');
			}
			
			var mode=xml.getElementsByTagName("ecms")[0].firstChild.nodeName;


			if (system_type == "right")
			{
			
				var debug;
				anz=xml.getElementsByTagName(mode)[0].childNodes.length;
				for(i=0; i< anz; i++)
				{
					node=xml.getElementsByTagName(mode)[0].childNodes.item(i);
					if (node.nodeName == "update") update=node;
					else if (node.nodeName == "global") global=node;
					else if (node.nodeName == "user") user=node;
					else if (node.nodeName == "template") elusive_template=node;
					else if (node.nodeName == "dynamicJS") djs=node;
		
				
		
				}
		
		    	CMS.UpdateGlobals(global);
		
				try
				{
					var debug = xml.getElementsByTagName("debugger")[0];
		    
		    		Debugger.process(debug);
				}
		    	catch(e)
		    	{
		    		
		    	}
		    	//alert("Mode: "+mode);            
		                
		  
				if (mode == "create")
				{
					ElusiveTemplate.CreateTemplate(elusive_template);
				}
				else if (mode == "update")
				{
					ElusiveTemplate.UpdateTemplate(elusive_template);
		                        
				}
		
				DynamicJS.process(djs);
				
				
			
			}
		
		}
		catch (e)
		{
			var show=1;
			
			try
			{
				show=xml.getElementsByTagName("show")[0].firstChild.nodeValue;
			}
			catch(e2)
			{
				xml=Request.responseText;
			
				xml='<cms_error><info><e>'+e+'</e><e2>'+e2+'</e2></info>'+xml+'</cms_error>';
			
				
				
				if (show == 1)
					alert(xml);
				else
					document.location.href="errors/500.html";
					
				throw e;
			}
		}
		
	}




}