var XHR = {};

/*@cc_on
@if (@_jscript_version >= 5)
try {
	XHR.create = new ActiveXObject('Msxml2.XMLHTTP');
	XHR.create = function() { return new ActiveXObject('Msxml2.XMLHTTP') };
} catch(e) { try {
	XHR.create = new ActiveXObject('Microsoft.XMLHTTP');
	XHR.create = function() { return new ActiveXObject('Microsoft.XMLHTTP') };
} @else @*/{ try {
	XHR.create = new XMLHttpRequest;
	XHR.create = function() { return new XMLHttpRequest };
}/*@end @*/ catch(e) {
	XHR.create = function() {
		alert('Your browser does not support XMLHTTP.');
		return null;
	};
}}

XHR.open = function(url, data, handler) {
	var xhr = XHR.create();
	xhr.onreadystatechange = handler;
	xhr.open('POST', url, true);
	xhr.setRequestHeader('Method', 'POST ' + url + ' HTTP/1.1');
	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xhr.send(data);
	return xhr;
};

XHR.connection = function(url, params, callback, args) {
	var me = this;

	function handler() {
		var xhr = me.xhr;
		if (!xhr || xhr.readyState != 4) return;

		if (xhr.status == 200) {
			if (typeof callback.success == 'function') {
				callback.success(xhr, args);
			}
		} else if (typeof callback.failure == 'function') {
			callback.failure(xhr, args);
		}
		me = me.xhr = null;
	}

	this.xhr = XHR.open(url, params, handler);
};

XHR.connect = function(url, params, callback, args) {
	return new XHR.connection(url, params, callback, args);
};