
	/*
		Netcare X-Browser helper functions

		Author:		Markus Fischer <markus@fischer.name>
		Copyright:	(c) 2005 by Dr. Maté GmbH
	*/
	var NcDom = {
		supportsDom: function () {
			return document.getElementById;
		},
		addEventListener: function (element, eventName, func, bUseCapture) {
			if (typeof bUseCapture == 'undefined') {
				bUseCapture = false;
			}
			if (element == null) {
				return;
			}
			// IE
			if (element.attachEvent) {
				element.attachEvent("on" + eventName, func);
			// W3C
			} else if (element.addEventListener) {
				element.addEventListener(eventName, func, bUseCapture);
			} else {
				element["on" + eventName] = func;
			}
		},
		removeEventListener: function (element, eventName, func, bUseCapture) {
			if (typeof bUseCapture == 'undefined') {
				bUseCapture = false;
			}
			// IE
			if (element.detachEvent) {
				element.detachEvent("on" + eventName, func);
			// W3C
			} else if (element.removeEventListener) {
				element.removeEventListenter(eventName, func, bUseCapture);
			} else {
				el["on" + eventName] = null;
			}
		},
		stopPropagation: function(ev) {
			if (ev.stopPropagation) {
				// W3C
				ev.stopPropagation();
			} else if (typeof ev['cancelBubble'] != 'undefined') {
				// M$
				ev.cancelBubble = true;
			}
		},
		eventTarget: function(ev) {
			if (ev) {
				var target = null;
				// W3C
				if (ev.target) {
					target = ev.target;
				// M$
				} else if (ev.srcElement) {
					target = ev.srcElement;
				}
				// Safari bug? see http://www.quirksmode.org/js/events_properties.html
				if (target && target.nodeType == 3) {
					target = target.parentNode;
				}
				return target
			}
			return null;
		},
		/**
		 * Calculate the absolute position of an arbitrary element in the DOM
		 * Based on http://www.faqts.com/knowledge_base/view.phtml/aid/9095/fid/128
		 */
		getAbsolutePosition : function (domElement) {
			var offsetWidth = domElement.offsetWidth;
			var offsetHeight = domElement.offsetHeight;
			for (var lx = 0, ly = 0; domElement != null;
				lx += domElement.offsetLeft,
				ly += domElement.offsetTop,
				domElement = domElement.offsetParent
				);
			return {
				x:lx,
				y:ly,
				w:offsetWidth,
				h:offsetHeight,
				toString: function() {
					return "x = " + this.x + ", y = " + this.y + ", w = " + this.w + ", h = " + this.h;
				}
			};
		},
		// X-Browser function to get dimensions of viewport
		// based on http://groups.google.at/group/comp.lang.javascript/msg/a3374abe16b22ba1?dmode=source
		getViewport : function() {
			var oViewport = {
				scrollLeft	: 0,
				scrollTop	: 0,
				width		: 0,
				height		: 0
			};
			oViewport.toString = function() {
				return "scrollTop = " + this.scrollTop + ", scrollLeft = " + this.scrollLeft + ", width = " + this.width + ", height = " + this.height;
			}

			if (typeof window.scrollX != 'undefined') {
				oViewport.scrollLeft = window.pageXOffset;
				oViewport.scrollTop = window.pageYOffset;
				oViewport.width = window.innerWidth;
				oViewport.height = window.innerHeight;
				return oViewport;
			} else {
				if (document.documentElement &&
					(typeof document.documentElement.scrollLeft != 'undefined') &&
					(document.documentElement.scrollLeft != 0)) {
					oViewport.scrollLeft = document.documentElement.scrollLeft;
					oViewport.scrollTop = document.documentElement.scrollTop;
					oViewport.width = document.documentElement.clientWidth;
					oViewport.height = document.documentElement.clientHeight;
					return oViewport;
				} else {
					if (document.body &&
						(typeof document.body.scrollLeft != 'undefined')) {
						oViewport.scrollLeft = document.body.scrollLeft;
						oViewport.scrollTop = document.body.scrollTop;

						if (document.compatMode == "CSS1Compat") {
							oViewport.width = document.body.parentNode.clientWidth;
							oViewport.height = document.body.parentNode.clientHeight;
						} else {
							oViewport.width = document.body.clientWidth;
							oViewport.height = document.body.clientHeight;
						}

						return oViewport;
					}
				}
			}
		}
	}
