  // color to set when a child is selected
  var selectedColor = "#555";
  var unselectedColor = "#999999";

        
  function handleTreeOnLoad(id, prefix) {
    var children = $(id).getElementsBySelector('[type="checkbox"]');
    for (i = 0; i < children.length; i++) {
      if (children[i].checked) {
          if ($(prefix + 'ul' + children[i].value) == null) {
            $(prefix + 'span' + children[i].value).style.color = selectedColor;
            handleParents($(children[i].id).readAttribute('parent'), prefix, true);
          }
      }
    }
  }

  function doit(id, parentId, prefix) {
    checked = $(prefix + 'check' + id).checked;
    $(prefix + 'span' + id).style.color = (checked) ? selectedColor : unselectedColor;

    if ($(prefix + 'ul' + id)) {
      var children = $(prefix + 'ul' + id).getElementsBySelector('[type="checkbox"]');
      for (i = 0; i < children.length; i++) {
          children[i].checked = checked;
          $(prefix + 'span' + children[i].value).style.color = (checked) ? selectedColor : unselectedColor;
      }
    }
    handleParents(parentId, prefix, checked);
  }

  function handleParents(parentId, prefix, checked) {
    if ($(prefix + 'span' + parentId)) {
      if (!checked) {
        samelevel = $(prefix+'ul'+parentId).getElementsBySelector('[type="checkbox"]');
        for (i = 0; i < samelevel.length; i++) {
          if (samelevel[i].checked == true) {
            return;
          }
        }
      }
      
      //      $(prefix + 'span' + parentId).checked = checked;
      $(prefix + 'span' + parentId).style.color = (checked) ? selectedColor : unselectedColor;

      newParentId = $(prefix + 'check' + parentId).getAttribute("parent");
      if(newParentId != null) {
        handleParents(newParentId, prefix, checked);
      }
    }
  }
