function ajaxRequest(url, callback, param, req_method, callParam) {
	var callback_func = {
		onSuccess: callback.onSuccess,
		onFailure: callback.onFailure?callback.onFailure:Prototype.emptyFunction,
		onException: callback.onException?callback.onException:(callback.onFailure?callback.onFailure:Prototype.emptyFunction)
	};

	return new Ajax.Request(url,
					{
							method:       req_method?req_method:'post',
							asynchronous: true,
							parameters: param,
							call_param: callParam,
							callback_func: callback_func,
							onSuccess: function(transport) {
						    		try {
										if (typeof transport.request.options['callback_func'].onSuccess == 'function') {
								    			transport.request.options['callback_func'].onSuccess(transport, transport.request.options['call_param']);
										}
										else {
											debugMsg('deprecated function called');

											eval(transport.request.options['callback_func'].onSuccess);
										}
						    		}catch(e){/*debugMsg(e);*/};
							},
							onFailure: function(transport) {
								try {
									transport.request.options['callback_func'].onFailure(transport, transport.request.options['parameters']);
								}catch(e){/*debugMsg(e);*/};
							},
							onException: function(request, exception) {
								try {
									request.options['callback_func'].onException(exception, request.options['parameters']);
								}catch(e){/*debugMsg(e);*/};
							}
					});
}

function ajaxRequestText(url, callback, param, req_method, callParam) {
	return ajaxRequest(url, Object.extend(Object.clone((typeof callback == 'object')?callback:{onSuccess:callback}), {
		onSuccess: function(transport, callParam) {
			this(transport.responseText, transport.headerJSON, callParam);
		}.bind((typeof callback == 'function')?callback:((typeof callback == 'object')?callback.onSuccess:Prototype.emptyFunction))
	}), param, req_method, callParam);
}

function ajaxRequestText2(url, callback, param, req_method, callParam) {
	return ajaxRequest(url, Object.extend(Object.clone((typeof callback == 'object')?callback:{onSuccess:callback}), {
		onSuccess: function(transport, callParam) {
			var text = null;
			if (transport.responseXML && transport.responseXML.lastChild && transport.responseXML.lastChild.firstChild) {
				text = transport.responseXML.lastChild.firstChild.nodeValue;
			}

			this(text, transport.headerJSON, callParam);
		}.bind((callback && typeof callback == 'function')?callback:((callback && typeof callback == 'object')?callback.onSuccess:Prototype.emptyFunction))
	}), param, req_method, callParam);
}

function ajaxRequestXml(url, callback, param, req_method, callParam) {
	return ajaxRequest(url, Object.extend(Object.clone((typeof callback == 'object')?callback:{onSuccess:callback}), {
		onSuccess: function(transport, callParam) {
			this(transport.responseXML, transport.headerJSON, callParam);
		}.bind((callback && typeof callback == 'function')?callback:((callback && typeof callback == 'object')?callback.onSuccess:Prototype.emptyFunction))
	}), param, req_method, callParam);
}

