Ext.namespace("Itransition.ChartCrafters.MarketWindow.ux");

Itransition.ChartCrafters.MarketWindow.ux.CategoriesPanel = Ext.extend(Ext.Panel, {
    title: 'Categories',
    categories: undefined,
    mwGuid: undefined,

    loadexception: function(callingObject, o, arg, e)
    {
    },
    
    getDataFromAnchor: function(anchor, name)
    {
        name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regexS = "[\\?&#]" + name + "=([^&#]*)";
        var regex = new RegExp(regexS);
        var results = regex.exec(anchor);
        if (results == null)
            return "";
        else
            return results[1];
    },
    
    optimizeSpace: function(text)
    {
        return text.replace(/%20/, " ");
    },

    loadReturnsDataHandler: function(response, options)
    {
        this.fireEvent(
            'addStatistics',
            Ext.util.JSON.decode(response.responseText).Data,
            options.options.description
        );

        this.fireEvent('loadRelatedArticles', Ext.util.JSON.decode(response.responseText).ra);

        Ext.getCmp('main-panel').doLayout();
    },

    failureHandler: function(response)
    {
    },

    clickGridHandler: function(grid, rowIndex)
    {
        var record = grid.getStore().getAt(rowIndex);
        var symbolGuid = record.get('symbolGuid');
        var currentDescription = record.get('description');

        var tab = this.optimizeSpace(this.getDataFromAnchor(location.hash, 'tab'));
        var symbol = this.optimizeSpace(this.getDataFromAnchor(location.hash, 'symbol'));

        if (symbol != symbolGuid) {
            var newAnchor = '#symbol=' + symbolGuid + '&tab=' + tab;
            document.location.replace(newAnchor);
        } else {
            var newAnchor = '#symbol=' + symbolGuid + '&tab=' + tab;
            document.location.replace(newAnchor);
        }
        
        this.fireEvent('openImageTabs', symbolGuid);

        Ext.Ajax.request({
            url: marketWindowHandlerUrl,
            success: this.loadReturnsDataHandler,
            failure: this.failureHandler,
            scope: this,
            params: {
                method: 'GetSymbolData',
                symbolGuid: symbolGuid,
                mwGuid: this.mwGuid
            },
            options: {
                description: currentDescription
            }
        });
    },

    afterExpand: function(panel)
    {
        Ext.getCmp('main-panel').doLayout();

        var symbol = this.optimizeSpace(this.getDataFromAnchor(location.hash, 'symbol'));
        var tab = this.optimizeSpace(this.getDataFromAnchor(location.hash, 'tab'));

        for (var i = 0; i < this.categories.length; i++)
        {
            if (this.categories[i].Name == panel.id)
            {
                if (symbol != "")
                {
                    var foundSymbol = false;
                    for (var j = 0; j < this.categories[i].Symbols.length; j++)
                    {
                        if (this.categories[i].Symbols[j].Guid == symbol)
                        {
                            foundSymbol = true;

                            var newAnchor = '#symbol=' + symbol + '&tab=' + tab;        
                            document.location.replace(newAnchor);

                            panel.getSelectionModel().selectRow(this.categories[i].Symbols[j].Position, false);
                            panel.fireEvent('rowclick', panel, this.categories[i].Symbols[j].Position);
                        }
                    }

                    if (!foundSymbol)
                    {
                        for (var j = 0; j < this.categories[i].Symbols.length; j++)
                        {
                            if (this.categories[i].Symbols[j].Active)
                            {
                                var newAnchor = '#symbol=' + symbol;
                                document.location.replace(newAnchor);

                                panel.getSelectionModel().selectRow(this.categories[i].Symbols[j].Position, false);
                                panel.fireEvent('rowclick', panel, this.categories[i].Symbols[j].Position);
                            }
                        }
                    }
                }
                else
                {
                    for (var j = 0; j < this.categories[i].Symbols.length; j++)
                    {
                        if (this.categories[i].Symbols[j].Active)
                        {
                            var newAnchor = '#symbol=' + symbol;
                            document.location.replace(newAnchor);

                            panel.getSelectionModel().selectRow(this.categories[i].Symbols[j].Position, false);
                            panel.fireEvent('rowclick', panel, this.categories[i].Symbols[j].Position);
                        } 
                    }
                }
            }
        }
        Ext.getCmp('main-panel').doLayout();
    },

    initComponent: function() {
        Itransition.ChartCrafters.MarketWindow.ux.CategoriesPanel.superclass.initComponent.apply(this, arguments);

        this.addEvents("openImageTabs");
        this.addEvents("loadRelatedArticles");
        this.addEvents("addStatistics");
    },

    afterRender: function() {
        Itransition.ChartCrafters.MarketWindow.ux.CategoriesPanel.superclass.afterRender.call(this);

        Ext.get('loading').remove();
        Ext.get('loading-mask').fadeOut({
            remove: true
        });
    },
    
    onRender: function() {
        Itransition.ChartCrafters.MarketWindow.ux.CategoriesPanel.superclass.onRender.apply(this, arguments);
        marketWindowHandlerUrl = 'Handlers/MarketWindow.ashx';

        var categories = this.categories;
        recordsNum = 0;

        for (var i = 0; i < categories.length; i++)
        {
            var currentCategoryName = categories[i].Name;

            var datastore = new Ext.data.SimpleStore({
                fields:
                [
                {
                    name: 'symbolGuid',
                    mapping: 'Guid'
                },
                {
                    name: 'mwGuid',
                    mapping: 'mwGuid'
                },
                {
                    name: 'companyName',
                    mapping: 'Name'
                },
                {
                    name: 'description',
                    mapping: 'Description'
                }
                ]
            });

            datastore.loadData(this.categories[i].Symbols, {
                category: this.categories[i]
            });
            
            var gridPanel;

            //create accordion
            this.add(
            gridPanel = new Ext.grid.GridPanel({
                store: datastore,
                id: currentCategoryName,
                autoScroll: true,
                title: currentCategoryName,
                collapsed: true,
                cls: 'no-column-headers',
                columns: [
                {
                    id: 'description',
                    header: 'description',
                    dataIndex: 'description',
                    sortable: false,
                    hidden: true
                },
                {
                    id: 'symbolGuid',
                    header: 'symbolGuid',
                    dataIndex: 'symbolGuid',
                    sortable: false,
                    hidden: true
                },
                {
                    id: 'mwGuid',
                    header: 'mwGuid',
                    dataIndex: 'mwGuid',
                    sortable: false,
                    hidden: true
                },
                {
                    id: 'name',
                    header: 'Name',
                    dataIndex: 'companyName',
                    sortable: false
                }],
                sm: new Ext.grid.RowSelectionModel({
                    singleSelect: true
                }),
                autoExpandColumn: 'name',
                enableColumnMove: false,
                enableDragDrop: false,
                enableColumnResize: false,
                enableHdMenu: false,
                border: false,
                scope: this
            }));

            gridPanel.on('rowclick', this.clickGridHandler, this);
            gridPanel.on('expand', this.afterExpand, this);
        }
    }
});

Ext.reg('categoriespanel', Itransition.ChartCrafters.MarketWindow.ux.CategoriesPanel);