rem: var ownerDocument = dojo.doc; 
add: var ownerDocument = node.ownerDocument; 
context: 	dojo._abs = function(/*HTMLElement*/node, /*boolean?*/includeScroll){		//	summary		//		Gets the absolute position of the passed element based on the		//		document itself.		// FIXME: need to decide in the brave-new-world if we're going to be		// margin-box or border-box.		var ownerDocument = dojo.doc;		var ret = {			x: 0,			y: 0		};		// targetBoxType == "border-box"		var db = dojo.body();		if(dojo.isIE){			with(node.getBoundingClientRect()){				ret.x = left-_d_off;				ret.y = top-_d_off;			}		}else if(ownerDocument["getBoxObjectFor"]){			// mozilla			var bo = ownerDocument.getBoxObjectFor(node);			ret.x = bo.x - _sumAncestorProperties(node, "scrollLeft");			ret.y = bo.y - _sumAncestorProperties(node, "scrollTop");		}else{			if(node["offsetParent"]){				var endNode;				// in Safari, if the node is an absolutely positioned child of				// the body and the body has a margin the offset of the child				// and the body contain the body's margins, so we need to end				// at the body				if(	(dojo.isSafari) &&					(node.style.getPropertyValue("position") == "absolute") &&					(node.parentNode == db)){					endNode = db;				}else{					endNode = db.parentNode;				}				if(node.parentNode != db){					var nd = node;					if(dojo.isOpera){ nd = db; }					ret.x -= _sumAncestorProperties(nd, "scrollLeft");					ret.y -= _sumAncestorProperties(nd, "scrollTop");				}				var curnode = node;				do{					var n = curnode["offsetLeft"];					//FIXME: ugly hack to workaround the submenu in 					//popupmenu2 does not shown up correctly in opera. 					//Someone have a better workaround?					if(!dojo.isOpera || n>0){						ret.x += isNaN(n) ? 0 : n;					}					var m = curnode["offsetTop"];					ret.y += isNaN(m) ? 0 : m;					curnode = curnode.offsetParent;				}while((curnode != endNode)&&(curnode != null));			}else if(node["x"]&&node["y"]){				ret.x += isNaN(node.x) ? 0 : node.x;				ret.y += isNaN(node.y) ? 0 : node.y;			}		}		// account for document scrolling!		if(includeScroll){			var scroll = dojo._docScroll();			ret.y += scroll.y;			ret.x += scroll.x;		}		/*		// FIXME		var _getMarginExtents = function(node, s){			var px = _getPixelizer(node);			return { 				w: px(s.marginLeft) + px(s.marginRight),				h: px(s.marginTop) + px(s.marginBottom)			};		}		var _getMarginBox = function(node, computedStyle){			var mb = _getMarginExtents(node, computedStyle);			return {				w: node.offsetWidth + mb.w, 				h: node.offsetHeight + mb.h			};		}		var extentFuncArray=[dojo.html.getPaddingExtent, dojo.html.getBorderExtent, dojo.html.getMarginExtent];		if(nativeBoxType > targetBoxType){			for(var i=targetBoxType;i<nativeBoxType;++i){				ret.y += extentFuncArray[i](node, 'top');				ret.x += extentFuncArray[i](node, 'left');			}		}else if(nativeBoxType < targetBoxType){			for(var i=targetBoxType;i>nativeBoxType;--i){				ret.y -= extentFuncArray[i-1](node, 'top');				ret.x -= extentFuncArray[i-1](node, 'left');			}		}		*/		// ret.t = ret.y;		// ret.l = ret.x;		return ret;	//	object	}
meta: 4497	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/4497/c0ecad977585b3844c442862a19d1bb7d39b7fac/html.js/buggy/_base/html.js