/*
Ajax Object
L&S DC - 10/2006
*/

function AjaxObject(_method,_url,_querystring,_handler) {
	/******************************
	PRIVATE	Class Properties
	******************************/
	var xmlHttp;
	var method = _method;
	var url = _url;
	var querystring = _querystring;
	var handler = _handler;
	
	/******************************
	PRIVATE	Class Methods
	******************************/
	var createXMLHTTPRequest = function() {
		var obj = null;
		if (window.ActiveXObject) {
			obj = new ActiveXObject("Microsoft.XMLHTTP");
		}		
		else if (window.XMLHttpRequest) {
			obj = new XMLHttpRequest();
		}
		return obj;
	}
	
	var ajaxFailureResponse = function() {
		alert('ajax not working!');
	}
	
	/******************************
	PUBLIC	Class Methods
	******************************/
	this.execute = function() {
		var tmp_url = url;
		if(querystring.length === 0) {
			this.setQueryString("?timestamp="+new Date().getTime());
		} else {
			if(querystring.indexOf("timestamp=") == -1) {
				this.setQueryString(querystring+"&timestamp="+new Date().getTime());
			}
		}
		if(method.toUpperCase() == "GET") {tmp_url = url+querystring;}
		xmlHttp.open(method,tmp_url,true);
		xmlHttp.onreadystatechange = this.processStateChange;
		if(method.toUpperCase() == "GET") {
			xmlHttp.send(null);
		} else if(method.toUpperCase() == "POST") {
			xmlHttp.send(querystring);
		}
	};
	
	this.processStateChange = function() {
		if (xmlHttp.readyState == 4) {
			if (xmlHttp.status == 200) {
				// invoke user's handler function
				handler(xmlHttp);
			} else {
				ajaxFailureResponse();
			}
		}
	};
	
	this.showProperties = function() {
		alert(method+"|"+url+"|"+querystring+"|"+handler);
	};
	
	this.setMethod = function(_method) {
		var updates = "" + method;
		method = _method;
		//alert(updates+" -> "+method);
	};
	this.setURL = function(_url) {
		var updates = "" + url;
		url = _url;
		//alert(updates+" -> "+url);
	};
	this.setQueryString = function(_qs) {
		var updates = "" + querystring;
		querystring = _qs;
		//alert(updates+" -> "+querystring);
	};
	this.setHandler = function(_func) {
		//var updates = "" + handler;
		handler = _func;
		//alert(updates+" -> "+handler);
	};
	
	/******************************
	CONSTRUCTOR Statements
	******************************/
	xmlHttp = createXMLHTTPRequest();
}