//xmlajax.js
var outstandingCalls = 0;

function CreateXMLStringParser(XMLString){
	var xmlDoc;
	try {
		var xmlParser = new DOMParser();
		xmlDoc = xmlParser.parseFromString(XMLString, "text/xml");
	}
	catch(Err){
		try{
			xmlDoc= new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async="false";
			xmlDoc.loadXML(XMLString);
		}
		catch(Err){
			window.alert("Browser does not support XML parsing.");
			return false;
		}
	}
	return xmlDoc;
}

function createDomObject(xmltext){
	var parser = CreateXMLStringParser(xmltext);
	return parser;
}

function getElementFromDom(tagName, docRoot){
	if (docRoot.getElementsByTagName(tagName).length > 0 && docRoot.getElementsByTagName(tagName)[0].childNodes[0]){
		return docRoot.getElementsByTagName(tagName)[0].childNodes[0].nodeValue;
	}
	else return '';
}

function stateChanged(response) {
	handleResponse(response);
}

function callPhpFunction(uri, params, functionName){
	var evalvalue = "stateChanged";
	eval ('if (typeof stateChanged_'+functionName+' == "function") evalvalue = "stateChanged_'+functionName+'";');
	if (trim(params) !== "") ajax.callPage(uri, params, eval(evalvalue));
}

function handleError(xmltext, showFalse, showOK){
	doc = createDomObject(xmltext);
	if (getElementFromDom('success', doc) == '0'){
		if (showFalse) toonMelding('fout', getElementFromDom('message', doc));
		return false;
	}
	else if (getElementFromDom('success', doc) == '1'){
		if (showOK) toonMelding('goed', getElementFromDom('message', doc));
		return true;
	}
}

function handleResponse(response){
	
	doc = createDomObject(response);
	success = getElementFromDom("success", doc);	
	message = getElementFromDom("message", doc);	

	try{
		js = getElementFromDom("js", doc);	
		//////////////console.debug('trying to execute: '+js);
		eval(js);
	}
	catch(E){}	
		
	handleResponseMessage((success == 1), message);
	return (success == 1);
}

function handleResponseMessage(success, message){
	m = message;
	if (success) {
		if (m !== '') {
			showMessage('okmessage', m, 1500);
		}
	}
	else{
		if (m !== '') {
			m = m.replace(/&nbsp;/g, " ");
			console.log(decode(m));		
		}
	}
}

var GLM = {
    DOM:        Object,
    AJAX:       Object,
    Collection: Object
};

GLM.AJAX = function() {
	var ajaxObject = function() {
		try {
			return new XMLHttpRequest();
		} catch(ex) {}
		try {
			return new ActiveXObject("Microsoft.XMLHTTP");
		} catch(ex) {}
		return false;
	};
	
	this.callPage = function(url, params, callbackFunction) {
		try {
			var ao = ajaxObject();
			ao.onreadystatechange = function() {
				if (ao.readyState == 4 || ao.readyState == "complete") {
					callbackFunction(ao.responseText);
				}
			};
			ao.open("POST", url, true);
			ao.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			ao.send(params);
		} catch(ex) {
			alert(ex);
		}
	};
};