code: function( type, options, element, callback ) {
  			if ( Syn.autoDelay ) {
  				this.delay();
  			}
  			var args = Syn.args(options, element, callback),
  				self = this;
  
  
  			//if stack is empty run right away
  			//otherwise ... unshift it
  			this.queue.unshift(function( el, prevented ) {
  
  				if ( typeof this[type] === "function" ) {
  					this.element = args.element || el;
  					this[type](args.options, this.element, function( defaults, el ) {
  						args.callback && args.callback.apply(self, arguments);
  						self.done.apply(self, arguments);
  					});
  				} else {
  					this.result = Syn.trigger(type, args.options, args.element);
  					args.callback && args.callback.call(this, args.element, this.result);
  					return this;
  				}
  			})
  			return this;
  		}
docs: @function then
  <p>
  Then is used to chain a sequence of actions to be run one after the other.
  This is useful when many asynchronous actions need to be performed before some
  final check needs to be made.
  </p>
  <p>The following clicks and types into the <code>id='age'</code> element and then checks that only numeric characters can be entered.</p>
  <h3>Example</h3>
  @codestart
  Syn('click',{},'age')
  .then('type','I am 12',function(){
  equals($('#age').val(),"12")
  })
  @codeend
  If the element argument is undefined, then the last element is used.
  
  @param {String} type The type of event or action to create: "_click", "_dblclick", "_drag", "_type".
  @param {Object} options Optiosn to pass to the event.
  @param {String|HTMLElement} [element] A element's id or an element.  If undefined, defaults to the previous element.
  @param {Function} [callback] A function to callback after the action has run, but before any future chained actions are run.