/**
 * Classe para enviar dados para um handler qualquer (PHP, ASP, etc...)
 * 
 * */

var SendDataCommand = function(){
	
	this.Extends = AsyncCommand;
	
	this.req/*Request*/ = null;
	this.note=null;
	
	this.execute = function(note/*INotification*/){
		this.note=note;
		this.beforeExecute(note);
		
		
		
		var params/*Object*/ = note.getBody();

		var data/*String*/ = params.data;
		
		this.onLoad = this.onLoad.bindWithEvent(this);
		this.onError = this.onError.bindWithEvent(this);
		
		var sendParams/*String*/ ="";
		
		if(data != null && data != undefined)
		{
			var sendArray = [];
			
			for(var i in data){
				
				sendArray.push(i+"="+this.processarParametro(i,data[i]));
			}
			
			sendParams= sendArray.join("&");
		}
		
		this.req = new Request({url:this.getHandlerURL(),
			onSuccess:this.onLoad,
			onFailure:this.onError
		}).send(sendParams);
		
		this.afterExecute(note);
		
	}
	
	//protected
	
	/**
	 * Caso seja necessário processar os parametros antes de serem enviados
	 * Basta sobrescrever o método e tratar adequadamente os parametros.
	 * Você pode selecionar os parametros dando um switch no nome por exemplo 
	 * */
	
	this.processarParametro=function(nome/*String*/,valor/*Notification*/)/*void*/{
		return valor;
	}
	
	/**
	 * Métodos a serem executados antes e depois da execução do comando
	 * 
	 * */
	
	this.beforeExecute=function(note/*Notification*/)/*void*/{
		
	}
	
	this.afterExecute=function(note/*Notification*/)/*void*/{
		
	}
	
	/**
	 * Retorna a url do handler que vai tratar a requisição . Abstrato 
	 * 
	 * @return String
	 * */
	
	this.getHandlerURL=function()/*String*/{
		return null
	}
	
	/**
	 * Método prático para recuperar a resposta em formato XML
	 * 
	 * @return XML
	 * */
	
	this.getXMLResposta=function()/*XML*/{
		return this.req.response.xml;
	}
	
	/**
	 * Método prático para recuperar a resposta em formato de texto
	 * 
	 * @return XML
	 * */
	
	this.getTextoResposta=function()/*String*/{
		return this.req.response.text;
	}
	
	/**
	 * Handler de dados enviados com sucesso para dar override
	 * */
	
	this.onLoad = function(e/*Event*/){
		
		
	}
	
	/**
	 * Handler de erro para dar override
	 * */
	
	this.onError = function(xhr){
		//alert("Erro ao carregar o xml dos usuários "+xhr.responseText);
	}
}

SendDataCommand = new Class(new SendDataCommand());
