/*
Ajax Object
David Cone - 9/2008
*/

function AjaxObject(_method,_url,_querystring,_handler) {
	/******************************
	PRIVATE	Class Properties
	******************************/
	var xmlHttp;
	var method = _method;
	var url = _url;
	var querystring = _querystring;
	var handler = _handler;
	
	var handler_param = null;
	
	/******************************
	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 request = null;
		try {
			request = new XMLHttpRequest();
		} catch (trymicrosoft) {
			try {
      			request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (othermicrosoft) {
				try {
					request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (failed) {
					request = null;
				}
			}
		}
		if(request === null) { alert("Error initializing XMLHttpRequest!"); }
		return request;
	}
	
	var ajaxFailureResponse = function() {
		alert('AJAX error!');
	}
	
	/******************************
	PUBLIC	Class Methods
	******************************/
	this.execute = function() {
		var tmp_url = url;
		if(querystring.length === 0) {
			this.setQueryString("ts="+new Date().getTime());
		} else {
			if(querystring.indexOf("ts=") == -1) {
				this.setQueryString(querystring+"&ts="+new Date().getTime());
			}
		}
		if(method.toUpperCase() == "GET") {
			tmp_url = url + querystring;
			xmlHttp.open(method,tmp_url,true);
			xmlHttp.onreadystatechange = this.processStateChange;
			xmlHttp.send(null);
		} else if(method.toUpperCase() == "POST") {
			xmlHttp.open(method,tmp_url,true);
			xmlHttp.onreadystatechange = this.processStateChange;
			xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			xmlHttp.send(querystring.replace(/^\?/,""));
		}
	};
	
	this.processStateChange = function() {
		//alert(xmlHttp.readyState + " | " + xmlHttp.status);
		if (xmlHttp.readyState == 4) {
			if (xmlHttp.status == 200) {
				// invoke user's handler function
				if(handler !== null) {
					handler(xmlHttp,handler_param);
				}
			} else {
				ajaxFailureResponse();
			}
		}
	};
	
	this.setProperties = function(_method,_url,_querystring,_handler) {
		this.setMethod(_method);
		this.setURL(_url);
		this.setQueryString(_querystring);
		this.setHandler(_handler);
	};
	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);
	};
	this.setHandlerParam = function(obj) {
		handler_param = obj;
	};
	
	/******************************
	CONSTRUCTOR Statements
	******************************/
	xmlHttp = createXMLHTTPRequest();
	//alert("AjaxObject created");
}

function parseJSON(str) {
	return eval('(' + str + ')'); // create json object
}