function process_form(form_id,additional_post_object,callback) {
	var form_el;
	if (typeof(form_id)=='string') {
		form_el = $(form_id);
	} else if (typeof(form_id)=='object') {
		form_el = form_id;
	} else if (form_id===null) {
		alert('An unsupported type ' + typeof(form_id) + 'passed to process_form().');
		return false;
	} else {
		alert('An unsupported type ' + typeof(form_id) + 'passed to process_form().');
		return false;
	}

	var post_object = get_form_data(form_el);
	//if supplied overwrites the values from the form

	//подадените елементи в additional_post_object презаписват тези от формата
	if (additional_post_object) {
		for (el in additional_post_object) {
			post_object[el] = additional_post_object[el];
		}
	}
	var url_obj = url_parse(form_el.action);
	//the correct view has to be added
	url_obj.v = wsf_json_view;
	url_obj.mainform_submit = 1;//може да се задава и в additional_post_object, но за сега винаги ще се подава
	//винаги може в additional_post_object да се подаде и друго
	url_to_load = url(url_obj);
	new Ajax.Request(url_to_load,
		{
			method:'post',//ще се използва post, когат има модифициране на данни на сървъра
			parameters: post_object,
			//asynchronous: false,
			onSuccess: function(transport){
				//alert(transport.responseText);
				try {
					var ajax_response = transport.responseText.evalJSON();//не е глобална и е асинхронно
				} catch(e) {
					alert(e.name+': '+e.message+' '+transport.responseText);
				}
				setMessage(ajax_response.message,ajax_response.code);
				if (callback) {
					callback(ajax_response);
				}
			},
			onFailure: function(transport){
				if (transport.status==403) {
					alert('You are not allowed to execute the selected operation when trying to load "'+url_to_load+'".');
				} else if (transport.status==404) {
					alert('The selected operation or object does not exist when trying to load "'+url_to_load+'".');
				}
			}
		}
	);
	return false;//do not submit the form
}

function get_form_data(form_id) {
	var form_el;
	if (typeof(form_id)=='string') {
		form_el = $(form_id);
	} else if (typeof(form_id)=='object') {
		form_el = form_id;
	} else if (form_id===null) {
		alert('Null passed to get_form_data().');
		return false;
	} else {
		alert('An unsupported type ' + typeof(form_id) + 'passed to get_form_data().');
		return false;
	}
	var post_object = form_el.serialize(true);
	return post_object;
}

function ExecuteRequest(url_to_load,post_object) {
	var url_object = url_parse(url_to_load);
	url_object.v = wsf_json_view;
	url_to_load = url(url_object);
	var method = 'get';
	if (post_object) {
		var method = 'post';
	} else {
		post_object = {};
	}
	////org.guzaba.cms.response=null;//global
   var ajax_response;
	new Ajax.Request(url_to_load,{
		method: method,
		parameters: post_object,
		asynchronous:false,
		onSuccess: function(transport){
			if (transport.responseText.indexOf('{')!=0) {
				alert('the server response is not a valid JSON:\n\n'+transport.responseText);
			}
			ajax_response = transport.responseText.evalJSON();
		},
		onFailure: function(transport){
			if (transport.status==403) {
				alert('You are not allowed to execute the selected operation when trying to load "'+url_to_load+'".');
			} else if (transport.status==404) {
				alert('The selected operation or object does not exist when trying to load "'+url_to_load+'".');
			}
		}
	});
//alert(org.guzaba.cms.ajax_response);
	////return org.guzaba.cms.ajax_response;
   return ajax_response;
}
