function catListClearSelected( list ) {
  for ( var i = list.length - 1; i >= 0; i-- ) {
    if ( list.options[ i ].selected ) { list.options[i].selected = 0; }
  }
}

function catListCompare( list, l, row ) {
  var s = list.options[row].text.toLowerCase();
  if ( s == l ) { return 0; }
  if ( l < s ) { return -1; }
  return 1;
}

function catListAdd( listFrom, listTo, n ) {
  var length = listTo.length;
  var l = listFrom.options[n].text.toLowerCase();
  listTo.length++;
  for ( var i = 1; i < length; i++ ) {
    var r = catListCompare( listTo, l, i );
    if ( r <= 0 ) {
      for ( var j = length; j > i; j-- ) {
        listTo.options[j].text = listTo.options[j - 1].text;
        listTo.options[j].value = listTo.options[j - 1].value;
        listTo.options[j].selected = listTo.options[j - 1].selected;
      }
      break;
    }
  }
  listTo.options[i].text = listFrom.options[n].text;
  listTo.options[i].value = listFrom.options[n].value;
  listTo.options[i].selected=1;
}

function catListMove( listFrom, listTo ) {
  catListClearSelected( listTo );
  for ( var i = listFrom.length - 1; i > 0; i-- ) {
    if ( listFrom.options[ i ].selected ) {
      catListAdd( listFrom, listTo, i );
      listFrom.options[i] = null;
    }
  }
}

function catListUpdate( listDeny, listPost ) {
  var s = '';
  listPost.value = s;
  for ( var i = 1; i < listDeny.length; i++ ) {
    listPost.value += s + listDeny.options[ i ].value;
    s = ',';
  }
}

