function Ajax() {
	var req;
	var ResponseFunction;
	
	this.sendRequest = function(url, onResponseFunction) {

		req = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
		req.onreadystatechange = this.processReqChange;
		ResponseFunction = onResponseFunction;
		var paramsGet = '';
		var paramsPost = '';

		if(!url)
			url = location.href;

		if (arguments[2])
			for (var name in arguments[2]) {
				var value = arguments[2][name];
				paramsGet += this.urlEncode(name) + '=' + this.urlEncode(value) + '&';
			}
	
		if (arguments[3])
			for (var name in arguments[3]) {
				var value = arguments[3][name];
				paramsPost += this.urlEncode(name) + '=' + this.urlEncode(value) + '&';
			}

		// добавление к URL текущего времени сделано для того,
		// чтобы предотвратить кэширование запросов и обеспечить их создание и отправку при каждом вызове метода
		// (нужно при отправке методом POST)
		req.open(paramsPost?"POST":"GET", url + '?' + paramsGet + "timeStamp=" + new Date().getTime());
		
		// При использование объекта XMLHttpRequest с методом POST требуется дополнительно отправлять header: 
		// Content-Type = application/x-www-form-urlencoded,
		// давая понять серверу, что мы передаём просто текстовые данные, которые он в принципе мог бы получить и из обычной HTML-формы
		// Вроде работает и без этого, но в инете везде так пишут
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		req.send(paramsPost);
	}
	
	this.processReqChange = function() {
		try {
			if (req.readyState == 4) {
				if (req.status == 200) {
					if (req.responseXML && (response = req.responseXML.documentElement)) {
		                                        if (response.getElementsByTagName('result')[0].firstChild.data)
								eval("var result = " + response.getElementsByTagName('result')[0].firstChild.data);
							else
								var result = response.getElementsByTagName('result');
							ResponseFunction(result);
					}
				}
			}
		} catch (exception) {}
	}
	
	this.urlEncode = function(str) {
		if (str != null) {
			str = encodeURI(str);
			str = str.replace(/\+/g, "%2B");
			return str.replace(/&/g, "%26");
		} else {
			return "";
		}
	}
}

var ajax = new Ajax();