var NS=(navigator.appName=='Netscape');
var Mac=(navigator.platform.indexOf('Mac')!=-1);
var g_oCurrentDrag=null;

function lwFocusLayer(oLayer) {
	document.lw_maxZ++;
	if (NS)
		oLayer.zIndex = document.lw_maxZ;
	else
		oLayer.style.zIndex = document.lw_maxZ;
}

function lwShowLayer(name,toFront) {
	var theLayer;

	if (NS) {
		theLayer = document.layers[name];
		theLayer.visibility = "visible";
	}
	else {
		theLayer = document.all[name];
		theLayer.style.visibility = "visible";
	}
	if( toFront )
		lwFocusLayer(theLayer);
}

function lwHideLayer(name) {
	if (NS)
		document.layers[name].visibility = "hidden";
	else
		document.all[name].style.visibility = "hidden";
}

function lwMoveLayer(oLayer,newLeft,newTop) {
	if (NS)
		oLayer.moveTo(newLeft,newTop);
	else {
		oLayer.style.pixelLeft = newLeft; 
		oLayer.style.pixelTop = newTop;
	}
}

function lwIsVisible(layer) {
	if( typeof layer == "string" ) {
		if( NS ) 
			return document.layers[name].visibility == "show"; 
			return document.all[name].style.visibility == "visible";
	}
	if( NS ) 
		return layer.visibility == "show"; 
		return layer.style.visibility == "visible";
}

function lwSetAlwaysOnTop(oLayer,flag) {
	if( flag == true )
		eval( "oLayer"+(NS?"":".style")+".zIndex = 4242" );
	else
		lwFocusLayer(oLayer);
		oLayer.lwAlwaysOnTop = flag;
}

function lwMinimizeLayer(name) {
	var theLayer, theImage;
	if(NS) {
		theLayer = document.layers[name];
		if( theLayer.lwMinimized == true )
			theLayer.clip.height = theLayer.true_height;
		else {
			theLayer.true_height = theLayer.clip.height;
			theLayer.clip.height = 19;
		}
		theImage = theLayer.document.images['min_'+name];
	} 
	else {
		theLayer = document.all[name];
		if( theLayer.lwMinimized ) {
			if( Mac )
				theLayer.style.clip="auto";
			else
				theLayer.style.clip="rect(auto auto auto auto)";
		}
		else
			theLayer.style.clip="rect(auto auto 19px auto)";
			theImage = document.images['min_'+name];
	}

	if( theLayer.lwMinimized == true )
		theLayer.lwMinimized = false;
	else
		theLayer.lwMinimized = true;

	if( theImage && false ) {
		if( theLayer.lwMinimized )
			theImage.src = "/bilder/win_icon_maxim.gif";
		else
			theImage.src = "/bilder/win_icon_minim.gif";
	}
	lwSetAlwaysOnTop(theLayer,theLayer.lwMinimized);
}

function lwInitDocument() {
	if (!document.allLayers) {
		document.allLayers = new Array();
		if (NS) {
			for (i=0; i<document.layers.length; i++) 
				document.allLayers[i]=document.layers[i];
		} 
	}
	document.onmousedown = lwWaitHit; 
	document.onmouseup = lwDragEvent;
	if (NS) {
		document.lwMaxRight = window.innerWidth - 100;
		document.lwMaxBottom = window.innerHeight - 100;
		document.captureEvents(Event.MOUSEDOWN|Event.MOUSEUP);
	} 
	else {
		document.lwMaxRight = document.body.clientWidth - 100;
		document.lwMaxBottom = document.body.clientHeight - 100;
	}
	document.lw_maxZ = 0;
}

function lwInitLayer(name,dragable,startVisible)
{
	var i,j,curLeft,curTop,curZ,oLayer,iWidth;

	if (!document.all && !document.layers) 
		return false;

	if (!document.allLayers)
		lwInitDocument();

	if( NS ) {
		oLayer = document.layers[name];
		if (!oLayer)
			return false;
		curLeft = oLayer.left; 
		curTop = oLayer.top;
		iWidth = oLayer.clip.width;
		curZ = parseInt( oLayer.zIndex );
	}
	else {
		event.returnValue = true;
		oLayer = document.all[name];
		if (!oLayer)
			return false;
		document.allLayers[document.allLayers.length] = oLayer;
		curLeft = oLayer.style.pixelLeft; 
		curTop = oLayer.style.pixelTop; 
		iWidth = oLayer.style.pixelWidth;
		curZ = parseInt( oLayer.style.zIndex );
	}

	if( dragable ) {
		oLayer.startLeft = curLeft;
		oLayer.startTop = curTop;
		oLayer.maxLeft = 0 - iWidth + 100;
		oLayer.maxTop = 0;
		oLayer.maxRight = document.lwMaxRight;
		oLayer.maxBottom = document.lwMaxBottom;
		oLayer.lwMinimized = false;
		oLayer.dragOk = true; 
		if (curZ > document.lw_maxZ)
			document.lw_maxZ = curZ;
	}

	oLayer.startVisible = startVisible;
	return true;
}
  
function lwShowLayers() {
	var lwSidMitt = 300;

	if(NS) {
		lwSidMitt -= 1;
                lwVansterKant = (window.innerWidth/2)-lwSidMitt;
		for( i=0; i<document.allLayers.length; i++ ) {
			document.allLayers[i].left+=lwVansterKant;
			if( document.allLayers[i].startVisible == true )
				document.allLayers[i].visibility = "visible";
		}
	} 
	else {
		if(parent && parent.index_top && parent.index_top.document.body)
			lwVansterKant = (parent.index_top.document.body.clientWidth/2) - lwSidMitt;
		else
			lwVansterKant = (document.body.clientWidth/2) - lwSidMitt;

		for( i=0; i<document.allLayers.length; i++ ) {
			document.allLayers[i].style.pixelLeft+=lwVansterKant;
			if( document.allLayers[i].startVisible == true )
				document.allLayers[i].style.visibility = "visible";
		}
	}
}

function lwWaitHit(objNS) {
	var i, retVal=true, theEvent;

	if( !document.all && !document.layers )
		return false;

	if( !NS )
		event.returnValue = true;

	theEvent = NS ? objNS.type : event.type;

	if( theEvent == 'mousedown' )
	{
		var aLayer, oCurrentDrag=null, hitLayer = null;
		var mouseX, mouseY;

		if (NS) {
			mouseX = objNS.pageX;
			mouseY = objNS.pageY;
		}
		else {
			mouseX = event.clientX + document.body.scrollLeft;
			mouseY = event.clientY + document.body.scrollTop;
		}

		for (i=0; i<document.allLayers.length; i++) {
			aLayer = document.allLayers[i];
			if (aLayer.dragOk != null && lwIsVisible(aLayer)) {
				var aLayerZ = (NS) ? aLayer.zIndex : aLayer.style.zIndex;
				with (aLayer) {
					var parentL=0, parentT=0;
					if (!NS) { 
						parentLayer = aLayer.parentElement;
						while (parentLayer != null && parentLayer.style.position) {
							parentL += parentLayer.offsetLeft;
							parentT += parentLayer.offsetTop;
							parentLayer = parentLayer.parentElement;
						} 
					}
					var tmpX=mouseX - (NS ? pageX : style.pixelLeft+parentL);
					var tmpY=mouseY - (NS ? pageY : style.pixelTop +parentT);
					var tmpW = ((NS) ? clip.width : offsetWidth);
					var tmpH = ((NS) ? clip.height : offsetHeight);
					if (0 <= tmpX && tmpX < tmpW && 0 <= tmpY && tmpY < tmpH) {
						if( hitLayer==null || aLayerZ > eval('hitLayer.'+((NS)?'':'style.')+'zIndex') ) {
							hitLayer = aLayer;
						if( tmpY < 19 && (tmpW-tmpX) > 20 )
							oCurrentDrag = aLayer;
						else
							oCurrentDrag = null;
						}
					} 
				} 
			}
		}

		if( hitLayer != null && !hitLayer.lwAlwaysOnTop )
			lwFocusLayer(hitLayer);

		if (oCurrentDrag) {
			document.onmousemove = lwDragEvent; 
			if (NS) 
				document.captureEvents(Event.MOUSEMOVE);
			var curLeft = (NS) ? oCurrentDrag.left : oCurrentDrag.style.pixelLeft;
			var curTop = (NS) ? oCurrentDrag.top : oCurrentDrag.style.pixelTop;
			oldX = mouseX - curLeft; 
			oldY = mouseY - curTop;
			g_oCurrentDrag = oCurrentDrag;  
			retVal = false; 
			if(!NS) 
				event.returnValue = false;
		} 
	} 

	if (NS) 
		document.routeEvent(objNS);
	return retVal;
}

function lwDragEvent(objNS) {
	var i, retVal=true, theEvent;

	if( !document.all && !document.layers )
		return false;

	if( !NS )
		event.returnValue = true;

	theEvent = NS ? objNS.type : event.type;

	if (theEvent == 'mousemove' && (NS || event.button != 0) ) {
		if (g_oCurrentDrag) {
			var newLeft, newTop;
			with (g_oCurrentDrag) {
				var mouseX, mouseY;
				if (NS) {
					mouseX = objNS.pageX;
					mouseY = objNS.pageY;
				}
				else {
					mouseX = event.clientX + document.body.scrollLeft;
					mouseY = event.clientY + document.body.scrollTop;
				}
				newLeft = mouseX-oldX; 
				newTop  = mouseY-oldY;
				if (maxLeft!=null) newLeft = Math.max(newLeft,maxLeft);
				if (maxRight!=null) newLeft = Math.min(newLeft,maxRight);
				if (maxTop!=null) newTop = Math.max(newTop ,maxTop);
				if (maxBottom!=null) newTop = Math.min(newTop ,maxBottom);
			} 
			lwMoveLayer(g_oCurrentDrag,newLeft,newTop);
			if(!NS) 
				event.returnValue = false;
			retVal = false; 
		}
	} 
	else if (theEvent == 'mouseup' || (!NS && theEvent == 'mousemove')) {
		document.onmousemove = null;
		if (NS) {
			document.releaseEvents(Event.MOUSEMOVE);
			document.captureEvents(Event.MOUSEDOWN); //for mac NS
		}
		if (g_oCurrentDrag) {
			if(!NS) 
				event.returnValue = false;
			retVal = false; 
		}
		g_oCurrentDrag = null;
	}

	if (NS) 
		document.routeEvent(objNS);
	return retVal;
}

