Gimme.ext.captureMouseEvents = function() { var elem = this.entities[0]; if (typeof elem.setCapture !== 'undefined') { elem.setCapture(); } else { if (g_capturing) { this.releaseMouseEvents(); } g_capturing = { elem: elem ,reroute: function(e) { e.stopPropagation(); var synthEvent = document.createEvent('MouseEvents'); synthEvent.initMouseEvent( e.type, true, true, window, 1, e.pageX, e.pageY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget ); document.removeEventListener(e.type, g_capturing.reroute, true); syntheticEvent.originalTarget = e.target; elem.dispatchEvent(syntheticEvent); document.addEventListener(e.type, g_capturing.reroute, true); delete syntheticEvent.originalTarget; } } document.addEventListener('mouseover', g_capturing.reroute, true); document.addEventListener('mouseout', g_capturing.reroute, true); document.addEventListener('mousemove', g_capturing.reroute, true); document.addEventListener('mouseup', g_capturing.reroute, true); document.addEventListener('mousedown', g_capturing.reroute, true); document.addEventListener('click', g_capturing.reroute, true); document.addEventListener('dblclick', g_capturing.reroute, true); } }; Gimme.ext.releaseMouseEvents = function() { var elem; if (g_capturing !== null) { elem = g_capturing.elem; if (typeof elem.releaseCapture !== 'undefined') { elem.releaseCapture(); } else { document.removeEventListener('mouseover', g_capturing.reroute, true); document.removeEventListener('mouseout', g_capturing.reroute, true); document.removeEventListener('mousemove', g_capturing.reroute, true); document.removeEventListener('mouseup', g_capturing.reroute, true); document.removeEventListener('mousedown', g_capturing.reroute, true); document.removeEventListener('click', g_capturing.reroute, true); document.removeEventListener('dblclick', g_capturing.reroute, true); } g_capturing.elem = g_capturing.reroute = g_capturing = null; } };