1 Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) {
5 var e = Function._validateParams(arguments, [
6 {name: "element", domElement: true}
7 ]);
8 if (e) throw e;
9 if ((element.window && (element.window === element)) || element.nodeType === 9) return new Sys.UI.Point(0,0);
10 var offsetX = 0;
11 var offsetY = 0;
12 var previous = null;
13 for (var parent = element; parent; previous = parent, parent = parent.offsetParent) {
14 var tagName = parent.tagName;
15 offsetX += parent.offsetLeft || 0;
16 offsetY += parent.offsetTop || 0;
17 }
18 var elementPosition = element.style.position;
19 var elementPositioned = elementPosition && (elementPosition !== "static");
20 for (var parent = element.parentNode; parent; parent = parent.parentNode) {
21 tagName = parent.tagName;
22 if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop) &&
23 ((elementPositioned &&
24 ((parent.style.overflow === "scroll") || (parent.style.overflow === "auto"))))) {
25 offsetX -= (parent.scrollLeft || 0);
26 offsetY -= (parent.scrollTop || 0);
27 }
28 var parentPosition = (parent && parent.style) ? parent.style.position : null;
29 elementPositioned = elementPositioned || (parentPosition && (parentPosition !== "static"));
30 }
31 return new Sys.UI.Point(offsetX, offsetY);
32 }