code: function(e) {
  			var me = this;
  			var opts = me.options;
  			var type = e.type === 'mouseup' ? 'click' : e.type;
  			var changed = false;
  
  			if (type === 'mousemove') {
  				if (!opts.onHover) {
  					return;
  				}
  			} else if (type === 'click') {
  				if (!opts.onClick) {
  					return;
  				}
  			} else {
  				return;
  			}
  
  			var position = helpers.getRelativePosition(e, me.chart.chart),
  				x = position.x,
  				y = position.y;
  
  			if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {
  				// See if we are touching one of the dataset boxes
  				var lh = me.legendHitBoxes;
  				for (var i = 0; i < lh.length; ++i) {
  					var hitBox = lh[i];
  
  					if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {
  						// Touching an element
  						if (type === 'click') {
  							opts.onClick.call(me, e, me.legendItems[i]);
  							changed = true;
  							break;
  						} else if (type === 'mousemove') {
  							opts.onHover.call(me, e, me.legendItems[i]);
  							changed = true;
  							break;
  						}
  					}
  				}
  			}
  
  			return changed;
  		}
docs: Handle an event
  @private
  @param e {Event} the event to handle
  @return {Boolean} true if a change occured