function AJAX()
{
	this.http = null;
	this.data = null;
	
	this.__construct = function()
	{
		this.http = this.createRequestObject();
	}
	
	this.createRequestObject = function()
	{
		if (navigator.appName != "Microsoft Internet Explorer")
		{
			try	{ netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); }
			catch (e) { window.status = "Permission UniversalBrowserRead denied."; }
		}
		return (navigator.appName == "Microsoft Internet Explorer") ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
	}
	
	this.getRequestObject = function()
	{
		return this.http;
	}
	
	this.sendRequest = function(method, url, handler, data, http)
	{
		if (data) this.data = data;
		if (http) this.http = http;
		
		this.http.open(method, url);
		this.http.onreadystatechange = handler;
		this.http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		this.http.send(this.data);
	}
	
	this.buildFormData = function(formObj)
	{
		if (!formObj) return;
		else this.data = '';

		var params = new Array();
		
		for (i = 0; i < formObj.elements.length; i++)
		{
			var formElem = formObj.elements[i];
			if (formElem.name == "") continue;
			if (!params[formElem.name]) params[formElem.name] = new Array();
			var val = this.getElementValue(formElem);
			if (val != null) params[formElem.name].push(val);
		}
		
		var ct = 0;
		var arr = new Array();
		
		for (var i in params) {	arr[ct++] = i + '=' + params[i].join(','); }
		this.data = arr.join('&');
		
		return this.data;
	}
	
	this.getElementValue = function(formElem)
	{
		switch (formElem.type)
		{
			case 'text':
			case 'hidden':
			case 'password':
			case 'textarea':
			
				return escape(formElem.value);
			
			break;
				
			case 'radio':
			case 'checkbox':
			
				if (formElem.checked) return escape(formElem.value);
				
			break;
			
			case 'select-one':
			case 'select-multiple':
				
				var optionValues = new Array();
				
				for (var o = 0; o < formElem.options.length; o++)
				{
					if (formElem.options[o].selected)
					{
						var val = (formElem.options[o].value) ? formElem.options[o].value : formElem.options[o].text;
						optionValues.push(escape(val));
					}
				}
				
				return optionValues.join(",");
				
			break;
		}
		
		return null;
	}
	
	this.__construct();
}
