if ( typeof VyreAjax == "undefined" ) {
	var VyreAjax = {};
	VyreAjax.name = "VYRE Ajax utils";
}

VyreAjax.Request = function( servletPath ) {
	this.servletPath = servletPath;
};

VyreAjax.Request.prototype = {

	send : function( parameters ) {
		this.sendAsynchronousXMLHttpRequest(parameters, this.handleResponse);
	},

	handleResponse : function( responseStr ) {
		var responseElement = responseStr.getElementsByTagName("response")[0];
		var value = "";
		if ( typeof responseElement.textContent != "undefined" ) {
			value = responseElement.textContent;
		} else {
            var nodes = responseElement.childNodes;
            for (var i = 0; i < nodes.length; i++) { // to handle FF-specific behaviour when response is > 4096 bytes
                value += nodes[i].data;
            }
		}
		var elementId = responseStr.getElementsByTagName("response")[0].getAttribute("id");
		
		document.getElementById(elementId).innerHTML = value;
	},

	sendAsynchronousXMLHttpRequest : function(parameters, handlerFunction) {
		var req = this.createXMLHttpRequest();
		if ( req ) {
			req.open("POST", this.servletPath, true);
			req.onreadystatechange = function() {
				if ( req.readyState == 4 ) {
					if ( req.status == 200 ) {
						handlerFunction(req.responseXML);
					} else {
						alert('Failed.');
					}
				}
			};
			req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			req.send(parameters);
		} else {
			alert("This action is not supported on this browser.");
		}
	},
	
	createXMLHttpRequest : function() {
		var req = false;
	    // branch for native XMLHttpRequest object
	    if ( window.XMLHttpRequest ) {
	    	try {
				req = new XMLHttpRequest();
	        } catch(e) {
				req = false;
	        }
	    // branch for IE/Windows ActiveX version
	    } else if ( window.ActiveXObject ) {
	       	try {
	        	req = new ActiveXObject("Msxml2.XMLHTTP");
	      	} catch(e) {
	        	try {
	          		req = new ActiveXObject("Microsoft.XMLHTTP");
	        	} catch(e) {
	          		req = false;
	        	}
			}
	    }
	    return req;
	}
};
