
function treeInit(treediv,treedata) 
{
   var tree = buildCheckBoxTree(treediv,treedata);

   // checkAll(tree);  // start with all nodes checked
   uncheckAll(tree)  // start with all nodes unchecked

   tree.draw();

   return tree;
}

function readTree(tree)
{
   var retobj = getCheckedStudyIdsFromTree(tree);
   document.treeform.studylist.value = retobj.checkedStudyIds;
   document.treeform.collectionlist.value = retobj.checkedCollIds;
   return true;
}

// Create tree with check boxes
function buildCheckBoxTree( treediv, treedata ) 
{
   // instantiate the tree
   var tree = new YAHOO.widget.TreeView(treediv);

   // add nodes to tree
   for (var i = 0; i < treedata.length; i++)
   {
      if ( treedata[i] )
      {
         var collObj = treedata[i][0];
         var collNode = new YAHOO.widget.TaskNode(collObj, tree.getRoot(), false);

         for (var j = 0; j < treedata[i][1].length; j++)
         {
            if ( treedata[i][1][j] )
            {
               var studyObj = treedata[i][1][j];
               var studyNode = new YAHOO.widget.TaskNode(studyObj, collNode, false);
            }
         }
      }
   }
   return tree;
}

function checkAll(tree) 
{
   var topNodes = tree.getRoot().children;
   for(var i=0; i < topNodes.length; ++i) 
   {
      topNodes[i].check();
   }
}

function uncheckAll(tree) 
{
   var topNodes = tree.getRoot().children;
   for(var i=0; i<topNodes.length; ++i) 
   {
      topNodes[i].uncheck();
   }
}

// Gets the ids of all of the checked studies
function getCheckedStudyIds(nodes) 
{
   var retobj = new Object();
   retobj.checkedStudyIds = [];
   retobj.checkedCollIds = [];

   for( var i = 0; i < nodes.length; i++ ) 
   {
      var n = nodes[i];

      // we're interested in collection nodes that have some but not all children checked
      if (n.checkState > 0) 
      { 
         if (n.checkState == 2)
         {
            // Collection nodes have "cid"; dataset nodes have "id".

            if ( ("cid" in n.data) && (n.data.cid.length > 0) )
            {
               retobj.checkedCollIds.push(n.data.cid);
               // don't need to process child nodes if this is collection 
               // and checkState == 2
               continue; 
            }

            if ( ("id" in n.data) && (n.data.id.length > 0) )   
            {
               retobj.checkedStudyIds.push(n.data.id);
            }
         }

         if (n.hasChildren()) 
         {
            var childretobj = getCheckedStudyIds(n.children);
            var comboIdArray = retobj.checkedStudyIds.concat(childretobj.checkedStudyIds);
            retobj.checkedStudyIds = comboIdArray;
         }
      }
   }
   return retobj;
}

function getCheckedStudyIdsFromTree(tree)
{
   var retobj = getCheckedStudyIds(tree.getRoot().children);
   return retobj;
}

function debugShowChecked(tree)
{
   var retobj = getCheckedStudyIdsFromTree(tree);
   alert(checkedIds);
}



