/**
*
* AJAX Funties
*
**/

// Variabele declaratie
var xmlHttp;
var xmlReturnFunction;
var ajaxEnabled= false;

// Controleren of Ajax ondersteund wordt door de browser
xmlHttp = GetXmlHttpObject();
if (xmlHttp == null) {
	alert ("Uw browser ondersteunt geen HTTP Request");
} else {
	ajaxEnabled = true;
}

// Ajax request uitvoeren
function ajax (url, action, method, values) {
	if (method) {
		method = method;
	} else {
		method = "GET";
	}
	if (document.getElementById("ajax")) {
		document.getElementById("ajax").style.display = "";
	}
	if (ajaxEnabled == true) {
		url = createUrl(url);
		xmlReturnFunction = action;

		xmlHttp = GetXmlHttpObject();
		xmlHttp.onreadystatechange=fetchResult;
		xmlHttp.open (method, url, true);

		if (method == "POST") {
			xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			send = values;
		} else {
			send = null;
		}
		xmlHttp.send(send);
	}
}

// Het resultaat ophalen en de return functie aanroepen
function fetchResult()  {
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
		if (document.getElementById("ajax")) {
			document.getElementById("ajax").style.display = "none";
		}
		eval (xmlReturnFunction);
	}
}

// HTTP request uitvoeren
function GetXmlHttpObject() {
	var objXMLHttp=null
	if (window.XMLHttpRequest) {
		objXMLHttp=new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	return objXMLHttp
}

// De url opmaken + random getal toevoegen om caching te voorkomen
function createUrl (url) {
	if (url.match(/\?/) !== null) {
		url += "&";
	} else {
		url += "?";
	}
	url += "sid=" + Math.random();
	return url;
}

function getNodeValue(tag) {
	return xmlHttp.responseXML.getElementsByTagName(tag)[0].firstChild.nodeValue;
}

// Lege functie voor wanneer het, om wat voor reden dan ook, niet wenselijk is een functie uit te voeren na het request
function ajax_empty() {
}

// Functie om de return waarde weer te geven, bedoeld voor testdoeleinden
function ajax_return() {
	alert(xmlHttp.responseText);
}


/**
*
*  URL encode / decode
*  http://www.webtoolkit.info/
*
**/

var Url = {

    // public method for url encoding
    encode : function (string) {
        return escape(this._utf8_encode(string));
    },

    // public method for url decoding
    decode : function (string) {
        return this._utf8_decode(unescape(string));
    },

    // private method for UTF-8 encoding
    _utf8_encode : function (string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    },

    // private method for UTF-8 decoding
    _utf8_decode : function (utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }

        return string;
    }

}