var ajax={
	init_httprequest_object:function() {
		var request=null;
		if (window.XMLHttpRequest){
			try{
				request = new XMLHttpRequest();
			}catch(e){
			}
		} else if (window.ActiveXObject) {
			request = new ActiveXObject("Microsoft.XMLHTTP");
		}
		return request;
	},
	do_function_call:function(application_uri, func_name, args, async) {
		//alert(application_uri+' '+func_name+' '+args);
		async = async || true;
		//alert('async= '+ async + 'func_name= ' + func_name);
		application_uri=arguments[0];
		func_name=arguments[1];
		args=arguments[2];
		var x;
		var uri="";
		var post_data="";
		uri = application_uri;

		post_data = "function=" + escape(func_name);
		if(args.length > 1){
			for (i = 0; i < args.length-1; i++)
				post_data = post_data + "&args[]=" + escape(args[i]);
		}
		x = this.init_httprequest_object();
		if(x != null){
			x.open("POST", uri, async);
			x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
			x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	//		var requestTimer = setTimeout(function(){
	//			x.abort();// Handle timeout situation, e.g. Retry or inform user.
	//		}, 5000);
			x.onreadystatechange = function() {
				if (x.readyState != 4){
					return 'ajax error';
				}
	//			clearTimeout(requestTimer);
				if(x.status!=200){
					return;
				} else {
					var status;
					var data;
					data = x.responseText;
					args[args.length-1](data);
				}
			}
	//		if (x.readyState != 0){
	//			x.abort();
	//		}
			x.send(post_data);
	//		}
		}
		delete x;
	},
	new_do_function_call:function(application_uri, func_name, args, callback, async){
		$.ajax({
			async: async || true,
			url: application_uri,
			data: 'function='+func_name+'&'+args,
			type: 'post',
			success: function(r){
				callback(r);
			}
		});
	}
}