function addEvent(obj, evType, fn) {
	if (obj.addEventListener) {
		obj.addEventListener(evType, fn, false);
		return true;
	} else if (obj.attachEvent) {
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} else {
		return false;
	}
}

function getXMLHttpRequest() {
	if (typeof XMLHttpRequest != 'undefined') {
		return new XMLHttpRequest();
	} else {
		try {
			var xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				var xmlHttp = null;
			}
		}
		return xmlHttp;
	}
}

function $(id) {
	return document.getElementById(id);
}

function doCoreAction(action, args) {
	// action = string, args = {name: value}
	var client = getXMLHttpRequest();
	if(client == null)
		return false;
	
	var query = '/ajax.php?action=' + action;
	for(k in args) {
		query += '&' + k + '=' + escape(args[k]);
	}
	client.open('GET', query, false);
	client.send(null);
	if(client.readyState == 4 && client.status == 200)
		return client.responseXML.getElementsByTagName('result')[0].firstChild.nodeValue;
}
