// JavaScript Document
/* DICAS:

var obj = this; this se perde ao executar uma função como ajax ou efeito, neste caso utilizar obj (é passado por referencia)

========================================
MODO DE USAR:
========================================
1) Cria Objeto
	wx = new wxbox('ajax.php', 'div'); // Aquivo ajax, div que será executado a ação

2) Configurar as funções de Callback
	- wx.CallbackStart = function(){}; // Executado imediatamente antes da requisição AJAX
	- wx.CallbackResposta = function(html){} // Executado depois da ação, (trata a resposta do ajax, antes de substituir na DIV)
	- wx.CallbackEnd = function (){}; // Executado quando finalizar 
	
3) Executar o wxbox
	- wx.executa();
========================================

*/
// ==============================================================================================================================
// WXBOX
// ==============================================================================================================================

function wxbox(ajax, div){

	// =====================================================
	// Configurações
	// =====================================================
	this.ajax = ajax;
	this.div = div;
	this.velocidade = 'slow';

	// =====================================================
	// Funções CALLBACK
	// =====================================================
	this.CallbackStart;
	this.CallbackEnd;
	this.CallbackResposta;

	// =====================================================
	// Executa a troca da DIV (dados para ser enviado via ajax via GET)
	// =====================================================
	this.executa = function(dados){
		// Define sigo mesmo
		var obj = this;
		obj.dados = dados;

		// VERIFICACAO
		this.verificacao();

		// Executa Callback Start
		if (this.CallbackStart)
			this.CallbackStart();

		// Efeito de desaparacer a div
		$("#"+this.div).fadeOut(this.velocidade, function(){
			$(this).empty();
			obj.executa2();
		});


	}
	// 2a etapa ---------------------------------------
	this.executa2 = function(){
		// Define sigo mesmo
		var obj = this;

		// Configura para modo SINCRONO
		$.ajaxSetup({async: false, cache: false});
		// OBTEM RESPOSTA DO SERVIDOR
		var html = $.get(this.ajax, this.dados).responseText;

		// TRATA A RESPOSTA
		if (this.CallbackResposta)
			html = this.CallbackResposta(html);

		// SUBSTITUI DIV PELA RESPOSTA DO SERVIDOR
		$("#"+obj.div).append(html);			
		
		$("#"+this.div).fadeIn(this.velocidade, function(){
			// Executa função de finaizado
			if (obj.CallbackEnd)
				obj.CallbackEnd();
		});

	}
	// =====================================================
	// Verificacao das variaveis
	// =====================================================
	this.verificacao = function(){

		if (!this.ajax)
			throw "WXBOX: Propriedade Ajax não foi setada";

		if (!this.div)
			throw "WXBOX: Propriedade DIV não foi setada";
	}
}