// $Id: menu.js,v 1.4 2006/02/21 15:09:12 amoe Exp $
//
//
//****************** set variables and defaults ************//
var struc           = new Array();
var levels          = new Array();
var maxlevel        = 0;
var is_analyse      = 0; 
var glMaxItems      = 0;
var _ShowSimpleMenu = 0;
var glMenuItem		= '';
var _PrivID 		= '';
var _ConfirmText 	= '';
var spl_prefix		= '&#149;&nbsp;';
var img_start       = '<img height="16" width="16" border=0 src="pics/tree_start.gif">';
var img_background  = 'background="pics/tree_bg.gif"';
var img_vertline    = '<img height="16" width="16" border=0 src="pics/tree_vertline.gif">';
var img_space       = '<img height="16" width="16" border=0 src="pics/tree_space.gif">';
var img_end         = '<img height="16" width="16" border=0 src="pics/tree_end.gif">';
var img_split       = '<img height="16" width="16" border=0 src="pics/tree_split.gif">';
var img_expand      = '<img height="16" width="16" border=0 src="pics/tree_expand.gif">';
var img_collapse    = '<img height="16" width="16" border=0 src="pics/tree_collapse.gif">';
var img_leaf        = '<img height="16" width="16" border=0 src="pics/tree_leaf_dreieck.gif">';

//****************** define structure of datas ************//
function CreateStructure(level, seqno, text, url){
	
	var o = new Object();
	var i = (struc.length)?struc.length:0;
	o.level = parseInt(level);
	o.seqno = seqno;
	o.text = text;
	o.url = url;
	struc[i] = o;
	glMaxItems = struc.length;
}

//****************** analyse structure ********************//
function AnalyseStructure(){
	
		if(is_analyse == 1){
			return true;
		}
		
	// evaluate maxlevel and set permissions
		for(i=0; i<struc.length; i++){
			var a = struc[i];
			var p = (struc[(i-1)])?struc[(i-1)]:0;
			var n = (struc[(i+1)])?struc[(i+1)]:struc.length;
			a.is_node = (a.level < n.level)?1:0;
			levels[i] = 0;
				if( a.level > maxlevel){
					maxlevel = a.level;
				}
			a.lastnode = 0;	
			a.open = 0;
			a.exec = 1;
		}
	// find last nodes of subtrees            
		var lastlevel = maxlevel;
			
			for(i=(struc.length-1); i>=0; i--){
				var a = struc[i];
					
					if(a.level <= maxlevel){
						for(j=(a.level+1); j<=maxlevel; j++){
							levels[j]=0;
						}
					}
					if(levels[a.level] == 0){
						levels[a.level] = 1;
						a.lastnode = 1;
					}
					else{
						a.lastnode = 0;
						lastlevel = a.level;
					}
				
			}
	is_analyse = 1;			
}

//****************** create menu **************************//
function BuildMenu(){
	
	// is menu visible 
		if(glMenuVisible == 0){
			return true;
		}
	// build simple menu
		if(_ShowSimpleMenu == 1){
			return BuildMenuSimple();
		}	
	// set root node
	var is_open = (glMenuStatus)?1:0;
	str = '<table border=0 cellspacing=0 cellpadding=0  ><tr><td><a href="javascript:top.OpenMenu('+is_open+');" >'+img_start+'</a></td></table>';
	
	// create menu item
		for(i=0;i<struc.length; i++){
			a = struc[i];
									
			if((a.level <= nodelevel) || (a.level == 1)){
				str = str+'<table border=0 cellspacing=0 cellpadding=0  ><tr valign=top>';  	
				j = 0;
					// vertical lines from higher levels  
					while(j < (a.level-1)){
								
						if(levels[j] == 1){
							str = str+'<td '+img_background+' >'+img_vertline+'</td>';		
						}
						else{
							str = str+'<td>'+img_space+'</td>';
						}
					j++;
					}	
				
				// corner at end of subtree or t-split
					if(a.lastnode == 1){
						str = str+'<td >'+img_end+'</td>';
						levels[a.level-1] = 0;
					}
					else{
						str = str+'<td '+img_background+'>'+img_split+'</td>';		
						levels[a.level-1] = 1;
					}	
				// node (with subtree) or leaf (no subtree)
				if (a.is_node == 1){
					// expand or collapse
					if(a.open == 0){
						var nodelevel = a.level;								
						str = str+'<td ><a href="javascript:top.LoadMenu('+i+');" >'+img_expand+'</a></td>';
					}
					else{
						nodelevel = maxlevel;
						str = str+'<td '+img_background+'><a href="javascript:top.LoadMenu('+i+');">'+img_collapse+'</a></td>';
					}
				}
				else{
					str = str+'<td >'+img_leaf+'</td>';
				}
				// create item text
				var text = (a.url)?a.text:'<span class="TM_InActive">'+a.text+'</span>';
				str = str+'<td ><a id="id_'+i+'" class="Treemenu" href="javascript:void();" onClick="top.LoadMain('+i+'); return false;" title="'+a.text+'" >'+text+'</a></td>';
				str = str+'</tr></table>';
			}
		
		}

ChangeContent(str);
}
//****************** create simple menu *******************//
function BuildMenuSimple(){
		
	var str = '';
		for(i=0;i<struc.length; i++){
			a = struc[i];
			var level='';
				for(j=0;j<a.level;j++){
					level = level+ '&nbsp;';
				}
			str = str +'<nobr>'+level+spl_prefix+'<a id="id_'+i+'" class="Treemenu" href="javascript:void();" onClick="top.LoadMain('+i+');return false;" title="'+a.text+'">'+a.text+'</a><nobr><br>';
		}
		
	ChangeContent(str);
}
//****************** utilities for menu ************************//
// start
function LoadMenu(position){
	
	glMenuPosition = position;
	struc[position].open = (struc[position].open == 0)?1:0;
	
	for(i=glMenuPosition; i>=0;i--){
		if(struc[i].level == 1){
			break;
		}
	}
	
	BuildMenu();
	SetFocus();
}

function CloseAllNodes(){
	for(i=0;i<glMaxItems;i++){
		struc[i].open = 0;
	}
}

function MenuForward(){
	if((glMenuPosition+1) < glMaxItems){
		glMenuPosition ++;
		MenuManage(true);
	}
}

function MenuBackward(){
	if(glMenuPosition > 0){
		glMenuPosition --;
		MenuManage(true);
	}
}

function MenuManage(glAnchor_init) {

	// Reset anchor.
	if(glAnchor_init)
		glAnchor=undefined;

	if ( (0 <= glMenuPosition) && (glMenuPosition < glMaxItems) ) {
		CloseAllNodes();
		struc[glMenuPosition].open = 1;
		var lastlevel=struc[glMenuPosition].level;
		for(i=glMenuPosition; i>=0;i--){
			// Open parent nodes only!
			if (lastlevel > struc[i].level) {
				lastlevel=struc[i].level;
				struc[i].open = 1;
			}
			else
				continue;

			if(struc[i].level == 1)
				break;
		}

		BuildMenu();
		LoadMain(glMenuPosition, glAnchor);
	}
}

		
function LoadMain(position, anchor){
	
	var check = (_ConfirmText)? confirm(_ConfirmText):true;

	position = (position)?position:0;
	anchor = ( anchor === undefined || anchor === '')?'':glAnchorSymbol+anchor;

	if((struc[position].url) && (check == true)){
		top.glMainRef.location.href = struc[position].url+anchor;
		glMenuPosition = position;
		glMenuItem = struc[position].text; 	
		void SetFocus();
	}
}
	
function SetFocus(){
		
		if(glMenuVisible == 0){
			return true;
		}
	
	if(!ns4){
		var sid = 'id_'+glMenuPosition;
		
			if(_PrivID){
				var pid = 'id_'+_PrivID;
				(glMenuRef.document.getElementById(pid))?glMenuRef.document.getElementById(pid).className = 'TreeMenu':'';
			}
			else{
				for(i=0; i<=glMaxItems;i++){
					var id = 'id_'+i;
					(glMenuRef.document.getElementById(id))?glMenuRef.document.getElementById(id).className = 'TreeMenu':'';
				}
			}
			
		_PrivID = glMenuPosition;	
		glMenuRef.document.getElementById(sid).className = 'TreeMenuActive';
		glMenuRef.document.getElementById(sid).focus();
	}
}
	
function ChangeContent (str) {
	
	if(ns4){
			
		var ref = top.glMenuRef.document.layers[top.glMenuID];
		ref.document.open();
		ref.document.clear();
		ref.document.write(str);
		ref.document.close();
	}
	else{
		top.glMenuRef.document.getElementById(top.glMenuID).innerHTML = str;
	}
}

function LoadContent(seqno, anchor, params){
	if(seqno != ''){
		for(var i=0; i<glMaxItems; i++){
			if(seqno == struc[i].seqno){
				glAnchor = anchor;
				glMenuPosition = i;
				MenuManage();
				break;
			}
		}
	}
}


function OpenMenu(status){
	
	glMenuStatus = (status == 1)?0:1;
	
		if(status == 0){
			for(i=0; i<glMaxItems; i++){
				if(struc[i].is_node == 1){
					struc[i].open = 0;
				}
				if(struc[i].level == 1){
					struc[i].open = 0;
				}
			}
		}
		else{
			for(i=0; i<glMaxItems; i++){
				if((struc[i].is_node == 1) && (struc[i].level < 2)){
					struc[i].open = 1;
				}
			}
		}
	BuildMenu();
	glMenuPosition = 0;
	SetFocus();
}

function SetMenuConfirm(str){
	_ConfirmText = str;
}

function ChangeMenuStyle(){
	_ShowSimpleMenu = (_ShowSimpleMenu == 0)?1:0;
	top.LoadMenu(glMenuPosition);
}
// end

