function CoSelect (objDOM) {

  this.DOM = objDOM;
  this.data = new Array ();
  this.isChosenID = -1;

  this.load = function (id) {

    this.DOM.innerHTML = "";

    for (i in this.data [id]) {
      textNode = document.createTextNode (this.data [id][i]);

      node = document.createElement ('option');
      node.value = i;
      node.appendChild (textNode);
      if (i == this.isChosenID) { node.selected = true; }

      this.DOM.appendChild (node);

      delete node, textNode;
    }

  },

  this.is_valid = function (id) {
    return (!isNaN (id) && this.data [id] != "undefined");
  },

  this.depend_on = function (objSource) {

    var self = this;

    if (objSource.selectedIndex > 0) self.load (objSource.selectedIndex);

    this.attach (objSource, 'change', function (evt) {
      if (evt.srcElement) index = evt.srcElement.selectedIndex;
      else index = this.selectedIndex;

      if (! self.is_valid (index)) return;

      self.load (index);
    });
  },

  this.attach = function (obj, event, func) {

    if (obj.addEventListener)
      obj.addEventListener (event, func, false);

    else
      obj.attachEvent ('on' + event, func);
  }
}

