blob: fb1fbcefd2ddf8b8d929595abdeab3a40c3eaa29 [file] [log] [blame]
/*==================================================
* 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();
}
};