docs: function (overrideEventType, ev) {
  	var events = domData.get.call(this, dataName);
  	var eventTypeEvents = events[overrideEventType || ev.type];
  	// contains the element and the handlers to call back
  	var matches = [];
  
  	if(eventTypeEvents) {
  		var selectorDelegates = [];
  		// convert eventTypeEvents from an object to
  		// an array.
  		each(eventTypeEvents, function(delegates){
  			selectorDelegates.push(delegates);
  		});
  
  		// walk from the target to the delegate element
  		// checking each selector
  		var cur = ev.target;
  		do {
  			selectorDelegates.forEach(function(delegates){
  				if (domMatches.call(cur, delegates[0].selector )) {
  					matches.push({
  						target: cur,
  						delegates: delegates
  					});
  				}
  			});
  			cur = cur.parentNode;
  		} while (cur && cur !== ev.currentTarget);
  	}
  
  	// make sure `cancelBubble` is  set
  	var oldStopProp = ev.stopPropagation;
  	ev.stopPropagation = function() {
  		oldStopProp.apply(this, arguments);
  		this.cancelBubble = true;
  	};
  
  	for(var i = 0; i < matches.length; i++) {
  		var match = matches[i];
  		var delegates = match.delegates;
  
  		for(var d = 0, dLen = delegates.length; d < dLen; d++) {
  			if (delegates[d].handler.call(match.target, ev) === false) {
  				return false;
  			}
  			if (ev.cancelBubble) {
  				return;
  			}
  		}
  	}
  }