function ajax_request(site_url,callback) {
	var http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/html');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	if (!http_request) {
		alert('You are probably using the last version of Internet Explorer for the Mac which has been discontinued.');
		return false;
	}
	http_request.onreadystatechange = function() { ajax_process_response(http_request, site_url, callback); };
	http_request.open('GET', site_url, true);
	http_request.send(null);
}

function ajax_post_request(site_url,params,callback) {
	var http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/html');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	if (!http_request) {
		alert('You are probably using the last version of Internet Explorer for the Mac which has been discontinued.');
		return false;
	}
	var parameters = make_url_params(params,0);
	http_request.onreadystatechange = function() { ajax_process_response(http_request, site_url, callback); };
	http_request.open('POST', site_url, true);     
	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);      
    http_request.setRequestHeader("Connection", "close");
	http_request.send(parameters);
}

function ajax_process_response(http_request, site_url, callback) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			if(http_request.responseText == 'done'){
				 window.location.href = unescape(window.location.pathname);
			} else {
				eval(callback);
			}
		} else {
			//alert('There is a problem ('+http_request.status+')');
			//die silently
			return false;
		}
	}
}

function ajax_submit_form(json){
	//alert('function ajax_submit_form();');
	var frmObj = $(json.frmname);
	if(frmObj){
		//alert("Found form: "+json.frmname);
		for(var n in json){
			var obj = frmObj[n];
			if(obj){
				obj.value = json[n];
			}
		}
		var params = {};
		var elements = frmObj.elements;
		//alert("Elements: "+elements.length);
		for(var x=0;x<elements.length;x++){
			var el = elements[x];
			params[el.name] = el.value;
		}
		//alert("Validate list: "+json.val_list);
		if(json.val_list){
			if(verifylist(frmObj,json.val_list,json.error_panel)){
				//alert('Validated ajax form submission: '+form_request);
				ajax_post_request(json.script,params,json.callback);
				
				//var form_request = json.script + make_url_params(params);
				//ajax_request(form_request,json.callback);
			}
		}else{
			//alert('Ajax form submission: '+form_request);
			ajax_post_request(json.script,params,json.callback);
			//var form_request = json.script + make_url_params(params);
			//ajax_request(form_request,json.callback);
		}
	}else{
		alert("Can't find form with name "+json.frmname);
	}
}

function ajax_fill_data(fill_id,returned){
	if (document.getElementById(fill_id)){
		document.getElementById(fill_id).innerHTML = returned;
	}
}

function ajax_populate_form(fill_id,form_id,returned){
	//alert("function ajax_populate_form('"+fill_id+"','"+form_id+"');");
	if (document.getElementById(fill_id)){
		document.getElementById(fill_id).innerHTML = returned;
		if(document.forms[form_id]){
			document.forms[form_id].submit();
		}
	}
}

function ajax_request_form(fill_id,type){
	//alert("function ajax_request_form('"+fill_id+"','"+type+"');");
	ajax_request("/cgi-bin/payment-control.pl?ac=ajax_form&type="+type,"ajax_populate_form('"+fill_id+"','dynamic_form',http_request.responseText);");
}

// ----------------------------------------- make a URL param string from a list of values passed as a JSON object -------------------------------
// BC 2008:
//  call like this:
//    s = make_url_params({ac:'show_house',id:23,title:'The pretty house'},1);
//  returns
//      ?ac=show_house&id=23&title=The%20pretty%20house

function make_url_params(params_obj,first){
	var s='';
	for (p in params_obj){
		var sep = (first || first == null)?'?':'&';
		first=0;
		s += sep + p+ '=' + encodeURI(params_obj[p]);
	};
	return s;
}