
<!--//

/**
 * BERKLEY
 * ----------------------------------------------------------------------
 * copyright (c) 2006-2008 georg gradwohl <g2@mxdt.at>
 * all rights reserved.
 *
 * the reuse of this code in any manner is expressly forbidden.
 *
 * for detailed information visit http://berkley.mxdt.at
 *
 *
 * ajax.js
 *
 */



function log (msg, clear) {
	
	if (clear==true) document.getElementById('cache').innerHTML = '';
	
	document.getElementById('cache').innerHTML += msg+'<br>';
}



/*******************************************************************************
  AJAX
*******************************************************************************/

function ajax(name) {
	
	var self = this;
	
	this.name = name;
	
	var request = null;
	
	this.response = null;
	this.responseType = null;
	
	var followAction = null;
	var followTimeout = 0;
	
	var queue = new Array();
	
	var busy = false;
	var actReq = null;
	
	var method = 'POST';
	var action = null;
	
	
	
	this.setAction = function(a) {
		
		action = a;
	}
	
	
	this.setMethod = function(m) {
		
		method = m;
	}

	
  
	function createRequest() {
	
	  	if (window.XMLHttpRequest) {
	  		
	  		request = new XMLHttpRequest(); // Mozilla, Safari, Opera, IE7
	  	}
	  	
	  	else if (window.ActiveXObject) {
	  		
	  		try {
	  			
	  			request = new ActiveXObject('Msxml2.XMLHTTP'); // IE5
	  		}
	  		
	  		catch (e) {
	  			
	  			try {
	  				
	  				request = new ActiveXObject('Microsoft.XMLHTTP'); // IE6
	  			}
	  			
	  			catch (e) {
	  				
	  				alert(e);
	  				return false;
	  			}
	  		}
	  	}

	  	if (request == null) {
	  		
	  		alert('Kann keine XMLHTTP-Instanz erzeugen');
	  		return false;
	  	}
	}



	function send(parameters) {
		
		setLoading(true);
 		
  		if (request === null) {
  		
  			createRequest();
  		}

	  	request.open(method, action, true);
	  	request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	  	request.send(parameters);
	  	request.onreadystatechange = interpretRequest;
	}
	
	
	
	function interpretRequest() {

		/*
		 * 0 = uninitialized
    	 * 1 = loading
    	 * 2 = loaded
    	 * 3 = interactiv
    	 * 4 = complete
		 */
		 
		if (request.readyState == 4) {
				
			if (request.status == 200) {
			
				var type = request.getResponseHeader('Content-Type');
				
				var pos = type.lastIndexOf(';');
				
				responseType = type.substr(0,pos);

				switch (responseType) {
					
					case 'text/xml':
						response = request.responseXML;
						break;
					
					case 'text/html':
						response = request.responseText;
						break;
					
					default: 
						alert('unknown responseHeader: ' + type);
						stop();
						break;
				}
				
				actReq = setTimeout(followAction, followTimeout);
			}
			
			else {

				alert('could not finish request: status ' + request.status + '\n' + request.responseText);
				stop();
			}
		}
	}



  	this.sendRequest = function(parameters, action, timeout) {

  	 	if (!timeout) timeout = 0;

		if (busy == false) {
			
			busy = true;
			
			followAction = action;
			followTimeout = timeout;
			send(parameters);
		}
		
		else {
		
			var i = queue.length;
			
			queue[i] = new Object();

			queue[i]['parameters'] = parameters;
			queue[i]['action'] = action;
			queue[i]['timeout'] = timeout;
		}
  	 }
  	 
  	
  	
	this.getResponse = function() {
	  	
		clearTimeout(actReq);
		
		var r = response;
		
		var check = false;
		
		for (i=0; i<queue.length; i++) {
		
			if (queue[i] != null) {
				
				followAction = queue[i]['action'];
				followTimeout = queue[i]['timeout'];
				send(queue[i]['parameters']);
				queue[i] = null;
				check = true;
				break;
			}
		}
		
		if (check == false) queue = new Array();
		
		busy = check;
		
		setLoading(false);
	  	
		return r;
	}
	
	
	
	function setLoading(flag) {
	
		document.getElementById('loadingImg').style.display = (flag==true) ? 'block' : 'none';
	}
	


}


// -->

