docs: function (tplCtxt, cfg, options) {
              var binding, bindings, id, type;
  
              /**
               * Array of objects which are either a section (recognizable through its _type property = TYPE_SECTION) or
               * the following structure: {_type: TYPE_BEHAVIOR, behavior: behavior, id: id }
               * @protected
               * @type Array
               */
              this._content = [];
  
              /**
               * Section which contains this section, or null if this section has no parent (either it has not been
               * included in the template section tree yet, or it is the root of a template section tree)
               * @type aria.templates.Section
               */
              this.parent = null;
  
              /**
               * The following variable is set to true when init has been done.
               * @protected
               * @type Boolean
               */
              this._initWidgetsDone = false;
  
              /**
               * HTML content of the section. Maybe null for subsections.
               * @type String
               */
              this.html = null;
  
              /**
               * List of bindings done for this section
               * @protected
               * @type Array
               */
              this._bindings = [];
  
              /**
               * Binding between processing indicator and this section
               * @protected
               * @type Object
               */
              this._processing = null;
  
              /**
               * Overlay id, in case a processing indicator is linked to this section.
               * @protected
               * @type String
               */
              this._overlayId = null;
  
              /**
               * Array of delegateIds
               * @type Array
               */
              this.delegateIds = [];
  
              /**
               * Configuration has gone OK
               * @type Boolean
               */
              this.cfgOk = true;
  
              /**
               * Template context of this section
               * @type aria.templates.TemplateCtxt
               */
              this.tplCtxt = tplCtxt;
  
              /**
               * List of callback for on statements in this section
               * @type Array
               */
              this.delegateCallbacks = [];
  
              /**
               * Specificies that this section is a root section (content of a template, without name of id)
               * @type Boolean
               */
              this.isRoot = (options && options.isRoot === true);
  
              /**
               * Id map of the section. It is only present on root sections and on sections which have been added to the
               * root section. Sub-sections reuse the idMap of their parent section.
               * @type Object
               */
              this.idMap = (options && options.ownIdMap) ? {} : null;
  
              /**
               * The widget configuration, as declared in the template.
               * @protected
               * @type Object
               */
              this._cfg = cfg;
  
              this._normalizeCallbacks();
  
              /**
               * Id for event delegation (used for keyboard navigation and events specified in section configuration)
               * @type String
               */
              this.delegateId = ariaUtilsDelegate.add({
                  fn : this._onDomEvent,
                  scope : this
              });
  
              // stop here for root context
              if (this.isRoot) {
                  return;
              }
  
              // normalize configuration
              this.cfgOk = ariaCoreJsonValidator.validateCfg("aria.templates.CfgBeans." + this.$class + "Cfg", cfg, {
                  msg : this.INVALID_CONFIGURATION,
                  params : [this.tplCtxt.tplClasspath, cfg.id]
              });
              if (!this.cfgOk) {
                  return;
              }
  
              type = cfg.type;
              bindings = cfg.bindRefreshTo;
              id = cfg.id;
  
              var domId;
              if (id) {
                  if (!regexpForId.test(id)) {
                      this.$logError(this.INVALID_SECTION_ID, [this.tplCtxt.tplClasspath, id]);
                      this.cfgOk = false;
                      return;
                  }
  
                  if (id.indexOf('+') > -1) {
                      if (Aria.testMode) {
                          domId = this.tplCtxt.$getAutoId(id);
                      }
                      // From the application's point of view, an id with a '+' inside it is equivalent to no id at all.
                      // We only use the id with a '+' inside it to generate the id used in the DOM
                      delete cfg.id;
                      id = null;
                  }
  
              }
  
              /**
               * DOM type for this section
               * @type String
               */
              this.domType = type;
  
              /**
               * Specify the DomId for the section
               * @type String
               */
              this._domId = domId || (id ? this.tplCtxt.$getId(id) : this._createDynamicId());
  
              /**
               * Id of the section
               * @type String
               */
              this.id = id || "_gen_" + this._domId;
  
              /**
               * Whether waiAria should be activated or not
               * @type Boolean
               */
              this.waiAria = cfg.waiAria;
  
              /**
               * When waiAria is activated and processingLabel is defined, specifies the interval at which this label is read
               * @type Number
               */
              this.waiAriaProcessingLabelReadInterval = cfg.waiAriaProcessingLabelReadInterval;
  
              /**
              When waiAria is activated and processingLabel is defined, specifies if this label should be read once first (without having to wait for the first interval occurrence).
               * @type Boolean
               */
              this.waiAriaProcessingLabelReadOnceFirst = cfg.waiAriaProcessingLabelReadOnceFirst;
  
              /**
               * Configuration for keyboard shortcuts
               * @type Object
               */
              this.keyMap = cfg.keyMap;
  
              /**
               * Configuration for table navigation
               * @type Object
               */
              this.tableNav = cfg.tableNav;
  
              /**
               * Processing label of this section
               * @type String
               */
              this.processingLabel = cfg.processingLabel;
  
              /**
               * Don't change the processing indicator. Flag to avoid updating the datamodel more than once
               * @type Boolean
               * @private
               */
              this.__skipProcessingChange = false;
  
              /**
               * Macro to use when refreshing the section.
               * @type aria.templates.CfgBeans:MacroCfg
               */
              this.macro = cfg.macro ? tplCtxt.checkMacro(cfg.macro) : null;
  
              /**
               * SectionWrapper object
               * @type aria.templates.SectionWrapper
               */
              this.wrapper = null;
  
              // register binding on this section
              for (var i = 0; binding = bindings[i]; i++) {
                  this.registerBinding(binding, this._notifyDataChange);
              }
  
              // register binding to the processing indicator
              this.registerProcessing(cfg.bindProcessingTo);
  
              /**
               * TODOC
               * @type Object
               * @protected
               */
              this._refreshMgrInfo = null;
  
              /**
               * Html attributes of the section
               * @type aria.templates.CfgBeans:HtmlAttribute
               */
              this.attributes = cfg.attributes;
  
              /**
               * Attributes binding configuration
               * @type aria.templates.CfgBeans:BindingConfiguration
               */
              this._attributesBinding = null;
  
              /**
               * Listener added to the data model bound to the section attributes
               * @type aria.core.CfgBeans:Callback
               */
              this._attributesChangeListener = null;
  
              // register binding for attributes
              var attributeBind = (cfg.bind && cfg.bind.attributes) ? cfg.bind.attributes : null;
              this._attributesBinding = attributeBind;
              if (attributeBind) {
                  this.attributes = this.__json.copy(attributeBind.inside[attributeBind.to]);
                  this._attributesChangeListener = this.registerBinding(attributeBind, this._notifyAttributeChange);
              }
  
              // register binding for animation
              var animationBind = (cfg.bind && cfg.bind.animation) ? cfg.bind.animation : null;
              if (animationBind) {
                  cfg.animation = animationBind.inside[animationBind.to];
                  this._animationChangeListener = this.registerBinding(animationBind,this._notifyAnimationChange);
              }
  
          }