/**
 * file App.js with main application
 * @author Janusz Rygał
 * @date 12.08.2008 
 */

/**
 	<script type="text/javascript">
		  <c:import url="file:/home/example/snippet.js"/>
   </script>
 */
//http://www.lavacards.com/linkout/o.php?out=http://www.manpaper.com/archive/mp/01g_114a.jpg

/**
 * @class App class application
 */
Ext.app.App = function(cfg){
    Ext.apply(this, cfg);
    this.addEvents({
        'ready' : true,
        'beforeunload' : true
    });
    

    //main 
    Ext.onReady(this.initApp , this);
};

Ext.extend(Ext.app.App, Ext.util.Observable, {
			    isReady: false,
			    startMenu: null,
			    modules: null,
			
			    getStartConfig : function(){
			
			    },
			    initApp : function(){
			      	this.startConfig = this.startConfig || this.getStartConfig();
					this.desktop = new Ext.Desktop(this);
					this.launcher = this.desktop.taskbar.startMenu;
					this.modules = this.getModules();
					if(this.modules){
					     this.initModules(this.modules);
					}
					this.init();
					Ext.EventManager.on(window, 'beforeunload', this.onUnload, this);
					this.fireEvent('ready', this);
					this.isReady = true;   
					
					context.application = this;
			    },
			
			    getModules : Ext.emptyFn,
			    init : Ext.emptyFn,
			
			    initModules : function(ms){
					for(var i = 0, len = ms.length; i < len; i++){
			            var m = ms[i];
			            this.launcher.add(m.launcher);
			            m.app = this;
			        }
			    },
			
			    getModule : function(name){
			    	var ms = this.modules;
			    	for(var i = 0, len = ms.length; i < len; i++){
			    		if(ms[i].id == name || ms[i].appType == name){
			    			return ms[i];
						}
			        }
			        return '';
			    },
			
			    onReady : function(fn, scope){
			        if(!this.isReady){
			            this.on('ready', fn, scope);
			        }else{
			            fn.call(scope, this);
			        }
			    },	
			
			    getDesktop : function(){
			        return this.desktop;
			    },
			
			    onUnload : function(e){
			        if(this.fireEvent('beforeunload', this) === false){
			            e.stopEvent();
			        }
			    }
			});