window.RFR.Application = function(name,eaid,url){
	this.gadgets=new Array();
	if (eaid){
		this.eaid=eaid;
	}
	this.onSuccessMap=Array();
	this.onFailedMap=Array();
	this.appName=name;
	if (url){
		this.url=url;
	} else {
		this.url='app.php';
	}
	
	this.sendRequest = function(appRequest,onSuccess,onFailed){
		$rfr.con().add('App request: '+Object.toJSON(appRequest));
		
		var params={t: Object.toJSON(appRequest) }
		if (onSuccess){
			this.onSuccessMap[appRequest.t_id]=onSuccess;
		}
		if (onFailed){
			this.onFailedMap[appRequest.t_id]=onFailed;
		}
		new Ajax.Request(this.url , { 
				method     :'post',
				parameters : params,
				onSuccess  : this.onRequestSuccess.bind(this),
				onFailure  : this.onRequestFailed.bind(this)
		});
	}
	
	this.onRequestSuccess = function(transport){
		var content=transport.responseText;
		response=RFR.Response.fromJSON(content);
		if (response.t_errorCode){
			if (this.onFailedMap[response.t_id]){
				this.onFailedMap[response.t_id](response);
			} else {
				r.con().add('Application '+this.appName+' error: '+response.t_message,'error');
			}
		} else {
			if (this.onSuccessMap[response.t_id]){
				this.onSuccessMap[response.t_id](response);
			} else {
				r.con().add('transaction '+response.t_id+' ok (no callBack)');
			}
		}
	}
	
	this.onRequestFailed = function(transport){
		r.con().add(this.name+' request failed','error');
	}
	
	this.createRequest = function(){
		var request=new RFR.Transaction();
		request.appName=this.appName;
		if (this.eaid){
			request.eaid=this.eaid;
		}
		return request;
	}
	this.getSuffixed=function(sufix){
		return window.document.getElementById(this.id+sufix);
	}
}

if (!$rfr.appMap){
	$rfr.appMap=Array();
}