function ajax(url, params, async, callback_function, response_type) {
	if (typeof(url) === 'undefined' || url === null || url === '') { return; }
	params = (typeof(params) === 'undefined' || params === null || params === '') ? null : params;
	async = (typeof(async) === 'undefined' || async === null || async === '') ? true : async;
	callback_function = (typeof(callback_function) === 'undefined' || callback_function == null || callback_function == '') ? '' : callback_function;
	response_type = (typeof(response_type) === 'undefined' || response_type === null || response_type === '') ? 0 : response_type;

	var request;
	try {
		request = new ActiveXObject('Msxml2.XMLHTTP');
	} catch (e) {
		try {
			request = new XMLHttpRequest();
		} catch (e) {
			return;
		}
	}

	var return_value;
	if (async) {
		request.onreadystatechange = function() {
			if (request.readyState == 4 || request.readyState == 'complete') {
				if (typeof(callback_function) === 'function' || typeof(callback_function) === 'object') {
					if (response_type == 0) {
						return_value = callback_function(request.responseText);
					} else if (response_type == 1) {
						return_value = callback_function(request.responseXML);
					} else {
						return_value = callback_function(request);
					}
				}
				delete request;
				return return_value;
			}
		};
	}

	if (params != null) {
		request.open('POST', url, async);
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
	} else {
		request.open('GET', url, async);
	}
	request.send(params);

	if (!async) {
		if (typeof(callback_function) === 'function' || typeof(callback_function) === 'object') {
			if (response_type == 0) {
				return_value = callback_function(request.responseText);
			} else if (response_type == 1) {
				return_value = callback_function(request.responseXML);
			} else {
				return_value = callback_function(request);
			}
		}
		delete request;
		return return_value;
	}
}