//var oDebug = new Debug (true);
var _aMs = [];

function Menu (nLevel) {
	this.init = BTextMenu;
	this.init (nLevel);

	this.nElementHeight = 20;
	
	this.calculateSize = function() {
		this.nElementsWidth = this.getElementsWidth();
		this.nWidth = 19 + this.nElementsWidth + 14;
	};

	this.BMenu_getPosition = this.getPosition;
	this.getPosition = function () {
		var aPos = this.BMenu_getPosition();
		var nHeight  = (window.innerHeight ? window.innerHeight : (document.body && document.body.clientHeight ? document.body.clientHeight : 700));
		while (aPos[1] > this.aPos[1] && aPos[1] + this.nElementHeight * this.aElements.length > nHeight) aPos[1]-= this.nElementHeight;
		aPos[0]--; // Keine doppelte vertikale Trennlinie für Untermenüs
		aPos[5]++; // Angezeigten Bereich um einen Pixel (untere Trennlinie) verlängern
		return (aPos);
	}

	this.click = function (nElem) {
		if (!_aMs[0].bSuspended && nElem < this.aElements.length) {
			var aElement = this.aElements[nElem];
			if (aElement[0] > 0) {
				//alert(aElement[3]);
				var cUrl = (aElement[3] > '' ? aElement[3] + '.html' : 'Page' + aElement[0] + '.html');
				window.location = addSID(cUrl);
				_aMs[0].bSuspended = true;
			}
			else if (aElement[0] == 0)
				this.updateChild (nElem);
		}
	}
	
	this.getContent = function (nLayer) {
		var cHtml = '<table border="0" cellspacing="0" cellpadding="0" width="' + this.nWidth + '">';
		for (var i=0; i<this.aElements.length; i++) {
			cHtml += '<tr>';
			switch (nLayer) {
				case 0:
					cHtml += '<td><img src="img/m_' + (this.nLevel==0 && i==0 ? '1' : '') + 'left_0.jpg" width="19" height="20"></td><td class="M0" width="' + this.nElementsWidth + '"><nobr>' + this.aElements[i][1] + '</nobr></td><td><img src="img/m_right_0.jpg" width="14" height="20"></td>';
					break;
				case 1: 
					cHtml += '<td><img src="img/m_left_1.jpg" width="19" height="20"></td><td class="M1" width="' + this.nElementsWidth + '"><nobr>' + this.aElements[i][1] + '</nobr></td><td><img src="img/m_right_1.jpg" width="14" height="20"></td>';
					break;
				case 2: 
					cHtml += '<td colspan="3"><a href="Javascript:_aMs[' + this.nLevel + '].click(' + i + ')" onmouseover="return _aMs[' + this.nLevel + '].mo(' + i + ',1)" onmouseout="return _aMs[' + this.nLevel + '].mo(' + i + ')"><img src="img/leer.gif" width="' + this.nWidth + '" height="' + this.nElementHeight + '" border="0"></a></td>'; 
					break;
			}
			cHtml += '</tr>'
		}
		cHtml += '</table>';
		return (cHtml);
	};

	if (this.nLevel == 0) {
		this.aPos = (PageID==1 ? [173, 254] : [240, 86]);
//		this.update (aMenuEntries);

		this.BMenu_close = this.close;
		this.close = function() {
			this.BMenu_close();
			mo ('Menu', 0);
		}
	}
}



function BTextMenu (nLevel) {
	this.init = BMenu;
	this.init(nLevel);
	
	this.getContent = function (nLayer) {
		var cHtml = '<table border="0" cellspacing="0" cellpadding="0" width="' + this.nWidth + '">';
		for (var i=0; i<this.aElements.length; i++) {
			cHtml += '<tr height="' + this.nElementHeight + '">';
			switch (nLayer) {
				case 0: 
					cHtml += '<td width="' + this.nWidth + '" height="' + this.nElementHeight + '"  bgcolor="#808080"><font color="' + (i == this.nPreSelected ? 'yellow' : 'blue') + '">' + this.aElements[i][1] + '</font></td>'; 
					break;
				case 1: 
					cHtml += '<td width="' + this.nWidth + '" height="' + this.nElementHeight + ' " bgcolor="#A0A0A0"><font color="red">' + this.aElements[i][1] + '</font></td>'; 
					break;
				case 2: 
					cHtml += '<td width="' + this.nWidth + '"><a href="_aMs[' + this.nLevel + '].click(' + i + ')" onmouseover="return _aMs[' + this.nLevel + '].mo(' + i + ',1)" onmouseout="return _aMs[' + this.nLevel + '].mo(' + i + ')"><img src="img/leer.gif" width="' + this.nWidth + '" height="' + this.nElementHeight + '" border="0"></a></td>'; 
					break;
			}
			cHtml += '</tr>'
		}
		if (nLevel==0) {
			
		}
		cHtml += '</table>';
		return (cHtml);
	};

	this.calculateSize = function() {
		this.nElementsWidth = this.getElementsWidth();
		this.nWidth = this.nElementsWidth;
	};
	
	this.getElementsWidth = function() {
		var nWidth = 0;
		for (var i=0; i<this.aElements.length; i++) 
			nWidth = Math.max(nWidth, this.getStringWidth (this.aElements[i][1]));
		return (nWidth);
	};
	
	this.getStringWidth = function (cText) {
		var nWidth = cText.length * 7.2;
		var aHits = cText.match (/[ iltIrf1\(\)\|\/\'\"]/g);
		if (aHits) nWidth -= (aHits.length * 4);
		var aHits = cText.match (/[ABCDEFGHKMNOPQRSTUWXYZwm]/g);
		if (aHits) nWidth += (aHits.length * 4);
		return (Math.round(nWidth));
	}
}

function BImageMenu (nLevel) {
	this.init = BMenu;
	this.init(nLevel);
	
	this.calculateSize = function() {};

	this.getImage = function (nElem, nLayer) {
		return ('img/m' + nElem + '_' + nLayer + '.jpg');
	}
	
	this.getContent = function (nLayer) {
		var cHtml = '<table border="0" cellspacing="0" cellpadding="0">';
		for (var i=0; i<this.aElements.length; i++) {
			cHtml += '<tr>';
			switch (nLayer) {
				case 0: 
				case 1:
					cHtml += '<td><img src="' + this.getImage(i, nLayer) + '"></td>'; 
					break;
				case 2: 
					cHtml += '<td width="' + this.nWidth + '"><a href="Javascript://" onmouseover="return _aMs[' + this.nLevel + '].mo(' + i + ',1)" onmouseout="return _aMs[' + this.nLevel + '].mo(' + i + ')"><img src="img/leer.gif" width="' + this.nWidth + '" height="' + this.nElementHeight + '" border="0"></a></td>'; 
					break;
			}
			cHtml += '</tr>'
		}
		cHtml += '</table>';
		return (cHtml);
	};
	
}


function BMenu (nLevel) {
	this.aPos = [20, 250];
	this.nLevel = (nLevel > 0 ? nLevel : 0);
	_aMs[this.nLevel] = this;
	this.nChildOffset = 0;
	this.nWidth = 100;
	this.nHigh = null;
	this.nSelected = null;
	this.nPreSelected = null;
	this.nElementsWidth = 100;
	this.nElementHeight = 20;
	this.oParent = null;
	this.oChild = null;
	this.bFolded = null;
	this.oToUpdateChild = null;
	if (this.nLevel == 0) {
		this.oToOpen = null;
		this.oToClose = null;
	} 

	// aLayers = [MenuBg, MenuText, MenuMo]
	this.aLayers = [getLayer('MenuBg' + this.nLevel)];
	if (this.aLayers[0]) {
		this.aLayers[1]	= getLayer('MenuFg' + this.nLevel);
		this.aLayers[2]	= getLayer('MenuMo' + this.nLevel);
		if (getLayer('MenuBg' + (this.nLevel+1))) {
			this.oChild = new Menu (this.nLevel+1);
			this.oChild.oParent = this;
		}
	}
	else
		alert ('Layer MenuBg' + this.nLevel + ' not found');
	
	for (var i=0; i<3; i++) this.aLayers[i].moveTo (this.aPos[0], this.aPos[1]);
	
	this.getBgContent	= function () { return (this.getContent(0)); }
	this.getFgContent = function () { return (this.getContent(1)); }
	this.getMoContent	= function () { return (this.getContent(2)); }

	this.setChildConnector = function() {};
	
	
	this.getPosition = function () {
		var aPos = [this.aPos[0], this.aPos[1]];
		if (this.oParent) {
			aPos[0] = this.oParent.aLayers[0].get('left') + this.oParent.nWidth + this.oParent.nChildOffset;
			aPos[1] = this.oParent.aLayers[0].get('top') + this.oParent.nSelected*this.oParent.nElementHeight;
		}	
		var aClipp = new Array (0, 0, this.nWidth, this.nElementHeight * this.aElements.length);
		return (aPos.concat (aClipp));
	};
	
	
	this.updatePosition = function() {
		var aPos = this.getPosition();
		if (aPos) {
			var aClip = new Array (0, 0, this.nWidth, 25 * this.aElements.length);
			if (aPos.length > 2) aClip = aPos.slice (2, 6);
			for (var i=0; i<3; i++) 
				this.aLayers[i].clipp (aClip[0], aClip[1], (i==1 ? 0 : aClip[2]), aClip[3]);
			
			for (var i=0; i<3; i++) {
				this.aLayers[i].moveTo (aPos[0], aPos[1]);
				this.aLayers[i].set ('visibility', true);
			}
		}	
	};
	
	this.update = function (aElements) {
		if (this.aElements != aElements) {
			if (this.oChild) {
				this.setChildConnector (null);
				this.closeChild();
			}
			this.aElements = aElements;
			for (var i=0; i<3; i++) this.aLayers[i].set ('visibility', false);
			if (this.aElements) {
				this.calculateSize();
				this.updatePosition();
				this.aLayers[0].replaceContent (this.getBgContent());
				this.aLayers[1].replaceContent (this.getFgContent());
				this.aLayers[2].replaceContent (this.getMoContent());
			}
			this.nHigh = null;
		}
	};

	this.mo = function (nElem, bOver) {
		if (bOver) {
			clearTimeout (_aMs[0].oToClose);
			if (this.bFolded)
				_aMs[0].oToOpen = setTimeout ('_aMs[' + this.nLevel + '].unfold()', 800);
			else {
				if (this.highlight (nElem) && this.oChild) {
					clearTimeout (this.oToUpdateChild);
					this.oToUpdateChild = setTimeout ('_aMs[' + this.nLevel + '].updateChild(' + nElem + ')', 200);	
					if (this.oChild.nSelected != null) this.oChild.highlight (this.oChild.nSelected);
				}
				if (this.oParent && this.oParent.nSelected != null) this.oParent.highlight (this.oParent.nSelected);
			}
		}
		else {
			clearTimeout (this.ToOpen);
			if (this.bFolded == null)
				_aMs[0].oToClose = setTimeout ('_aMs[' + this.nLevel + '].close()', 800);
			else
				_aMs[0].oToClose = setTimeout ('_aMs[' + this.nLevel + '].fold()', 800);
		}
	
		this.highlight (bOver ? nElem : null);
		window.status = '';
		return (true);
	}
	
	this.highlight = function (nElem) {
		var bChanged = (nElem != this.nHigh);
		if (bChanged) {
			this.nHigh = nElem;
			if (nElem == null) 
				this.aLayers[1].clipp (0, 0, 0, 0);
			else 
				this.aLayers[1].clipp (0, nElem * this.nElementHeight, this.nWidth, this.nElementHeight);
		}
		return (bChanged);
	};
	
	this.updateChild = function (nElem) {
		if (this.nHigh == nElem) {
			this.nSelected = nElem;
			var aElements = this.getChildElements (nElem);
			// oDebug.write ('updateChild: ' + aElements);
			this.oChild.update (aElements);
		}
	};
	
	this.closeChild = function () {
		this.oChild.update (null);
	};

	this.getChildElements = function (nElem) {
		var aElems = [];
		if (nElem != null) aElems = this.aElements[nElem][2];
		return (aElems); 
	};
	
	
	this.close = function () {
		if (this.aElements) {
			this.update (null);
			if (this.oChild) this.oChild.close();
			if (this.oParent) this.oParent.close();
		}
	};
}


//####################################################################

function mo (cImage, bOver) {
	var oImg = getDocumentImage (cImage);
	if (oImg) oImg.src = oImg.src.replace (/.(\....)$/, (bOver ? 1 : 0) + '$1');
	
	window.status = '';
	return (true);
}

function getDocumentImage (cImageName) {
	var oImg = document.images[cImageName];
	if ((oImg == null || oImg+''=='undefined') && document.layers) {
		for (var i=0; i<document.layers.length; i++) {
			oImg = document.layers[i].document.images[cImageName];
			if (oImg != null && oImg+''!='undefined') return (oImg);
		}
	}
	return (oImg);
}

function onResizePage (init) {  //reloads the window if Nav4 resized
	if (init==true) {
		with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
	  document.pgW=innerWidth; document.pgH=innerHeight; }}
		window.onresize=onResizePage; 
	}
  else if (document.pgW && (innerWidth!=document.pgW || innerHeight!=document.pgH)) 		location.reload();

	adjustBar();
}
onResizePage (true);

function isNS6 (){
	if((window.navigator.userAgent.indexOf("Netscape") > 0)&&(document.documentElement)) return (true);
	else return (false);
}

function openSitemap(nChapter) {
	var oWin = window.open('page.php?PageID=16&amp;Chapter=' + nChapter + '&SID=' + SID, '_Sitemap', 'width=700,height=400,resizable=yes');
	if (oWin.focus) oWin.focus();
	return (false);	
}

function adjustBar() {
	var nPageWidth = (window.innerWidth ? window.innerWidth : (document.body && document.body.clientWidth ? document.body.clientWidth : 760));
	var oLRest = getLayer ('Rest');
	if (oLRest) oLRest.set ('left', nPageWidth-760);
}

function openPomorMenu() {
	mo ('Menu', 1);
	_aMs[0].update (aMenuEntries);	
}
