/*
external js file for top main navigation and quick access
$Source: /usr/cvs/eMB/Clickstream_DCVD/js/nav2_nav3.js,v $
$Revision: 1.1 $
Check-In $Date: 2002/10/08 10:14:32 $
*/

//quick access navigation variables.
var allQuickAccessTabs = ["qalevel1-0","qalevel1-1","qalevel1-2","qalevel1-3"];
var allQuickAccessTabsObjects;
var allQuickAccessLayers = ["qasub0","qasub1","qasub2","qasub3"];
var qaButtonOnSource = sUriPrefix + "/img/nav/ok_button.gif";
var qaButtonOrangeSource = sUriPrefix + "/img/nav/ok_button_orange.gif";


var arraysReady = false;
// mainnavi
var defaultHeight = 21; // default WhiteLayer-Height for NS4, only NS4 needs this 
var sumOfWidthes = 0; // sum of width of first level main navigation 
var resetMainMenu = true; // flag for idle handler so that showMenu is just called first time
// mainnavi & quickAccess
var mainnaviX, mainnaviY, mnMaxX; // coordinates for mousemove-eventhandler
var extremeGmBonus = 10;
// QuickAccess
var lastActiveQaTab = -1; // flag to avoid senseless function calls
var numberOfQaTabs;
var qasubheight = 0;
var qaLevel1Height = 16;
var qaStartX = 0;
var qaOverAllWidth = 350; // for qa 1st level highlight in ns4.x
var resetQuickAccess = true; // flag for idle handler so that showQuickAccess is just called first time
var lockQASearch = false; // flag to lock QuickAccess when in focus

// sets coordinates for the mousemove-Event-handlers
function setupCoordsAndArrays(){
	if( !window.allNavLayer || !allNavLayer.length )
		return;

	if (bNav3InPage)
    {
  	    mainNavigationLayer =	 new eMBLayer( "mnv" );
  	    mnSecondLevelBgLayer = new eMBLayer( "mnsub00" );		
  	    whiteLayer = new eMBLayer( "whiteNavLayer" );
  	    naviMainUnderLine =	new eMBLayer( "mnul" );
  	    allNavLayerObjects = new Array( allNavLayer.length );
		for (var i=0; i<allNavLayer.length; i++)
		{
			allNavLayerObjects[i] = new eMBLayer( allNavLayer[i] );
		}
		allMenu1LayersObjects = new Array( allMenu1Layers.length );
		for (var i=0; i<allMenu1Layers.length; i++)
		{
			allMenu1LayersObjects[i] = new eMBLayer( allMenu1Layers[i] );
		}
    	mainnaviX = mainNavigationLayer.getX(); // x-position of mainnavi-layer
	    mainnaviY = mainNavigationLayer.getY(); // y-position of mainnavi-layer
	}
	
    qaHighlightLayer =	new eMBLayer( "qahighlight" );
  	qaBgLayer =					new eMBLayer( "qabg" );
  	qaBgTabLayer =			new eMBLayer( "qabgtab" );
  	qaLayer =						new eMBLayer( "qatab" );
		allQuickAccessTabsObjects = new Array( allQuickAccessTabs.length );
		for (var i=0; i<allQuickAccessTabs.length; i++) allQuickAccessTabsObjects[i] = new eMBLayer( allQuickAccessTabs[i] );
		allQuickAccessLayersObjects = new Array( allQuickAccessLayers.length );
		for (var i=0; i<allQuickAccessLayers.length; i++) allQuickAccessLayersObjects[i] = new eMBLayer( allQuickAccessLayers[i] );
	
	mnMaxX = 770; // right x-border of the mainnavi-layer
}
// initializes main menu postions of first level, background, white highlight layer and line beyond
// is called once by onload
function setMenuLayerPositions(){
	if (!bNav3InPage) return true; 
	
	if( !window.allNavLayer || !allNavLayer.length || !window.allNavLayerObjects || !allNavLayerObjects[ 0 ] )
		return;
	
	if (IE4) setupNavLayerWidthesForIE4(); // padding patch, just for IE4
	for (i=1; i < allNavLayer.length; i++)
	{
		var allNavLayerObjectWidth = allNavLayerObjects[i-1].getWidth();
		var allNavLayerObjectWidth2 = allNavLayerObjects[i].getWidth();
		var allMenu1LayersObjectWidth = allMenu1LayersObjects[i].getWidth();
		if(OP)
		{
			if(document.all[allNavLayerObjects[i-1].id])
			{
				allNavLayerObjectWidth = document.all[allNavLayerObjects[i-1].id].offsetWidth;
			}
			if(document.all[allNavLayerObjects[i].id])
			{
				allNavLayerObjectWidth2 = document.all[allNavLayerObjects[i].id].offsetWidth;
			}
			if(document.all[allMenu1LayersObjects[i].id])
			{
			  allMenu1LayersObjectWidth = document.all[allMenu1LayersObjects[i].id].clientWidth;
			}

		}
		 var currentXPosition = allNavLayerObjects[i-1].getX() + allNavLayerObjectWidth;
		 allNavLayerObjects[i].setX( currentXPosition );
		 var secondLevelXposition;
		 if ( (currentXPosition + allNavLayerObjectWidth2) > allMenu1LayersObjectWidth ){
			 secondLevelXposition = currentXPosition + allNavLayerObjectWidth2 - allMenu1LayersObjectWidth;
		 }
		 else{
			 secondLevelXposition = 0 ;
				if (NS && allMenu1LayersObjects[i].isObject()) allMenu1LayersObjects[i].object.document.images[0].src = sUriPrefix + "/img/1pix.gif";
				else if (document.images["nav3subedge"+i]) document.images["nav3subedge"+i].src = sUriPrefix + "/img/1pix.gif";
		 }
		 allMenu1LayersObjects[i].setX( secondLevelXposition );
	}
	var lastWidth = allNavLayerObjects[allNavLayerObjects.length-1].getWidth();
	if(OP)
	{
		lastWidth = document.all[allNavLayerObjects[allNavLayerObjects.length-1].id].offsetWidth
	}
 
	sumOfWidthes = allNavLayerObjects[allNavLayerObjects.length-1].getX() + lastWidth;
	setupWhiteLayer(activeTab);
	naviMainUnderLine.setSize ( sumOfWidthes, 1 );
	mainNavigationLayer.show();
	// fix for first time loading NS4 (collapsing top navigation)
	if (document.layers){ /* may cause Problems, if there's only 1 topic in the topnavigation */
		if ( allNavLayerObjects[allNavLayerObjects.length-1].getX()< 1 ){
			DHTML_init(); 
			setTimeout("setMenuLayerPositions()", 100);
		}
	}
}
function setQaTabPositions(){
	if (!bNav2InPage) return true;
	if (IE4) setupQaTabWidthesForIE4();
	var currentX = qaOverAllWidth;
	if (!allQuickAccessTabsObjects) return true;

	//we have to verify whether is it just one tab there
	/// from version 4.7.0
	/// START

	var emptyCounter = 0;
	 blnOneTab = false;
	for (var j=allQuickAccessTabsObjects.length-1; j>=0; j--)
	{
		var allQuickAccessTabsObjectWidth = allQuickAccessTabsObjects[j].getWidth();
		if(OP){
			allQuickAccessTabsObjectWidth = document.all[allQuickAccessTabsObjects[j].id].offsetWidth;
		}
		if(allQuickAccessTabsObjectWidth < 0){ // the tab doesn't exist
			emptyCounter++;
		}
	}
	if(emptyCounter == 3){
		blnOneTab = true;
	}
	
	/// END

	for (var i=allQuickAccessTabsObjects.length-1; i>=0; i--)
	{
		var allQuickAccessTabsObjectWidth = allQuickAccessTabsObjects[i].getWidth();
		if(OP)
		{
			allQuickAccessTabsObjectWidth = document.all[allQuickAccessTabsObjects[i].id].offsetWidth;
		}
		if(allQuickAccessTabsObjectWidth>=0)
		{
			if(blnOneTab){
				if(allQuickAccessTabsObjectWidth < 100) {
					allQuickAccessTabsObjectWidth = 100;	
					var allOrmTabsObjects = new eMBLayer( "ormtab-" + i );
					allOrmTabsObjects.setSize(99,16);
				}
			}
			currentX -= allQuickAccessTabsObjectWidth;
		}
		allQuickAccessTabsObjects[i].setX( currentX );

		allQuickAccessTabsObjects[i].show();
	}
	qaBgLayer.setX( currentX );
	qaBgTabLayer.setX( currentX + 1 );
	qaBgLayer.setSize( qaOverAllWidth-1 - currentX, 15 );
	qaBgTabLayer.setSize( qaOverAllWidth - currentX - 2 , 1 ); // "-2" for 'rounded' qa-corners
	qaStartX = currentX;
	if (NS) qaLayer.setSize( qaOverAllWidth, qaLevel1Height );
  else if ( MAC && MS ) qaLayer.object.style.clip = "rect( 0px "+qaOverAllWidth+"px "+qaLevel1Height+"px 0px )";
}

// positioning the white tab for highlightning the first level of main navigation			
// called by onmouseover on tab element
function setupWhiteLayer(activeTabLayer)
{
	if (activeTabLayer=="nav3_") 
	{
		whiteLayer.hide();
		return true;
	} // needed if screen has no default tab active
	if ((activeTab=="nav3_") && (activeTabLayer!="nav3_"))
	{
		whiteLayer.show();
	}

	whiteLayer.setX(new eMBLayer(activeTabLayer).getX());

	var activeWidth = new eMBLayer(activeTabLayer).getWidth();
	if(OP)
	{
		activeWidth = document.all[new eMBLayer(activeTabLayer).id].offsetWidth;
	}
	whiteLayer.setSize( activeWidth, defaultHeight );	
}
// workaround just for IE4: sets initial default widthes for first level tabs
// just called on initialisation	
function setupNavLayerWidthesForIE4(){
	if (!IE4) return;
	var w = 0;
	for (i=0; i<allNavLayerObjects.length; i++){
		var d = allNavLayerObjects[i].object;
		if ( d ){
			w = d.children[0].clientWidth;
			d.style.pixelWidth = w;
		}
	}
	for (i=0; i<allMenu1LayersObjects.length; i++){
		var d = allMenu1LayersObjects[i].object;
		if ( d ){
			w = d.children[0].clientWidth;
			d.style.pixelWidth = w;
		}
	}
}
// workaround just for IE4: sets initial default widthes for first level quickaccess tabs
// just called on initialisation	
function setupQaTabWidthesForIE4(){
	if (!IE4) return;
	var w = 0;
	for (i=0; i<allQuickAccessTabsObjects.length; i++){
		var d = allQuickAccessTabsObjects[i].object;
		if ( d ){
			w = d.children[0].clientWidth;
			d.style.pixelWidth = w;
		}
	}
}
// central function for main navigation controling
// called by eventhandler and directly onmouseover-events by html-object
// called also on initizialisation
// take care: showMenu ist called on idle state all of the time by handleMove() or MShandleMove() eventhandler
function showMenu(menu,picNum) {

	if (!bNav3InPage) return true;
		
	if( !allNavLayer.length || !allNavLayerObjects[ 0 ] )
		return;
	
	// if menu="" then call comes from idle handler
	// if resetMainMenu == false then showMenu already had been called by idle handler successfully
	if (!arraysReady) setupCoordsAndArrays();
	if ((resetMainMenu == false) && (menu=='')) {
		return true;
	} else {
		resetMainMenu = true; // set after first time called
	}
	for (i=0; i<allMenu1LayersObjects.length; i++) 
	{
		allMenu1LayersObjects[i].hide(); // hide all menus
	}
	if (menu!=mnSecondLevelBgLayer.id && menu!="")
	{
		var menuLayer = new eMBLayer( menu );
		menuLayer.show();	// show level two menu layer
	}
	if (picNum != null)
	{
		setupWhiteLayer(picNum); // highlight white tab
	}
	// switch back to default main navigation level 2 submenu
	// activeSubNavName and activeTab have to be set in header of html-file
	if (menu=="") 
	{
		if (activeTab!="" && activeSubNavName !="") 
		{
			showMenu(activeSubNavName,activeTab);
		}	
		resetMainMenu = false;	
	}
}
// non-MS event handler for mouse moves
// calls showmenu without parametes on mouseout
// calls showQuickAccess without parametes on mouseout
var oldCoordX, oldCoordY;
function handleMove(ev) {

	var showMenuFlag = true;
	var showQuickAccessFlag = true;
	var eventObject = null;
	var gmBonus = 3;
	var coordX, coordY;
	if (!MS) eventObject=ev; // define an unified event-object for all browsers
	else eventObject = window.event;
	if (OP || MS){
		coordX = eventObject.clientX; // coordinates of the mousepointer, when event was fired
		coordY = eventObject.clientY;
		if (MS){
			if (IE6) // document.body.scrollTop no longer supported in IE6 (now scrollTop is part of html-object)
				var documentBody = document.getElementsByTagName("html")[0];
			else
				var documentBody = document.body;
			coordX = coordX + documentBody.scrollLeft; // correct mouse-coords with possible scrolloffset for MS
			coordY = coordY + documentBody.scrollTop - eval(top_distance);
		}
	} else {
		coordX = eventObject.pageX;
		coordY = eventObject.pageY - eval(top_distance);
	}
	if (oldCoordX==coordX && oldCoordY==coordY) return true;
	else {
		oldCoordX=coordX;
		oldCoordY=coordY - eval(top_distance);
	}
	if( !(coordX < mainnaviX || coordX > mainnaviX+sumOfWidthes || coordY < mainnaviY || coordY > mainnaviY+20)) showMenuFlag=false; // check first level
		else if( !(coordX < mainnaviX || coordX > mnMaxX || coordY <= mainnaviY+20 || coordY > mainnaviY+20+20+extremeGmBonus)) showMenuFlag=false; // check second level
	if( !(coordX < (mnMaxX-qaOverAllWidth)-gmBonus || coordX > mnMaxX+gmBonus || coordY < 0 || coordY > qasubheight+4+gmBonus) ) showQuickAccessFlag=false; // check quick access	
	if (showMenuFlag==true)
	{
	showMenu(""); // execute showMenu
	}
	if (showQuickAccessFlag==true && resetQuickAccess==true) {
	  if (!lockQASearch) showQuickAccess( -1 ); // close QuickAccess only when no focus on Search-Field
	  //showQuickAccess( -1 ); // close QuickAccess
	}
}
// initializing event handling for catching mousemove-events
// this function is responsible for recognizing mouse-outs
function Event_init() {
	if(!MS) {
		if (DOM && !OP) window.onunload=Event_quit; // for NS6
		else if (NS) document.captureEvents(Event.MOUSEMOVE);
		document.onmousemove=handleMove;		
	}
	else if ( !IE4 && !MAC ) document.getElementsByTagName("html")[0].onmousemove=handleMove;
  else document.all.tags("body")[0].onmousemove=handleMove;
}
// deactivate event-handler of site on unload. For NS6 to avoid senseless errorreports
function Event_quit(ev){
	if (DOM){
    document.getElementsByTagName("body")[0].removeEventListener("mousemove", handleMove, true);
		document.onmousemove=null;	
	}
}
// activate tab in QuickAccess
function activateQuickAccessTab( activeQaTab, show ){
	if ( activeQaTab >= 0 ) {
		if (show==true){
			if (NS) qaLayer.setSize( qaOverAllWidth, 100 );
      else if ( MAC && MS ) qaLayer.object.style.clip = "rect( 0px "+qaOverAllWidth+"px 100px 0px )";
			
			qaHighlightLayer.setX( allQuickAccessTabsObjects[activeQaTab].getX() );
			
			var allQuickAccessTabsObjectWidth = allQuickAccessTabsObjects[activeQaTab].getWidth();
			var allQuickAccessTabsObjectHeight = allQuickAccessTabsObjects[activeQaTab].getHeight();
			if(OP)
			{
				allQuickAccessTabsObjectWidth = document.all[allQuickAccessTabsObjects[activeQaTab].id].offsetWidth;
				allQuickAccessTabsObjectHeight = document.all[allQuickAccessTabsObjects[activeQaTab].id].offsetHeight;
			}
			qaHighlightLayer.setSize( allQuickAccessTabsObjectWidth, allQuickAccessTabsObjectHeight );
			
			qaBgLayer.setBgColor("#e4e4e4"); // this layer	makes all tabs which are NOT shown to darker gray				
			qaHighlightLayer.show();
			if ( DOM && !OP && !MS) setTimeout("changeQaTabArrow("+ activeQaTab +", true )", 1); // needed for NS6 to avoid flicker
			else changeQaTabArrow( activeQaTab, true );
			if ( activeQaTab!=0 ) changeQaTabLine( activeQaTab, true );
		} else {
			if (NS) qaLayer.setSize( qaOverAllWidth, qaLevel1Height );
      else if ( MAC && MS ) qaLayer.object.style.clip = "rect( 0px "+qaOverAllWidth+"px "+qaLevel1Height+"px 0px )";
			qaHighlightLayer.hide();
			qaBgLayer.setBgColor("#f0f0f0");
			for (var i=0; i<numberOfQaTabs; i++){
				if (DOM && !OP && !MS) setTimeout("changeQaTabArrow("+ i +", false )", 1); // needed for NS6 to avoid flicker
				else changeQaTabArrow( i , false );
				if ( i!=0 ) changeQaTabLine( i , false ); // needed for NS6 to avoid flicker
			}
		}
	}
}
// changes qa level one lines IF NESSESARY
function changeQaTabLine( nr, on ){
	var imageObject = null;
	if (NS){
		if ( !allQuickAccessTabsObjects[nr].isObject() ) return true;
		imageObject = allQuickAccessTabsObjects[nr].object.document.images[0];
	} else imageObject = document.images["qaline0"+nr];
	if (imageObject && imageObject.src.search("1pix"+((!on)?"":"_gray_c1")+".gif")>=0) 
		imageObject.src = sUriPrefix + "/img/"+(on?"1pix":"1pix_gray_c1")+".gif";
}

// changes qa level one arrows IF NESSESARY
function changeQaTabArrow( nr, on ){
	var imageObject = null;
	if (NS){
		if (!allQuickAccessTabsObjects[nr].isObject() ) return true;
		imageObject = allQuickAccessTabsObjects[nr].object.document.images[1];
	} else if (MS || DOM) imageObject = document.images["qaarrow0"+nr];


	if (imageObject && (imageObject.src.search("quickacc_o"+((!on)?"n":"ff")+".gif")>=0 || 
						imageObject.src.search("quickacc_o"+((!on)?"n_2":"ff")+".gif")>=0)){
		if(imageObject.id!="facelift") {
			imageObject.src = sUriPrefix + "/img/nav/quickacc_o"+((on)?"n":"ff")+".gif";
		} else {
			imageObject.src = sUriPrefix + "/img/nav/quickacc_o"+((on)?"n_2":"ff")+".gif";
		}
		if(!on) {
			if(oldObjClass!=null){
				oldObjClass.className='qatablink';
			}
		}
	}else if (imageObject && imageObject.src.search("login_pfeil_o"+((!on)?"n":"ff")+".gif")>=0){
		//this section is just for ORM
    	imageObject.src = sUriPrefix + "/img/nav/login_pfeil_o"+((on)?"n":"ff")+".gif";
		changeQaOrmBackground(nr,on);
	}

}

// this change the background of the orm tab
function changeQaOrmBackground(nr,on) {
	//the id of orm tab starts with "ormtab-"
	var allOrmTabsObjects = new eMBLayer( "ormtab-" + nr );
	if(!on) {
		allOrmTabsObjects.setBgColor("#527BB9");
		if(oldObjClass!=null){
			oldObjClass.className='qalogin';
		}		
	}
	else {
		allOrmTabsObjects.setBgColor("#ffffff");
	}
}



var oldObjClass = null;
function changeStyle(obj) {
	oldObjClass = obj;
	obj.className='qa-active';
}



// showQuickAccess is called when rollover/click on quickaccesstabs is performed
// qaLayerNum is the number of the Layer which has to be shown
// qaLayerNum is empty if called by handlemove/MShandlemove handler
function showQuickAccess( qaLayerNum ) {

	// reset lockQASearch
	lockQASearch = false;

	if (!bNav2InPage) return true;
	if (!arraysReady) setupCoordsAndArrays();
	if (lastActiveQaTab==qaLayerNum) return true;
	// after first time calling showQuickAccess resetQuickAccess is false, 
	// so an showQuickAccess(-1) call (made by handlemove/MShandlemove handler) will just one time lead to an complete execution of showQuickAccess
	if ( (resetQuickAccess == false) && (qaLayerNum==-1) ) { 
		return true;	
	} else {
		// this reset to true is always executed if an call with an parameter other than "" is executed
		resetQuickAccess = true;
	}
 	for (i=0; i<allQuickAccessLayersObjects.length; i++) {	
		if ( i != qaLayerNum) {
			allQuickAccessLayersObjects[i].hide();
			qasubheight = 0;
		}	
	}
  activateQuickAccessTab(0,false);// first parameter doesn't matter, if 2nd is "false"
	if (qaLayerNum==-1){
    lastActiveQaTab=qaLayerNum;
		resetQuickAccess = false;
		return true;
	}
	activateQuickAccessTab(qaLayerNum,true);	
 	var qaLayerObject = allQuickAccessLayersObjects[qaLayerNum];
	if (qaLayerObject.isObject() && qaLayerNum>=0 && qaLayerNum < numberOfQaTabs) {		 
		qaLayerObject.show();
		var qaLayerObjectHeight = qaLayerObject.getHeight();
		if(OP)
		{
			qaLayerObjectHeight = document.all[qaLayerObject.id].offsetWidth;
		}
		qasubheight = qaLayerObjectHeight+qaLayerObject.getY();
	}
  lastActiveQaTab=qaLayerNum;	
}

// init has to be called by every html-page which has an top navigation and QuickAccess
// init is called onload of the body tag
function initialisation() {
	setupCoordsAndArrays();
	setMenuLayerPositions(); // building layout of main menu and displaying
	if (bNav3InPage && window.activeSubNavName)
    {	
      // initialize submenu (setting right white layer and initial second level
		showMenu(activeSubNavName,activeTab); 
    }
	Event_init(); // initialize event-handling for main menu AND quick access
	setQaTabPositions(); // initialize quick access
	arraysReady = true;
}
// calls initialisation() using a timeout (needed for NS4), fixes slow menu initialisation on NS4
function init(){
    setTimeout("initialisation()", OP ? 1000 : 1 );
}

var goOrmButton = new eMBLayer( "qasub3" );
function qaOrmButtonChange( active )
{
	if (!goOrmButton.isObject()) goOrmButton = new eMBLayer( "qasub3" );
	var imageObject;
	if ( NS ) imageObject = goOrmButton.object.document.images[5];
	else imageObject = document.images["go-orm"];
	if (imageObject) imageObject.src =  ( active )?qaOrmButtonOrangeSource:qaOrmButtonOnSource;
} 
