/*global ActiveXObject, XMLHttpRequest, document, window */

function Ajax() {

	var url,canvas,data,loading,callback,request;

	this.start = function() {

		url       = this.url;
		canvas    = this.canvas;
		data      = this.data;
		loading   = this.loading;
		callback  = this.callback;
		request   = getHTTPObject();

		if (!request || !url) {
			return false;
		} else {
			initiateRequest();
			return true;
		}
	};

	var getHTTPObject = function() {
		var xmlhttp = false;
		if (window.XMLHttpRequest) {
			xmlhttp = new XMLHttpRequest();
		} else if(window.ActiveXObject) {
			try {
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
					xmlhttp = false;
				}
			}
		}
		return xmlhttp;
	};

	var initiateRequest = function() {
		if (loading) {
			loading();
		}
		loadData();
	};

	var loadData = function() {
		request.onreadystatechange = completeRequest;
		if (data) {
			request.open("POST", url, true);
			request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			request.send(data);
		} else {
			request.open("GET", url, true);
			request.send(null);
		}
	};

	var completeRequest = function() {
		if (request.readyState == 4) {
			if (request.status == 200) {
				if (canvas) {
					canvas.innerHTML = request.responseText;
				}
				if (callback) {
					callback();
				}
			} else {
				if (canvas) {
					canvas.innerHTML = request.statusText;
				}
			}
		}
	};

}