function ajaxCall(){
	// Properties and default values
	this.url = '';
	this.method = 'GET';
	this.data = '';
	this.asynchronous = true;
	this.responseData = '';
	this.errorData = '';
	this.responseArguments = [];
	
	//Methods
	this.send = sendRequest;
	this.processAjax = processAjax;
	this.onError = defaultErrorHandler;
	this.onResponse = defaultDataHandler;
	
	function sendRequest(){
		if(this.url != ''){
			var requestOBJ = get_http_request_type();
			if(requestOBJ != false){
				handler = this.onResponse;
				args = this.responseArguments;
				switch(this.method){
					case 'POST':
						requestOBJ.onreadystatechange = function() {processAjax(requestOBJ,handler,args);};
						requestOBJ.open('POST',this.url,this.asynchronous);
						if(document.cookie) {requestOBJ.setRequestHeader("Cookie",document.cookie);}
						requestOBJ.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
						requestOBJ.setRequestHeader("Content-length", this.data.length);
						requestOBJ.setRequestHeader("Connection", "close");
						requestOBJ.send(this.data);
					break;
					case 'GET':
						requestOBJ.onreadystatechange = function(){processAjax(requestOBJ,handler);};
						var delimChar = '?';
						if(this.url.indexOf('?') > -1){delimChar = '&';}
						requestOBJ.open('GET',this.url+delimChar+"ms=" + new Date().getTime(),this.asynchronous);
						if(document.cookie) {requestOBJ.setRequestHeader("Cookie",document.cookie);}
						requestOBJ.send(null);
					break;
				}
			} else {
				errorData = 'Error: This operation requires AJAX. Your browser may not have AJAX support.'; 
				onError();
			}
		}
	}

	function processAjax(request,responseMethod,args){
		if(request.readyState==4){
			responseData = request.responseText;
			responseMethod(responseData,args);
			request = null;
		}
	}

	function get_http_request_type(){
  		try {
   			 // Firefox, Opera 8.0+, Safari
    			 http_request=new XMLHttpRequest();
		} catch (e) {
			// Internet Explorer
			try {
				http_request=new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					http_request=new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
					//no ajax 
					return false;
				}
			}
		}
		return http_request;
	}

	function defaultDataHandler(data,args){
		alert(data);
	}

	function defaultErrorHandler(){
		alert(this.errorData);
	}
}

//EXAMPLE usage
//var sendOBJ = new ajaxCall();
//sendOBJ.url = '/4DACTION/Method';
//sendOBJ.method = 'POST';
//sendOBJ.data = 'name=value&name2=value2';
//sendOBJ.onResponse = displayHandler;
//sendOBJ.send();

function displayNothing(data){
	//do nothing
}
