



		/* ----------------------------------------------------------------------------------------
		 */
		function makeValidID(html) {
			return html.replace(
				/[\"\'\\\/<>=:;]/g, '');
		}

		/* ----------------------------------------------------------------------------------------
		 */
		function getFrom(event) {
			if (!event)
				return null;

			/* mouse-over from ... */
			if (event.relatedTarget)
				return event.relatedTarget;
			else if (event.fromElement)
				 return event.fromElement;

			return null;
		}

		function getTo(event) {
			if (!event)
				return null;

			/* mouse-out to ... */
			if (event.relatedTarget)
				return event.relatedTarget;
			else if (event.toElement)
				 return event.toElement;

			return null;
		}

		/* ----------------------------------------------------------------------------------------
		 * get the dimensions of the things
		 *
		 *  reflect borders, paddings, ...
		 */
		function parseStyle(stylestring) {
			var stylenumber = parseFloat(stylestring);

			if (isNaN(stylenumber))
				return 0;
			return stylenumber;
		}

		function getStyle(obj, stylestring) {
			var stylevalue = null;
			var styleobj   = null;

			if (document.defaultView != null)
				styleobj = document.defaultView.getComputedStyle(obj, null);
			else
				styleobj = obj.currentStyle;

			return styleobj[stylestring];
		}

		function appliedStyle(obj, stylestring) {
			return parseStyle(getStyle(obj, stylestring));
		}

		/* ----------------------------------------------------------------------------------------
		 */
		function getAbsoluteLeft(obj) {
			var offsetLeft = 0;

			if (obj.offsetParent) {
				while (obj.offsetParent) {
					if (obj.offsetLeft)
						offsetLeft += obj.offsetLeft;
					obj = obj.offsetParent;
				}
			}
			else if (obj.x)
				offsetLeft += obj.x;

			return offsetLeft;
		}

		function getAbsoluteTop(obj) {
			var offsetTop = 0;

			if (obj.offsetParent) {
				while (obj.offsetParent) {
					if (obj.offsetTop)
						offsetTop += obj.offsetTop;
					obj = obj.offsetParent;
				}
			}
			else if (obj.y)
				offsetTop += obj.y;

			return offsetTop;
		}

		/* ----------------------------------------------------------------------------------------
		 */
		function getExterior(entry, which) {
			var obj = entry.obj;
			var cnt = entry.container;
			var exp = entry.expander;

			/* calculate left */
			var exterior = 0;

			if (MSIE && !CSS1)
				exterior += appliedStyle(obj, "margin" + which);
			else {
				exterior += appliedStyle(obj, "border" + which + "Width");
				exterior += appliedStyle(obj, "padding" + which);
				exterior += appliedStyle(obj, "margin" + which);
			}

			return exterior;
		}

		/* ----------------------------------------------------------------------------------------
		 */
		function getInterior(entry, which) {
			var obj = entry.obj;
			var cnt = entry.container;
			var exp = entry.expander;

			/* calculate left */
			var interior = 0;

			if (MSIE && !CSS1) {
				interior += appliedStyle(obj, "border" + which + "Width");
				interior += appliedStyle(obj, "padding" + which);
			}

			return interior;
		}

		/* ----------------------------------------------------------------------------------------
		 */
		function getPosition(entry, which) {
			var obj = entry.obj;
			var cnt = entry.container;
			var exp = entry.expander;

			switch (getStyle(obj, "position")) {
				case 'absolute':
					return obj['offset' + which];
				case 'fixed':
					return obj['offset' + which];
			}

			return obj['offset' + which] - (MSIE ? 0 : 1);
		}

		/* ----------------------------------------------------------------------------------------
		 */
		function getOuterDimension(entry, which) {
			var obj = entry.obj;
			var cnt = entry.container;
			var exp = entry.expander;

			if (which == 'Width')
				return obj.offsetWidth  + (getExterior(entry, 'Left') + getExterior(entry, 'Right' ));
			else
				return obj.offsetHeight + (getExterior(entry, 'Top' ) + getExterior(entry, 'Bottom'));
		}

		/* ----------------------------------------------------------------------------------------
		 */
		function getInnerDimension(entry, which) {
			var obj = entry.obj;
			var cnt = entry.container;
			var exp = entry.expander;

			if (which == 'Width')
				return obj.offsetWidth  - (getInterior(entry, 'Left') + getInterior(entry, 'Right' ));
			else
				return obj.offsetHeight - (getInterior(entry, 'Top' ) + getInterior(entry, 'Bottom'));
		}

		/* ----------------------------------------------------------------------------------------
		 */
		function getDeltaLeft(objA, objB) {
//			return getAbsoluteLeft(objA) - getAbsoluteLeft(objB);
			return objA.offsetLeft;
		}

		function getDeltaTop(objA, objB) {
//			return getAbsoluteTop(objA) - getAbsoluteTop(objB);
			return objA.offsetTop;
		}

		/* ----------------------------------------------------------------------------------------
		 */
		function getLeft(entry) {
			var obj = entry.obj;
			var cnt = entry.container;
			var exp = entry.expander;

			return getDeltaLeft(obj, cnt);
		}

		function getTop(entry) {
			var obj = entry.obj;
			var cnt = entry.container;
			var exp = entry.expander;

			return getDeltaTop(obj, cnt);
		}

		/* ----------------------------------------------------------------------------------------
		 * the whole width this element uses (including padding/outline/margin/border)
		 */
		function getWidth(entry) {
			var obj = entry.obj;
			var cnt = entry.container;
			var exp = entry.expander;

			return obj.offsetWidth;
		}

		function getHeight(entry) {
			var obj = entry.obj;
			var cnt = entry.container;
			var exp = entry.expander;

			return obj.offsetHeight;
		}
