/**
 * @class AppEventManager *
 * Class for the application specific events and module triggers
 * When you have a button called "About Us" and that is specific for the application
 * you are working on, then the event will be in this file
 * Convention: ClickAboutUs, would be fine!
 *
 * @namespace MyApp.controllers.observables
 * @extends Ext.util.Observable
 *
 * @constructor
 * @param {object} AppEventManager
 * @author Harry Epp, outsys
 * @version 4.0
 */

var myDesktopApp;  
var lang;
var loadMask;

Ext.define('AppEventManager', {
    
    extend      : 'Ext.util.Observable',
    requires: [
    'Ext.util.History'
    ],
    singleton   : true,
    
    language : {
        lang: 'de',
        uid: 0
    },
    
    constructor : function ( config ) {
        
        //aktuelle Spracheinstellung ermitteln 
        this.setLanguage();
        
        // events to register
        this.addEvents ({
            'ClickOpenWindow'       : true,
            'CheckLogin'            : true,
            'Login'                 : true,
            'Logout'                : true,
            'LoadDataPanel'         : true,
            'LoadDataStore'         : true,
            'startDownload'         : true,
            'setPid'                : true,
            'getPageId'             : true
        });

        // button events
        this.on('ClickOpenWindow', this.onClickOpenWindow, this);
        
        // load events
        this.on('CheckLogin', this.onCheckLogin, this);
        this.on('Login', this.onLogin, this);
        this.on('Logout', this.onLogout, this);
        this.on('LoadDataPanel', this.onLoadDataPanel, this);
        this.on('LoadDataStore', this.onLoadDataStore, this);
        
        // sonstiges
        this.on('startDownload', this.onStartDownload, this);
        this.on('setPid', this.onSetPid , this);
        this.on('getPageId', this.onGetPageId, this);
        
        
    },

    /**************************************************
     *  Event lädt die aktuelle Spracheinstellung     *
     **************************************************/

    setLanguage : function() {
        var me = this;
        
        Ext.Ajax.request({
            url : 'get_typo3_content.php',
            method : 'POST',
            params : {
                'ctype'     : 'getLanguage',
                'language'  : document.documentElement.lang
            },    
      
            success: function(result, opts) {
                                
                var jsonData = Ext.decode(result.responseText); //decode the response
                if (jsonData.records[0]) {
                    
                    me.language.lang = jsonData.records[0].title;
                    me.language.uid = jsonData.records[0].uid;

                    
                } else {
                    me.language.lang = 'de';
                    me.language.uid = 0;
                }
                
                Ext.Loader.setConfig({
                    enabled: true
                });
                Ext.Loader.setPath({
                    'Ext.ux.desktop': 'desktop/js',
                    'Ext.ux.tmpl': 'desktop/tmpl',
                    'Ext.ux.model': 'desktop/models',
                    'Ext.ux.lang': 'desktop/language',
                    MyDesktop: 'desktop'
                });

                Ext.require([
                    'Ext.ux.lang.ext-lang-de',
                    'MyDesktop.App'    
                    ]);
                Ext.QuickTips.init();

                Ext.onReady(function () {
                   
                    // Sprache initialisieren
                    var language = Ext.String.format('Ext.ux.lang.ext-lang-{0}', me.language.lang);
                    lang = new Ext.create(language);
                    lang.lang();
                    
                    // Loading Maske initialisieren und starten
                    loadMask = new Ext.LoadMask(Ext.getBody(), {
                        baseCls : 'he-loader-mask',
                        
                        floating : true,
                        msg:''
                        
                    });
                    loadMask.show();
                    
                    // Desktop Starten
                    myDesktopApp = new MyDesktop.App();
                    
                    
                });
                
               
                       


            },
            failure : function (form, action) {
                Ext.Msg.alert('Ajax Call Fehlgeschlagen','Desktop kann nicht geladen werden');   
            }
        });
    },
    
    
    /**************************************************
     *  Event lädt den Inhalt für das Content Panel   *
     **************************************************/
    
    onSetPid : function (pid, uid, skipload) {
        
        loadMask.show();
        var jetzt = new Date();
        if (!skipload)
            skipload = false
        Ext.util.History.skipLoad = skipload;
        Ext.util.History.add(pid + '_' + jetzt.getTime());
                
 
    },
    
    onGetPageId : function (url) {
        //alert(url);
        Ext.Ajax.request({
            url : 'get_typo3_content.php',
            method : 'POST',
            params : {
                'ctype'     : 'getPageId',
                'url'       : url
            },    
      
            success: function(result, opts) {
                                
                var jsonData = Ext.decode(result.responseText); //decode the response
                if (jsonData.success === true) {
                    
                    if (jsonData.records[0])        
                        AppEventManager.fireEvent('setPid',jsonData.records[0].page_id);
                    
                } else {
                    Ext.Msg.show({
                        title:'Alert',
                        msg: jsonData.message,
                        buttons: Ext.Msg.OK,
                        icon: Ext.MessageBox.ERROR
                    });
                }
            },
            failure : function (form, action) {
                Ext.Msg.alert('Ajax Call Fehlgeschlagen',form);   
            }
        });
                
 
    },
    
    /**************************************************
     *  Event öffnet das Loginfeld                    *
     **************************************************/
    
    onLogin : function (loginwin ,win) {
    
        requires: [
        'Ext.ux.tmpl.LoginWindow'
        ];
        
    var login = new Ext.create('Ext.ux.tmpl.LoginWindow', {
        openWin : win
    });
    login.show();
    
    },
    
    /**************************************************
     *  Event starten den Logout                      *
     **************************************************/
    
    onLogout : function () {
    
        Ext.Ajax.request({
            url : 'get_typo3_content.php?logintype=logout',
            method : 'POST',
            params : {
                'ctype' : 'startLogout'                   
            },   
      
            success: function(result, opts) {
                                
                AppEventManager.fireEvent('CheckLogin', this, true);
            },
            failure : function (form, action) {
                
                Ext.msg.alert('Logout', 'Logout ist fehlgeschlagen!');
            }
        });
    
    },
    /**************************************************
     *  Event überprüft ob ein User angemeldet ist    *
     **************************************************/
    
    onCheckLogin : function (win, checkOnly) {
        var logbutton = Ext.getCmp('he-login-logout-button');
        logbutton.setText('Anmelden');
        logbutton.setIconCls('login');
        
        
        Ext.Ajax.request({
            url : 'get_typo3_content.php',
            method : 'POST',
            params : {
                'ctype' : 'checkLogin'                   
            },   
      
            success: function(result, opts) {
                                
                var jsonData = Ext.decode(result.responseText); //decode the response
                if (jsonData.success === true) {
                   
                    if (jsonData.login == true) {
                        logbutton.setText(jsonData.username);
                        logbutton.setIconCls('logout');
                    
                        
                        if (checkOnly!=true) {
                            if (win)
                                win.loadDataStore(jsonData.username);  
                        }
                             
                    } else {
                        logbutton.setText('Anmelden');
                        logbutton.setIconCls('login');
                        if (checkOnly!=true) {
                            AppEventManager.fireEvent('Login', this, win);  
                        }
                    }
                    

                } else {
                    logbutton.setText('Anmelden');
                    logbutton.setIconCls('login');
                    Ext.Msg.show({
                        title:'Alert',
                        msg: jsonData.message,
                        buttons: Ext.Msg.OK,
                        icon: Ext.MessageBox.ERROR
                    });
                }
            },
            failure : function (form, action) {
                logbutton.setText('Anmelden');
                logbutton.setIconCls('login');
                Ext.Msg.alert('Ajax Call Fehlgeschlagen',form);
            
            }
        });
    },
    
    /**************************************************
     *  Event lädt den den angegebenen DataStore      *
     **************************************************/
    
    onLoadDataStore : function (win, dataStore, pid, uid, searchValue, searchKat) {
        var sv = (searchValue)? searchValue :'';
        var kat = (searchKat)? searchKat :'';
        
        var me = this;
        //this.store = Ext.data.StoreManager.lookup(dataStore);
        
        //var store = Ext.data.StoreManager.lookup(dataStore);
        var store = Ext.create(dataStore , {
            storeId : dataStore  + pid            
        }); 
        
        store.removeAll();
        store.pid = pid;
        store.getProxy().extraParams.pid = pid;
        store.getProxy().extraParams.language = AppEventManager.language.uid;
        store.getProxy().extraParams.kategorie = kat;
        store.getProxy().extraParams.search = sv;
        
        if (win.selectIndex) {
            store.currentPage = 1;
            while ((win.selectIndex+1) > store.pageSize) {
                win.selectIndex = win.selectIndex - store.pageSize
                store.currentPage += 1;
            }
            
        }
        
        
        store.load({
             
            callback : function(records, operation, success) {
                
                if (success) {
                  
                    win.showWindow(store);

                    
                } else {
                    
                    Ext.Msg.alert('Ajax Call Fehlgeschlagen','form'); 
                }
              
            }
        }); 
    
    },
    
    

    
    /**************************************************
             *  Event startet den Download einer Datei        *
             **************************************************/
    
    onStartDownload : function (uid) {
        var body = Ext.getBody(); 
    
        var form = body.createChild({ 
            tag:'form',
            cls:'x-hidden',
            id:'form',
            action:'get_typo3_content.php',
            method: 'post'
        //,target:'iframe' 
        });
        
        var uids = form.createChild({ 
            tag:'input',
            cls:'x-hidden',
            id:'uid',
            value: uid,
            name: 'uid',
            target:'form' 
        }); 
        var ctype = form.createChild({ 
            tag:'input',
            cls:'x-hidden',
            id:'ctype',
            value: 'startDownload',
            name: 'ctype',
            target:'form' 
        }); 
 
        form.dom.submit(); 

        return false;
    }
    
}

    
);

