var language = null;

function setLanguage()
{
	language = 'nl';
	var metaElements = document.getElementsByTagName('meta');
	var metaElementsCount = metaElements.length;
	var i = 0;
	while (i < metaElementsCount)
	{
		if (metaElements[i].name == 'language') language = metaElements[i].content;
		i++;
	}
}

//Class ServerRequest
function ServerRequest(functionRequestUrl, destinationObject, destinationFunction, stateChangeFunction, method, parameters)
{
	// Dit object
	var instantie = this;
	
	// Het XML HTTP object verantwoordelijk voor de client-server communicatie
	var requestObject = false;
	// Het adres, inclusief de functie (pagina), van de server die opgevraagd wordt
	var functionRequestUrl = functionRequestUrl;
	// Het object dat de ontvangen data verwerkt
	var destinationObject = destinationObject;
	// De functie die de ontvangen data verwerkt (functie uit bovenstaand object)
	var destinationFunction = destinationFunction;
	// De functie die wordt aangeroepen als de status van het XML HTTP object veranderd (functie uit bovenstaand object) (OPTIE)
	var stateChangeFunction = stateChangeFunction;
	// De methode van aanvragen: GET of POST
	var method = method;
	// De parameters van een POST aanvraag
	var parameters = parameters;
	
	// Initialiseren en versturen XML HTTP object
	var init = function()
	{
		if (language == null) setLanguage();		
		requestObject = getAjaxHandler();
		if (method == null || method == 'GET')
		{
			method = 'GET';
			parameters = null;
		}
		requestObject.open(method, language + '/' + functionRequestUrl, true);
		requestObject.onreadystatechange=stateChange;
		requestObject.setRequestHeader("Cache-Control", "no-cache");
		requestObject.setRequestHeader("X_USERAGENT", "TimisAjaxApplicatie");
		if (method == 'POST')
		{
			requestObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			requestObject.setRequestHeader("Content-length", parameters.length);
		}
		//alert(parameters);
		requestObject.send(parameters);
		setLoadingScreen(true);
	}
	
	// In geval van wijzigingen in XML HTTP Object het data verwerkende object op de hoogte brengen
	var stateChange = function()
	{
		if (stateChangeFunction != null)
		{
			destinationObject[stateChangeFunction](requestObject.readyState);
		}
		if (requestObject.readyState == 4)
		{
			// Ontvangen data van het XML HTTP object, in de vorm van JSON, omzetten naar javascript datastructuur
			//alert(requestObject.responseText);
			//document.body.innerHTML = requestObject.responseText;
			var object = eval("(" + requestObject.responseText + ")");
			if (object.stopError)
			{
				alert(object.stopError);
			}
			else
			{
				destinationObject[destinationFunction](object);
			}
			setLoadingScreen(false); 
		}
	}
	
	// AJAX request opvragen, browser afhankelijk
	var getAjaxHandler = function()
	{
		if(window.XMLHttpRequest)
		{
    		return new XMLHttpRequest(); 
		}
		else
		{ 
			var types = ['MSXML2.XMLHTTP','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.5.0','Microsoft.XMLHTTP']; 
			var i = types.length; 
			while (i--)
			{ 
				try
				{ 
					return new ActiveXObject(types[i]); 
				} 
				catch (e) 
				{} 
			} 
			return undefined; 
		}
	}
	
	// Loading screen weergeven
	var setLoadingScreen = function(setOn)
	{
		if (document.getElementById('loadingScreen') != null)
		{
			window.onresize = instantie.resetLoadingScreen;
			window.onscroll = instantie.resetLoadingScreen;
			if (setOn)
			{
				instantie.resetLoadingScreen();
				document.getElementById('loadingScreen').style.visibility = 'visible';
			}	
			else
			{
				document.getElementById('loadingScreen').style.visibility = 'hidden';
			}
		}
	}
	
	// Positie van loading screen instellen
	this.resetLoadingScreen = function()
	{
		var windowHeight = document.documentElement.clientHeight;
		var loadingScreenHeight = document.getElementById('loadingScreen').offsetHeight;
		var loadingScreenPosition = (((windowHeight - loadingScreenHeight) / 2) + document.documentElement.scrollTop + document.body.scrollTop) + 'px';
		document.getElementById('loadingScreen').style.top = loadingScreenPosition;

		var windowWidth = document.documentElement.clientWidth;
		var loadingScreenWidth = document.getElementById('loadingScreen').offsetWidth;
		var loadingScreenPosition = (((windowWidth - loadingScreenWidth) / 2) + document.documentElement.scrollLeft + document.body.scrollLeft) + 'px';
		document.getElementById('loadingScreen').style.left = loadingScreenPosition;
	}
	
	// ServerRequest onmiddelijk na aanmaken initialiseren en verzenden
	init();
}
