// Copied from http://pushpontech.blogspot.com/2007/06/treeview-checkuncheck-all-script.html
function OnTreeClick(evt)
 {
      var src = window.event != window.undefined ? window.event.srcElement : evt.target;
      var isChkBoxClick = (src.tagName.toLowerCase() == "input" && src.type == "checkbox");
      if(isChkBoxClick)
      {
          var parentTable = GetParentByTagName("table", src);
          var nxtSibling = parentTable.nextSibling;
          if(nxtSibling && nxtSibling.nodeType == 1)//check if nxt sibling is not null & is an element node
          {
              if(nxtSibling.tagName.toLowerCase() == "div") //if node has children
              {
                  //check or uncheck children at all levels
                  CheckUncheckChildren(parentTable.nextSibling, src.checked);
              }
          }
          //check or uncheck parents at all levels
          CheckUncheckParents(src, src.checked);
      }
 }

 function CheckUncheckChildren(childContainer, check)
 {
    var childChkBoxes = childContainer.getElementsByTagName("input");
    var childChkBoxCount = childChkBoxes.length;
    for(var i = 0; i<childChkBoxCount; i++)
    {
      childChkBoxes[i].checked = check;
    }
 }

 function CheckUncheckParents(srcChild, check)
 {
     var parentDiv = GetParentByTagName("div", srcChild);
     var parentNodeTable = parentDiv.previousSibling;
     
     if(parentNodeTable)
      {
          var checkUncheckSwitch;
         
          if(check) //checkbox checked
          {
              var isAllSiblingsChecked = AreAllSiblingsChecked(srcChild);
              if(isAllSiblingsChecked)
                  checkUncheckSwitch = true;
              else  
                  checkUncheckSwitch = true; // AANGEPAST! Zou nu korter kunnen...
                  //return; //do not need to check parent if any child is not checked
          }
          else //checkbox unchecked
          {
              checkUncheckSwitch = false;
          }
         
          var inpElemsInParentTable = parentNodeTable.getElementsByTagName("input");
          if(inpElemsInParentTable.length > 0)
          {
              var parentNodeChkBox = inpElemsInParentTable[0];
              if (checkUncheckSwitch) // AANGEPAST!
                parentNodeChkBox.checked = checkUncheckSwitch;
              //do the same recursively
              CheckUncheckParents(parentNodeChkBox, checkUncheckSwitch);
          }
      }
 }

 function AreAllSiblingsChecked(chkBox)
 {
   var parentDiv = GetParentByTagName("div", chkBox);
   var childCount = parentDiv.childNodes.length;
   for(var i=0; i<childCount; i++)
   {
      if(parentDiv.childNodes[i].nodeType == 1) //check if the child node is an element node
      {
          if(parentDiv.childNodes[i].tagName.toLowerCase() == "table")
          {
             var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0];
            //if any of sibling nodes are not checked, return false
            if(!prevChkBox.checked)
            {
              return false;
            }
          }
      }
   }
   return true;
 }

 //utility function to get the container of an element by tagname
 function GetParentByTagName(parentTagName, childElementObj)
 {
    var parent = childElementObj.parentNode;
    while(parent.tagName.toLowerCase() != parentTagName.toLowerCase())
    {
       parent = parent.parentNode;
    }
  return parent;   
 }
 