﻿///<reference path="../../Lib/Extjs_Intellisense.js" />

Ext.namespace('LUL');

LUL.FolderTree = Ext.extend(Ext.tree.TreePanel, {
    width: 200,
    region: 'west',

    rootVisible: false,

    root: {
        nodeType: 'async',
        text: 'Mappar',
        draggable: false,
        id: '0',
        expanded: true
    },

    /*constructor: function(c) {
    LUL.FolderTree.superclass.constructor.call(this, Ext.apply(c, {
    tbar: new Ext.Toolbar()            
    }));
    },*/

    loader: new Ext.tree.TreeLoader({
        url: dataManager.fileBrowserFolders,
        preloadChildren: true
    }),

    initComponent: function() {
        LUL.FolderTree.superclass.initComponent.call(this);

        this.addEvents(
            'folderSelected'
        );

        this.loader.baseParams = { panelPath: this.panelPath, type: this.type };

        //this.getSelectionModel().select(this.root);
        //this.getLoader().baseParams = { property: this.module.property.id };   
        this.loader.on('load', function(loader, node, response) {
            // första laddning?
            if (node == this.root) {
                this.getSelectionModel().select(this.root.firstChild);
                this.fireEvent('folderSelected', this.root.firstChild);
            }
        }, this);

        this.on('click', this.onFolderClick, this);
    },

    /*onRender: function(ct, position) {
    LUL.FolderTree.superclass.onRender.call(this, ct, position);     
        
    var newConfig = { text: 'Ny mapp', icon: 'Modules/Common/Images/newfolder.gif', iconCls: 'addIcon' };
    if (loginModule.isAdmin()) {
    newConfig = {    
    text: 'Ny mapp',
    icon: 'Modules/Common/Images/newfolder.gif', 
    iconCls: 'addIcon',
    //handler: this.onNewFolderButton,
    menu: new Ext.menu.Menu({
    items: [
    {text: 'Fastighetsmapp', handler: this.onNewFolderButton, scope: this, iconCls: 'propertyFolderIcon' },
    {text: 'Övergripande mapp', handler: this.onNewSystemFolderButton, scope: this, iconCls: 'normalFolderIcon', disabled: true }
    ]
    })
    };
    }
                             
    this.newFolderButton = this.getTopToolbar().addButton(newConfig);
    this.deleteFolderButton = this.getTopToolbar().addButton({ text: 'Ta bort', icon: 'Modules/Common/Images/deletefolder.gif', iconCls: 'addIcon' });
        
    //this.newFolderButton.on('click', this.onNewFolderButton, this);
    this.deleteFolderButton.on('click', this.onDeleteFolderButton, this);        
    this.deleteFolderButton.disable();
    },
    
    onBeforeShowEdit: function() {
    var property = this.editor.editNode.attributes.property;
    var allowed = loginModule.editAllowed(property, FILE_MODULE);
    if (allowed && this.editor.editNode.id != '0') return this.fireEvent('beforeedit', this.editor.editNode); 
    return false;        
    },
    
    // efter redigering av mapps titel
    onEditComplete: function(editor, value, startValue) {
    if (value != startValue) {
    LVN.Ajax.edit(
    'Modules/FileModule/EditFolder.aspx', // url
    'id=' + editor.editNode.id + '&field=title&value=' + value + '&type=varchar&table=folder' // params
    );          
    }
    },*/

    onFolderClick: function(node) {
        // ladda barn när noden markeras
        this.fireEvent('folderSelected', node);
    } /*,
    
    // skapar fastighetskopplad mapp
    onNewFolderButton: function() {    
        this.createFolder(false);
    },
    
    // skapa mapp som inte är fastighetskopplad
    onNewSystemFolderButton: function() {
        this.createFolder(true);
    },
    
    // lägger in en ny mapp under markerad mapp i trädet
    // om markerad mapp inte är laddad laddas den först
    createFolder: function(isSystemFolder) {
        var scope = this;    
        var sel = this.getSelectionModel().getSelectedNode(); 
        
        // skapar mapp
        function create() {   
            // får bara skapa systemmapp i annan systemmapp
            if (isSystemFolder && sel.attributes.property != 0) return;
            // spara under vilken nod den nya mappen ska hamna
            // själva mappen skapas först efter att den sparats i databasen
            scope.newFolderParent = sel;            
            scope.waitingForSave = true;      
            scope.fireEvent('createfolder', { id: sel.id, systemFolder: isSystemFolder });
        }
    
        // ingen ny mapp om vi håller på att spara annat
        if (!this.waitingForSave) {           
            // lägg in ny mapp i trädet under markerad mapp
            if (sel.loaded) {
                create();
            } else {
                // expandera mapp om inte laddad (så den laddas)
                function expanded(node) {                
                    sel.un('expand', expanded);
                    create();                    
                }            
                sel.on('expand', expanded);
                sel.expand();
            }
        }
    },

    onDeleteFolderButton: function() {                
        var sel = this.getSelectionModel().getSelectedNode();        
        if (sel && !sel.isRoot) {
            var property = sel.attributes.property;
            var allowed = loginModule.editAllowed(property, FILE_MODULE);
            if (allowed) this.fireEvent('deletefolder', { id: sel.id, property: property, parentId: sel.parentNode.id });
        }
    },
    
    getSelectedFolderId: function() {
        return this.getSelectionModel().getSelectedNode().id;
    },
    
    removeNode: function(id) {
        var node = this.getNodeById( id );
        node.parentNode.removeChild( node );
    },
    
    // när ny mapp sparat ska vi lägga in den i trädet
    newFolderSaved: function(id, title, property) {
        if (this.newFolderParent) {
            var config = {
                id: id,
                text: title,
                property: property
            };
            if (property > 0) {
                config.iconCls = 'propertyFolder'; 
                config.cls = 'propertyNode';
            }
            var newFolder = new Ext.tree.AsyncTreeNode(config);
            this.newFolderParent.appendChild(newFolder);
            this.newFolderParent = null;
            this.waitingForSave = false;
            
            newFolder.select();
        }       
    },
    
    // ny mapp kunde inte sparas, lägg inte in i trädet
    cancelNewFolder: function() {
        if (this.newFolderParent) {
            this.newFolderParent = null;
            this.waitingForSave = false;
        }
    }*/
});
