
function filterlist(selectobj) {


  this.selectobj = selectobj;
  this.flags = 'i';

  this.match_text = true;
  this.match_value = false;

  this.show_debug = false;
  this.init = function() {

    if (!this.selectobj) return this.debug('selectobj not defined');
    if (!this.selectobj.options) return this.debug('selectobj.options not defined');

    
    this.optionscopy = new Array();
    if (this.selectobj && this.selectobj.options) {
      for (var i=0; i < this.selectobj.options.length; i++) {

        
        this.optionscopy[i] = new Option();

        
        this.optionscopy[i].text = selectobj.options[i].text;

        
        if (selectobj.options[i].value) {
          this.optionscopy[i].value = selectobj.options[i].value;
        } else {
          this.optionscopy[i].value = selectobj.options[i].text;
        }

      }
    }
  }

  
  this.reset = function() {

    this.set('');
  }


 
  this.set = function(pattern) {
    

    var loop=0, index=0, regexp, e;

    if (!this.selectobj) return this.debug('selectobj not defined');
    if (!this.selectobj.options) return this.debug('selectobj.options not defined');

    
    this.selectobj.options.length = 0;

    
    try {

     
      regexp = new RegExp(pattern, this.flags);

    } catch(e) {

      
      if (typeof this.hook == 'function') {
        this.hook();
      }

      return;
    }

    
    for (loop=0; loop < this.optionscopy.length; loop++) {

      
      var option = this.optionscopy[loop];

      
      if ((this.match_text && regexp.test(option.text)) ||
          (this.match_value && regexp.test(option.value))) {

        

        this.selectobj.options[index++] =
          new Option(option.text, option.value, false);

      }
    }

    
    if (typeof this.hook == 'function') {
      this.hook();
    }

  }


  
  this.set_ignore_case = function(value) {
    

    if (value) {
      this.flags = 'i';
    } else {
      this.flags = '';
    }
  }


  
  this.debug = function(msg) {
    if (this.show_debug) {
      alert('FilterList: ' + msg);
    }
  }


 
  this.init();

}
