﻿namespace('nnet.admin');

nnet.admin.NavigationTree = $j.klass({

    initialize: function(treeData) {
        try {
            if (treeData == null) this.Data = null;
            else {
                this.Data = new TreeData(treeData);
                nnet.admin.onNavigationTreeDataReady.fire();
            }
            this.Tree = null
            this.Node = null
            this.FreshNodeID = 0;
        } catch (e) { logE("admin.NavigationTree.initialize", e); }
    },

    startup: function() {
        try {
            if (this.Data == null) this.loadData(false);
        } catch (e) { logE("sd.NavigationTree.startup", e); }
    },


    loadData: function(render) {
        try {
            if (render) AdminCallback.GetTree(AD.NavigationTree.receiveDataAndRender, OnPageError); // Load tree data
            else AdminCallback.GetTree(AD.NavigationTree.receiveData, OnPageError);
            this.Tree = $find(sVars.AD_NavTreeID); // go when initNavigationTree used
        } catch (e) { logE("admin.NavigationTree.loadData", e); }
    },

    // event handler so not in context.
    initNavigationTree: function(sender) {
        try {
        } catch (e) { logE("admin.NavigationTree.initNavigationTree", e); }
    },

    render: function() {
        try {
            this.Tree = $find(sVars.AD_NavTreeID)
            RenderTree(this.Tree, this.Data)
            document.body.style.cursor = 'default';
            if (this.RefreshNodeID > 0) {
                ShowTreeNode(this.Tree,this.RefreshNodeID);
                this.RefreshNodeID = 0;
            }
            nnet.admin.onNavigationTreeRendered.fire();
        } catch (e) { logE("admin.NavigationTree.render", e); }
    },

    refresh: function() {
        try {
            document.body.style.cursor = 'wait';
            if (this.Node != null) this.RefreshNodeID = this.Node.get_value() - 0;
            this.loadData(true);
        } catch (e) { logE("sd.NavigationTree.refresh", e); }
    },


    receiveData: function(treeData) {  // Callback event.
        try {
            AD.NavigationTree.Data = new TreeData(treeData);
            nnet.admin.onNavigationTreeDataReady.fire();
        } catch (e) { logE("admin.NavigationTree.receiveData", e); }
    },

    receiveDataAndRender: function(treeData) {  // Callback event.
        try {
            AD.NavigationTree.Data = new TreeData(treeData);
            nnet.admin.onNavigationTreeDataReady.fire();
            if (AD.NavigationTree.Tree == null) AD.NavigationTree.Tree = $find(sVars.AD_NavTreeID); // go when initNavigationTree used
            AD.NavigationTree.render();
        } catch (e) { logE("admin.NavigationTree.receiveData", e); }
    },

    // event handler so not in context.
    nodeClick: function(node, eventArgs) {
        try {
            var node = eventArgs.get_node();
            AD.NavigationTree.Node = node;
            AD.Mode = node.get_category();
            AD.SiteID = node.get_value() - 0;
            if (!AD.NavigationTree.popup(AD.Mode)) $find(sVars.ContentControlID).ajaxRequest(AD.Mode + ":" + AD.SiteID);
            AD.ContentToolBar.showButtons(AD.Mode);
        } catch (e) { logE("admin.NavigationTree.nodeClick", e); }
    },

    popup: function(mode) {
        try {
            if (mode == "SalesLeadImport") {
                new nnet.PopUpWindow({ url: '/SalesLead/Import', minWidth: 430 }).show();
                return true;
            } else if (mode == "ServiceConfig") {
                new nnet.PopUpWindow({ url: '/Directory/Config/Edit', width: 380 }).show();
                return true;
            } else return false;
        } catch (e) { logE("admin.NavigationTree.popup", e); }
    },


    menuClick: function(sender, eventArgs) {
        try {
            var menu = eventArgs.get_menuItem().get_value();
            AD.NavigationTree.Node = eventArgs.get_node();
            var nodeID = AD.NavigationTree.Node.get_value() - 0;
            if (menu == "Edit") new nnet.PopUpWindow({ url: '/Node/Edit/' + nodeID, minWidth: 430 }).show();
            else if (menu == "Add") new nnet.PopUpWindow({ url: '/Node/New/' + nodeID, minWidth: 430 }).show();
            else if (menu == "Delete") { if (confirm("Do you want to delete the selected Category?")) AdminCallback.DeleteTreeNode(nodeID, AD.NavigationTree.deleteNode_CallBack, OnPageError); }
            eventArgs.get_menuItem().get_menu().hide();
            eventArgs.set_cancel(true);
        } catch (e) { logE("admin.NavigationTree.menuClick", e); }
    },

    deleteNode_CallBack: function(result) {
        try {
            if (result == "") {
                AD.NavigationTree.refresh();
            } else alert(result);
        } catch (e) { logE("admin.NavigationTree.deleteNode_CallBack", e); }
    }
    

});

