//define namespace
Ext.namespace('App');

Ext.BLANK_IMAGE_URL = App.uiURL + 'lib/ext/resources/images/default/s.gif';

/**
 * Classe principal da aplica��o
 * @class App.Application
 * @extends Ext.util.Observable
 */
App.Application = Ext.extend(Ext.util.Observable,{

	/**
	 * Inicializa a aplica��o. 
	 */
	init : function(){
		App.Mask = new Ext.LoadMask(Ext.getBody(), {msg:"Aguarde..."});
		
		this.authenticate();
	},
	
	/**
	 * Inicializa o processo de autentica��o no sistema
	 */
	authenticate : function(){
		//Cria o objeto de autentica��o
		this.auth = new App.Login();
		
		//Registra a fun��o de inicializa��o da aplica��o para o evento de autentica��o
		this.auth.on('authenticate',this.startApp, this);
		
		//Verifica se existe uma sess�o aberta no sistema
		this.auth.isLogged();		
	},
	
	/**
	 * Efetua o logout do usu�rio autenticado
	 */
	logout : function(){
		//Faz requisi��o para efetuar logout do sistema
		Ext.Ajax.request({
			url: App.sysURL + 'conta_action/logout/',
			method: 'POST',
			success : function(result){
				eval('var action = ' + result.responseText);					
				if (action.success == 'true'){
					window.location.reload();
				}else{
					//Mostra o formul�rio de autentica��o
					this.createForm();						
				}					
			},
			scope : this
		});		
	},

	/**
	 * Inicializa a aplica��o ap�s o logon
	 * 
	 * @param {Object} auth objeto de autentica��o
	 * @param {Object} data dados do usu�rio autenticado
	 */
	startApp : function(auth, data){
		//Cria e exibe uma m�scara para a inicializa��o
		App.StartMask = new Ext.LoadMask(Ext.getBody(), {msg:"Aguarde, enquanto o sistema &eacute; inicializado..."});		
		App.StartMask.show();

                //Dados do usuário registrado
                Ext.ns('App.data');
                App.data.user = data;
                
		//Inicializa a aplica��o		
		this.createUI(data);

		//Fecha a janela de autentica��o
		this.auth.closeWindow();

		//Oculta a mascara de inicializa��o
		App.StartMask.hide();
	},
	
	/**
	 * Cria a interface de usu�rio do sistema
	 * 
	 * @param {Object} data dados do usu�rio autenticado
	 */
	createUI : function(data){
		//Cria a interface de usu�rio
		this.UI = new App.UI({
			user: data,
			layout: 'border'
		});
		
		//Cria o viewport da UI
		new Ext.Viewport({
			layout: 'fit',
			items:[
			    //Adiciona a UI ao viewport
			    this.UI
			]
		});
	}
	
});
Ext.ns('Application');

/**
 * Inicializa a aplica��o
 */
Ext.onReady(function(){
        Ext.QuickTips.init();

        // turn on validation errors beside the field globally
        //Ext.form.Field.prototype.msgTarget = 'side';

	//Cria a inst�ncia da aplica��o
	Application.instance = new App.Application();
	
	// Registra o evento para as requisi��es Ajax
	Ext.Ajax.on('beforerequest',function(){
		//App.Mask.show();
	},this);

	// Registra o evento para as requisi��es Ajax
	Ext.Ajax.on('requestcomplete',function(){
		//App.Mask.hide();
	},this);
	
	//Inicializa a aplica��o
	Application.instance.init();
},this);
