var poll_request = false; 
var poll_idstring = '';
var poll_state = '';

function createAjax()
{
	var req = false;

	if (window.XMLHttpRequest)		// Mozilla, Safari,...
	{
		req = new XMLHttpRequest();
		if (req.overrideMimeType)
			req.overrideMimeType('text/xml');
	}
	else if (window.ActiveXObject)	 // IE
	{
		try
		{
			req = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) {}
		}
	}

	return req;
}

function poll()
{
	var req = false;
	var url = 'queue/poller.php?';
	
	if (poll_idstring != '')
		url += poll_idstring + "&";
	if (poll_request)
	{
		poll_request = false;
		url += "request&";
	}

	req = createAjax();
	if (!req)
	{
		alert("Unable to create Ajax object");
		return false;
	}
	req.onreadystatechange = function() { onPollReady(req); };
	req.open('GET', url, true);
	req.setRequestHeader('If-Modified-Since', 'Wed, 15 Nov 1995 00:00:00 GMT');
	req.send(null);
}

function onPollReady(req)
{
	if (req.readyState == 4)
	{
		if (req.status == 200)
		{
			var time = '';
		
			var nodeSession = req.responseXML.getElementsByTagName("session")[0];
			var nodeIdstring = nodeSession.getElementsByTagName("idstring").item(0);
			var nodeState = nodeSession.getElementsByTagName("state").item(0);
			var nodeTime = nodeSession.getElementsByTagName("time").item(0);
			
			poll_idstring = nodeIdstring.firstChild.data;
			state = nodeState.firstChild.data;
			if (nodeTime.firstChild) time = nodeTime.firstChild.data;
			
			if ((poll_state != 'enter') || (poll_state != state))
			{
				poll_state = state;
				if (state == 'enter')
				{
					x = 'Click <a href="javascript:requestControl()">here</a> to request control.';				
				}
				else if (state == 'waiting')
				{
					x = 'You will have control in '+time+' seconds.';
				}
				else if (state == 'control')
				{
					x = 'You have control! ' + time + ' seconds left.';
				}
				else
				{
					x = 'Unknown state: ' + state;
				}
				
				document.getElementById("queuecnt").innerHTML = x;
			}
			
			poll();
		}
		else
			if (req.status != 0)
				alert('Error ' + req.status + ' while polling.');
	}
}

function requestControl()
{
	poll_request = true;
}

function command(name, value)
{
	var req = false;

	req = createAjax();
	if (!req)
	{
		alert('Cannot create an XMLHTTP instance');
		return false;
	}
	req.onreadystatechange = function() { onCommandReady(req); };
	req.open('GET', 'queue/command.php?' + poll_idstring + '&name=' + name + '&value=' + value, true);
	req.setRequestHeader('If-Modified-Since', 'Wed, 15 Nov 1995 00:00:00 GMT');
	req.send(null);	
}

function onCommandReady(req)
{
	if (req.readyState == 4)
	{
		if (req.status == 200)
		{
			if (req.responseText != "")
				alert(req.responseText);
		}
		else
			alert('Error ' + req.status + ' while sending command.');
	}
}

poll();
