



		function interpreteValue(value) {
			if (typeof value == 'string')
				return eval(value);
			else if (typeof value == 'function')
				return value();

			return value;
		}

		function retrieveValue(modus, value, base) {
			var result = 0;

			value = interpreteValue(value);

			switch (modus) {
				case LAYER_MODE_PERCENT:	result = Math.floor((base * value) / 100); break;
				case LAYER_MODE_ABSOLUTE:	result = Math.floor(value); break;
				case LAYER_MODE_AUTO:		result = -1; break;
			}

			return result;
		}

		function layerHorizontal(relationWidth, relationHeight, layerCfg, layerObj) {
			/* ---------------------------------------------------------------------------------------------
			 * horizontal handling
			 */
			layerCfg.rectangle.L = retrieveValue(layerCfg.coordLeft.modus , layerCfg.coordLeft.position , relationWidth);
			layerCfg.rectangle.R = retrieveValue(layerCfg.coordRight.modus, layerCfg.coordRight.position, relationWidth);
			layerCfg.rectangle.W = retrieveValue(layerCfg.coordWidth.modus, layerCfg.coordWidth.position, relationWidth);

			if ((layerCfg.rectangle.L == -1) &&
				(layerCfg.rectangle.R == -1)) {
				layerCfg.rectangle.L = (relationWidth - layerCfg.rectangle.W) >> 1;
				layerCfg.rectangle.R = (relationWidth - (layerCfg.rectangle.W + layerCfg.rectangle.L));
			}
			else
			if ((layerCfg.rectangle.L == -1)) {
				layerCfg.rectangle.L = (relationWidth - (layerCfg.rectangle.W + layerCfg.rectangle.R));
			}
			else
			if ((layerCfg.rectangle.R == -1)) {
				layerCfg.rectangle.R = (relationWidth - (layerCfg.rectangle.W + layerCfg.rectangle.L));
			}
			else {
				layerCfg.rectangle.W = (relationWidth - (layerCfg.rectangle.R + layerCfg.rectangle.L));
			}
		}

		function layerVertical(relationWidth, relationHeight, layerCfg, layerObj) {
			/* ---------------------------------------------------------------------------------------------
			 * vertical handling
			 */
			layerCfg.rectangle.T = retrieveValue(layerCfg.coordTop.modus   , layerCfg.coordTop.position   , relationHeight);
			layerCfg.rectangle.B = retrieveValue(layerCfg.coordBottom.modus, layerCfg.coordBottom.position, relationHeight);
			layerCfg.rectangle.H = retrieveValue(layerCfg.coordHeight.modus, layerCfg.coordHeight.position, relationHeight);

			if ((layerCfg.rectangle.T == -1) &&
				(layerCfg.rectangle.B == -1)) {
				layerCfg.rectangle.T = (relationHeight - layerCfg.rectangle.H) >> 1;
				layerCfg.rectangle.B = (relationHeight - (layerCfg.rectangle.H + layerCfg.rectangle.T));
			}
			else
			if ((layerCfg.rectangle.T == -1)) {
				layerCfg.rectangle.T = (relationHeight - (layerCfg.rectangle.H + layerCfg.rectangle.B));
			}
			else
			if ((layerCfg.rectangle.B == -1)) {
				layerCfg.rectangle.B = (relationHeight - (layerCfg.rectangle.H + layerCfg.rectangle.T));
			}
			else {
				layerCfg.rectangle.H = (relationHeight - (layerCfg.rectangle.T + layerCfg.rectangle.B));
			}
		}

		function layerPositioning() {
			var windowWidth  = visibleFrameWidth (null) - 0;
			var windowHeight = visibleFrameHeight(null) - 0;
///			var message = '';

			for (var key in positionedLayers) {
				var layerCfg = positionedLayers[key];
				var layerCln = new layerConfigClone(layerCfg);
				var layerObj = getObj(layerCfg.id);
				var relationWidth  = 0;
				var relationHeight = 0;

				switch (layerCfg.relation) {
					case LAYER_RELATION_ABS:
						relationWidth  = windowWidth;
						relationHeight = windowHeight;
						break;
					case LAYER_RELATION_REL:
						var parentObj = layerObj.offsetParent;

						relationWidth  = parseInt(parentObj.style.width);
						relationHeight = parseInt(parentObj.style.height);
						break;
				}

				/* horizontal handling */
				layerHorizontal(relationWidth, relationHeight, layerCln, layerObj);

				/* vertical handling */
				layerVertical(relationWidth, relationHeight, layerCln, layerObj);

				/* ---------------------------------------------------------------------------------------------
				 * behaviour handling
				 */
				if (layerCln.proportion != LAYER_PROP_NONE) {
					var propWidth  = layerCln.rectangle.H * layerCfg.proportions;
					var propHeight = layerCln.rectangle.W / layerCfg.proportions;

///					message += '' +
///						'calcx: ' + layerCln.rectangle.W + '&nbsp;&nbsp;&nbsp;' +
///						'calcy: ' + layerCln.rectangle.H + '<br/>' +
///						'propx: ' + propWidth + '&nbsp;&nbsp;&nbsp;' +
///						'propy: ' + propHeight + '<br/>';

					switch (layerCln.proportion) {
						case LAYER_PROP_MAX:
							/* wenn die kalkulierte Höhe kleiner als die proportionale Höhe ist */
							if (layerCln.rectangle.H < propHeight)
								layerCln.proportion = LAYER_PROP_HOR;
							/* wenn die kalkulierte Breite kleiner als die proportionale Breite ist */
							else
							if (layerCln.rectangle.W < propWidth)
								layerCln.proportion = LAYER_PROP_VER;
							/* ansonsten ist das Bild proportional */
							else
								layerCln.proportion = LAYER_PROP_NONE;
							break;
						case LAYER_PROP_MIN:
							/* wenn die kalkulierte Höhe kleiner als die proportionale Höhe ist */
							if (layerCln.rectangle.H < propHeight)
								layerCln.proportion = LAYER_PROP_VER;
							/* wenn die kalkulierte Breite kleiner als die proportionale Breite ist */
							else
							if (layerCln.rectangle.W < propWidth)
								layerCln.proportion = LAYER_PROP_HOR;
							/* ansonsten ist das Bild proportional */
							else
								layerCln.proportion = LAYER_PROP_NONE;
							break;
					}

					switch (layerCln.proportion) {
						case LAYER_PROP_HOR:
							layerCln.coordTop.modus = LAYER_MODE_AUTO;
//							layerCln.coordTop.position = 0;
							layerCln.coordBottom.modus = LAYER_MODE_AUTO;
//							layerCln.coordBottom.position = 0;
							layerCln.coordHeight.modus = LAYER_MODE_ABSOLUTE;
							layerCln.coordHeight.position = propHeight;

							/* vertical recalculation */
							layerVertical(relationWidth, relationHeight, layerCln, layerObj);
							break;
						case LAYER_PROP_VER:
							layerCln.coordLeft.modus = LAYER_MODE_AUTO;
//							layerCln.coordLeft.position = 0;
							layerCln.coordRight.modus = LAYER_MODE_AUTO;
//							layerCln.coordRight.position = 0;
							layerCln.coordWidth.modus = LAYER_MODE_ABSOLUTE;
							layerCln.coordWidth.position = propWidth;

							/* horizontal recalculation */
							layerHorizontal(relationWidth, relationHeight, layerCln, layerObj);
							break;
					}
				}

				/* ---------------------------------------------------------------------------------------------
				 * horizontal behaviour handling
				 */
				if ((layerCln.coordLeft.modus == LAYER_MODE_AUTO) && (layerCln.coordLeft.position != 0)) {
					var glitch = interpreteValue(layerCln.coordLeft.position);

					layerCln.rectangle.L += glitch;
					layerCln.rectangle.W -= glitch;
				}

				if ((layerCln.coordRight.modus == LAYER_MODE_AUTO) && (layerCln.coordRight.position != 0)) {
					var glitch = interpreteValue(layerCln.coordRight.position);

					layerCln.rectangle.R += glitch;
					layerCln.rectangle.W -= glitch;
				}

				/* ---------------------------------------------------------------------------------------------
				 * vertical behaviour handling
				 */
				if ((layerCln.coordTop.modus == LAYER_MODE_AUTO) && (layerCln.coordTop.position != 0)) {
					var glitch = interpreteValue(layerCln.coordTop.position);

					layerCln.rectangle.T += glitch;
					layerCln.rectangle.H -= glitch;
				}

				if ((layerCln.coordBottom.modus == LAYER_MODE_AUTO) && (layerCln.coordBottom.position != 0)) {
					var glitch = interpreteValue(layerCln.coordBottom.position);

					layerCln.rectangle.B += glitch;
					layerCln.rectangle.H -= glitch;
				}

///				message += '' +
///					'id: ' + layerCln.id + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' +
///					'spacex: ' + relationWidth + '&nbsp;&nbsp;&nbsp;' +
///					'spacey: ' + relationHeight + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' +
///					'left: ' + layerCln.rectangle.L + '&nbsp;&nbsp;&nbsp;' +
///					'width: ' + layerCln.rectangle.W + '&nbsp;&nbsp;&nbsp;' +
///					'right: ' + layerCln.rectangle.R + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' +
///					'top: ' + layerCln.rectangle.T + '&nbsp;&nbsp;&nbsp;' +
///					'height: ' + layerCln.rectangle.H + '&nbsp;&nbsp;&nbsp;' +
///					'bottom: ' + layerCln.rectangle.B + '<br/><br/>';

				layerCfg.layerClone = layerCln;

				/* with the introduction of LAYER_RELATION_REL, we need to apply the settings
				 * immediatly, because this layer may be the paretn of a following one!
				 */
//			}
//
//			for (var key in positionedLayers) {
//				var layerCfg = positionedLayers[key];
//				var layerCln = layerCfg.layerClone;
//				var layerObj = getObj(layerCfg.id);

				/* out of window-region */
//				if (((layerCln.rectangle.L						 )	< windowWidth) &&
//					((layerCln.rectangle.T						 )	< windowHeight) &&
//					((layerCln.rectangle.L + layerCln.rectangle.W)	> 0) &&
//					((layerCln.rectangle.T + layerCln.rectangle.H)	> 0)) {
//					var clipTop		= 0;
//					var clipRight	= layerCln.rectangle.W;
//					var clipBottom	= layerCln.rectangle.H;
//					var clipLeft	= 0;

					/* regulate size to fit into window-region */
//					if ((layerCln.rectangle.L) < 0)
//						clipLeft = -layerCln.rectangle.L;
//					if ((layerCln.rectangle.L + layerCln.rectangle.W) > windowWidth)
//						clipRight = windowWidth - layerCln.rectangle.L;
//					if ((layerCln.rectangle.T) < 0)
//						clipTop = -layerCln.rectangle.T;
//					if ((layerCln.rectangle.T + layerCln.rectangle.H) > windowHeight)
//						clipBottom = windowHeight - layerCln.rectangle.T;

					layerObj.style.position = 'absolute';

					layerObj.style.left		=  layerCln.rectangle.L  + 'px';
					layerObj.style.width	=  layerCln.rectangle.W  + 'px';
					layerObj.style.right	= (layerCln.rectangle.L  +
											   layerCln.rectangle.W) + 'px';

					layerObj.style.top		=  layerCln.rectangle.T  + 'px';
					layerObj.style.height	=  layerCln.rectangle.H  + 'px';
					layerObj.style.bottom	= (layerCln.rectangle.T  +
											   layerCln.rectangle.H) + 'px';

//					layerObj.style.clip		= 'rect(' + clipTop + 'px ' +
//														clipRight + 'px ' +
//														clipBottom + 'px ' +
//														clipLeft + 'px)';

					if (layerCln.afterResize != null)
						layerCln.afterResize(layerCln);
//				}
//				else
//					layerObj.style.display = 'none';
			}

///			var messages = getObj('messages');
///			messages.innerHTML = message;

			/* scripted function, return true for to be repeated */
			return true;
		}

		registerScript(window, SCRIPT_ONLOAD  , SCRIPT_PARM_ONETIME , layerPositioning);
		registerScript(window, SCRIPT_ONRESIZE, SCRIPT_PARM_REPEATED, layerPositioning);

