function Ajax() {

	this.ajaxRequest = function(ServletName, Handler, Data, Type, Async) {
		var url = ServletName.replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+":"+window.location.port+"/");
		var req = getReqObj();
	
		req.onreadystatechange = function() {
	
			xmlResp(req, Handler, Type);
		};
		req.open('POST', url, Async);
		req.setRequestHeader("Content-length", Data.length);
		req.setRequestHeader("content-type","application/x-www-form-urlencoded");
		req.send(Data);
	};
	
	this.ajaxExternalRequest = function(url, Handler, Data, Type, Async) {
		var req = getReqObj();
		try{
			req.onreadystatechange = function() {
				xmlExternalResp(req, Handler, Type);
			};
			req.open('POST', url, Async);
			//req.setRequestHeader("Host","www.webservicex.net");
			req.setRequestHeader("Content-length", Data.length);
			req.setRequestHeader("content-type","application/x-www-form-urlencoded");
			req.send(Data);
		}catch(err){
			alert(err.description);
			
		}
	};
	
	this.requestXML = function(ServletName, Handler, Data) {

		this.ajaxRequest(ServletName, Handler, Data, "XML", true);

	};

	this.requestExternalXML = function(ServletName, Handler, Data) {

		this.ajaxExternalRequest(ServletName, Handler, Data, "XML", true);

	};
	
	this.requestText = function(ServletName, Handler, Data) {

		this.ajaxRequest(ServletName, Handler, Data, "TEXT", true);

	};

	this.requestSyncXML = function(ServletName, Handler, Data) {

		this.ajaxRequest(ServletName, Handler, Data, "XML", false);

	};

	this.requestHtml = function(ServletName, Handler, Data) {

		this.ajaxRequest(ServletName, Handler, Data, "HTML", true);

	};

	this.requestSyncHtml = function(ServletName, Handler, Data) {

		this.ajaxRequest(ServletName, Handler, Data, "HTML", false);

	};	
	
	
	this.requestSyncText = function(ServletName, Handler, Data) {

		this.ajaxRequest(ServletName, Handler, Data, "TEXT", false);

	};

}

function xmlResp(req, Handler, Type) {

	var retValue;
	if (req.readyState == 4 && (req.status == 200)) {
		try {
			if (Type == "TEXT")
				retValue = req.responseText;
			else if (Type == "HTML")
				retValue = req.responseText;
			else
				retValue = req.responseXML;

			eval(Handler + "(retValue)");

		} catch (err) {

			alert("[SimpleAjax].xmlResp.Error 100 Call to Return failed. " + err.message);

		}

	} else if (req.readyState == 4 && (req.status != 200)) {

		alert("[SimpleAjax].xmlResp. Error 200 Call to Return failed. " +err.message);

	}

}
function xmlExternalResp(req, Handler, Type) {

	if (req.readyState == 4 && (req.status == 200)) {
		try {
			var xmlDoc = req.responseXML;
			eval(Handler + "(xmlDoc)");
		} catch (err) {
			alert("[SimpleExternalAjax].xmlResp.Error 100 Call to Return failed. " + err.message);
		}

	} else if (req.readyState == 4 && (req.status != 200)) {

		alert("[SimpleAjax].xmlResp. Error 200 Call to Return failed. " +err.message);

	}

}
function getReqObj() {

	var req = null;

	if (window.XMLHttpRequest) {

		req = new XMLHttpRequest();

	} else if (window.ActiveXObject) {

		req = new ActiveXObject("Microsoft.XMLHTTP");

		if (!req) {

			req = new ActiveXObject("Msxml2.XMLHTTP");

		}

	}

	return req;

}

