Utils.Request = function() {
	return {
		send: function(url, options) {
			if (!options) options = {};
			
			if (!options.method) options.method = 'get';
			
			var x = window.XMLHttpRequest ? new XMLHttpRequest(): new ActiveXObject('Microsoft.XMLHTTP');
			x.onreadystatechange = function() {
				if (x.readyState == 4 && x.status == 200) {
					if (options.onSuccess) options.onSuccess(x.responseText);
				}
			};
			if (options.method == 'get') {
				x.open('get', url, true); 
				x.send(null);
			}
			else {
				x.open('post', url, true);
				x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				x.send(options.postBody);
			}
		},
		
		get_fields: function(elem) {
			var params = '';
			for (var i=0; i<elem.childNodes.length; i++) {
				params += Utils.Request.get_fields(elem.childNodes[i]);
			}
			
			if (elem.name && ((elem.tagName == 'INPUT' && elem.type != 'checkbox' && elem.type != 'radio') 
				|| elem.tagName == 'TEXTAREA' || elem.tagName == 'SELECT')) {
				
				params += '&' + elem.name + '=' + encodeURIComponent(elem.value);	
			}
				
			if (elem.name && (elem.tagName == 'INPUT' && elem.type == 'checkbox')) {
				params += '&' + elem.name + '=';	
				params += elem.checked ? encodeURIComponent(elem.value) : 0;
			}
			
			if (elem.name && (elem.tagName == 'INPUT' && elem.type == 'radio' && elem.checked)) {
				params += '&' + elem.name + '=' + encodeURIComponent(elem.value);
			}
			
			return params;
		},
		
		// Front-end functions
		submitForm: function(name, onSuccess) {
			var form = null;
			
			if (typeof name == 'string') form = $N(name);
			else return false;
			
			var url = form.action; 
			if (!url) return false;
			
			var params = Utils.Request.get_fields(form);
			Utils.Request.send(url, {
				method: 'post',
				onSuccess: onSuccess,
				postBody: params
			});
			
			return true;
		}
	}
}();
