/***********************************************************************************************
 * verwaltet die Taskleiste
 **********************************************************************************************/
TaskbarManager = function() {

   var btnIdPostfix = "_taskbarbutton";
   var defaultToggleGroup = "WindowGroup";
   var maxNumWindows = 3;
   var numWindows = 0;
   this.taskbarRef = null;


   return {

      /*****************************************************************************************
       * fügt der Taskleiste einen Button für das gegebene Fenster hinzu
       * @param _winRef : BasicWindow
       *        Referenz auf das zugeordnete Fenster
       ****************************************************************************************/
      addToTaskbar : function(_winRef) {
         if (this.taskbarRef) {
            var btn = new Ext.Toolbar.Button( {
               id :_winRef.id + btnIdPostfix,
               text : this.createShortButtonTitle(_winRef.title),
               enableToggle: true,
               toggleGroup: defaultToggleGroup,
               windowId :_winRef.id
            });

            btn.addListener('click', function() {
               TaskbarManager.toggleWindow(btn);
            }, this);
            this.taskbarRef.addButton(btn);
            // als aktiven Button setzen
            btn.toggle(true);

            numWindows++;
         }
      },

      /*****************************************************************************************
       * entfernt den Taskleistenbutton des gegebenen Fensters
       * @param _winRef : BasicWindow
       *        Referenz auf das zugeordnete Fenster
       ****************************************************************************************/
      removeFromTaskbar: function(_winRef) {
         var btnRef = Ext.getCmp(_winRef.id + btnIdPostfix);
         if(btnRef) {
            btnRef.destroy();
            numWindows--;
         }
      },

      /*****************************************************************************************
       * schaltet den Sichbarkeitsstatus des zugeordneten Fensters um
       ****************************************************************************************/
      toggleWindow : function(_btnRef) {
         var winId = _btnRef.initialConfig.windowId;
         var winRef = Ext.WindowMgr.get(winId);
         if(Ext.WindowMgr.getActive() == winRef) {
            winRef.hide();
         } else {
            winRef.show();
         }

      },

      /*****************************************************************************************
       * markiert einen Taskleistenbutton als aktiv, wird aus der onActivate jedes BasicWindow
       * aufgerufen
       * @param _winRef : BasicWindow
       *        Referenz auf das aktivierte Fenster
       ****************************************************************************************/
      activateButton: function(_winRef) {
         var btnRef = Ext.getCmp(_winRef.id + btnIdPostfix);
         if(btnRef) {
            btnRef.toggle(true);
         }
      },

      /*****************************************************************************************
       * speichert eine Referenz auf das Taskleistenobjekt
       * @param _taskbarRef : Taskbar
       *         Referenz auf das Taskleisten-Panel
       ****************************************************************************************/
      setTaskbar : function(_taskbarRef) {
         this.taskbarRef = _taskbarRef;
      },

      /*****************************************************************************************
       * erzeugt die ID des Taskleistenbuttons zur gegebenen Fenster-ID
       * @param _winRef : BasicWindow
       *        Referenz auf ein Fenster
       ****************************************************************************************/
      createButtonId: function(_winRef) {
         return _winRef.id + btnIdPostfix;
      },

      /*****************************************************************************************
       * kürzt den Titel Taskleistenbuttons falls nötig
       * @param _winRef.title : Titel des BasicWindow
       *
       ****************************************************************************************/
      createShortButtonTitle: function(_winRefTitle) {
         if(_winRefTitle.length > 25){
            _winRefTitle = _winRefTitle.substring(0,23)+'...';
         }
         return _winRefTitle;
      },

      /*****************************************************************************************
       * prüft ob Anzahl an maximal erlaubten Fenster erreicht ist
       * oder ob noch Fenster geöffnet werden dürfen
       ****************************************************************************************/
      isWinAllowed: function() {
         return (numWindows < maxNumWindows);
      }

   };
}();