//
// AJAX
//

// A few runtime variables
css_loaded = new Array ();

var ajax_last_auto_poll = 0;
var ajax_auto_poll_int = 0;
var ajax_poll_key = '';
runtime_counter = 0;
function start_polling (key)
{

	// Set key
	ajax_poll_key = key;

	var current_time = new Date ();
	if (ajax_auto_poll_int > 0 && ajax_last_auto_poll < (current_time.getTime() - (ajax_auto_poll_int * 1000)))
	{

		// XML HTTP REQUEST
		que.addEvent ('index.php?key='+key+'&m='+ajax_poll_module, null);
		ajax_last_auto_poll = current_time.getTime ();

	}
	
	setTimeout('start_polling('+key+');', 100);

}

var refreshOkay = true;
var ajaxRunning = true;
var countXMLUpdates = 0;
var processReqChangeRunning = false;
var lastRefreshTime = 0;

var countLoadingDots = 1;
var countLoadingDotsC = 1;

function loadingSignal () {

	if (document.getElementById('loading')) {

		if (countLoadingDots > 5) {

			countLoadingDotsC = -1;

		}
		
		else if (countLoadingDots < 1) {
		
			countLoadingDotsC = 1;
		
		}

		var dots = '';
		for (var i = 0; i < countLoadingDots; i++)
		{
		
			dots += ".";
		
		}

		document.getElementById('loading').innerHTML = dots;
		countLoadingDots += countLoadingDotsC;

	}

}

function getXMLHttpRequest() {

	var xmlHttp = false;
	// Mozilla, Opera, Safari sowie Internet Explorer 7
	if (typeof XMLHttpRequest != 'undefined') {
	
		xmlHttp = new XMLHttpRequest();
		
	}
	
	if (!xmlHttp) {
	
		// Internet Explorer 6 und älter
		try {
		
			xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
			
		}
		
		catch(e) {
		
			try {
			
				xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
				
			} 
			
			catch(e) {
			
				xmlHttp  = false;
				
			}
		}
	
	}
	
	return (xmlHttp);

}

// Que everything
function XML_QUE ()
{

	var que = new Array ();
	var que_counter = 0;
	var run_counter = 0;
	this.addEvent = addEvent;
	this.getEvent = getEvent;
	this.isEmpty = isEmpty;

	function addEvent (url, data)
	{

		que[que_counter] = new Array ();
		que[que_counter][0] = url;
		que[que_counter][1] = data;
		que_counter ++;

	}

	function getEvent ()
	{

		if (run_counter < que_counter) {

			run_counter ++;
			return que[(run_counter - 1)];

		}

		else {

			return false;

		}

	}

	function isEmpty ()
	{

		return (run_counter == que_counter);

	}

}

// Create the Que
var que = new XML_QUE ();
execute_quelist (que);

// Execute the que list
function execute_quelist (que) {

	if (refreshOkay) {

		var event = que.getEvent ();
	
		if (event) {
	
			refreshOkay = false;
			countXMLUpdates ++;
		
			// branch for native XMLHttpRequest object
			var req = getXMLHttpRequest();
		
			if (req) {
		
				req.onreadystatechange = req.onreadystatechange = function () { processReqChange (req); };
				req.open("POST", event[0]+"&jscounter="+countXMLUpdates, true);
				req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		
				req.send(event[1]);
	
			}
	
		}

	}

	setTimeout('execute_quelist (que);', 100);

}

//
// received-XML Parser
//
function processReqChange(newReq) {

	var count = 0;

	// only if req shows "complete"
	if (newReq.readyState == 4 && newReq.status == 200) {

		loadingSignal();

		// debug
		if (document.getElementById('debug_pre'))
		{
		
			if (newReq.responseText != "")
			{
			
				/*
			
				var count = "<b>Update Counter: #"+runtime_counter+"</b>\n";
				document.getElementById('debug_pre').innerHTML = count + newReq.responseText + "\n" + document.getElementById('debug_pre').innerHTML;
				
				*/
				
				var count = "<b>Update Counter: #"+runtime_counter+"</b>\n";
				document.getElementById('debug_pre').innerHTML = count + newReq.responseText;
			
			}
		
		}

		// ...processing statements go here...
		eval (newReq.responseText);
		
		if (document.body.style.cursor == 'wait')
		{
			document.body.style.cursor = 'default';
		
		}
		refreshOkay = true;

	}
}

// 
// Toggle div
//
function toggleDiv (divId)
{

	if (document.getElementById(divId))
	{
	
		if (document.getElementById(divId).style.display == 'none')
		{
		
			document.getElementById(divId).style.display = 'block';
			document.getElementById(divId).style.visibility = 'visible';
		
		}
		
		else {
		
			document.getElementById(divId).style.display = 'none';
			document.getElementById(divId).style.visibility = 'hidden';
		
		}
	
	}

}

//
// Form submits
//
function submit_form (form_name)
{

	eval ('var f = document.forms["'+form_name+'"];');
	
	if (f)
	{
	
		var sendData = 'formName='+form_name;
		for (var i = 0; i < f.elements.length; i ++)
		{
		
			sendData += '&'+f.elements[i].name+'='+f.elements[i].value;
		
		}
	
		que.addEvent ('index.php?key='+ajax_poll_key, sendData);
	
	}
	
	else {
	
		alert ('Form not found: '+form_name);
	
	}

}

function submit_field (form_name, field_name)
{

	eval ('var f = document.forms["'+form_name+'"];');
	
	if (f)
	{
	
		eval ('var f = f.'+field_name+';');
	
		var sendData = 'fieldFormName='+form_name;
		sendData += '&'+f.name+'='+f.value;
		que.addEvent ('index.php?key='+ajax_poll_key, sendData);
	
	}
	
	else {
	
		alert ('Form not found: '+form_name);
	
	}

}

function requestPage (a)
{

	que.addEvent ('index.php?key='+ajax_poll_key+'&'+a);
	document.body.style.cursor = 'wait';
	return false;

}