__webRequest_queue = [];
function webRequest(url,handler,errhandler,params) {
	this.xmlhttp = null;
	this.url = url;
	this.handler = handler;
	this.errhandler = errhandler;
	if (typeof(params) == 'undefined') this.params = '';
	else this.params = params;
	__webRequest_queue[__webRequest_queue.length] = this;
	if (__webRequest_queue.length < 2) __webRequest_queue[0].makeRequest();
}
webRequest.prototype.makeRequest = function() {
	if (this.xmlhttp = this.newXHR()) {
		try {
			var thisWebRequest = this;
			this.xmlhttp.onreadystatechange = function() {
				thisWebRequest.onStateChange.call(thisWebRequest);
			}
			if (this.params > '') {
				this.xmlhttp.open("POST", this.url, true);
				this.xmlhttp.setRequestHeader("Cache-Control", "no-cache");
				this.xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				this.xmlhttp.setRequestHeader("Content-length", this.params.length);
				this.xmlhttp.setRequestHeader("Connection", "close");
				this.xmlhttp.send(this.params);
			} else {
				this.xmlhttp.open('GET',this.url,true);
				this.xmlhttp.setRequestHeader("Cache-Control", "no-cache");
				this.xmlhttp.send(null);
			}
		} catch (err) {
			alert('ERROR: '+err.message);
		}
	} else {
		alert('Error: XHR not supported.');
	}
}
webRequest.prototype.onStateChange = function() {
	if (this.xmlhttp.readyState == 4) {
		if (this.xmlhttp.status == 200) {
			if (this.handler) this.handler.call(this);
		} else {
			if (this.errhandler) this.errhandler.call(this);
		}
		__webRequest_queue.shift();
		if (__webRequest_queue.length > 0) __webRequest_queue[0].makeRequest();
	}
}
webRequest.prototype.newXHR = function() {
	xmlhttp = null;
	try {
		xmlhttp = new XMLHttpRequest();
	} catch(errXHR1) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch(errXHR2) {
			alert('Error: XHR not supported.');
		}
	}
	return xmlhttp;
}

/* Helper Functions */
function wr__Err() {
	if (/DOCTYPE/.test(this.xmlhttp.responseText)) {
		var origSrc = this.xmlhttp.responseText.split(/\n/);
		var inErr = false;
		var errMsg = new Array();
		for (var i = 0; i < origSrc.length; i++) {
			if (inErr) {
				if (/Browser Type:/.test(origSrc[i])) break;
				errMsg[errMsg.length] = origSrc[i].replace(/.*\[SQL Server\]/,'[SQL Server]').replace(/\<br\>/g,'\n').replace(/\<\/?(p|b|li)\>/g,'');
			}
			if (/Error Type:/.test(origSrc[i])) inErr = true;
		}
		alert('ERROR:\n'+errMsg.join(''));
	} else if (this.xmlhttp.responseText.replace(/\s/g,'').length > 0) {
		alert('ERROR:\n'+this.xmlhttp.responseText.replace(/\\n/g,'\n'));
	}
}

