﻿// TREEVIEW CUSTOM CODE : Written By Aztec Systems : authors: Ramya Visveswaran & Mitchell Stokely, USA
//============================TreeViewNode Refresh Code================================
function RefreshTreeViewNode()
{

    var treeViewNode = TreeView1.get_selectedNode();
    if(treeViewNode != undefined && treeViewNode != null)
    {
        TreeView1.beginUpdate();
        var parentNode = treeViewNode.get_parentNode();
        if(parentNode != undefined && parentNode != null)
        {
            // ASI: addition - Forces IE6 to postback - fixes update JavaScript bug
            if (BrowserDetect.browser == "Explorer" && BrowserDetect.version <= 6)
            {
                var childNodes = parentNode.Nodes();
                for(var i = childNodes.length-1; i >= 0; i--)
                {
                    childNodes[i].Remove();
                }
                
                parentNode.CollapseAll();
                parentNode.set_expanded(false);
                TreeView1.endUpdate();
                
                
            }
            else
            {
                var childNodes = parentNode.Nodes();
                for(var i = childNodes.length-1; i >= 0; i--)
                {
                    childNodes[i].Remove();
                }
                
                parentNode.CollapseAll();
                parentNode.FetchContent();
                parentNode.set_expanded(true);
                TreeView1.endUpdate();
            }
        }
    }

}
function RefreshTreeViewNodeOnAdd()
{
    var treeViewNode = TreeView1.get_selectedNode();
    if(treeViewNode != undefined && treeViewNode != null)
    {
    
            // ASI: addition - Forces IE6 to postback - fixes update JavaScript bug
            if (BrowserDetect.browser == "Explorer" && BrowserDetect.version <= 6)
            {
                
                treeViewNode.CollapseAll();
                TreeView1.beginUpdate();
                var childNodes = treeViewNode.Nodes();
                for(var i = childNodes.length-1; i >= 0; i--)
                {
                    childNodes[i].Remove();
                }

                treeViewNode.set_expanded(false);
                //treeViewNode.ExpandAll();
                TreeView1.endUpdate();
                
                
            }
            else
            {
                treeViewNode.CollapseAll();
                TreeView1.beginUpdate();
                var childNodes = treeViewNode.Nodes();
                for(var i = childNodes.length-1; i >= 0; i--)
                {
                    childNodes[i].Remove();
                }
                treeViewNode.FetchContent();
                treeViewNode.set_expanded(true);
                treeViewNode.ExpandAll();
                TreeView1.endUpdate();
            }
            
    }
}

// MS - This version is only implemented in the Admin/Folders area and fixes the problem
// where after adding a node, the client can refetch the node list, but was not selecting the new node added.
// To implement this in all trees, simply copy the code below and add to the method above.
// Note: Cross-browser test this first, as requires support for setTimer and a timout value in all browsers.
var universalSelectedNode = null;
function RefreshTreeViewNodeOnAdd2(selectedNodeIsParent)
{
    //var theID = 0;
    //if (ID != undefined)
    //{
        //theID = parseInt(ID);
    //}
    //alert(theID);
    
    if (selectedNodeIsParent == 1)
    {
        var tempViewNode = TreeView1.get_selectedNode();
        var treeViewNode = tempViewNode.get_parentNode();
        universalSelectedNode = treeViewNode;
    }
    else
    {
        var treeViewNode = TreeView1.get_selectedNode();
    }
    
    
    if(treeViewNode != undefined && treeViewNode != null)
    {
    
            // ASI: addition - Forces IE6 to postback - fixes update JavaScript bug
            if (BrowserDetect.browser == "Explorer" && BrowserDetect.version <= 6)
            {
                
                treeViewNode.CollapseAll();
                TreeView1.beginUpdate();
                var childNodes = treeViewNode.Nodes();
                for(var i = childNodes.length-1; i >= 0; i--)
                {
                    childNodes[i].Remove();
                }

                treeViewNode.set_expanded(false);
                //treeViewNode.ExpandAll();
                TreeView1.endUpdate();
                
                
            }
            else
            {
                     
                //treeViewNode.set_autoPostBackOnExpand(true);
                treeViewNode.CollapseAll();
                TreeView1.beginUpdate();
                var childNodes = treeViewNode.Nodes();
                //var theID = 0;
                //theID = treeViewNode.get_id();
                for(var i = childNodes.length-1; i >= 0; i--)
                {
                    //theID = childNodes[0].get_id();
                    childNodes[i].Remove();
                    //alert('ID1: ' + childNodes[i].get_id());
                    //childNodes[i].select();
                }
                //treeViewNode.Nodes().clear();
                treeViewNode.FetchContent();
                treeViewNode.set_expanded(true);
                treeViewNode.ExpandAll();
                //treeViewNode.expand();
                //treeViewNode.SaveState(); 
                //TreeView1.Render();
                
                if (selectedNodeIsParent == 1)
                {
                    window.setTimeout('waitForTreeViewResponse(1);', 1000);
                }
                else
                {
                    window.setTimeout('waitForTreeViewResponse(0);', 1000);
                }

                TreeView1.endUpdate();

                //TreeView1.selectNodeById(theID);
                        
                //treeViewNode.CollapseAll();
                //TreeView1.beginUpdate();
                // Now figure out what node was added to the parent and select it
                //var childNodes2 = treeViewNode.Nodes();
                //alert('ID1: ' + childNodes[1].get_id());
                //for(var j = childNodes2.length-1; j >= 0; j--)
                //{
                    //alert('ID1: ' + childNodes2[j].get_id());
                //}
                //alert('ID1: ' + treeViewNode.get_id());
                //treeViewNode.childNodes[0].select();
                //treeViewNode.set_expanded(true);
                //treeViewNode.ExpandAll();
                //TreeView1.endUpdate();
                
            }
            
    }
}
function waitForTreeViewResponse(selectedNodeIsParent)
{

    //alert(universalSelectedNode.get_id());

    if (selectedNodeIsParent == 1)
    {
        var treeViewNode = universalSelectedNode;
    }
    else
    {
        var treeViewNode = TreeView1.get_selectedNode();   
    }
   
        
        if(treeViewNode != undefined && treeViewNode != null)
        {
       
            treeViewNode.set_autoPostBackOnSelect(false);
        
            // ASI: addition - Forces IE6 to postback - fixes update JavaScript bug
            if (BrowserDetect.browser == "Explorer" && BrowserDetect.version <= 6)
            {
                         
            }
            else
            {
                //TreeView1.beginUpdate();
                var childNodes = treeViewNode.Nodes();
                var theID = 0;
                var theIndex = 0;
                var tempID = 0;
                for(var i = 0; i < childNodes.length; i++)
                {
                    //childNodes[i].set_text(childNodes[i].get_id());
                    //tempID = childNodes[i].get_id();
                    
                    // Selects the added folder node in the tree based on the assumption the object id will always be larger than all other nodes. MS
                    if (parseInt(theID) < parseInt(childNodes[i].get_id()))
                    {
                        theID = childNodes[i].get_id();
                        theIndex = i;
                    }
                }
                if (theID != 0)
                {
                    childNodes[theIndex].set_autoPostBackOnSelect(false);
                    childNodes[theIndex].select();
                    treeViewNode.set_autoPostBackOnSelect(true);
                    childNodes[theIndex].set_autoPostBackOnSelect(true);


                }
            }
        }

}




function TreeView1_onNodeBeforeMove(sender, eventArgs)
{
  var targetNode = eventArgs.get_newParentNode(); 
  var sourceNode = eventArgs.get_node(); 
  
  // Fetch all the child nodes only if the node is not expanded
  if(targetNode != undefined && targetNode != null && targetNode && targetNode.get_expanded() == false)
  {
          TreeView1.beginUpdate();
          var childNodes = targetNode.Nodes();
          if(childNodes != undefined && childNodes != null)
          {
              for(var i = childNodes.length-1; i >= 0; i--)
              {
                 childNodes[i].Remove();
              }
          }
          targetNode.FetchContent();
          targetNode.set_expanded(true);
          TreeView1.endUpdate();
  }
  
  if(targetNode != undefined && targetNode != null && sourceNode != undefined && sourceNode != null)
  {
      var result = confirm ("Are you sure you want to move folder " + sourceNode.get_text() + " into " +  targetNode.get_text());
      
      if(result == true)
      {
        return true;
      }
      else
      {
        eventArgs.set_cancel(true);
      }
  }
}

function TreeView1_MoveNodeConfirmation(MovedNode,ParentNode)
{

//alert(MovedNode.GetProperty("AutoPostBackOnSelect"));
//return false;

  var targetNode = ParentNode; 
  var sourceNode = MovedNode; 
  
  // Fetch all the child nodes only if the node is not expanded
  if(targetNode != undefined && targetNode != null && targetNode && targetNode.get_expanded() == false)
  {
          TreeView1.beginUpdate();
          var childNodes = targetNode.Nodes();
          if(childNodes != undefined && childNodes != null)
          {
              for(var i = childNodes.length-1; i >= 0; i--)
              {
                 childNodes[i].Remove();
              }
          }
          targetNode.FetchContent();
          targetNode.set_expanded(true);
          TreeView1.endUpdate();
  }
  
  if(targetNode != undefined && targetNode != null && sourceNode != undefined && sourceNode != null)
  {
      var result = confirm ("Are you sure you want to move folder " + sourceNode.get_text() + " into " +  targetNode.get_text());
      
      if(result == true)
      {
        return true;
      }
      else
      {
        return false;
      }
  }

}

// This was sent by ComponetArt to try and refresh nodes after clienty-side callbacks. This is supposed to refresh the tree */
/*
function tvCC(sender, e){
alert(1);
    sender.render();
}
*/
 
    	
/*
function RefreshTreeViewNode()
{
    var treeViewNode = TreeView1.get_selectedNode();
    if(treeViewNode != undefined && treeViewNode != null)
    {
        var parentNode = treeViewNode.get_parentNode();
        if(parentNode != undefined && parentNode != null)
        {
            parentNode.CollapseAll();
            var childNodes = parentNode.Nodes();
            for(var i = childNodes.length-1; i >= 0; i--)
            {
                childNodes[i].Remove();
            }
            var str=TreeView1.ControlId;
            str = str.replace(/\$/g,"_"); // global replace everytime a match is found
            TreeView1.Render(str);
            parentNode.CollapseAll();
            parentNode.ExpandAll();
        }
    }
}
function RefreshTreeViewNodeOnAdd()
{
    var treeViewNode = TreeView1.get_selectedNode();
    if(treeViewNode != undefined && treeViewNode != null)
    {
        treeViewNode.CollapseAll();
        var childNodes = treeViewNode.Nodes();
        for(var i = childNodes.length-1; i >= 0; i--)
        {
            childNodes[i].Remove();
        }
        var str=TreeView1.ControlId;
        str = str.replace(/\$/g,"_"); // global replace everytime a match is found
        TreeView1.Render(str);
        treeViewNode.CollapseAll();
        treeViewNode.ExpandAll();
    }
}
*/


/*used for testing <ClientEvents>
function test(whichID)
{
alert(whichID);
}
var nodeTemp;
function test2(sender, args)
{
  if (args.get_node().get_expanded())
  {
    args.get_node().collapse();
  }
  else
  {
    nodeTemp = args.get_node();
    setTimeout('delayExpand()', 5000);
  }
}
function delayExpand()
{
  nodeTemp.expand();
}
*/
