public static object TreeViewMoveItem(string ParentFolderId, string ItemId)
        {
            try
            {

                int id = int.Parse(ItemId.Substring(1));
                int? pid = (string.IsNullOrEmpty(ParentFolderId)) ? (int?)null : int.Parse(ParentFolderId.Substring(1));

                // skip move to a list
                if (ParentFolderId.StartsWith("s"))
                    return new { Status = false, Message = "TREECANNOTMOVE" };

                if (ItemId.StartsWith("f"))
                {
                    FolderData fd = new Folders().GetFolderById(id);
                    FolderData.TreeNodesRow tn = (FolderData.TreeNodesRow)fd.TreeNodes.Rows[0];

                    if ((tn.ParentFolderId != null) && pid.HasValue)
                        new Folders().MoveFolder(pid, id);
                    else
                        return new { Status = false, Message = "TREECANNOTMOVE" };
                }
                else if (ItemId.StartsWith("s"))
                {
                    Surveys srv = new Surveys();

                    int sid;
                    if (int.TryParse(ItemId.Substring(1), out sid))
                    {
                        srv.SetFolderId(pid, sid);
                    }
                }
                return new { Status = true, Message = string.Empty };
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                if (ex.Message == "DUPLICATEFOLDER")   return new { Status = false, Message = ex.Message };
                throw;
            }
       
        }
        private void GenerateTree()
        {

            if (((PageBase)Page).NSurveyUser.Identity.UserId == -1 ||
            !(((PageBase)Page).NSurveyUser.HasRight(NSurveyRights.AccessSurveyList) ||((PageBase)Page).NSurveyUser.Identity.IsAdmin)  )
            { astvMyTree.Visible = false; return; }

            astvMyTree.Visible = true;
            FolderData folders;
            folders = new Folders().GetTreeNodes(((PageBase)Page).NSurveyUser.Identity.UserId);
            if (folders.TreeNodes.Count == 0) return;
            ASTreeViewDataTableColumnDescriptor descripter = new ASTreeViewDataTableColumnDescriptor("NodeName", "ItemId", "ParentFolderId");
            this.astvMyTree.DataTableRootNodeValue = null;
            this.astvMyTree.DataSourceDescriptor = descripter;
            this.astvMyTree.DataSource = folders.TreeNodes;
            this.astvMyTree.DataBind();
            string sfId = ((PageBase)Page).SelectedFolderId.HasValue ? "f" + ((PageBase)Page).SelectedFolderId.ToString() : "";
            System.Collections.Hashtable h = (System.Collections.Hashtable)Session["treeCtrl"];

            // set customized icons
            astvMyTree.EnableCustomizedNodeIcon = false;

            this.astvMyTree.TraverseTreeNode(this.astvMyTree.RootNode, delegate(ASTreeViewNode node)
            {
                node.Selected = false;
                if (node.NodeValue.StartsWith("f") && node.ParentNode ==this.astvMyTree.RootNode)
                {
                    node.AdditionalAttributes.Add(
                      new KeyValuePair<string, string>(
                          "disableDelFolder"
                             , "true"));
                }
                if (node.ChildNodes.Count == 0 && node.NodeValue.StartsWith("f"))
                {
                    // add empty node to show folder icon and set to closed state
                    node.AppendChild(new ASTreeViewNode(""));
                    node.EnableOpenClose = false;
                    node.OpenState = ASTreeViewNodeOpenState.Close;
                    if (h != null && h.Contains(node.NodeValue))
                        h.Remove(node.NodeValue);
                }
                else if (node.NodeValue.StartsWith("s"))
                {
                    node.AdditionalAttributes.Add(
                        new KeyValuePair<string, string>(
                            "disableAddFolder"
                            , "true"));
                    node.AdditionalAttributes.Add(
                        new KeyValuePair<string, string>(
                            "disableRenFolder"
                            , "true"));
                    //JJ If the Survey is current set it as selected node
                    if (((PageBase)Page).getSurveyId() == int.Parse(node.NodeValue.Substring(1)))
                        node.Selected = true;
                }

                string nv = string.IsNullOrEmpty(node.NodeValue) ? "" : node.NodeValue;

                //  node.EnableSelection = !string.IsNullOrEmpty(nv);

                //JJ Set Folder as selected only if there is no current survey.If there is current survey it is set as selected
                if (((PageBase)Page).getSurveyId() == -1)
                    if (!string.IsNullOrEmpty(nv) && nv == sfId)
                        node.Selected = true;
            
                if (h != null && h[node.NodeValue] != null)
                    node.OpenState = (ASTreeViewNodeOpenState)h[node.NodeValue];
                else node.OpenState = node.ParentNode == astvMyTree.RootNode ? ASTreeViewNodeOpenState.Open : ASTreeViewNodeOpenState.Close;
            });

            if (string.IsNullOrEmpty(sfId))
                this.astvMyTree.RootNode.ChildNodes[0].Selected = true;

            ASTreeViewNode rootNode = this.astvMyTree.RootNode.ChildNodes[0];
            rootNode.EnableDragDrop = false;

            /// if root node is empty we hide it
            if (rootNode.ChildNodes.Count == 1 && string.IsNullOrEmpty(rootNode.ChildNodes[0].NodeValue))
            {
                // add empty node to show folder icon and set to closed state
                rootNode.EnableOpenClose = false;
                rootNode.OpenState = ASTreeViewNodeOpenState.Close;
            }

            if (h == null) StoreOpenCloseState();



        }