function showMenu ( arrCmds, menuOps ) {	var len = menuOps.length, lastLevel = 0, nextLevel = 0;;	var absLevelPos = new Array();	var relLevelPos = new Array();	if ( len == 0 ) return;	var html = arrCmds [ 0 ].replace ( webDbNameTag, webDbName )	for ( var i = 0; i < len; i++ ) {		var op = menuOps [ i ].split ( menuOpsSep );		var level = op[0].indexOf ( "." ) == -1 ? 1 : op[0].split ( "." ).length		if ( i == len -1 )  nextLevel = -1;		else {			var opNext = menuOps [ i + 1 ].split ( menuOpsSep );			nextLevel = opNext[0].indexOf ( "." ) == -1 ? 1 : opNext[0].split ( "." ).length		}		// update pos indexes		absLevelPos [ level -1 ] = absLevelPos.length < level ? 1 : absLevelPos [ level -1 ] + 1		relLevelPos [ level -1 ] = relLevelPos.length < level ? 1 : relLevelPos [ level -1 ] + 1		var link = op.length < 2 ? "" : op [1].replace ( webDbNameTag, webDbName );		var icon = op.length < 3 ? "" : op [2].replace ( webDbNameTag, webDbName );		var imgOp = op.length < 4 ? "" : op [3].replace ( webDbNameTag, webDbName );		var targetFrame = op.length < 5 ? "" : op [ 4 ].replace ( webDbNameTag, webDbName );		var text = op.length < 6 ? "" : op [ 5 ].replace ( webDbNameTag, webDbName );		var status = op.length < 7 ? "" : op [ 6 ].replace ( webDbNameTag, webDbName );		var tip = op.length < 8 ? "" : op [ 7 ].replace ( webDbNameTag, webDbName );		if ( level < lastLevel ) { // close previous levels			for ( var k = lastLevel - level;  k >= 0; k-- ) {				html += arrCmds [ 6 + ( level + k - 1 ) * 3].replace ( webDbNameTag, webDbName )				if ( k > 0 ) relLevelPos [ k ] = 0			}		}		else if ( level > lastLevel ) {			// open levels			for ( var k = 1; k <= level - lastLevel; k++ ) {				var tmp = arrCmds [ 1 + ( lastLevel + k - 1 ) * 3].replace ( webDbNameTag, webDbName );				// eval?				if ( tmp.indexOf ( "eval:" ) == 0 ) {					var expression = tmp.substring ( 5 )					expression = expression.replace ( /\[LEVEL\]/gi, level )					expression = expression.replace ( /\[LAST_LEVEL\]/gi, lastLevel )					expression = expression.replace ( /\[NEXT_LEVEL\]/gi, nextLevel )					expression = expression.replace ( /\[LEVEL_ABS_POS\]/gi, absLevelPos [ level - 1 ] )					expression = expression.replace ( /\[LEVEL_REL_POS\]/gi, relLevelPos [ level - 1 ] )					//alert ( expression )					tmp = eval ( expression )						//alert ( tmp )				}				html += tmp			}		}		var tmp = arrCmds [ 2 + ( level - 1 ) * 3 ].replace ( webDbNameTag, webDbName );		// eval?		if ( tmp.indexOf ( "eval:" ) == 0 ) {			var expression = tmp.substring ( 5 )			expression = expression.replace ( /\[LEVEL\]/gi, level )			expression = expression.replace ( /\[LAST_LEVEL\]/gi, lastLevel )			expression = expression.replace ( /\[NEXT_LEVEL\]/gi, nextLevel )			expression = expression.replace ( /\[LEVEL_ABS_POS\]/gi, absLevelPos [ level - 1 ] )			expression = expression.replace ( /\[LEVEL_REL_POS\]/gi, relLevelPos [ level - 1 ] )			//alert ( expression )			tmp = eval ( expression )				//alert ( tmp )		}		tmp = tmp.replace ( /\[LINK\]/gi, link )		tmp = tmp.replace ( /\[TARGET_FRAME\]/gi, targetFrame )		icon = icon == "" ? "" : ( "<img src=\"" + icon + "\" align=absmiddle border=0>&nbsp;" )		tmp = tmp.replace ( /\[ICON\]/gi, icon )		imgOp = imgOp == "" ? "" : ( "<img src=\"" + imgOp + "\" align=absmiddle border=0>&nbsp;" )		tmp = tmp.replace ( /\[IMG\]/gi, imgOp )		tmp = tmp.replace ( /\[TEXT\]/gi, text ) 		tmp = tmp.replace ( /\[STATUS\]/gi, status )		tmp = tmp.replace ( /\[TIP\]/gi, tip )//		if ( i < 10 ) alert ( "i: "+ i + " - tmp: " + tmp ) 				html += tmp		lastLevel = level	}	for ( var k = level;  k >= 0; k-- ) html += arrCmds [ 3 + ( level + k - 1 ) * 3] 			html += arrCmds [ arrCmds.length - 1 ].replace ( webDbNameTag, webDbName );	//alert ( html )	document.write ( html )}