text: var DataList = require("./DataList").DataList;
  var DocumentCollection = require("./../datum/DocumentCollection").DocumentCollection;
  var Comments = require("./../comment/Comments").Comments;
  var ContextualizableObject = require("./../locales/ContextualizableObject").ContextualizableObject;
  
  /**
   * @class The SubExperimentDataList allows the user to add additional information
   *  which can be used for experiments using the datum in the datalist.
   *
   * @name  SubExperimentDataList
   * @extends DataList
   * @constructs
   */
  var SubExperimentDataList = function SubExperimentDataList(options) {
    if (!this._fieldDBtype) {
      this._fieldDBtype = "SubExperimentDataList";
    }
    this.debug("Constructing SubExperimentDataList ", options);
    DataList.apply(this, arguments);
  };
  
  SubExperimentDataList.prototype = Object.create(DataList.prototype, /** @lends SubExperimentDataList.prototype */ {
    constructor: {
      value: SubExperimentDataList
    },
  
    // Internal models: used by the parse function
    INTERNAL_MODELS: {
      value: {
        comments: Comments,
        docs: DocumentCollection,
        title: ContextualizableObject,
        description: ContextualizableObject,
        instructions: ContextualizableObject
      }
    },
  
    subexperiments: {
      get: function() {
        if (this.docs && this.docs.length > 0) {
          return this.docs;
        }
        return this.docIds;
      },
      set: function(value) {
        if ((value && value[0] && typeof value[0] === "object") || value.constructor === DocumentCollection) {
          this.docs = value;
        } else {
          this.docIds = value;
          this._subexperiments = value;
        }
      }
    },
  
    trials: {
      get: function() {
        if (this.docs && this.docs.length > 0) {
          return this.docs;
        }
        return this.docIds;
      },
      set: function(value) {
        if ((value && value[0] && typeof value[0] === "object") || value.constructor === DocumentCollection) {
          this.docs = value;
        } else {
          this.docIds = value;
          this._trials = value;
        }
      }
    },
  
    toJSON: {
      value: function(includeEvenEmptyAttributes, removeEmptyAttributes) {
        this.debug("Customizing toJSON ", includeEvenEmptyAttributes, removeEmptyAttributes);
        // Force docIds to be set to current docs
        // this._subexperiments = this.docIds;
        // this._trials = this.docIds;
        var json = DataList.prototype.toJSON.apply(this, arguments);
        this.debug(json);
        if (this.docs && this.docs.toJSON) {
          this.todo("only save trials/subexperiments if there are responses in the trials, or if the experiment started or somethign. ");
          json.results = this.docs.toJSON();
        }
        return json;
      }
    }
  
  });
  exports.SubExperimentDataList = SubExperimentDataList;
  