/*********************************************************
 * fh menu v2
 * by webwerk  
 *********************************************************/

var activeMenuId = new String();

function setActiveMenuId(actMenId) {
	activeMenuId = actMenId;
}

function getActiveMenuId() {
	return activeMenuId;
}

// Show/hide layers in menu
function switchMenu(currMenueItem, menuState) {
	// Get current menu item id
	var currMenueItemId = currMenueItem.getAttribute("id");
	// Get current menu item levels
	var currMenueItemLevels = new Array();
	currMenueItemLevels = currMenueItemId.split("_");
	// Save all menu layer ids 
	var menuLevels = new Array();
	for(var levelIter in currMenueItemLevels) {
		if (currMenueItemLevels[levelIter] != "menu") {
			menuLevels.push(currMenueItemLevels[levelIter]);
		}
	}
	
	// Current menue level
	var currentLevel = menuLevels.length;		
	// Generate id of the related sub menu layer
	var subMenuDivId = new String();
	subMenuDivId = currMenueItemId + "_00";
	
	// Do menu item highlighting
	resetOtherItems(currMenueItemId);
	highlightPath(currMenueItemId);
	
	// If there some sub menue layer
	if (document.getElementById(subMenuDivId)) {
		var currDiv = new DocObj(subMenuDivId);
		if (currentLevel == 1) {
			closeOtherMenues(currentLevel, subMenuDivId);	
		} else if ((currentLevel > 1) && (currentLevel < 4)) {
			closeOtherMenues(currentLevel, subMenuDivId);
		}
		// fi
				
		if (currentLevel == 3) {
			var tmpPos = new Array();
			var tmpLayer = document.getElementById(subMenuDivId);			
		}
		
		setActiveMenuId(subMenuDivId);
		if (menuState == 1) {
			showObj(currDiv); 
		} else {
			hideObj(currDiv); 
		}
	} else {
		closeOtherMenues(currentLevel, subMenuDivId);
	} // fi

} // end function switchMenu


// Fetch a DOM object out of the current document
function DocObj(uniqObjName) {
	if (document.getElementById) {
		this.obj = document.getElementById(uniqObjName);
		if (this.obj) {
			// Check if there is some style property around
			this.style = document.getElementById(uniqObjName).style;
			this.className = document.getElementById(uniqObjName).className;
			
			if (this.obj.childNodes) {
				this.childNodes = this.obj.childNodes;			
			}
		}
	} else if (document.all) {
		this.obj = document.all[uniqObjName];
		this.style = document.all[uniqObjName].style;
		this.className = document.all[uniqObjName].className;
			
	} else if (document.layers) {
		this.obj = document.layers[uniqObjName];
		this.style = document.layers[uniqObjName];
		this.className = document.layers[uniqObjName].className;
	}
}

// Show a layer object
function showObj(currObj) {
	if (currObj) {
		if (currObj.style) {
			currObj.style.display = "block";
		}
	}
} // showObj(currObj)

// Hide a layer object
function hideObj(currObj) {
	if (currObj) {
		if (currObj.style) {
			currObj.style.display = "none";	
		}		
	}
} // hideObj(currObj)


function closeAllMenus() {
    var allLayer = new Array();
    allLayer = document.getElementsByTagName("div");
        
    // Loop through all layers in the current document
    for(var k=0; k<allLayer.length;k++) {
        var currLayerId = new String();
        currLayerId = allLayer[k].getAttribute("id");
        // Select only menu layers
        if (currLayerId) {
            if ( (currLayerId != "") && (currLayerId.indexOf("menu_") != -1) ) {
                allLayer[k].style.display = "none";
            }
        }
    }
} // end function closeAllMenus



function closeMenu(menuId) {
	if (document.getElementById(menuId)) {
		document.getElementById(menuId).style.display = "none";	
	}	
}

function closeOtherMenues(currentLevel, activeMenueId) {
	var allLayer = new Array();
	allLayer = document.getElementsByTagName("div");
	var subMenuIdPartLen = 6;
	
	var menueIdsToSkip = new Array();
	
	if(currentLevel > 1) {
		for(var i=0; i<currentLevel; i++) {			
			var lastMenueLayer = activeMenueId.substr(0, activeMenueId.length - subMenuIdPartLen) + "_00";			
			menueIdsToSkip.push(lastMenueLayer);
			subMenuIdPartLen += 3;
		}
	} // fi 

  // Reset link classes for closed menu	
	resetOtherItems(activeMenueId);
	
	// Loop through all layers in the current document
	for(var k=0; k<allLayer.length;k++) {
		var currLayerId = new String();
		currLayerId = allLayer[k].getAttribute("id");
		// Select only menu layers 
		if (currLayerId) {
			if ((currLayerId != "") && (currLayerId.indexOf("menu_") != -1)) {
				var lastMenueLayer = activeMenueId.substr(0, activeMenueId.length - subMenuIdPartLen) + "_00";
			
				// Flag to determine whether the current layer should remain visible or not
				var skipCurrLayer = false;				
				for(var n=0; n<menueIdsToSkip.length; n++)  {
					if (menueIdsToSkip[n].indexOf(currLayerId) != -1 ) {
						skipCurrLayer = true;								
						break;
					} else {
						skipCurrLayer = false;	
					}					
				} // end for n
				
				if (skipCurrLayer == false) {
					allLayer[k].style.display = "none";		
				} // fi (skipCurrLayer)
			} // fi
		} // fi (currLayerId)
	} // end for k
} // end function closeOtherMenues


/*********************************************************
 * Highligh the current path through the sub menus
 *********************************************************/
function highlightPath(currMenueItemId) {
  // layer id e.g. menu_02_02_01
  var layerIds = new Array();
  layerIds = currMenueItemId.split("_");
  var layersToHighlight = new Array();
  
  // compose item ids  
  switch (layerIds.length) {
    case 2:
      layersToHighlight.push(layerIds[0]+"_"+layerIds[1]);
      break;
    case 3:
      layersToHighlight.push(layerIds[0]+"_"+layerIds[1]+"_"+layerIds[2]);      
      break;
    case 4:  
      layersToHighlight.push(layerIds[0] + "_"+layerIds[1] + "_" + layerIds[2]);
      layersToHighlight.push(layerIds[0] + "_"+layerIds[1] + "_" + layerIds[2] + "_" + layerIds[3]);    
      break;          
    default:
      
      break;
  }
  
  // hightlight items according to nav level  
  switch (layerIds.length) {
    case 2:
        for(var currId in layersToHighlight) {
        		if (layersToHighlight[currId] != "") {
        			setLayerClass(layersToHighlight[currId], "menuelinkclicked");			
        		} // fi
        	}      
      break;
    case 3:    
    case 4:
        for(var currId in layersToHighlight) {
      		if (layersToHighlight[currId] != "") {
      			setLayerClass(layersToHighlight[currId], "submenuelinkclicked");			
      		} // fi
      	}    
      break;          
    default:
      
      break;
  }  
  
  
	
	
	

     //alert("currMenueItemId =" + currMenueItemId + "\n layersToHighlight: " + layersToHighlight.join(", "));
  

	
	return true;
} // end highlightPath

function setLayerClass(targetLayerId, newClassName) {
  var currLayer = document.getElementById(targetLayerId);
  currLayer.className = newClassName;  
}


function resetOtherItems(currMenueItemId) { 
  var idPrefix = currMenueItemId.substring(0, currMenueItemId.length-2);
  //alert("currMenueItem =" + currMenueItem + " pref: " + idPrefix);
  
  var currMenueItemLevels = new Array();
	currMenueItemLevels = currMenueItemId.split("_");
	
		
  var allLayer = new Array();
  allLayer = document.getElementsByTagName("a");
  
  var currMenuItems = new Array();
  
  // Loop through all layers in the current document
  for(var k=0; k<allLayer.length;k++) {
    var currLayerId = new String();
    currLayerId = allLayer[k].getAttribute("id");
    if (currLayerId) {
      if ((currLayerId.indexOf(idPrefix) != -1) && (currLayerId.length == currMenueItemId.length)) {
        currMenuItems.push(currLayerId);
      }
            if ((currLayerId.indexOf(idPrefix) != -1) && (currLayerId.length == currMenueItemId.length-3)) {
        currMenuItems.push(currLayerId);
      }
    } // fi
  } // end for
  
  for(var currId in currMenuItems) {
    if (currMenuItems[currId] != "") {
      if (currMenueItemLevels.length > 2) {
        setLayerClass(currMenuItems[currId], "submenuelink");
      } else if (currMenueItemLevels.length <= 2) {
        //alert(currMenuItems[currId]);
        setLayerClass(currMenuItems[currId], "menuelink");
      }
    } // fi    
  }
  
  
  
  //   alert("currMenueItem =" + currMenueItemId + "\n  pref: " + idPrefix + "\n currMenuItems: " + currMenuItems.join(", "));
  
  
} // end function resetOtherItems




