
function selectSplitter(selMaster,splitChars,defaultValue) {
  // Loop through options, putting them into groups in the groupedOptions object and noting the selectedGroup.
  var selectedGroup = "";
  var currentValue = selMaster.value;
  var i = 0;
  selMaster.groupedOptions = {};
  for (i=0;i<selMaster.options.length;i++) {
    var optionDetails = selMaster.options[i].text.split(splitChars);
    selMaster.options[i].text = (optionDetails[1] || defaultValue);
    if (selMaster.groupedOptions[optionDetails[0]]) {
      selMaster.groupedOptions[optionDetails[0]].push(selMaster.options[i]);
    } else {
      selMaster.groupedOptions[optionDetails[0]] = [selMaster.options[i]];
    }
    if (selMaster.options[i].selected) {
      selectedGroup = optionDetails[0];
    }
  }
  // Create selGrouper select element to hold the groupings
  var selGrouper = document.createElement('select');
  for (i in selMaster.groupedOptions) {
    selGrouper.options[selGrouper.options.length] = new Option(i,i);
    if (selectedGroup == i) {
      selGrouper.options[selGrouper.options.length-1].selected=true;
    }
  }
  // Define function to call when grouper is changed
  selGrouper.onchange = function () {
    var selMaster = this.childSelector;
    // Empty dropdown
    selMaster.options.length = 0;
    for (i=0;i<selMaster.groupedOptions[this.value].length;i++) {
      selMaster.options[selMaster.options.length] = selMaster.groupedOptions[this.value][i];
    }
    if (selMaster.options.length == 1) {
      selMaster.style.display = 'none';
    } else {
      selMaster.style.display = 'block';
    }
  }
  if (selMaster.options.length>0) {
    selGrouper.childSelector = selMaster;
    selMaster.parentNode.insertBefore(selGrouper,selMaster);
    selMaster.options.length = 0;
    selGrouper.onchange();
    selMaster.value = currentValue;
  }
}
