function filterlist(selectobj) {

  //==================================================
  // PARAMETERS
  //==================================================

  // HTML SELECT object
  // For example, set this to document.myform.myselect
  this.selectobj = selectobj;

  // Flags for regexp matching.
  // "i" = ignore case; "" = do not ignore case
  // You can use the set_ignore_case() method to set this
  this.flags = 'i';

  // Which parts of the select list do you want to match?
  this.match_text = true;
  this.match_value = false;

  // You can set the hook variable to a function that
  // is called whenever the select list is filtered.
  // For example:
  // myfilterlist.hook = function() { }

  // Flag for debug alerts
  // Set to true if you are having problems.
  this.show_debug = false;

  //==================================================
  // METHODS
  //==================================================


  //--------------------------------------------------
  this.init = function() {
    // This method initilizes the object.
    // This method is called automatically when you create the object.
    // You should call this again if you alter the selectobj parameter.

    if (!this.selectobj) return this.debug('selectobj not defined');
    if (!this.selectobj.options) return this.debug('selectobj.options not defined');

    // Make a copy of the select list options array
    this.optionscopy = new Array();
    if (this.selectobj && this.selectobj.options) {
      for (var i=0; i < this.selectobj.options.length; i++) {

        // Create a new Option
        this.optionscopy[i] = new Option();

        // Set the text for the Option
        this.optionscopy[i].text = selectobj.options[i].text;

        // Set the value for the Option.
        // If the value wasn't set in the original select list,
        // then use the 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 method resets the select list to the original state.
    // It also unselects all of the options.

    this.set('');
  }


  //--------------------------------------------------
  this.set = function(pattern) {
    // This method removes all of the options from the select list,
    // then adds only the options that match the pattern regexp.
    // It also unselects all of the options.

    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');

    // Clear the select list so nothing is displayed
    this.selectobj.options.length = 0;

    // Set up the regular expression.
    // If there is an error in the regexp,
    // then return without selecting any items.
    try {

      // Initialize the regexp
      regexp = new RegExp(pattern, this.flags);
	  regexp2 = new RegExp("^-", this.flags);

    } catch(e) {

      // There was an error creating the regexp.

      // If the user specified a function hook,
      // call it now, then return
      if (typeof this.hook == 'function') {
        this.hook();
      }

      return;
    }

    // Loop through the entire select list and
    // add the matching items to the select list
	
	    
	for (loop=0; loop < this.optionscopy.length; loop++) {


      // This is the option that we're currently testing
      var option = this.optionscopy[loop];

      // Check if we have a match
      if ((this.match_text && (regexp.test(option.text) || regexp2.test(option.text)))|| (this.match_value && regexp.test(option.value))) {
		 
		// We have a match, so add this option to the select list
        // and increment the index
		this.selectobj.options[index++] = new Option(option.text, option.value, false);
	
      }
	  
    }
	
    // If the user specified a function hook,
    // call it now
    if (typeof this.hook == 'function') {
      this.hook(pattern);
    }

  }
  
  
  //--------------------------------------------------
  this.hook = function(pattern) {
    if (this.selectobj.options.length) {
	  titletext = new String(" ".concat(pattern.slice(1,2).concat(" ] ----")));
	  if (!pattern.length) {
	  	titletext = "ALL] ----";
	  }
	  this.selectobj.options[0].text = "---- Choose a lake [".concat(titletext);
	  this.selectobj.options[0].selected = true;
	}
  }


  //--------------------------------------------------
  this.set_ignore_case = function(value) {
    // This method sets the regexp flags.
    // If value is true, sets the flags to "i".
    // If value is false, sets the flags to "".

    if (value) {
      this.flags = 'i';
    } else {
      this.flags = '';
    }
  }


  //--------------------------------------------------
  this.debug = function(msg) {
    if (this.show_debug) {
      alert('FilterList: ' + msg);
    }
  }


  //==================================================
  // Initialize the object
  //==================================================
  this.init();

}




// Function that repsonds to Flash
function changePage(somewhere) {
	//alert('changePage '+somewhere);
	//var pageLoc = "./?region=" + somewhere;
	//parent.location = pageLoc;
	if (somewhere == "Peace and Athabasca Region") {
		this.document.getElementById('ListOfLakes').innerHTML = region01;
	}
	else if (somewhere == "Beaver River Region") {
		this.document.getElementById('ListOfLakes').innerHTML = region02;
	}
	else if (somewhere == "North Saskatchewan Region") {
		this.document.getElementById('ListOfLakes').innerHTML = region03;
	}
	else if (somewhere == "South Saskatchewan Region") {
		this.document.getElementById('ListOfLakes').innerHTML = region04;
	}
}
// Function that opens a new page for the figures and tables
function opener(lake, section, type) {
	window.open( 'http://sunsite.ualberta.ca/Projects/Alberta-Lakes/library/view_section.php?lake='+lake+'&section='+section+'&type='+type, '', 'width=700, directories=no,location=no,menubar=no,resizable=yes,scrollbars=yes, status=no,toolbar=no' );
}
// Function that opens a new page for the figures and tables
function opener2(name) {
	window.open( 'http://sunsite.ualberta.ca/Projects/Alberta-Lakes/images/characteristics/'+name, '', 'width=700, directories=no,location=no,menubar=no,resizable=yes,scrollbars=yes, status=no,toolbar=no' );
}
// Jump Menu
function jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}
// Set Menu In
function menuIn() {
	document.cookie = "AlbertaLakesMenu=true; path=/;";
	window.location.reload( false );
}
// Set Menu Out
function menuOut() {
	var c = new Date();
	document.cookie = "AlbertaLakesMenu=1;expires="+c.toGMTString()+";"+"path=/;";
	window.location.reload( false );
}
