function ajaxRequest() {};

ajaxRequest.prototype.initialize = function() {
	var request;
	try {
		// Mozilla / Safari
		request = new XMLHttpRequest();
		return request;
	} catch (e) {
		// IE
		var ieModels = new Array(
			'MSXML2.XMLHTTP.5.0',
			'MSXML2.XMLHTTP.4.0',
			'MSXML2.XMLHTTP.3.0',
			'MSXML2.XMLHTTP',
			'Microsoft.XMLHTTP'
			);
		var success = false;
		// Try to locate latest XMLRequest available
		for (var i = 0; i < ieModels.length && !success; i++) {
			try {
				request = new ActiveXObject(ieModels[i]);
				success = true;
			} catch (e) { }
		}
		if (!success) {
			return false; // nothing worked
		}
		return request;
	}
}

ajaxRequest.prototype.busy = function(request) {
	// Check to see if request is busy
	currentState = request.readyState;
	return (currentState && (currentState < 4));
}

ajaxRequest.prototype.send = function(jsonCall, url, data,func,funcVals) {
	var request = this.initialize();
	if (request && !this.busy(request)) {
		request.onreadystatechange = function() {
			if (request.readyState == 4 && request.status == 200) { // request is done
				var response = request.responseText;
				if(jsonCall){
					var jsonObj = json_parse(response, function (key, value) {
										                var a;
										                if (typeof value === 'string') {
										                    a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
										                    if (a) {
										                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
										                            +a[5], +a[6]));
										                    }
										                }
										                return value;
										            });
					if(funcVals != null)
						eval(func + '(jsonObj, ' + funcVals + ')');
					else
						eval(func + '(jsonObj)');
				}
				else{
					if (window.ActiveXObject) { // IE
						if (response != "") { // only create XML document if given one
							var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
							xmlDoc.async = "true";
							xmlDoc.loadXML(response); // get the response XML document
							if(funcVals != null)
								eval(func + '(xmlDoc, ' + funcVals + ')');
							else
								eval(func + '(xmlDoc)');
						}
					} else if (window.XMLHttpRequest) { // Mozilla, Safari...
						var xmlDoc = document.implementation.createDocument("", "", null);
						if (response != "") {
							var parser = new DOMParser();
							var domParsed = parser.parseFromString(response, "text/xml");
							if(funcVals != null)
								eval(func + '(domParsed, ' + funcVals + ')');
							else
								eval(func + '(domParsed)');
						}
					}
				}
			}
		}
		request.open("POST",url,true);
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		request.send(data);
	}
}

function getField(field,dom) {
	return dom.getElementsByTagName(field);
}