function isEventSupported(eventName, element) {

    element = element || document.createElement(TAGNAMES[eventName] || 'div');
    eventName = 'on' + eventName;
    
    var isSupported = (eventName in element);
    
    if (!isSupported) {
      // if it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
      if (!element.setAttribute) {
        element = document.createElement('div');
      }
      if (element.setAttribute && element.removeAttribute) {
        element.setAttribute(eventName, '');
        isSupported = typeof element[eventName] == 'function';

        // if property was created, "remove it" (by setting value to `undefined`)
        if (typeof element[eventName] != 'undefined') {
          element[eventName] = undef;
        }
        element.removeAttribute(eventName);
      }
    }
    
    element = null;
    return isSupported;
  }


Mouse events:

click: true
dblclick: true
mousedown: true
mouseup: true
mouseover: true
mousemove: true
mouseout: true
mousewheel: true

Key events:

keypress: true
keydown: true
keyup: true

HTML events

load: true
unload: true
abort: true
error: true

View events

resize: true
orientationchange: false
scroll: true

Form events:

submit: true
reset: true

Form controls' events:

select: true
change: true

Activation events:

focus: true
blur: true

MSHTML DOM events:

cut: true
copy: true
paste: true
beforecut: true
beforecopy: true
beforepaste: true
afterupdate: false
beforeupdate: false
cellchange: false
dataavailable: false
datasetchanged: false
datasetcomplete: false
errorupdate: false
rowenter: false
rowexit: false
rowsdelete: false
drag: true
dragstart: true
dragenter: true
dragover: true
dragleave: true
dragend: true
drop: true
selectstart: true
mouseenter: true
mouseleave: true
activate: false
beforeactivate: false
deactivate: false
beforedeactivate: false
focusin: false
focusout: false
stop: false
readystatechange: false
beforeprint: true
afterprint: true
beforeunload: true

Unexistent (most likely) events:

click2: false
foobarbaz: false

Unexistent in Opera <=10a

contextmenu: true

iPhone touch/gesture events

touchstart: false
touchend: false
touchmove: false
touchcancel: false

gesturestart: false
gesturechange: false
gestureend: false

HTML5 events

hashchange: true
online: true
offline: true
message: true
undo: false
redo: false
storage: true
popstate: true
canplay: true
seeking: true
seekend: false

Proprietary

pageshow: true
pagehide: true
onbeforescriptexecute: false
onafterscriptexecute: false