/** Classe que consome Web Services
 * class ConsomeWS();
 */
var ConsomeWS = new Class({
	initialize: function (nomeObj) {
		// Web Services
		this.WS = new Hash();
		
		this.nomeObj = nomeObj;
		// Contem o WS que esta sendo utilizado.
		document.atualWS = 0;
	},
	/** Função que cria cada WS como um Obj único.
	 * function setWS(nome, url); return void;
	 * @param string nome : Nome do WS.
	 * @param string url : URL do WS.
	 */
	setWS: function (nome, url) {
		// Cria o WS.
		this.WS.set(nome, url);
		// Coloca a URL dentro do obj WS.
		this.WS[nome] = new Hash({url:url});
		// Cria o Hash que vai conter os Dados do obj WS.
		this.WS[nome].dados = new Hash();

		/** Função que guarda o Nome e URL de cada WS
		 * function setDados(nome, valor); return void;
		 * @param string nome : Nome do Dado.
		 * @param string valor : Valor do Dado.
		 */
		this.WS[nome].setDados = function (nome, valor) {
			this.dados.set(nome, valor);
		}
		/** Funcao que Dispara o WS
		 * function trigger(); return void;
		 */
		this.WS[nome].trigger = function (p) {
			// Request
			var myRequest = new Request({
				url: this.url,
				encoding: 'iso-8859-1',
				autoCancel: true,
				onRequest: function () {
					if($chk(p)) {
						if($chk(p.onRequest)) {
							p.onRequest();
						}
					}
				},
				onSuccess: function (respTxt, respXml) {
					if($chk(p)) {
						if($chk(p.onSuccess)) {
							p.onSuccess(respTxt, respXml);
						}						
					}					
				},
				onFailure: function () {
					alert('Não foi possivel enviar seus dados.');
				}
			}).send(this.dados.toQueryString());
		}
	},
	/**	Ativa cada WS e envia seus dados.
	 * function trigger();  return void;
	 */
	trigger: function (p) {
		// Pegamos os nomes de cada WS
		var nomesWS = this.WS.getKeys();
		var qtdWS = this.WS.getLength();
		var nomeObj = this.nomeObj;

		// Função onRequest();
		if($chk(p.onRequest)) {
			p.onRequest();
		}			
		
		// Dispara todos e coloca a funcao trigger
		// do seguinte WS quando conclua cada um. 
		this.WS[nomesWS[0]].trigger({
			onSuccess: function () {
				eval(nomeObj).WS[nomesWS[1]].trigger({
					onSuccess: p.onSuccess
				});
			}
		});
	}
});