var ajax = {};
ajax.data = {
	showErrors:true,
	mask:true
};
ajax.data.base = window.location.href.split('/');
if(ajax.data.base[2] == 'www.lucasict.nl'){
	ajax.data.base = '/'+ajax.data.base[3]+'/';
} else {
	ajax.data.base = '/';
}
ajax.data.maskImage = ajax.data.base+'images/s.png';

ajax.request = function(args){
	var http;
	var browser = navigator.appName;
	if ( browser == 'Microsoft Internet Explorer' ){
		http = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		http = new XMLHttpRequest();
	}
	var valid = true;
	var msg = '';
	var data = {
		method:'GET',
		showErrors:ajax.data.showErrors,
		mask:ajax.data.mask,
		maskImage:ajax.data.maskImage
	};
	if(typeof data.maskImage != 'undefined'){
		var temp = new Image();
		temp.src = data.maskImage;
	}

	this.setMethod = function(method){
		if(method == 'POST' || method == 'GET'){
			data.method = method;
		}
	}
	this.setShowErrors = function(bool){
		if(bool === false){
			data.showErrors = false;
		} else if(bool === true) {
			data.showErrors = true;
		}
	}

	for(i in args){
		switch(i){
			case 'method':
				this.setMethod(args[i]);
			break;
			case 'showErrors':
				this.setShowErrors(args[i]);
			break;
			default:
				data[i] = args[i];
			break;
		}
	}
	// checks
	if(typeof data.url == 'undefined'){
		valid = false;
		msg = 'Geen url gevonden.';
	}
	if(valid){
		if(data.mask === true && typeof data.maskImage != 'undefined'){
			var div = $('<div></div>');
			div.attr('id', 'ajaxLayer');
			div.css({
				position:'fixed',
				zIndex:10000,
				top:0,
				left:0,
				width:'100%',
				height:'100%',
				background:'#ccc',
				opacity:0.7
			});
			$(document.body).append(div);
		}
		var p = '';
		if(typeof data.params != 'undefined'){
			for(i in data.params){
				p += i+'='+data.params[i]+'&';
			}
			p = p.substr(0, p.length-1);
			if(data.method == 'GET'){
				p = '?'+p;
				data.url += p;
			} else {
				http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				http.setRequestHeader("Content-length", p.length);
				http.setRequestHeader("Connection", "close");
				http_request.overrideMimeType('text/html');
			}
		}
		var url = data.url;
		if(data.base !== false && typeof ajax.data.base != 'undefined'){
			url = ajax.data.base + url;
		}
		http.open(data.method, url, true);
		http.onreadystatechange = function(){
			if(http.readyState == 4){
				if (http.status == 200){
					if(typeof args.success == 'function'){
						args.success(http);
					}
				} else {
					if(typeof args.failure == 'function'){
						args.failure(http);
					} else if(args.failure == 'default'){
						switch(http.status){
							case 404:
								alert('Kan de url niet vinden.');
							break;
						}
					}
				}
				if(data.mask == true && typeof data.maskImage != 'undefined'){
					var layer = document.getElementById('ajaxLayer');
					if(layer){
						layer.parentNode.removeChild(layer);
					}
				}
			}
		}
		if(data.method == 'POST'){
			http.send(p);
		} else {
			http.send(null);
		}
	} else {
		if(data.showErrors === true){
			alert(msg);
		}
	}
}

ajax.isArray = function(v){
	return v&&typeof v.length=="number"&&typeof v.splice=="function";
}

ajax.isDate = function(v){
	return v&&typeof v.getFullYear=="function";
}

ajax.encodeArray = function(o){
	var a = ["["], b, i, l = o.length, v;
	for (i = 0; i < l; i += 1) {
		v = o[i];
		switch (typeof v) {
			case "undefined":
			case "function":
			case "unknown":
			break;
			default:
				if (b) {
					a.push(',');
				}
				a.push(v === null ? "null" : ajax.encode(v));
				b = true;
		}
	}
	a.push("]");
	return a.join("");
};

ajax.pad = function(n) {
	return n < 10 ? "0" + n : n;
};

ajax.encodeDate = function(o){
	return '"' + o.getFullYear() + "-" +
			ajax.pad(o.getMonth() + 1) + "-" +
			ajax.pad(o.getDate()) + "T" +
			ajax.pad(o.getHours()) + ":" +
			ajax.pad(o.getMinutes()) + ":" +
			ajax.pad(o.getSeconds()) + '"';
};

ajax.encodeString = function(s){
	if (/["\\\x00-\x1f]/.test(s)) {
		return '"' + s.replace(/([\x00-\x1f\\"])/g, function(a, b) {
		var c = m[b];
                if(c){
                    return c;
                }
                c = b.charCodeAt();
                return "\\u00" +
                    Math.floor(c / 16).toString(16) +
                    (c % 16).toString(16);
            }) + '"';
        }
        return '"' + s + '"';
};

ajax.decode = function(o){
	return eval('('+o+')');
}

ajax.encode = function(o){
	var useHasOwn = !!{}.hasOwnProperty;
	if(typeof o == "undefined" || o === null){
		return "null";
	}else if(ajax.isArray(o)){
		return ajax.encodeArray(o);
	}else if(ajax.isDate(o)){
		return ajax.encodeDate(o);
	}else if(typeof o == "string"){
		return ajax.encodeString(o);
	}else if(typeof o == "number"){
		return isFinite(o) ? String(o) : "null";
	}else if(typeof o == "boolean"){
		return String(o);
	}else {
		var a = ["{"], b, i, v;
		for (i in o) {
			if(!useHasOwn || o.hasOwnProperty(i)) {
				v = o[i];
				switch (typeof v) {
					case "undefined":
					case "function":
					case "unknown":
					break;
					default:
						if(b){
							a.push(',');
						}
						a.push(this.encode(i), ":",v === null ? "null" : this.encode(v));
						b = true;
				}
			}
		}
		a.push("}");
		return a.join("");
	}
}

var timedEvents = {};
timedEvents.setEvent = function(fn, time){
	if(this.current != null){
		clearTimeout(this.current);
	}
	this.current = setTimeout(fn,time);
}
timedEvents.current = null;
