text: YUI.add('moodle-core-formautosubmit', function (Y, NAME) {
  
  var CSS,
      FORMAUTOSUBMITNAME = 'core-formautosubmit',
      FORMAUTOSUBMIT,
      INITIALIZED = false;
  
  // The CSS selectors we use
  CSS = {
      AUTOSUBMIT : 'autosubmit'
  };
  
  FORMAUTOSUBMIT = function() {
      FORMAUTOSUBMIT.superclass.constructor.apply(this, arguments);
  };
  
  Y.extend(FORMAUTOSUBMIT, Y.Base, {
  
      /**
        * Initialize the module
        */
      initializer : function() {
          // Set up local variables
          var applyto,
              thisselect;
          // We only apply the delegation once
          if (!INITIALIZED) {
              INITIALIZED = true;
              applyto = Y.one('body');
  
              // We don't listen for change events by default as using the keyboard triggers these too.
              applyto.delegate('key', this.process_changes, 'press:13', 'select.' + CSS.AUTOSUBMIT, this);
              applyto.delegate('click', this.process_changes, 'select.' + CSS.AUTOSUBMIT, this);
  
              if (Y.UA.os === 'macintosh' && Y.UA.webkit) {
                  // Macintosh webkit browsers like change events, but non-macintosh webkit browsers don't.
                  applyto.delegate('change', this.process_changes, 'select.' + CSS.AUTOSUBMIT, this);
              }
              if (Y.UA.touchEnabled) {
                  // IOS and Android trigger touch events.
                  applyto.delegate('change', this.process_changes, 'select.' + CSS.AUTOSUBMIT, this);
              }
          }
  
          // Assign this select items 'nothing' value and lastindex (current value)
          if (this.get('selectid')) {
              thisselect = Y.one('select#' + this.get('selectid'));
              if (thisselect) {
                  if (this.get('nothing')) {
                      thisselect.setData('nothing', this.get('nothing'));
                  }
                  thisselect.setData('startindex', thisselect.get('selectedIndex'));
              } else {
              }
          }
      },
  
      /**
        * Check whether the select element was changed
        */
      check_changed : function(e) {
          var select,
              nothing,
              startindex,
              currentindex,
              previousindex;
          select = e.target.ancestor('select.' + CSS.AUTOSUBMIT, true);
          if (!select) {
              return false;
          }
  
          nothing = select.getData('nothing');
          startindex = select.getData('startindex');
          currentindex = select.get('selectedIndex');
  
          previousindex = parseInt(select.getData('previousindex'), 10);
          select.setData('previousindex', currentindex);
          if (!previousindex) {
              previousindex = startindex;
          }
  
          // Check whether the field has changed, and is not the 'nothing' value
          if ((nothing===false || select.get('value') !== nothing)
                  && startindex !== select.get('selectedIndex') && currentindex !== previousindex) {
              return select;
          }
          return false;
      },
  
      /**
        * Process any changes
        */
      process_changes : function(e) {
          var select = this.check_changed(e),
              form;
          if (select) {
              form = select.ancestor('form', true);
              form.submit();
          }
      }
  },
  {
      NAME : FORMAUTOSUBMITNAME,
      ATTRS : {
          selectid : {
              'value' : ''
          },
          nothing : {
              'value' : ''
          },
          ignorechangeevent : {
              'value' : false
          }
      }
  });
  
  M.core = M.core || {};
  M.core.init_formautosubmit = M.core.init_formautosubmit || function(config) {
      return new FORMAUTOSUBMIT(config);
  };
  
  
  }, '@VERSION@', {"requires": ["base", "event-key"]});
  