AjaxCaller = Class.create({

	URL: location.href,

	ajaxCall: function(params, callback)
	{
		// TODO: Implement alternative callback
		new Ajax.Request(this.URL, {
			parameters: params,
			onSuccess: this.ajaxCallback.bindAsEventListener(this),
			onFailure: function(transport){alert('Error ocurred, please reload this page');}
		});	
	},
	
	ajaxCallback: function(transport, json)
	{
		json = transport.responseJSON;		

		if ((json == null) || ((json.status != 'success') && (json.status != 'exception')))
		{
			alert('Error' + transport.responseText);
			return;
		}
		
		if (json.status == 'exception')
		{
			alert(dump(json));
			return;
		}
		
		eval('this.callback_' + json.requestType + '(transport, json);');
	}
});

function dump(arr, level)
{
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects
	 for(var item in arr) {
	  var value = arr[item];
	 
	  if(typeof(value) == 'object') { //If it is an array,
	   dumped_text += level_padding + "'" + item + "' ...\n";
	   dumped_text += dump(value,level+1);
	  } else {
	   dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
	  }
	 }
	} else { //Stings/Chars/Numbers etc.
	 dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}
