function SmartSelect() {
   this.fields = new Array();
   this.update = smartSelectUpdate;
   this.clear = smartSelectClear;
}

function smartSelectUpdate(field) {
   var name = field.name;
   var selected = new Array();
   for (var i=0;i < field.options.length;i++) {
      if (field.options[i].selected) {
         selected.push(i);
      }
   }
   if (!this.fields[name]) {
      this.fields[name] = new Array();
      for (var i=0;i < field.options.length;i++) {
         this.fields[name][i] = field.options[i].selected;
      }
      for (var i=0;i < selected.length;i++) {
         this.fields[name][selected[i]] = !this.fields[name][selected[i]];
      }
   }
   /*
   if (field.selectedIndex == 0) {
      for (var i=0;i < field.options.length;i++) {
         field.options[i].selected = false;
         this.fields[name][i] = false;
      }
      return;
   }
   */
   for (var i=0;i < selected.length;i++) {
      this.fields[name][selected[i]] = !this.fields[name][selected[i]];
   }
   for (var i=0;i < this.fields[name].length;i++) {
      field.options[i].selected = this.fields[name][i];
   }
}

function smartSelectClear(field) {
   var name = field.name;
   for (var i=0;i < field.options.length;i++) {
      field.options[i].selected = false;
      if (this.fields[name]) {
         this.fields[name][i] = false;
      }
   }
}
