TabgenPanel = function()
{
    this.berichtssystem = '';
    this.dim1 = 1;  // contents of columns.      1=Merkmale  2=Regionen  3=Zeit
    this.dim2 = 2;  // contents of rows.
    this.dim3 = 3;  // contents of help-columns.
    //-----< create layout menu >-----------------------------------------------

    this.menuitem123 = new Ext.menu.CheckItem( {
        text : 'Regionen (Zeilen), Merkmale (Spalten)   [Zeit]',
        group : 'layout',
        checked : false,
        dimattributes : Array(1,2,3),
        checkHandler : this.onLayoutMenuItemClick,
        scope:this
    } );
    this.menuitem213 = new Ext.menu.CheckItem( {
        text : 'Merkmale (Zeilen), Regionen (Spalten)   [Zeit]',
        group : 'layout',
        checked : false,
        dimattributes : Array(2,1,3),
        checkHandler : this.onLayoutMenuItemClick,
        scope:this
    } );
    this.menuitem312 = new Ext.menu.CheckItem( {
        text : 'Merkmale (Zeilen), Zeit (Spalten)   [Regionen]',
        group : 'layout',
        checked : false,
        dimattributes : Array(3,1,2),
        checkHandler : this.onLayoutMenuItemClick,
        scope:this
    } );
    this.menuitem132 = new Ext.menu.CheckItem( {
        text : 'Zeit (Zeilen), Merkmale (Spalten)   [Regionen]',
        group : 'layout',
        checked : false,
        dimattributes : Array(1,3,2),
        checkHandler : this.onLayoutMenuItemClick,
        scope:this
    } );
    this.menuitem321 = new Ext.menu.CheckItem( {
        text : 'Regionen (Zeilen), Zeit (Spalten)   [Merkmale]',
        group : 'layout',
        checked : false,
        dimattributes : Array(3,2,1),
        checkHandler : this.onLayoutMenuItemClick,
        scope:this
    } );
    this.menuitem231 = new Ext.menu.CheckItem( {
        text : 'Zeit (Zeilen), Regionen (Spalten)   [Merkmale]',
        group : 'layout',
        checked : false,
        dimattributes : Array(2,3,1),
        checkHandler : this.onLayoutMenuItemClick,
        scope:this
    } );
    this.menuitem12 = new Ext.menu.CheckItem( {
        text : 'Regionen (Zeilen), Merkmale (Spalten)',
        group : 'layout',
        checked : false,
        dimattributes : Array(1,2,3),
        checkHandler : this.onLayoutMenuItemClick,
        scope:this
    } );
    this.menuitem21 = new Ext.menu.CheckItem( {
        text : 'Merkmale (Zeilen), Regionen (Spalten)',
        group : 'layout',
        checked : false,
        dimattributes : Array(2,1,3),
        checkHandler : this.onLayoutMenuItemClick,
        scope:this
    } );
    this.menuitem31 = new Ext.menu.CheckItem( {
        text : 'Merkmale (Zeilen), Zeit (Spalten)',
        group : 'layout',
        checked : false,
        dimattributes : Array(3,1,2),
        checkHandler : this.onLayoutMenuItemClick,
        scope:this
    } );
    this.menuitem13 = new Ext.menu.CheckItem( {
        text : 'Zeit (Zeilen), Merkmale (Spalten)',
        group : 'layout',
        checked : false,
        dimattributes : Array(1,3,2),
        checkHandler : this.onLayoutMenuItemClick,
        scope:this
    } );
    this.menuitem32 = new Ext.menu.CheckItem( {
        text : 'Regionen (Zeilen), Zeit (Spalten)',
        group : 'layout',
        checked : false,
        dimattributes : Array(3,2,1),
        checkHandler : this.onLayoutMenuItemClick,
        scope:this
    } );
    this.menuitem23 = new Ext.menu.CheckItem( {
        text : 'Zeit (Zeilen), Regionen (Spalten)',
        group : 'layout',
        checked : false,
        dimattributes : Array(2,3,1),
        checkHandler : this.onLayoutMenuItemClick,
        scope:this
    } );
    this.layoutmenu = new Ext.menu.Menu( {
        items : [ this.menuitem123, this.menuitem213, this.menuitem312, this.menuitem132, this.menuitem321, this.menuitem231,
                  this.menuitem12,  this.menuitem21,  this.menuitem31,  this.menuitem13,  this.menuitem32,  this.menuitem23
         ]
    });
    //-----< create all panels >------------------------------------------------
    var x = this;
    this.berichtssystem_panel = new Ext.Panel({
        title : 'Start: Auswahl des Berichtssystem',
        border : false,
        autoScroll : true,
        autoLoad : { url : 'TabgenWelcome.html', scripts : true, callback : function(el,success,response,options){/*alert('hello');var c = Ext.get('tabgen-button-krsdat'); alert(c);var b1 = new Ext.Button({renderTo : 'tabgen-button-krsdat' });*/} }
    });
    this.merkmale_panel = new MerkmalePanel( {
        title : 'Merkmale',
        buttonAlign : 'center',
        buttons : [ {
            text : 'Zurück',
            disabled : true
        } , {
            text : 'Weiter',
            disabled : false,
            handler : function(){ x.fireEvent('navigatetostep',2); x.showStep(2); }
        } ]
    } );
    this.regionaleinheiten_panel = new RegionaleinheitenPanel( {
        title:'Regionaleinheiten',
        buttonAlign : 'center',
        buttons : [ {
            text : 'Zurück',
            disabled : false,
            handler : function(){ x.fireEvent('navigatetostep',1); x.showStep(1); }
        } , {
            text : 'Weiter',
            disabled : false,
            handler : function(){ x.fireEvent('navigatetostep',3); x.showStep(3); }
        } ]
    } );
    this.zeiteinheiten_panel = new ZeiteinheitenPanel( {
        title:'Zeiteinheiten',
        buttonAlign : 'center',
        buttons : [ {
            text : 'Zurück',
            disabled : false,
            handler : function(){ x.fireEvent('navigatetostep',2); x.showStep(2); }
        } , {
            text : 'Weiter',
            disabled : false,
            handler : function(){ x.fireEvent('navigatetostep',4); x.showStep(4); }
        } ]
    } );
    this.fertigstellen_panel = new Ext.Panel({
        title : 'Fertigstellen',
        autoScroll : true,
        border : false,
        tbar : [ {
            text : 'Layout',
            menu : this.layoutmenu
        } , {
            text : 'Ausdruck',
            disabled : false,
            handler : this.onPrintTable,
            scope : this
        } , {
            text : 'Export nach Excel',
            disabled : false,
            handler : this.onExportTable,
            scope : this
        } ]
    });
    //-----< call parent constructor >------------------------------------------
    TabgenPanel.superclass.constructor.call(this, {
        region : 'center',
        layout : 'card',
        border : true,
        activeItem : 0,
        items: [ this.berichtssystem_panel, this.merkmale_panel, this.regionaleinheiten_panel, this.zeiteinheiten_panel, this.fertigstellen_panel ]
    });
    //-----< add events >-------------------------------------------------------
    this.addEvents({navigatetostep:true});
};

//-----< define new class MerkmalePanel >---------------------------------------
Ext.extend(TabgenPanel, Ext.Panel,
{

    setBerichtssystem : function(bs)
    {
        this.berichtssystem = bs;
        this.merkmale_panel.setBerichtssystem(bs);
        this.regionaleinheiten_panel.reset();
        this.regionaleinheiten_panel.onlykrsdat = (bs == 'krsdat');
        this.zeiteinheiten_panel.setBerichtssystem(bs);
    },

    showStep : function(step)
    {
        if(step == 4)
        {
            return( this.showResultTable(true) );
        }
        else
        {
            this.layout.setActiveItem(step);
        }
    },

    onExportTable : function()
    {
        document.getElementById('drztabgenexport').submit();
    },

    onPrintTable : function()
    {
        document.getElementById('drztabgenprint').submit();
    },

    showResultTable : function(selectInitialLayout)
    {
        //-----< get and check merkmale >---------------------------------------
        var merkmale = this.merkmale_panel.getSelectedMerkmale();
        if(merkmale.length <= 0)
        {
            // jump to merkmale panel and select node in navigation tree
            this.layout.setActiveItem(1);
            this.fireEvent('navigatetostep',1);
            // show message
            Ext.MessageBox.alert('Achtung','Bitte wählen Sie mindestens ein Merkmal aus.');
            // no default handling
            return(false);
        }
        //-----< get and check regionaleinheiten >------------------------------
        var regionaleinheiten = this.regionaleinheiten_panel.getRegionaleinheiten();
        if(regionaleinheiten.length <= 0)
        {
            // jump to regionaleinheiten panel and select node in navigation tree
            this.layout.setActiveItem(2);
            this.fireEvent('navigatetostep',2);
            // show message
            Ext.MessageBox.alert('Achtung','Bitte wählen Sie mindestens eine Regionaleinheit aus.');
            // no default handling
            return(false);
        }
        //-----< get and check zeiteinheiten >----------------------------------
        var zeitart = this.zeiteinheiten_panel.getZeitArt();
        var zeiteinheiten = this.zeiteinheiten_panel.getZeiteinheiten();
        if(zeiteinheiten.length <= 0)
        {
            // jump to regionaleinheiten panel and select node in navigation tree
            this.layout.setActiveItem(3);
            this.fireEvent('navigatetostep',3);
            // show message
            Ext.MessageBox.alert('Achtung','Bitte wählen Sie mindestens eine Zeiteinheit aus.');
            // no default handling
            return(false);
        }
        //-----< select initial layout >----------------------------------------
        if(selectInitialLayout)
            this.selectInitialLayout(merkmale.length,regionaleinheiten.length,zeiteinheiten.length);
        //-----< switch to last panel and load created table >------------------
        this.layout.setActiveItem(4);
        var postparams = {};
        postparams["bericht"] = this.berichtssystem;
        postparams["dim1"] = this.dim1;
        postparams["dim2"] = this.dim2;
        postparams["dim3"] = this.dim3;
        if(zeitart!="jahre")
        {
            postparams["dim1"] = (this.dim1==3) ? 4 : this.dim1;
            postparams["dim2"] = (this.dim2==3) ? 4 : this.dim2;
            postparams["dim3"] = (this.dim3==3) ? 4 : this.dim3;
        }
        postparams["field_cnt"] = merkmale.length;
        for(var i = 0; i < merkmale.length; i++)
        {
            postparams["field_"+i] = merkmale[i];
        }
        postparams["reg_cnt"] = regionaleinheiten.length;
        for(var i = 0; i < regionaleinheiten.length; i++)
        {
            postparams["reg_"+i] = regionaleinheiten[i].regnr;
        }
        postparams["time_cnt"] = zeiteinheiten.length;
        for(var i = 0; i < zeiteinheiten.length; i++)
        {
            postparams["time_"+i] = zeiteinheiten[i];
        }
        this.fertigstellen_panel.load({url: 'services/tabgen.php', params: postparams});
    },

    selectInitialLayout : function(cnt_merkmale,cnt_regionaleinheiten,cnt_zeiteinheiten)
    {
        // dim1: contents of columns.      1=Merkmale  2=Regionen  3=Zeit
        // dim2: contents of rows.
        // dim3: contents of help-columns.
        //-----< one dimension consists of just one element >-------------------
        if(cnt_zeiteinheiten == 1)
        {
            this.menuitem12.setVisible(true);
            this.menuitem21.setVisible(true);
            if(cnt_merkmale > cnt_regionaleinheiten)
            {
                this.dim1 = 2;
                this.dim2 = 1;
                this.dim3 = 3;
                this.menuitem21.setChecked(true);
            }
            else
            {
                this.dim1 = 1;
                this.dim2 = 2;
                this.dim3 = 3;
                this.menuitem12.setChecked(true);
            }
            this.menuitem123.setVisible(false);
            this.menuitem213.setVisible(false);
            this.menuitem312.setVisible(false);
            this.menuitem132.setVisible(false);
            this.menuitem321.setVisible(false);
            this.menuitem231.setVisible(false);
            this.menuitem123.setChecked(false);
            this.menuitem31.setVisible(false);
            this.menuitem13.setVisible(false);
            this.menuitem32.setVisible(false);
            this.menuitem23.setVisible(false);
        }
        else if(cnt_regionaleinheiten == 1)
        {
            this.menuitem31.setVisible(true);
            this.menuitem13.setVisible(true);
            if(cnt_zeiteinheiten > cnt_merkmale)
            {
                this.dim1 = 1;
                this.dim2 = 3;
                this.dim3 = 2;
                this.menuitem13.setChecked(true);
            }
            else
            {
                this.dim1 = 3;
                this.dim2 = 1;
                this.dim3 = 2;
                this.menuitem31.setChecked(true);
            }
            this.menuitem123.setVisible(false);
            this.menuitem213.setVisible(false);
            this.menuitem312.setVisible(false);
            this.menuitem132.setVisible(false);
            this.menuitem321.setVisible(false);
            this.menuitem231.setVisible(false);
            this.menuitem123.setChecked(false);
            this.menuitem12.setVisible(false);
            this.menuitem21.setVisible(false);
            this.menuitem32.setVisible(false);
            this.menuitem23.setVisible(false);
        }
        else if(cnt_merkmale == 1)
        {
            this.menuitem32.setVisible(true);
            this.menuitem23.setVisible(true);
            if(cnt_zeiteinheiten > cnt_regionaleinheiten)
            {
                this.dim1 = 2;
                this.dim2 = 3;
                this.dim3 = 1;
                this.menuitem23.setChecked(true);
            }
            else
            {
                this.dim1 = 3;
                this.dim2 = 2;
                this.dim3 = 1;
                this.menuitem32.setChecked(true);
            }
            this.menuitem123.setVisible(false);
            this.menuitem213.setVisible(false);
            this.menuitem312.setVisible(false);
            this.menuitem132.setVisible(false);
            this.menuitem321.setVisible(false);
            this.menuitem231.setVisible(false);
            this.menuitem123.setChecked(false);
            this.menuitem12.setVisible(false);
            this.menuitem21.setVisible(false);
            this.menuitem31.setVisible(false);
            this.menuitem13.setVisible(false);
        }
        //-----< all three dimensions have multiple elements >------------------
        else
        {
            this.dim1 = 1;
            this.dim2 = 2;
            this.dim3 = 3;
            this.menuitem123.setVisible(true);
            this.menuitem213.setVisible(true);
            this.menuitem312.setVisible(true);
            this.menuitem132.setVisible(true);
            this.menuitem321.setVisible(true);
            this.menuitem231.setVisible(true);
            this.menuitem123.setChecked(true);
            this.menuitem12.setVisible(false);
            this.menuitem21.setVisible(false);
            this.menuitem31.setVisible(false);
            this.menuitem13.setVisible(false);
            this.menuitem32.setVisible(false);
            this.menuitem23.setVisible(false);
        }
    },

    onLayoutMenuItemClick : function(menuitem)
    {
        this.dim1 = menuitem.dimattributes[0];
        this.dim2 = menuitem.dimattributes[1];
        this.dim3 = menuitem.dimattributes[2];
        this.showResultTable(false);
    }

});
