
// sets, if preview nav
// checks, if variable 'blnIsPreviewNav' in document is set to true
var blnIsNavPreview = window.blnIsPreviewNav ? true : false;

//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 = allQuickAccessLayers.length;
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 ( !blnIsNavPreview && bNav3InPage)
    {
  	    mainNavigationLayer		= getLayer( "mnv" );
  	    mnSecondLevelBgLayer	= getLayer( "mnsub00" );
  	    whiteLayer				= getLayer( "whiteNavLayer" );
  	    naviMainUnderLine		= getLayer( "mnul" );
		
		allNavLayerObjects = new Array( allNavLayer.length );
		for (var i=0; i < allNavLayer.length; i++)
		{
			allNavLayerObjects[i] = getLayer( allNavLayer[i] );
		}
		allMenu1LayersObjects = new Array( allMenu1Layers.length );
		for (var i=0; i<allMenu1Layers.length; i++)
		{
			allMenu1LayersObjects[i] = new getLayer( allMenu1Layers[i] );
		}
    	mainnaviX = mainNavigationLayer.offsetLeft; // x-position of mainnavi-layer
	    mainnaviY = mainNavigationLayer.offsetTop; // y-position of mainnavi-layer
	}
	
	qaHighlightLayer	= getLayer( "qahighlight" );
  	qaBgLayer			= getLayer( "qabg" );
  	qaBgTabLayer		= getLayer( "qabgtab" );
  	qaLayer				= getLayer( "qatab" );
	allQuickAccessTabsObjects = new Array( allQuickAccessTabs.length );
	for (var i=0; i < allQuickAccessTabs.length; i++)
	{
		allQuickAccessTabsObjects[i] = getLayer( allQuickAccessTabs[i] );
	}
	allQuickAccessLayersObjects = new Array( allQuickAccessLayers.length );
	for (var i=0; i < allQuickAccessLayers.length; i++)
	{
		allQuickAccessLayersObjects[i] = getLayer( 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;

	for (i=1; i < allNavLayer.length; i++)
	{
		var allNavLayerObjectWidth = allNavLayerObjects[i-1].offsetWidth;
		var allNavLayerObjectWidth2 = allNavLayerObjects[i].offsetWidth;
		var allMenu1LayersObjectWidth = allMenu1LayersObjects[i].offsetWidth;
		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].offsetLeft + allNavLayerObjectWidth;
		 allNavLayerObjects[i].style.left = currentXPosition + "px";
		 var secondLevelXposition;
		 if ( (currentXPosition + allNavLayerObjectWidth2) > allMenu1LayersObjectWidth ){
			 secondLevelXposition = currentXPosition + allNavLayerObjectWidth2 - allMenu1LayersObjectWidth;
		 }
		 else{
			 secondLevelXposition = 0 ;
				if (document.images["nav3subedge"+i]) document.images["nav3subedge"+i].src = sUriPrefix + "/img/1pix.gif";
		 }
		 allMenu1LayersObjects[i].style.left = secondLevelXposition + "px";
	}

	var lastWidth = allNavLayerObjects[allNavLayerObjects.length-1].offsetWidth;
	if(OP)
	{
		lastWidth = document.all[allNavLayerObjects[allNavLayerObjects.length-1].id].offsetWidth
	}
 
	sumOfWidthes = allNavLayerObjects[allNavLayerObjects.length-1].offsetLeft + lastWidth;
	setupWhiteLayer(activeTab);

	setSize( naviMainUnderLine, sumOfWidthes, 1 );
	mainNavigationLayer.style.visibility = "visible";
}


function setQaTabPositions(){
	if (!bNav2InPage)
		return true;
	
	var currentX = qaOverAllWidth;

	//we have to verify whether is it just one tab there
	var emptyCounter = 0;
	blnOneTab = false;
	for (var j = allQuickAccessTabsObjects.length - 1; j >= 0; j--)
	{
		var allQuickAccessTabsObjectWidth = j < allQuickAccessTabsObjects.length && allQuickAccessTabsObjects[j] ? allQuickAccessTabsObjects[j].offsetWidth : -1;
		if(OP){
			allQuickAccessTabsObjectWidth = document.all[allQuickAccessTabsObjects[j].id].offsetWidth;
		}
		if(allQuickAccessTabsObjectWidth < 0){ // the tab doesn't exist
			emptyCounter++;
		}
	}
	if(emptyCounter == 3){
		blnOneTab = true;
	}

	for (var i = allQuickAccessTabsObjects.length-1; i >= 0; i--)
	{
		var allQuickAccessTabsObjectWidth = i < allQuickAccessTabsObjects.length && allQuickAccessTabsObjects[i] ? allQuickAccessTabsObjects[i].offsetWidth : -1;

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

		}

		if( i < allQuickAccessTabsObjects.length && allQuickAccessTabsObjects[i] )
		{
			allQuickAccessTabsObjects[i].style.left = currentX + "px";
			allQuickAccessTabsObjects[i].style.visibility = "visible";
		}
	}
	
	qaBgLayer.style.left = currentX + "px";
	qaBgTabLayer.style.left = currentX + 1 + "px";
	setSize( qaBgLayer, qaOverAllWidth-1 - currentX, 15 );
	setSize( qaBgTabLayer, qaOverAllWidth - currentX - 2, 1 );
	
	qaStartX = currentX;
	if ( MAC && MS ) qaLayer.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.style.visibility = "hidden";
		return true;
	} // needed if screen has no default tab active
	if ((activeTab=="nav3_") && (activeTabLayer!="nav3_"))
	{
		whiteLayer.style.visibility = "visible";
	}

	var objActiveTab = getLayer(activeTabLayer);
	if( !objActiveTab )
		return;
		
	whiteLayer.style.left = objActiveTab.offsetLeft + "px";

	var activeWidth = objActiveTab.offsetWidth;
	setSize( whiteLayer, activeWidth, defaultHeight );
}


// 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].style.visibility = "hidden"; // hide all menus
	}
	if ( (mnSecondLevelBgLayer && menu != mnSecondLevelBgLayer.id && menu != "" ) || menu )
	{
		var menuLayer = getLayer( menu );
		if( menuLayer )
		{
			menuLayer.style.visibility = "visible";	// 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 - getToolbarHeight( );
		}
	} else {
		coordX = eventObject.pageX;
		coordY = eventObject.pageY - getToolbarHeight( );
	}
	if (oldCoordX==coordX && oldCoordY==coordY) return true;
	else {
		oldCoordX=coordX;
		oldCoordY=coordY - getToolbarHeight( );
	}
	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
		document.onmousemove=handleMove;		
	}
	else if ( !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 ( MAC && MS ) qaLayer.style.clip = "rect( 0px "+qaOverAllWidth+"px 100px 0px )";
			
			qaHighlightLayer.style.left = allQuickAccessTabsObjects[activeQaTab].offsetLeft + "px";
			
			var allQuickAccessTabsObjectWidth = allQuickAccessTabsObjects[activeQaTab].offsetWidth;
			var allQuickAccessTabsObjectHeight = allQuickAccessTabsObjects[activeQaTab].offsetHeight;
			if(OP)
			{
				allQuickAccessTabsObjectWidth = document.all[allQuickAccessTabsObjects[activeQaTab].id].offsetWidth;
				allQuickAccessTabsObjectHeight = document.all[allQuickAccessTabsObjects[activeQaTab].id].offsetHeight;
			}
			
			setSize( qaHighlightLayer, allQuickAccessTabsObjectWidth, allQuickAccessTabsObjectHeight );
			
			qaBgLayer.style.bgColor = "#e4e4e4"; // this layer	makes all tabs which are NOT shown to darker gray
			
			qaHighlightLayer.style.visibility = "visible";
			
			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 ( MAC && MS ) qaLayer.style.clip = "rect( 0px "+qaOverAllWidth+"px "+qaLevel1Height+"px 0px )";
			
			qaHighlightLayer.style.visibility = "hidden";
			
			qaBgLayer.style.bgColor = "#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;
	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 (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 = getLayer( "ormtab-" + nr );
	if(!on) {
		allOrmTabsObjects.style.bgColor = "#527BB9";
		if(oldObjClass!=null){
			oldObjClass.className='qalogin';
		}		
	}
	else {
		allOrmTabsObjects.style.bgColor = "#ffffff";
	}
}


var oldObjClass = null;
function changeStyle(obj) {
	//do nothing in preview
	if( !blnIsNavPreview )
	{
		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 ) {
	//do nothing in preview
	if( !blnIsNavPreview )
	{
		// 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 ] ) {
				allQuickAccessLayersObjects[i].style.visibility = "hidden";
				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 && qaLayerNum >= 0 && qaLayerNum < numberOfQaTabs) {		 
			qaLayerObject.style.visibility = "visible";
			var qaLayerObjectHeight = qaLayerObject.offsetHeight;
			if(OP)
			{
				qaLayerObjectHeight = document.all[qaLayerObject.id].offsetWidth;
			}
			qasubheight = qaLayerObjectHeight+qaLayerObject.offsetTop;
		}
	  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 init() {
	setupCoordsAndArrays();
	
	if( !blnIsNavPreview )
	{
		setMenuLayerPositions(); // building layout of main menu and displaying
		if (bNav3InPage)
		{	
		  // 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;
}






var goOrmButton = getLayer( "qasub3" );
function qaOrmButtonChange( active )
{
	if (!goOrmButton)
		goOrmButton = getLayer( "qasub3" );
	var imageObject = document.images["go-orm"];
	if (imageObject) imageObject.src =  ( active ) ? qaOrmButtonOrangeSource : qaOrmButtonOnSource;
}

function qaGoButtonChange( active )
{
	if (!goOrmButton)
		goOrmButton = getLayer( "qasub3" );
	var imageObject = document.images["go-qa"];
	if (imageObject) imageObject.src =  ( active ) ? qaButtonOrangeSource : qaButtonOnSource;
}

