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

//Define atalho para Ext.Panel
var P = Ext.Panel;

/**
 * @class App.UI
 * @extends Ext.util.Panel
 *
 * @cfg {String} renderTo elemento onde o objeto ser� renderizado
 * @constructor
 * @param {Object} config An object with config options.
 */
App.UI = function(config){
	//Cria objeto de configura��es padr�o
	var defaults = {
            appTitle: 'Sistema de Autoriza&ccedil;&atilde;o de Compras - ######'
	}
        
	//Aplica as configura��es padr�o e de par�metros
	Ext.apply(this, Ext.apply(config, defaults));
	
	//Call superclass constructor
	App.UI.superclass.constructor.call(this);		
	
	//Chama o m�todo de inicializa��o de 
	this.initComponent();
};

Ext.extend(App.UI, Ext.Panel,{
		
	/**
	 * Inicializa o componente
	 */
	initComponent : function(){			
		//Cria objeto de configura��es obrigat�rias
		var config = {
			layout: 'border',
			baseCls: 'x-plain'		
		}
		
		//Cria os pain�is da UI
		var panels = [
		    {//Painel do cabe�alho
				id: 'ui-header',
				region: 'north',
				cls: 'ui-header',
				baseCls: 'x-plain',
				xtype: 'panel',
				height: 44,
				layout: 'column',
				defaults: {
					baseCls: 'x-plain',
					xtype: 'panel',
					padding: '25 15 6 6'
				},
				items:[
			       {//Icone
			    	   cls: 'ui-logo',
			    	   columnWidth: .03
			       },
			       {//T�tulo
			    	   html: this.appTitle,
			    	   columnWidth: .57,
			    	   cls: 'ui-title'
			       },
			       {//Barra de sistema
			    	   columnWidth: .4,
			    	   cls: 'ui-info',
			    	   tbar:[
			    	         {//Bot�o de informa��o
			    	        	 text: 'USU&Aacute;RIO LOGADO: &nbsp;' + this.user.nome,
			    	        	 scale: 'medium',
			    	        	 iconCls: 'ui-logged',
			    	        	 handleMouseEvents: false
			    	         },
			    	         '->',{xtype: 'tbseparator'},
			    	         {//Bot�o de sair
			    	        	 text: '&nbsp;&nbsp;SAIR',
			    	        	 scale: 'medium',
			    	        	 iconCls: 'ui-exit',
			    	        	 handleMouseEvents: false,
			    	        	 handler: this.logout
			    	         },''
			    	   ]
			       }
				]
			},
			{//�rea da aplica��o
				id: 'ui-app',
				region: 'center',
				xtype: 'panel',
				layout: 'fit',
				tbar: {
					xtype: 'app-menu',
					ui: this
				},
				items:[
			       {
			    	   id: 'ui-app-ct',
			    	   xtype: 'panel',
			    	   layout: 'card',
			    	   layoutConfig:{
			    	   	  deferredRender:false
			       	   },
                                   listeners:{
                                     'afterlayout' : function(){
                                        //this.activate(0);
                                        //this.activate('pedido-pedido');
                                     },
                                     scope: this
                                   },
			    	  items: this.loadModules()
			       }				      
				]
			}
		]; 
		
		this.items = [panels];		
			
		//Chama o initComponent da superclasse
		App.UI.superclass.initComponent.apply(this,arguments);
	},
	
	/**
	 * Solicita ao usu�rio confirma��o e em caso afirmativo,
	 * efetua o logout do usu�rio.
	 */
	logout : function(){
		//Exibe janela de confirma��o ao usu�rio
		Ext.MessageBox.confirm('Confirma&ccedil;&atilde;o','Deseja realmente sair do sistema?',
				function(btn){
					if (btn == 'yes'){
						//Chama o m�todo remoto de encerramento de sess�o
						Ext.Ajax.request({
							url: App.sysURL + 'usuario_action/logout/',
							method: 'POST',
							success : function(result){
								eval('var action = ' + result.responseText);					
								if (action.success == 'true'){
									window.location.reload();
								}
							},
							scope : this
						});
					}			
				},
		this);
	},
	
	/**
	 * Inicializa o gerenciador de m�dulos e retorna os m�dulos dispon�veis
	 */
	loadModules : function(){
		//Cria o objeto gerenciador de m�dulos
		var modules = new App.ModuleManager({ui: this});
		
		var m = modules.getModules();

		//Retorna o array de m�dulos dispon�veis		
		return m;
	},
	
	/**
	 * Ativa o m�dulo que ser� visualizado
	 */
	activate : function(module){
		//Recupera o painel de conte�do
		var panel = Ext.getCmp('ui-app-ct');
		
		//Ativa o painel do m�dulo clicado
		panel.layout.setActiveItem(module);
	}	
		
});
