//////////////////////////////////////////////////////////////////////////////
//	Created by: Maarten Hus
//	Date: 2008-07-11
//	version: 0.5
//	
//	Creates a http request object so request can be send to the server.
//	This response wil be set in a div near the original field.	
//
// 	TODO: comment	
// 	
// 
//////////////////////////////////////////////////////////////////////////////

var xmlHttp = createXmlHttpRequestObject();

var serverAddress = "/Formaj/formaj.php?";

var debug = true;

var cache = new Array();

var message;

var right;
var wrong;

function createXmlHttpRequestObject()
{
	var xmlHttp;
	
	try
	{
		xmlHttp = new XMLHttpRequest();
	}
	catch(e)
	{
		var xmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
										"MSXML2.XMLHTTP.5.0",
										"MSXML2.XMLHTTP.4.0",
										"MSXML2.XMLHTTP.3.0",
										"MSXML2.XMLHTTP",
										"Microsoft.XMLHTTP");
		
		for (var i=0; i < xmlHttpVersions.length && !xmlHttp; i++) 
		{
			try
			{
				xmlHttp = new ActiveXObject(xmlHttpVersions[i]);
			}
			catch(e){}	
		}								
	}
	
	if (!xmlHttp) 
	{
		displayError("Error could not create xml object");
	}
	else
	{
		return xmlHttp;
	}
}

function displayError(message)
{
	if(debug)
	{
		debug = false;
		alert("Error encountered:\n" + message);
	}
}

function sendRequest()
{
	try
	{
		if((xmlHttp.readyState == 4 || xmlHttp.readyState == 0) && cache.length > 0)
		{
			var cacheEntry = cache.shift();
			
			xmlHttp.open("POST", serverAddress, true);
			xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			
			xmlHttp.onreadystatechange = handleRequestStateChange;
			xmlHttp.send(cacheEntry);
		}
	}
	catch(e)
	{
		displayError(e.toString());
	}
}

function handleRequestStateChange()
{
	if(xmlHttp.readyState == 4)
	{
		if (xmlHttp.status == 200)
		{
			try
			{
				readResponse();
			}
			catch(e)
			{
				displayError(e.toString());
			}
		}
		else
		{
			displayError(xmlHttp.statusText);
		}
	}
}

function readResponse()
{
	var response = xmlHttp.responseText;
	
	if(response != 'error')
	{
		if(response == 'true')
		{
			message.innerHTML = right;
		}	
		else if(response == 'false')
		{
			message.innerHTML = wrong;
		}
		else
		{
			displayError(response);
		}	
	}
}

function check(action, inputID, callbackID, $right, $wrong)
{
	message = document.getElementById(callbackID);
	var input = document.getElementById(inputID).value;
	
	if ($right)
	{
		right = $right;
	}
	else
	{
		right = '<img src="/Formaj/images/tick.png"></img>';
	} 
	
	if ($wrong)
	{
		wrong = $wrong;
	}
	else
	{
		wrong = '<img src="/Formaj/images/exclamation.png"></img>';
	}
	
	cache.push("action=" + action + "&input=" + input);
	
	sendRequest();
}
