// FAS.research navigation & page scripts
// mass:werk 2002-2005; www.masswerk.at
// all rights reserved

// requires the following vars:
// pagecode, imgpath
// or call "pageSetup( 'page', 'path2root')"


// config
var menuHysteresisEnter=150;
var menuHysteresisLeave=20;
var menuHysteresisDrop=90;

var menuBgLo='#ffffff';
var menuBgHi='#AC394A';
var menuColorLo='#000000';
var menuColorHi='#ffffff';

var imgRef= new Array();
var menuRef=new Array();
var activenav, activesub, activemenu, holdingmenu, menuTimer, knobTimer;
var menuPos=new Array();
var imgpath='/images/';
var rootpath='';
var local=true;

// page setup handler

function pageSetup( page, path2root) {
	pagecode=page;
	if (local) {
		imgpath=path2root+imgpath;
		rootpath=path2root
	};
	if (document.images) preloadImages();
}

// preload
function preloadImages() {
	for (var i=0; i<mainNavItems.length; i++) loadNavImage('nav_', mainNavItems[i], ['_lo', '_hi']);
	for (var i=0; i<navMenus.length; i++) menuRef[navMenus[i]]=1;
	var knobimages=['science','business','support'];
	for (var i=0; i<knobimages.length; i++) {
		var n='knob_'+knobimages[i];
		imgRef[n]= new Image();
		imgRef[n].src=imgpath+n+'.gif'
	}
}

function loadNavImage(p,n, typeRef) {
	for (var t=0; t<typeRef.length; t++) {
		var i=n+typeRef[t];
		imgRef[i]= new Image();
		imgRef[i].src=imgpath+p+i+'.gif'
	}
}

// interface
function setAuxNav(n,s) {
	if (s) {
		if (imgReady('nav_'+n, n+'_hi')) document.images['nav_'+n].src=imgRef[n+'_hi'].src;
	}
	else {
		if (imgReady('nav_'+n, n+'_lo')) document.images['nav_'+n].src=imgRef[n+'_lo'].src;
	}
}

function setKnob(n) {
	if (knobTimer) clearTimeout(knobTimer);
	var img='knob_'+n;
	if ((document.images.theKnob) && (imgRef[img])) document.images.theKnob.src=imgRef[img].src;
}

function resetKnob(n) {
	knobTimer=setTimeout('setKnob("'+n+'")',35);
}

function setMenu(n,s) {
	if (menuTimer) clearTimeout(menuTimer);
	if (s==1) {
		// set hilite
		if ((activemenu) && (activemenu != n)) {
			if (!holdingmenu) setVisibility('menu_'+activemenu,0);
			activemenu=''
		};
		if ((activenav!=pagecode) && (activenav)) {
			if (imgReady('nav_'+activenav, activenav+'_lo')) document.images['nav_'+activenav].src=imgRef[activenav+'_lo'].src;
		};
		if (n!=pagecode) {
			if (imgReady('nav_'+n, n+'_hi')) document.images['nav_'+n].src=imgRef[n+'_hi'].src;
			activenav=n;
			if (menuRef[n]) {
				menuTimer=setTimeout("showMenu('"+n+"')", menuHysteresisEnter)
			}
		}
	}
	else {
		// reset hilite
		if (n!=pagecode) {
			if (imgReady('nav_'+n, n+'_lo')) document.images['nav_'+n].src=imgRef[n+'_lo'].src;
		};
		activenav=''
		if (menuRef[n]) {
			menuTimer=setTimeout("hideMenu('"+n+"')", menuHysteresisLeave)
		}
	}
}

function setMenuNS4(n,s) {
	// NS4 - just images
	if (s==1) {
		// set hilite
		if ((n!=pagecode) && (imgReady('nav_'+n, n+'_hi'))) document.images['nav_'+n].src=imgRef[n+'_hi'].src;
	}
	else {
		// reset hilite
		if ((n!=pagecode) && (imgReady('nav_'+n, n+'_lo'))) document.images['nav_'+n].src=imgRef[n+'_lo'].src;
	}
}

function imgReady(dimage, iref) {
	return ((document.images[dimage]) && (imgRef[iref]))? true: false;
}

function setMenuItem(m,n,s) {
	if (menuTimer) clearTimeout(menuTimer);
	if (!n) {
		if (!s) menuTimer=setTimeout("hideMenu('"+activemenu+"')", menuHysteresisLeave);
		return
	};
	if (s==1) {
		setColor('m_'+m+'_'+n, menuColorHi, menuBgHi)
	}
	else {
		setColor('m_'+m+'_'+n, menuColorLo, menuBgLo)
		if (activemenu) menuTimer=setTimeout("hideMenu('"+activemenu+"')", menuHysteresisDrop);
	}
}

function setColor(n, fg, bg) {
	var obj;
	if (document.getElementById) obj=document.getElementById(n)
	else if (document.all) obj=document.all[n];
	if ((obj) && (obj.style)) {
		obj.style.backgroundColor=bg;
		obj.style.color=fg
	}
}


function showMenu(n) {
	if (menuTimer) clearTimeout(menuTimer);
	var m='menu_'+n;
	var ptop=getAnchorPos('top');
	setPos(m,menuPos[n].x+ptop.x,menuPos[n].y);
	setVisibility(m,1);
	activemenu=n
}

function hideMenu(n) {
	if (menuTimer) clearTimeout(menuTimer);
	setVisibility('menu_'+n,0);
	if (activemenu==n) activemenu='';
	holdingmenu=0
}

function holdMenu() {
	if (menuTimer) clearTimeout(menuTimer);
	holdingMenu=1
}


// basic dynamics

function setVisibility(d,v) {
	if (document.getElementById) {
		var obj=document.getElementById(d);
		if (obj) obj.style.visibility= (v)? 'visible':'hidden';
	}
	else if (document.all) {
		if (document.all[d]) document.all[d].visibility= (v)? 'visible':'hidden';
	}
}

function setPos(d,x,y) {
	if ((document.getElementById) || (document.all)) {
		var obj=(document.getElementById)? document.getElementById(d) : document.all[d];
		if (!obj) return;
		obj.style.pixelLeft=x;
		obj.style.pixelTop=y;
		// gecko
		obj.style.left=x+'px';
		obj.style.top=y+'px'
	}
	else if (document.layers) {
		if (!document.layers[d]) return;
		document.layers[d].moveTo(x,y)
	}
}

function getAnchorPos(a) {
	if (document.getElementById) {
		// dom
		var obj=document.getElementById(a);
		if (!obj) return {x:0,y:0};
		var x=((obj.firstChild) && (obj.firstChild.offsetLeft))? obj.firstChild.offsetLeft:obj.offsetLeft;
		var y=((obj.firstChild) && (obj.firstChild.offsetTop))? obj.firstChild.offsetTop:obj.offsetTop;
		while (obj.offsetParent) {
			obj=obj.offsetParent;
			x+=obj.offsetLeft;
			y+=obj.offsetTop
		};
		return {x:x,y:y}
	}
	else if (document.all) {
		// ie 4, ie 5.0 win
		var obj=document.all[a];
		if (!obj) return {x:0,y:0};
		var x=obj.offsetLeft;
		var y=obj.offsetTop;
		if ((obj.offsetParent) && ((obj.offsetParent.offsetTop) || (obj.offsetParent.offsetLeft))) {
			// IE 5 win
			while (obj.offsetParent) {
				obj=obj.offsetParent;
				x+=obj.offsetLeft;
				y+=obj.offsetTop
			}
		}
		else {
			// IE 4
			while (obj.parentElement) {
				obj=obj.parentElement;
				if (obj.offsetLeft) { x+=obj.offsetLeft; };
				if (obj.offsetTop) { y+=obj.offsetTop; };
			}
		};
		return {x:x,y:y}
	}
	else if (document.anchors) {
		var obj=document.anchors[a];
		if (!obj) return {x:0,y:0};
		return {x:obj.x,y:obj.y}
	}
	else return {x:0,y:0}
}

// dimenson getters

function getWindowDims() {
	var w=0;
	var h=0;
	if (self.innerWidth) w=parseInt(self.innerWidth,10)
	else if ((document.body) && (document.body.clientWidth)) w=parseInt(document.body.clientWidth,10)
	else if (self.width) w=parseInt(self.width,10);
	if (self.innerHeight) h=parseInt(self.innerHeight,10)
	else if ((document.body) && (document.body.clientHeight)) h=parseInt(document.body.clientHeight,10)
	else if (self.height) h=parseInt(self.height,10);
	return {w:w,h:h}
}

function getElementDims(el) {
	var w=0;
	var h=0;
	if (document.getElementById){
		var obj=document.getElementById(el);
		if (obj) {
			h=(obj.children)? obj.children[0].offsetHeight : obj.offsetHeight;
			w=(obj.children)? obj.children[0].offsetWidth : obj.offsetWidth;
		}
	}
	else if (document.all) {
		var obj=document.all[el];
		if (obj) {
			h=(obj.children)? obj.children[0].offsetHeight : obj.offsetHeight;
			w=(obj.children)? obj.children[0].offsetWidth : obj.offsetWidth;
		}
	}
	else if (document.layers) {
		var obj=document.layers[el];
		if (obj) {
			h=obj.clip.right;
			w=obj.clip.bottom
		}
	};
	return {w:w,h:h}
}


// menu composition

var menuTree=new Array();

function MenuNode(id, display, top, left, width, leftmargin) {
	this.id=id;
	this.display=display;
	this.top=top;
	this.left=left;
	this.width=width;
	this.leftmargin=leftmargin;
	this.entries=new Array()
}

function MenuNodeEntry(menuid, id, display, url, imgsrc, width) {
	this.menu=menuid;
	this.id=id;
	this.display=display;
	this.url=url;
	this.imgsrc=imgsrc;
	this.width=width
}

function addMenuNode(id, display, top, left, width, leftmargin) {
	menuTree[id]=new MenuNode(id, display, top, left, width, leftmargin)
}

function addMenuNodeEntry(menuid, id, display, url, imgsrc, width) {
	if (menuTree[menuid]) {
		// MSIE push bugfix
		var l= menuTree[menuid].entries.length;
		menuTree[menuid].entries[l]=new MenuNodeEntry(menuid, id, display, url, imgsrc, width)
	}
}

function writeMenus() {
	var jsurl='jav'+'asc'+'ript'+':\/\/'; // ns.4.6 fix
	var marginright=10;
	var s='';
	if ((document.layers) && ((document.getElementById) || (document.all))) {
		// no menus for NS4, sorry; relink setMenu
		setMenu=setMenuNS4;
		return
	};
	for (var mn in menuTree) {
		var m=menuTree[mn];
		// compose menu-header
		menuPos[m.id]={x:m.left,y:m.top};
		s+='<DIV ID="menu_'+m.id+'" STYLE="position:absolute; top:'+m.top+'; left:'+m.left+'; z-index:2; visibility:hidden;">';
		s+='<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">\n';
		s+='<TR><TD COLSPAN="3" HEIGHT="1" CLASS="nospace" BGCOLOR="#cccccc"><A HREF="'+jsurl+'" onmouseover="if (window.holdMenu) holdMenu(); window.status=\''+m.display+'\'; return true" onmouseout="window.status=\'\'; return true"><IMG SR'+'C="'+imgpath+'leer.gif" WIDTH="'+(m.width+2)+'" HEIGHT="1" ALT="" BORDER="0"></A></TD></TR>\n';
		s+='<TR>\n<TD WIDTH="1" CLASS="nospace" BGCOLOR="#cccccc"><IMG SR'+'C="'+imgpath+'leer.gif" WIDTH="1" HEIGHT="2" ALT=""></TD>\n';
		s+='<TD NOWRAP BGCOLOR="#ffffff"><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0">\n';
		s+='<TR><TD CLASS="nospace"><A HREF="'+jsurl+'" onmouseover="if (window.setMenuItem) setMenuItem(\''+m.id+'\',\'\',1); window.status=\'\'; return true" onmouseout="if (window.setMenuItem) setMenuItem(\''+m.id+'\',\'\',0); window.status=\'\'; return true"><IMG SR'+'C="'+imgpath+'white.gif" WIDTH="'+m.width+'" HEIGHT="2" ALT="" BORDER="0"></A></TD></TR>\n';
		// compose entries
		for (var i=0; i<m.entries.length; i++) {
			var me=m.entries[i];
			var rightmargin= m.width - m.leftmargin - me.width;
			var url= ((me.url) && (me.url.indexOf('javascript:')==0))? me.url : rootpath+me.url;
			s+='<TR><TD NOWRAP HEIGHT="15" VALIGN="middle" CLASS="menu" ID="m_'+m.id+'_'+me.id+'" onmouseover="if (window.setMenuItem) setMenuItem(\''+m.id+'\',\''+me.id+'\',1); window.status=\''+me.display+'\'; return true" onmouseout="if (window.setMenuItem) setMenuItem(\''+m.id+'\',\''+me.id+'\',0); window.status=\'\'; return true" onclick="self.location.href=\''+url+'\'"><IMG SR'+'C="'+imgpath+'leer.gif" WIDTH="'+m.leftmargin+'" HEIGHT="1" BORDER="0" ALT="">'+me.display+'<IMG SR'+'C="'+imgpath+'leer.gif" WIDTH="'+marginright+'" HEIGHT="1" BORDER="0" ALT=""></TD></TR>\n'
		};
		// compose menu-trail
		s+='<TR><TD CLASS="nospace"><A HREF="'+jsurl+'" onmouseover="if (window.setMenuItem) setMenuItem(\''+m.id+'\',\'\',1); window.status=\'\'; return true" onmouseout="if (window.setMenuItem) setMenuItem(\''+m.id+'\',\'\',0); window.status=\'\'; return true"><IMG SR'+'C="'+imgpath+'white.gif" WIDTH="'+m.width+'" HEIGHT="2" ALT="" BORDER="0"></A></TD></TR>\n</TABLE></TD>\n';
		s+='<TD WIDTH="1" CLASS="nospace" BGCOLOR="#cccccc"><IMG SR'+'C="'+imgpath+'leer.gif" WIDTH="1" HEIGHT="2" ALT=""></TD>\n</TR>\n';
		s+='<TR><TD COLSPAN="3" HEIGHT="1" CLASS="nospace" BGCOLOR="#cccccc"><IMG SR'+'C="'+imgpath+'leer.gif" WIDTH="'+(m.width+2)+'" HEIGHT="1" ALT=""></TD></TR>\n</TABLE>';
		s+='</DIV>\n\n'
	};
	// write out
	document.write(s)
}

// service subs
function pagePrint(lang) {
	if (window.print) {
		setTimeout('self.print()',20)
	}
	else {
		if (lang=='de') {
			alert('Diese Funktion wird leider von Ihrem Webbrowser nicht untersttzt.\nBenutzen Sie bitte den Print-Button Ihres Browsers oder whlen Sie die Druckfunktion aus dem Datei- bzw. Ablagemenu.')
		}
		else {
			alert('This function is not supported by your browser.\nPlease use your browser\'s print button or choose "Print" from the File menu.')
		}
	}
}

// end of script