| /*================================================== |
| * DOM Utility Functions |
| *================================================== |
| */ |
| |
| Timeline.DOM = new Object(); |
| |
| Timeline.DOM.registerEventWithObject = function(elmt, eventName, obj, handler) { |
| Timeline.DOM.registerEvent(elmt, eventName, function(elmt2, evt, target) { |
| return handler.call(obj, elmt2, evt, target); |
| }); |
| }; |
| |
| Timeline.DOM.registerEvent = function(elmt, eventName, handler) { |
| var handler2 = function(evt) { |
| evt = (evt) ? evt : ((event) ? event : null); |
| if (evt) { |
| var target = (evt.target) ? |
| evt.target : ((evt.srcElement) ? evt.srcElement : null);
|
| if (target) {
|
| target = (target.nodeType == 1 || target.nodeType == 9) ? |
| target : target.parentNode;
|
| } |
| |
| return handler(elmt, evt, target); |
| } |
| return true; |
| } |
| |
| if (Timeline.Platform.browser.isIE) { |
| elmt.attachEvent("on" + eventName, handler2); |
| } else { |
| elmt.addEventListener(eventName, handler2, false); |
| } |
| }; |
| |
| Timeline.DOM.getPageCoordinates = function(elmt) { |
| var left = 0; |
| var top = 0; |
| |
| if (elmt.nodeType != 1) { |
| elmt = elmt.parentNode; |
| } |
| |
| while (elmt != null) { |
| left += elmt.offsetLeft; |
| top += elmt.offsetTop; |
| |
| elmt = elmt.offsetParent; |
| } |
| return { left: left, top: top }; |
| }; |
| |
| Timeline.DOM.getEventRelativeCoordinates = function(evt, elmt) { |
| if (Timeline.Platform.browser.isIE) { |
| return { |
| x: evt.offsetX, |
| y: evt.offsetY |
| }; |
| } else { |
| var coords = Timeline.DOM.getPageCoordinates(elmt); |
| return { |
| x: evt.pageX - coords.left, |
| y: evt.pageY - coords.top |
| }; |
| } |
| }; |
| |
| Timeline.DOM.cancelEvent = function(evt) { |
| evt.returnValue = false; |
| evt.cancelBubble = true; |
| if ("preventDefault" in evt) { |
| evt.preventDefault(); |
| } |
| }; |
| |