    //this must be the style setting of the element being passed to this function:
	//'overflow:auto;position:absolute;top:-100;display:none;width:550px;height:400px;border:2px outset;'
	function AnimateLayer(elementId, targetX, targetY) {
		var layer = document.getElementById(elementId);
		var startXPos = (targetX == "" ? Math.floor((GetClientWidth() - parseInt(layer.style.width)) / 2) : targetX);
		var endXPos = startXPos;
		//var startXPos = 1;
		//var endXPos = 500;
		var startYPos = -1 *parseInt(layer.style.height);
		var endYPos = targetY;
		var zIndex = 1000;
		var animationTime = 1000; // ms
		var animationSteps = 10;
		MoveToPos(elementId, startYPos, startXPos, zIndex);
		Animate(elementId, endXPos, endYPos, animationTime, animationSteps);
	}
	function OpenPopup(url,elementId)
	{
		var popup = window.open(url,'', 'resizable=yes,menubar=no,scrollbars=no,toolbar=no,height=300,width=300,left=' + (self.screen.availWidth/2 - 150) + ',top=' + (self.screen.availHeight/2 - 150));
		if(popup){if(!popup.opener)popup.opener = window;popup.focus();}
		CloseLayer(elementId);
	}

	function GetClientWidth()
	{
		if (self.innerWidth) // all except Explorer
			return self.innerWidth;
		else if (document.documentElement && document.documentElement.clientWidth)
			// Explorer 6 Strict Mode
			return document.documentElement.clientWidth;
		else if (document.body) // other Explorers
			return document.body.clientWidth;
	}
	
	//============ Generic animation functions ============
	
	function MoveToPos(elementId, top, left, zIndex) {
		var layer = document.getElementById(elementId);
		layer.style.top = top;layer.style.left = left;layer.style.zIndex = zIndex;
		layer.style.display = 'block';
	}
	function Animate(elementId, targetX, targetY, milliseconds, steps) {
		if (steps == 0) return;
		var layer = document.getElementById(elementId);
		layer.style.left = parseInt(layer.style.left) - Math.floor((parseInt(layer.style.left) - targetX) / steps);
		layer.style.top = parseInt(layer.style.top) - Math.floor((parseInt(layer.style.top) - targetY) / steps);
		window.setTimeout("Animate('" + elementId + "'," + targetX + "," + targetY + "," + (milliseconds - Math.floor(milliseconds/steps)) + "," + (steps-1) + ")", Math.floor(milliseconds/steps));
	}
	function CloseLayer(elementId) {
		var layer = document.getElementById(elementId);
		if (layer != null) layer.style.display = 'none';
	}