// very simple layer popup implementation 
// does only work with generation 6 browsers

var iKeyMode=0;
var iMouseX=0;
var iMouseY=0;
var iOffsetToMouseX=0;
var iOffsetToMouseY=0;
var oOffsetToParent=null;
var iMouseOnClickX=0;
var iMouseOnClickY=0;
var sLastId="";
var oMoveableObj=0;
var iMoveMode=0;
var oMoveableOrigDim=null;
var oMoveableParentObj=0;
var aMoveableObjects=new Array();
document.onmousemove = processMouseMove;
document.onmousedown = selectObject;
document.onmouseup = unSelectObject;
document.onkeydown = keyDown;
document.onkeyup = keyUp;

if (sW3C) {
	document.captureEvents(Event.MOUSEMOVE);
	document.captureEvents(Event.MOUSEDOWN);
	document.captureEvents(Event.MOUSEUP);
	document.captureEvents(Event.KEYUP);
	document.captureEvents(Event.KEDOWN);
}

var sClient=navigator.userAgent.toLowerCase();
var sEngine=detectBrowser(true)
var sW3C = (
	(document.layers) || (
		(sClient.indexOf('mozilla')!=-1) 
		&& (sClient.indexOf('spoofer')==-1)
		&& (sClient.indexOf('compatible') == -1) 
		&& (sClient.indexOf('opera')==-1)
		&& (sClient.indexOf('webtv')==-1)
		&& ( parseInt(navigator.appVersion) >= 5)
	)
);

function indexMoveableObjects(bFlushOld){
	if (bFlushOld)
		aMoveableObjects=new Array();
	if (aMoveableObjects.length == 0){
		var oCandidateDivs = document.getElementsByTagName('div');
		for (var j = 0; j < oCandidateDivs.length; j++) {
			var oCandidateDiv=oCandidateDivs.item(j);
			if (oCandidateDiv.getAttribute("dragthis") == 'yes'){
				aMoveableObjects.push(oCandidateDiv);
			}
		}
	}
}

function detectBrowser(bGetEngine){
	
	sBrowser='';
	sEngine='';
	
	if(document.ids){
		sBrowser='nc4';
	}else if(document.all && !document.getElementById){
		sBrowser='ie4';
	}else if(window.opera && !document.createElement){
		sBrowser='op5';
	}else if(window.opera && window.getComputedStyle){
		if(document.createRange){
			sBrowser='op8';
		}else if(window.navigate){
			sBrowser='op7.5';
		}else{
			sBrowser='op7.2';
		}
	}else if(window.opera && document.compatMode){
		sBrowser='op7';
	}else if(window.opera && document.releaseEvents){
		sBrowser='op6';
	}else if(document.contains && !window.opera){
		sBrowser='kq3';
		sEngine='KHTML';
	}else if(window.pkcs11&&window.XML){
		sBrowser='f15';
		sEngine='SM';
	}else if(window.getSelection && window.atob){
		sBrowser='nn7';
		sEngine='SM';
	}else if(window.getSelection && !document.compatMode){
		sBrowser='nn6';
		sEngine='SM';
	}else if(window.clipboardData && document.compatMode){
		sBrowser=window.XMLHttpRequest? 'IE7' : 'IE6';
		sEngine='IE';
	}else if( window.clipboardData ){
		sBrowser='ie5';
		if(!document.createDocumentFragment){
			sBrowser='ie55';
		}
		if(document.doctype && !window.print){
			sBrowser+='m';
		}
	}else if(document.getElementById && !document.all){
		sBrowser='op4';
	}else if(document.images && !document.all){
		sBrowser='nn3';
	}else if(document.clientWidth&&!window.RegExp){
		sBrowser='kq2';
	}
	
	if (bGetEngine)
		return sEngine;
	return sBrowser;
}

function keyDown(e){
	var iCode = sW3C ? e.which : event.keyCode;
	if (iCode==17 && (1!=(iKeyMode&1)))
		iKeyMode+=1;
	if (iCode==18 && (2!=(iKeyMode&2)))
		iKeyMode+=2;
	if (iCode==16 && (4!=(iKeyMode&4)))
		iKeyMode+=4;
		
}

function keyUp(e){
	var iCode = sW3C ? e.which : event.keyCode;
	if (iCode==17 && (1==(iKeyMode&1)))
		iKeyMode-=1;
	if (iCode==18 && (2==(iKeyMode&2)))
		iKeyMode-=2;
	if (iCode==16 && (4==(iKeyMode&4)))
		iKeyMode-=4;
}

function selectObject(e){

	if ((iKeyMode & 1) ==1){
	
		indexMoveableObjects();
	
		var oTestObj = sW3C ? e.target : event.srcElement;
		while (oTestObj && ((('getAttribute' in oTestObj)) && (oTestObj.getAttribute('dragthis')!='yes'))) {
			oTestObj = sW3C ? oTestObj.parentNode : oTestObj.parentElement;
		}
	
		if (oTestObj && ('getAttribute' in oTestObj)){
			if  (oTestObj.getAttribute('dragthis') == "yes"){
			
				oMoveableObj = oTestObj;
				oMoveableOrigDim=getObjectDim(oTestObj);
				oMoveableParentObj = sW3C ? oTestObj.parentNode : oTestObj.parentElement;
				oOffsetToParent=getOffset(oTestObj);
				var oOff=getFullOffset(oTestObj);
				
				iOffsetToMouseY=iMouseY-oOff.T;
				iOffsetToMouseX=iMouseX-oOff.L;
				iMouseOnClickY=iMouseY;
				iMouseOnClickX=iMouseX;
				
				if ((iOffsetToMouseY < (oMoveableOrigDim.iHeight/2)) && (iOffsetToMouseX < (oMoveableOrigDim.iWidth/2)))
					iMoveMode=1;
				else if ((iOffsetToMouseY > (oMoveableOrigDim.iHeight/2)) && (iOffsetToMouseX > (oMoveableOrigDim.iWidth/2)))
					iMoveMode=2;
					
				
				return false;
			}// if it is something else, we do not want to drag it
		}
	}
}

function unSelectObject(e){
	
	if (oMoveableObj != 0){
		iOffsetToMouseX=0;
		iOffsetToMouseY=0;
		oOffsetToParent=null;
		oMoveableOrigDim=null;
		oMoveableParentObj=0;
		iMouseOnClickY=0;
		iMouseOnClickX=0;
		iMoveMode=0;
		var sId=null;
		if (sId=oMoveableObj.getAttribute('id')){
			if (aObjectArray=varByName('aState'+sId)){
				syncComponent(sId);
			}
		}
		oMoveableObj=0;
	}
}

function setObjAction(sId,sName,sValue){
	if (aActionArray=varByName('aAction'+sId)){
		aActionArray[sName]=sValue;
	}
}

function setObjAttribute(sId){
	if (aObjectArray=varByName('aState'+sId)){
		aObjectArray[sName]=sValue;
	}
}

// resizes a dom object so that its bottomline matches the bottomline of the client windows
// does only resize if object is not already larger
// does only work on load for now, as page offset is not accounted
function splayObjectVertical(xId, iPlusOffset){

	if (isNaN(iPlusOffset))
		iPlusOffset=0;

	if ((typeof(xId) != 'object'))
		xId=document.getElementById(xId);

	if (xId){
		var oDim=getWinDim();
		var oOff=getFullOffset(xId);
		iHeight=oDim.iHeight-(oOff.T+iPlusOffset);
		xId.style.height = (iHeight) + "px";
	}
}

// calculates the offset of a html object
function getFullOffset(xId){
	if ((typeof(xId) != 'object'))
		xId=document.getElementById(xId);
	var oPos={T:0,L:0};
	while (xId) {
		// also ich peil grad nicht wieso, aber tr und td haben scheinbar beide die gleichen offsets, 
		// somit w�rden die sich dann f�lschlicherweise addieren
		if (xId.tagName!='TR'){
			if (!(isNaN(xId.offsetTop)||isNaN(xId.offsetLeft))){
				oPos.T=oPos.T+Number(xId.offsetTop);
				oPos.L=oPos.L+Number(xId.offsetLeft);
			}
		}
		xId = sW3C ? xId.parentNode : xId.parentElement;

	}
	return oPos;
}

function getOffset(xId){

	if ((typeof(xId) != 'object'))
		xId=document.getElementById(xId);

	var oPos={T:0,L:0};

	if (xId) {
		oPos.T=Number(xId.offsetTop);
		oPos.L=Number(xId.offsetLeft);
	}

	return oPos;
}

function getPosition(oObj){

	if ((typeof(oObj) != 'object'))
		oObj=document.getElementById(oObj);

	var oTestObj=oObj;
	var oPos={T:0,L:0};
		while (oTestObj){
			if (oTestObj.offsetTop)
				oPos.T+=Number(oTestObj.offsetTop);
			if (oTestObj.offsetLeft)
				oPos.L +=Number(oTestObj.offsetLeft);
			oTestObj = sW3C ? oTestObj.parentNode : oTestObj.parentElement;
		}
	return oPos;
}

function getObjectDim(oObj){
	var oDim={iHeight:0,iWidth:0};
	oDim.iWidth = oObj.clientWidth;
	oDim.iHeight = oObj.clientHeight;
	return oDim;
}

function getWinDim(){
	var oDim={iHeight:0,iWidth:0};
	if (self.innerHeight){ // IE5
		oDim.iWidth = self.innerWidth;
		oDim.iHeight = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight){// IE6
		oDim.iWidth = document.documentElement.clientWidth;
		oDim.iHeight = document.documentElement.clientHeight;
	}
	else if (document.body) {// W3C
		oDim.iWidth = document.body.clientWidth;
		oDim.iHeight = document.body.clientHeight;
	}
	return oDim;
}

function getPageOffset(){
	var oOff={x:0,y:0};
	if (self.pageYOffset){//IE5
		oOff.x = self.pageXOffset;
		oOff.y = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop){// IE6
		oOff.x = document.documentElement.scrollLeft;
		oOff.y = document.documentElement.scrollTop;
	}
	else if (document.body){//W3C
		oOff.x = document.body.scrollLeft;
		oOff.y = document.body.scrollTop;
	}
	return oOff;
}

function getPageDim(){
	var oDim={iHeight:0,iWidth:0};
	if (document.body.scrollHeight > document.body.offsetHeight){
		oDim.iWidth = document.body.scrollWidth;
		oDim.iHeight = document.body.scrollHeight;
	}else{
		oDim.iWidth = document.body.offsetWidth;
		oDim.iHeight = document.body.offsetHeight;
	}
	return oDim;
}

function processMouseMove(e) {

	if (sW3C){
		iMouseX=e.pageX;
		iMouseY=e.pageY;
	}else{
		iMouseX=window.event.clientX;
		iMouseY=window.event.clientY;
	}
	
	freeDivMove();

	if ((oMoveableObj != 0) && (2==iMoveMode)){
	
		var oDim=getObjectDim(oMoveableParentObj);
		var iNewWidth=oMoveableOrigDim.iWidth-(iMouseOnClickX-iMouseX);
		var iNewHeight=oMoveableOrigDim.iHeight-(iMouseOnClickY-iMouseY);

		if (oMoveableParentObj.nodeName.toLowerCase() != 'body'){
			if (iNewWidth<20)
				iNewWidth=20;
			if (iNewHeight<20)
				iNewHeight=20;
			if (iNewWidth>(oDim.iWidth-oOffsetToParent.L))
				iNewWidth=oDim.iWidth-oOffsetToParent.L;
			if (iNewHeight>(oDim.iHeight-oOffsetToParent.T))
				iNewHeight=oDim.iHeight-oOffsetToParent.T;
		}
		
			
		oMoveableObj.style.width=String(iNewWidth)+'px';
		oMoveableObj.style.height=String(iNewHeight)+'px';
		
		var sId=null;
		if (sId=oMoveableObj.getAttribute('id')){
			var aObjectArray=null;
			if (aObjectArray=varByName('aState'+sId)){
				aObjectArray.csswidth=String(iNewWidth)+'px';
				aObjectArray.cssheight=String(iNewHeight)+'px';
			}
		}
	}else if ((oMoveableObj != 0) && (1==iMoveMode)){

		var oDim=getObjectDim(oMoveableParentObj);
		var oDimThis=getObjectDim(oMoveableObj);
		var iX=oOffsetToParent.L-(iMouseOnClickX-iMouseX);
		var iY=oOffsetToParent.T-(iMouseOnClickY-iMouseY);

		if (oMoveableParentObj.nodeName.toLowerCase() != 'body'){
			if (iX < 0)
				iX=0;
			if (iY < 0)
				iY=0;
			if (iX > (oDim.iWidth-oDimThis.iWidth))
				iX=oDim.iWidth-oDimThis.iWidth;
			if (iY > (oDim.iHeight-oDimThis.iHeight))
				iY=oDim.iHeight-oDimThis.iHeight;
		}
	
		oMoveableObj.style.left = (iX) + "px";
		oMoveableObj.style.top  = (iY) + "px";
		oMoveableObj.style.bottom = "auto";
		oMoveableObj.style.right = "auto";
		if (!sW3C){
			window.event.cancelBubble=true;
		}
		
		var sId=null;
		if (sId=oMoveableObj.getAttribute('id')){
			var aObjectArray=null;
			if (aObjectArray=varByName('aState'+sId)){
				aObjectArray.cssleft=String(iX)+'px';
				aObjectArray.csstop=String(iY)+'px';
				
			}
		}
		return(false);
	}
}

function arrayToQueryString(aArray, bAddQuestionMark,sPrefix){
		
	var sRet='';
	if (aArray){
		for (i in aArray){
			if (!sPrefix)
				sRet=sRet+(sRet.length ? '&' : (bAddQuestionMark ? '?' : ''))+i+'='+escape(String(aArray[i]).replace(/\+/g,' '));
			else
				sRet=sRet+(sRet.length ? '&' : (bAddQuestionMark ? '?' : ''))+sPrefix+'['+i+']='+escape(String(aArray[i]).replace(/\+/g,' '));
			
		}
	}
	return sRet;
}

function syncComponent(sId){

	var aObjectArray=null;
	var aActionArray=null;
	if (aObjectArray=varByName('aState'+sId)){

		if ((aObjectArray.bSyncing==false)){
			fadeOut(sId,true);
			aObjectArray.bSyncing=true;
			sCGI=arrayToQueryString(aObjectArray,false,'__STATE['+sId+']');
			if (aActionArray=varByName('aAction'+sId)){
				sCA=arrayToQueryString(aActionArray,false,'__COMACTION['+sId+']')
				if (sCGI.length && sCA.length)
					sCGI+='&';
				sCGI+=sCA; 
				//debugAlert(sCGI);
			}
			ajaxRequest('./../main.project/processajax.php5',sCGI,deSyncComponents);
		}
	}
}

function deSyncComponents(oResponseXML){
	
	if (oResponseXML.getElementsByTagName('components').length){
		
		var oComponentNode=null;
		if (sW3C){
			oComponentNode=oResponseXML.getElementsByTagName('components')[0]
		}else{
			oComponentNode=oResponseXML.selectSingleNode('response/components');
		}
		
		for (i=0; i<oComponentNode.childNodes.length; i++){
			var oChild=oComponentNode.childNodes[i];
			var sUniqueID=oChild.getAttribute('id');
			var oTestObj=null;
			
			
			var oTempDomEl=document.createElement('div');
			var oTempTextNode=oChild.lastChild.firstChild;
			var sText='';
			
			// workaround for seamonkey (nodevalues always <4096 bytes)
			while (oTempTextNode && (oTempTextNode.nodeName=='#text')){
				sText+=oTempTextNode.nodeValue;
				oTempTextNode=oTempTextNode.nextSibling;
			}
			
			if (sW3C){
				oTempDomEl.innerHTML=atob(sText);
			}else{
				oTempDomEl.innerHTML=atobJS(sText);
			}
			
			var oNewChild=oTempDomEl.removeChild(oTempDomEl.firstChild);
			setOpacity(oNewChild,0);
			
			if (oTestObj=document.getElementById(sUniqueID)){
				var oParent = sW3C ? oTestObj.parentNode : oTestObj.parentElement;
				oParent.replaceChild(oNewChild,oTestObj);
			}else{
				document.getElementsByTagName('body')[0].appendChild(oNewChild);
			}
			fadeIn(sUniqueID,true);
			
			//if (aObjectArray=varByName('aState'+sUniqueID)){
				// this is the js array part prepared for redefinition via eval
				if (sW3C)
					eval(atob(oChild.lastChild.previousSibling.firstChild.nodeValue));
				else
					eval(atobJS(oChild.lastChild.previousSibling.firstChild.nodeValue));
			//}
		}
	}
}

function posLayer(sId, iLeft, iTop) {

	var oDim=getWinDim();
	var oOff=getPageOffset();
	var iHeight = oDim.iHeight;
	var iWidth = oDim.iWidth;
	
	if ((iTop-oOff.y) > (iHeight/2)){
		iTop-=1;
		if (sW3C){
			document.getElementById(sId).style.bottom=(iHeight-iTop) + "px";
			document.getElementById(sId).style.top="auto";
		}else{
			document.getElementById(sId).style.bottom=(iHeight-iTop+oOff.y) + "px";
			document.getElementById(sId).style.top="auto";
		}
	}else{
		iTop+=1;
		if (sW3C){
			document.getElementById(sId).style.top=iTop + "px";
			document.getElementById(sId).style.bottom="auto";
		}else{
			document.getElementById(sId).style.top=(iTop+oOff.y) + "px";
			document.getElementById(sId).style.bottom="auto";
		}
	}

	if ((iLeft-oOff.x) > (iWidth/2)){
		iLeft-=1;
		if (sW3C){
			document.getElementById(sId).style.right=(iWidth-iLeft) + "px";
			document.getElementById(sId).style.left="auto";
		}else{
			document.getElementById(sId).style.right=(iWidth-iLeft+oOff.x) + "px";
			document.getElementById(sId).style.left="auto";
		}
	}else{
		iLeft+=1;
		if (sW3C){
			document.getElementById(sId).style.left=iLeft + "px";
			document.getElementById(sId).style.right="auto";
		}else{
			document.getElementById(sId).style.left=(iLeft+oOff.x) + "px";
			document.getElementById(sId).style.right="auto";
		}
	}
	
	document.getElementById(sId).style.visibility='visible';
	fadeIn(sId,true,25);
	
}

function hideLayer(sId){
	fadeOut(sId,true,25);
}

function windowLayer(sId){
	hideLayer(sId);
	var oFrame=document.getElementById(sId+'-IFRAME');
	if (oFrame){
		infoPopUp(oFrame.getAttribute('src'),'windowPopupInternal',oFrame.offsetWidth, oFrame.offsetHeight);
	}
}

function popUpIWindow(sId, iWidth, iHeight, sFrameSource, sFrameTitle){

	var oFrame=document.getElementById(sId+'-IFRAME');
	var oTitle=document.getElementById(sId+'-TITLE');
	var oWin=document.getElementById(sId);
	if (oFrame && oTitle && oWin){
		oFrame.style.width=Number(iWidth-3)+'px';
		oFrame.style.height=Number(iHeight-24)+'px';
		oFrame.src=sFrameSource;
		oTitle.innerHTML=sFrameTitle;
		oWin.style.width=Number(iWidth)+'px';
		oWin.style.height=Number(iHeight)+'px';
		sLastId=sId;
		posLayer(sId, iMouseX+5, iMouseY+5);
	}
}

function cancelWindow(){
	if (window.name!='windowPopupInternal'){
		parent.hideLayer(parent.sLastId);
	}else{
		window.close();
	}
}

function reCallParent(sURL){
	
	if (window.name!='windowPopupInternal'){
		if (sURL)
			parent.location.href=sURL;
	}else{
		if (sURL)
			opener.location.href=sURL;
		window.close();
	}
}

function popUpLayer(sId, sRememberId, xReplaceBundleIn){

	sLastId=sRememberId;
	var aReplace=Array();

	if (typeof(xReplaceBundleIn) == 'object')
		xReplaceBundle = xReplaceBundleIn;
	else
		xReplaceBundle = xReplaceBundleIn ? xReplaceBundleIn.split("&") : [];

	for  (var i in xReplaceBundle){

		if (typeof(xReplaceBundleIn) == 'object'){
			aReplace = Array(i,xReplaceBundle[i]);
		}else{
			aReplace = xReplaceBundle[i].split("=");
		}

		if (aReplace[0]){

			if (!aReplace[1])
				aReplace[1]='';
			var oModTag = document.getElementById(aReplace[0]);
			if (oModTag && ("value" in oModTag)){
				oModTag.value=aReplace[1];
			}else if (oModTag){
				oModTag.innerHTML=aReplace[1];
			}
			var oModTags = document.getElementsByName(aReplace[0]);
			for (var j = 0; j < oModTags.length; j++) {
				var oTag=oModTags.item(j);
				if (oTag && "value" in oTag){
					oTag.setAttribute("value",aReplace[1]);
				}else if (oTag){
					oTag.innerHTML=aReplace[1];
				}	
			}
			var oModTags = document.getElementsByTagName('a');
			for (var j = 0; j < oModTags.length; j++){
				var oTag=oModTags.item(j);
				// ok lets only modify links in tags inside the popup
				// this way we avoid modifying tags outsite especially the ones defining this replace!
				var oParent = oTag;
				var bReplaceIt=false;
				while ((oParent = oParent.parentNode) && oParent != document){
					if (oParent.getAttribute('id')==sId){
						bReplaceIt=true;
						break;
					}
				}
				if (bReplaceIt){
					iNew=Number(aReplace[1]);
					sHRef=oTag.getAttribute('href');
					sPattern="("+(aReplace[0].replace(/\[/g,"\\[").replace(/\]/g,"\\]"))+"=)(\\d+)";
					sNewHRef=sHRef.replace(new RegExp(sPattern),'$1'+String(iNew));
					oTag.setAttribute('href',sNewHRef);
				}
			}
		}
	}
	posLayer(sId, iMouseX+5, iMouseY+5);
}

// called via href link
function submitForm(sId){
	var oForm = document.getElementById(sId);
	// first child has to be hidden id input field
	oForm.firstChild.value = sLastId; 
	oForm.submit();
}

// called via onInput event
function updateForm(sId){
	var oForm = document.getElementById(sId);
	// first child has to be hidden id input field
	oForm.firstChild.value = sLastId; 
}

// opens a new window
function infoPopUp(sScriptName, sName, iWidth, iHeight){
	sWidth = iWidth ? "width="+iWidth : "width=480";
	sHeight = iHeight ? "height="+iHeight : "height=480";
	sName= sName ? sName : "";
	sAttrib = sWidth+","+sHeight+",left=20,top=20,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes";
	oW=window.open(sScriptName,sName,sAttrib);

	oW.budge=function(iCount){
		if ("moveBy" in this)
			if (iCount >0 ){
				if ((iCount%2) == 1)
					this.moveBy(5, 5);
				else
					this.moveBy(-5, -5);
	
				iCount--;
				this.setTimeout('this.budge(' + (iCount) + ');',20);
			}
	}
	
	oW.slide=function(iCount){
		if ("moveBy" in this)
		if (iCount >0 ){	
			this.moveBy(2, 2);
			iCount--;
			this.setTimeout('this.slide(' + (iCount) + ');',20);
		}
	}
	
	
	if ("focus" in oW)
		oW.focus();
	if ("GetAttention" in oW)
		oW.GetAttention();
	oW.setTimeout('this.slide(20);',1000);
}


function ensureOwnWindow(sName, iWidth, iHeight){
	if (window.name!=sName){
		infoPopUp(self.location.href, sName, iWidth, iHeight);
		window.history.back();
	}
}

aLayerInfos=new Array();

function showL(xId){
	
	if ((typeof(xId) != 'object'))
		xId=document.getElementById(xId);

	if (xId && ('style' in xId))
		xId.style.display='block';
}

function hideL(xId){

	if ((typeof(xId) != 'object'))
		xId=document.getElementById(xId);
	if (xId && ('style' in xId))
		xId.style.display='none';
}

function hideCheckL(xId){

	var oOff=getPageOffset();

	if ((typeof(xId) != 'object'))
		xId=document.getElementById(xId);
	if (xId && ('style' in xId)){
	
		var iMx=iMouseX+oOff.x;
		var iMy=iMouseY+oOff.y;
		var iY1=xId.offsetTop;
		var iX1=xId.offsetLeft;
		
		var oTmp=xId;
		while (oTmp.offsetParent){
			oTmp=oTmp.offsetParent;
			iY1+=oTmp.offsetTop;
			iX1+=oTmp.offsetLeft;	
		}
		
		var iY2=iY1+xId.offsetHeight;
		var iX2=iX1+xId.offsetWidth;
		
		//alert (iX1 + "-" + iY1 +"<br>" + iX2 + "-" + iY2 + "<br>" +iMx + "--" + iMy);
	
		if ((iX1 >= iMx-10) || (iY1 >= iMy-10) || (iY2 <= iMy+10) || (iX2 <= iMx+10))
			xId.style.display='none';
	}
}

function selfLocationHref(sAction){

	aAction=document.URL.split('?');
	aAction=aAction[0].split('/');
	sDocURL=aAction[aAction.length-1];

	aAction=sAction.split('?');
	aAction2=aAction[0].split('/');
	sURL=aAction2[aAction2.length-1];

	if (sDocURL==sURL){
		for (i in aLayerInfos){
			if (aLayerInfos[i]){
				if (aAction[1])
					aAction[1]+='&__LAYER'+i+'='+aLayerInfos[i];
				else
					aAction[1]+='__LAYER'+i+'='+aLayerInfos[i];
			}
		}
	}
	self.location.href=aAction[0]+'?'+aAction[1];
}

// adds  layer information too all forms on the page
function setLayerInfoToForms(sId, sId3, bReAdd){
	for ( j=document.getElementsByTagName('input').length-1; j>=0; j--){
		oElement=document.getElementsByTagName('input')[j];

		if (oElement.getAttribute('name')=='__LAYER'+sId){
			// ein inputfeld hat nur dann den namen __LAYERADDON, wenn es vorher dynamisch erzeugt wurde
			oElement.parentNode.removeChild(oElement);
		}
	}
	for ( j=document.getElementsByTagName('a').length-1; j>=0; j--){
		oElement=document.getElementsByTagName('a')[j];

		if (oElement.getAttribute('__LAYERADDON')){
			// ein link hat normalerweise keinen namen, also ueberschreibt man hier auch nichts fuer den post wichtiges
			sPattern="[\\&\\?]__LAYER"+sId.replace(/\[/g,"\\[").replace(/\]/g,"\\]")+"="+"\\d+";
			if (oElement.getAttribute('href')){
				oElement.setAttribute('href',oElement.getAttribute('href').replace(new RegExp(sPattern),''));
			}
		}
	}
	aLayerInfos[sId]=0;

	aAction=document.URL.split('?');
	aAction=aAction[0].split('/');
	sDocURL=aAction[aAction.length-1];
	if (bReAdd){
		aLayerInfos[sId]=sId3;
		for ( j=0; j<document.getElementsByTagName("form").length; j++){
			oForm = document.getElementsByTagName("form")[j];

			sAction=oForm.getAttribute('action');
			aAction=sAction.split('?');
			aAction2=aAction[0].split('/');
			sURL=aAction2[aAction2.length-1];
			if (sDocURL==sURL){
				oInput = document.createElement("input");
				oInput.setAttribute('type','hidden');
				// das ist zur wiedererkennung fuers loeschen
				oInput.setAttribute('name','__LAYER'+sId);
				oInput.setAttribute('value',sId3);
				oForm.appendChild(oInput);
			}
		}
		for ( j=0; j<document.getElementsByTagName("a").length; j++){
			oHref = document.getElementsByTagName("a")[j];

			sAction=oHref.getAttribute('href');
			aAction=sAction.split('?');
			aAction2=aAction[0].split('/');
			sURL=aAction2[aAction2.length-1];

			if (sDocURL==sURL){
				// das ist zur wiedererkennung fuers loeschen
				oHref.setAttribute('__LAYERADDON','X');
				if (aAction[1])
					oHref.setAttribute('href',oHref.getAttribute('href')+'&__LAYER'+sId+'='+sId3);
				else
					oHref.setAttribute('href',oHref.getAttribute('href')+'?__LAYER'+sId+'='+sId3);
			}
		}
	}
}

// shows or removes the object with id sId-sId3
// updates forms to reflect selected layer
// id bSwitchLogic is set, layer infos are set on hide, not on show!
function showHideObject(sId, sId3, bSwitchLogic){

	var oO = document.getElementById(sId+'-'+sId3);
	var oAnchor = document.getElementById(sId+'-'+sId3+'-a');
	
	if (oO){
		// if we are called fom showHideAll, display will be always none!
		if (oO.style.display == "none"){
			oO.style.display = "block";
			setLayerInfoToForms(sId, sId3, !bSwitchLogic);
			if (oAnchor){
				oAnchor.firstChild.nodeValue=oAnchor.firstChild.nodeValue.replace(/\[ \+ \]/ig,'[ - ]');
			}
		}else{
			oO.style.display = "none";
			setLayerInfoToForms(sId, sId3, bSwitchLogic);
			if (oAnchor){
				oAnchor.firstChild.nodeValue=oAnchor.firstChild.nodeValue.replace(/\[ - \]/ig,'[ + ]');
			}
		} 
	}
}

function toggleCell(sId3,sBaseId,sClass,sAllClass){

	changeAllCells(sBaseId,sAllClass)
			
	var oO = document.getElementById(sId3);
	if (oO){
		// W3C
		oO.setAttribute("class",sClass);
		// F*** IE
		oO.setAttribute("className",sClass);
	}
}

function changeAllCells(sId,sAllClass){

	var i;
	for ( i=0; i<document.getElementsByTagName("div").length; i++){
	
		oTd=document.getElementsByTagName("div")[i];
		if (oTd.id){
			aBaseId = oTd.id.split("-");
			if (aBaseId.length>=3){
				sBaseId = aBaseId[0];
				sSpan = aBaseId[2];
				if ((sBaseId == sId) && (sSpan=='SPAN')){
					// W3C
					oTd.setAttribute("class",sAllClass);
					// F*** IE
					oTd.setAttribute("className",sAllClass);
				}
			}
		}
	}
}

// hides all object having baseid=sId
function hideAllLayers(sId){

	var i;
	for ( i=0; i<document.getElementsByTagName("div").length; i++){
	
		oDiv=document.getElementsByTagName("div")[i];
		if (oDiv.id){
			aBothIds = oDiv.id.split("-");
			if (aBothIds.length==2){
				sBaseId = aBothIds[0];
				sLayerId = aBothIds[1];
				if (sBaseId == sId){
					oDiv.style.display="none";
				}
			}
		}
	}
}

// hides all object having baseid=sId
// shows the object with id sId-sId3
function showHideAllObject(sId,sId3){
	hideAllLayers(sId);
	showHideObject(sId, sId3)
}

function fadeInContent(sId,sContent,bOverWrite,iTimeout){
	document.getElementById(sId).innerHTML=sContent.replace(/&quot;/g,"\"");
	fadeIn(sId,bOverWrite,iTimeout);
}

function fadeIn(sId,bOverWrite,iTimeout){

	if (!iTimeout)
		var iTimeout=50;

	if (oObj=document.getElementById(sId)){

		if (bOverWrite){
			oObj.setAttribute('bFading',true);
		}

		iStep=Number(getOpacity(oObj)/10).toFixed(0);
		if(!oObj.getAttribute('bTouched') && (iStep==10)){
			iStep=0;
		}
		
		if (isNaN(iStep) || (iStep < 0))
			iStep=0;
		if (iStep > 9)
				iStep=9;
		iStep++;

		if ((oObj.getAttribute('bFading')=='true')||(oObj.getAttribute('bFading')==true)){
			setOpacity(oObj,iStep*10);
			if (iStep < 10)
				window.setTimeout('fadeIn(\''+sId+'\',false,'+iTimeout+');',iTimeout);
		}
		oObj.setAttribute('bTouched',true);
	}
}

function setOpacity(oObj,iPercent){
	oObj.style.filter="alpha(opacity="+iPercent+")";
	oObj.style.MozOpacity=iPercent/100;
	oObj.style.KHTMLOpacity=""+iPercent/100;
	oObj.style.opacity=""+iPercent/100;
}

function getOpacity(oObj){
	iPercent=100;
	if (oObj){
		if (oObj.style && oObj.getAttribute('bTouched')){
			if (sEngine=='IE'){
				//iPercent=Number(oObj.style.filter.replace(new RegExp(/alpha\(opacity=(\d+)\)/),'$1')).toFixed(0);
				iPercent=Number(oObj.filters.alpha.opacity).toFixed(0);
			}
			if (sEngine=='SM'){
				iPercent=(100*Number(oObj.style.MozOpacity)).toFixed(0);
			}
			if (sEngine=='KHTML'){
				iPercent=(100*Number(oObj.style.KTHMLOpacity)).toFixed(0);
			}
			if (oObj.style.opacity){
				iPercent=(100*Number(oObj.style.opacity)).toFixed(0);
			}
		}
	}
	return iPercent;
}

function fadeOut(sId,bOverWrite,iTimeout){

	if (!iTimeout)
		var iTimeout=50;

	if (oObj=document.getElementById(sId)){

		if (bOverWrite){
			oObj.setAttribute('bFading',false);
		}
		
		iStep=Number(getOpacity(oObj)/10).toFixed(0);
		if(!oObj.getAttribute('bTouched') && (iStep==10)){
			iStep=10;
		}
		
		if (isNaN(iStep) || (iStep > 10))
			iStep=10;
		if (iStep < 1)
				iStep=1;
		iStep--;
	
		if ((oObj.getAttribute('bFading')=='false')||(oObj.getAttribute('bFading')==false)){
			setOpacity(oObj,iStep*10);
			if (iStep > 0)
				window.setTimeout('fadeOut(\''+sId+'\',false,'+iTimeout+');',iTimeout);
			else
				document.getElementById(sId).style.visibility='hidden';
		}
		oObj.setAttribute('bTouched',true);
	}
}

var bFreeDivDone=false;
var oFreeDiv=null;

function freeDivOn(sTags, oPos, bCanMove){

	if (!bFreeDivDone){
		bFreeDivDone=true;
		oFreeDiv=document.createElement('div');
		oFreeDiv.style.position='absolute';
		oFreeDiv.style.zIndex='10000';
		oFreeDiv.style.visibility='hidden';
		oFreeDiv.setAttribute('id','freeDiv');
		oFreeDiv.setAttribute('class','freeDiv');
		//oFreeDiv.setAttribute('doNotShow','true');
		//document.getElementsByTagName('body')[0].appendChild(oFreeDiv);
		document.body.appendChild(oFreeDiv);
	}
	
	oFreeDiv.setAttribute('onoff','on');
	
	var iX=iMouseX;
	var iY=iMouseY;
	
	if ((typeof(oPos) == 'object')){
		iX=oPos.X;
		iY=oPos.Y;
	}
	
	if (bCanMove){
		oFreeDiv.setAttribute('canMove','on');
	}else{
		oFreeDiv.setAttribute('canMove','off');
	}

	if (document.getElementById('freeDiv')){
		document.getElementById('freeDiv').innerHTML=sTags.replace(/&quot;/g,"\"");
		posLayer('freeDiv', iX, iY);
		//fadeIn('freeDiv',true);
	}
}

function freeDivOff(){
	if (bFreeDivDone){
		oFreeDiv.setAttribute('onoff','off');
		//document.getElementById('freeDiv').innerHTML='';
		hideLayer('freeDiv');
		//fadeOut('freeDiv',true);
	}
}

function freeDivMove(){
	if (bFreeDivDone)
		if (document.getElementById('freeDiv').getAttribute('onoff')=='on')
			if (document.getElementById('freeDiv').getAttribute('canMove')=='on')
				posLayer('freeDiv', iMouseX, iMouseY);
}
