function addSelectAllButtons(checkboxesFamily) {
   // we assume first fieldset available,
   // but probably needs refinement/parametrization
   var fieldset = document.getElementsByTagName('fieldset')[0];
   var paragraph = document.createElement('p');
   var buttonSelectAll = document.createElement('button');
   buttonSelectAll.setAttribute("type","button");
   buttonSelectAll.setAttribute("onclick","selectAll('" + checkboxesFamily + "')");
   buttonSelectAll.appendChild(document.createTextNode('Select All'));
   var buttonUnselectAll = document.createElement('button');
   buttonUnselectAll.setAttribute("type","button");
   buttonUnselectAll.setAttribute("onclick","unselectAll('" + checkboxesFamily + "')");
   buttonUnselectAll.appendChild(document.createTextNode('Unselect All'));
   var buttonInvertSelection = document.createElement('button');
   buttonInvertSelection.setAttribute("type","button");
   buttonInvertSelection.setAttribute("onclick","invertSelection('" + checkboxesFamily + "')");
   buttonInvertSelection.appendChild(document.createTextNode('Invert selection'));
   paragraph.style.clear='both';
   paragraph.appendChild(buttonSelectAll);
   paragraph.appendChild(buttonUnselectAll);
   paragraph.appendChild(buttonInvertSelection);
   fieldset.appendChild(paragraph);
}

// change: 0 set to unselect, +1 set to select, -1 invert selection
function _changeSelection(checkboxesFamily,change) {
 // we assume first table available,
  // but probably needs refinement/parametrization
  table = document.getElementsByTagName('table')[0];
  fields = table.getElementsByTagName("input");
  for (var i = 0; i < fields.length; i++) {
     var field = fields[i];
     if (field.type=="checkbox" && field.name.substring(0,checkboxesFamily.length+1)==checkboxesFamily + '[') {
       if (change == 0 || (change == -1 && field.checked == true)) {
          field.checked = false;
       } else {
          field.checked = true;
       }
     }
  }

}

function selectAll(checkboxesFamily) {
  _changeSelection(checkboxesFamily,1);
}

function unselectAll(checkboxesFamily) {
  _changeSelection(checkboxesFamily,0);
}

function invertSelection(checkboxesFamily) {
  _changeSelection(checkboxesFamily,-1);
}