/* usage

var ajax = new Ajax();
ajax.send_params = 'encodeURIComponent(var)&doit=y';
ajax.send_url = 'http://www.';
ajax.send_method = 'POST';
ajax.response_handler = function(resp) {
		document.getElementById('element_id').innerHTML = '';
	}
ajax.sendRequest();
		
*/

function TAjax() { 
	this.ajax_response_format = 'text';// 'text', 'xml', or 'object'
	this.ajax_response_txt = '';
	this.ajax_response_xml = '';
	this.ajax_request = false;
	this.send_params = '';
	this.send_method = 'GET';
	this.send_url = '';
	this.response_handler = null;
	
	this.ajaxAvailable = function() {
	    // branch for native XMLHttpRequest object
	    if(window.XMLHttpRequest) {
	    	try {
				this.ajax_request = new XMLHttpRequest();
	        } catch(e) {
				this.ajax_request = false;
	        }
	    // branch for IE/Windows ActiveX version
	    } else if(window.ActiveXObject) {
	       	try {
	        	this.ajax_request = new ActiveXObject("Msxml2.XMLHTTP");
	      	} catch(e) {
	        	try {
	          		this.ajax_request = new ActiveXObject("Microsoft.XMLHTTP");
	        	} catch(e) {
	          		this.ajax_request = false;
	        	}
			}
	    }
		if (this.ajax_request === false) {
			return false;
		} else {
			return true;
		}
	}
		
	this.sendRequest = function() {
		if (this.ajaxAvailable() != false) {
			if (this.send_method == 'GET') {
				var start = new Date(); //IE likes to cache GET requests so we need to add a random number to the URL
 				start = start.getTime();
				this.send_url += '?' + start + '&' + this.send_params;
			}
			this.ajax_request.open(this.send_method,this.send_url,true);			

			var self = this; //fix scope of object for following function
			this.ajax_request.onreadystatechange = function() {
				if (self.ajax_request.readyState == 4) { // only if ajax_request shows "loaded"
					if (self.ajax_request.status >= 200 && self.ajax_request.status <= 299) { // only if "OK"
						var resp = '';
						switch (self.ajax_response_format) {
						case 'text': 
							resp = self.ajax_request.responseText; 
							break; 
						case 'xml': 
							resp = self.ajax_request.responseXML; 
							break; 
						case 'object': 
							resp = self.ajax_request; 
							break; 
						}
						self.response_handler(resp);
					} else if (self.ajax_request.status != 0) { //IE returns 0 on some occasions 
						// alert("There was a problem retrieving the XML data:\n" + self.ajax_request.statusText + "\nstatus: " + self.ajax_request.status + "\nreadystate: " + self.ajax_request.readyState);
					}
				}
			}
			
			
			if (this.send_method == 'POST') {
				this.ajax_request.setRequestHeader('content-type','application/x-www-form-urlencoded; charset=utf-8');
			}
			this.ajax_request.send(this.send_params);
		} else {
			alert('error');
		}
	}
	
	this.abort = function() { 
 		if (this.ajax_request) { 
			this.ajax_request.onreadystatechange = function() { }; 
			this.ajax_request.abort(); 
			this.ajax_request = null; 
		} 
	}
	
}
