var menuWidth, siteMapHeight, siteMapWidth;
var menuHeight = 0;
var menuPos = {top:-150, left:0};

var bGObj;
var  menuLoaded = false;
var maxLoop, menuObject, menuObjectReadyCheck, menuObjectContainer, scrollBarWidth, showPage;
maxLoop = 5;
menuObjectReadyCheck = 0;
//var contBox;

function getDims(element){//Get AbsPos in Body
	var el = element,x=0,y=0;
	if(!el.offsetWidth)
		return {x:0, y:0, width:0, height:0};
	var dims = {x:0, y:0, width:el.offsetWidth, height:el.offsetHeight};
	
	while (el &&(typeof(el.offsetTop)!="undefined")){
		y+=el.offsetTop;     /* Offset des jeweiligen Elements addieren */
		x+=el.offsetLeft;    /* Offset des jeweiligen Elements addieren */
		debug(el.nodeName + ' getDims::added offsetLeft:' + el.offsetLeft + ' added offsetTop:' + el.offsetTop);
		if (el.tagName.toUpperCase()=="BODY")//Exit At Body
		el=0;
		else
		  el=el.offsetParent;
	}
	dims.x = x;
	dims.y = y;
	return dims;
}

function getScrollbarWidth(){
  var inner = document.createElement('p');
  inner.style.width = '100%';
  inner.style.height = '200px';
  var outer = document.createElement('div');
  outer.appendChild(inner);
	outer.style.position = 'absolute';
	outer.style.visibility = 'hidden';
	outer.style.width = '200px';
	outer.style.height = '150px';
	outer.style.overflow = 'hidden';
	document.body.appendChild(outer);
  var w1 = inner.offsetWidth;
  outer.style.overflow = 'scroll';
  var w2 = inner.offsetWidth;
  if (w1 == w2) w2 = outer.clientWidth;     
  return (w1 - w2);
  outer.remove();
}

function initMenu(){
	//alert('hmm');
	debug('initMenu...');
	menuLoaded = true;
	mainLoad(showPage );
	//menuObject.style.visibility = 'visible';
	return 666;
}

function init(){
	
	mainFrameEl = document.getElementById('mainFrame')
	scrollBarWidth = getScrollbarWidth();
	msie = op = false
	nav = navigator.userAgent
	//menuLoaded = false;
	if (/msie/i.test(navigator.userAgent) ) 
		msie = 1
	if(bGObj == null){
		bGObj = document.images[0];
		bGObj.onload = layoutBg;
		bGObj.src = bGsrc;	
	}
	else{
		w = bGObj.width;
		h = bGObj.height;
		setTimeout(function(){window.onresize = myReload}, 500);
	}
	//var contentBox = document.getElementById('contentBox');
	//var bBox = getDims(contentBox);
	mainFrameEl.style.height = 
		(document.getElementById('contentBox').offsetHeight 
		- document.getElementById('header').offsetHeight) + 'px';
	dumpLayout(mainFrameEl);
}

function layoutBg(){
	if(debugging)debug('layoutBg');
	bGObj.style.visibility = 'visible';
	w = bGObj.width;
	h = bGObj.height;
	(/opera/i.test(navigator.userAgent) ) ? op = 1 : op = 0;
	if(op && parseInt(navigator.appVersion)<9){
		document.writeln(' Incompatible browser :-( Opera must be at least Version 9.0<br>');
		document.writeln('<a href="http://opera.com">Update Your Browser</a><br>');
		document.writeln('<a href="http://mozilla.org">Or Use Mozilla or Firefox</a> <br>and comeBack');
		return		
	}		
	
	if(location.search != ''){
		query();
		if(param['showPage']){
			showPage = param['showPage'];
			//if(showPage.indexOf('%') >-1) showPage = decodeURIComponent(showPage)
		}
	}
	setTimeout(function(){window.onresize = myReload}, 500);
	if(debugging)debug('layoutBg done ' + menuObject);
	window.onerror = debugging ? errorHandler : null;
	if(menuObject == null)addMenu();
}

function layoutMenu(){
	debug("layoutMenu()" + showPage + ' debugging:' + debugging);
	if(!menuLoaded && menuObjectReadyCheck++ < maxLoop){
		setTimeout("layoutMenu()", 1000);
		return;
	}
	debug('layoutMenu caller: '+layoutMenu.caller);

	debug("layoutMenu()" + typeof(menuObject.initRoot));
	try{
		var dims = menuObject.initRoot(showPage);
		debug(dims);
	}
	catch(ex){
		debug(ex);
	}
	debug(w+':' + frames[0].location.href);
	//debug('layoutMenu::scrollBarWidth:' + scrollBarWidth);
	dumpObject(dims);
	menuWidth = dims[2];
	menuHeight = dims[3];
	siteMapHeight = dims[1];
	siteMapWidth = dims[0];		
	//frames[0].document.body.onscroll=updateSiteMap;
	// GET Content Dims
	//contentBox = frames[0].document.getElementById('header');
	var headerBox = document.getElementById('header');
	headerBox.onmouseover = hideSubmenu;
	//menuObject.style.top = '0px';
	var bBox = getDims(headerBox);
	debug('content.bBox:')
	dumpObject(bBox);
	menuPos.top = (menuHeight < bBox.height)? bBox.y + (bBox.height - menuHeight)/2:
		bBox.y + menuMargin;	
	//menuPos.left = (bBox.x + bBox.width + menuXslide);	
	menuPos.left = (bBox.x + bBox.width + menuMargin);	

	menuObject.style.width = menuWidth + 'px';
	menuObject.style.height = menuHeight + 'px';	
	if(menuPos.left + menuWidth > w){
		menuPos.leftVisible = w - menuWidth;
		//slideInit = false;
	}
	else{
		menuPos.leftVisible = menuPos.left;
	}
	//menuObject.style.height = (20 + menuHeight) + 'px';	
	debug(headerBox.offsetTop + ' => ' + menuPos.leftVisible+':' + menuHeight);
	dumpLayout(headerBox);
	//dumpLayout(menuObject);

	menuObject.drawBg({pageHeight:h, stageTop:bBox.y}, menuPos.leftVisible);
	setTimeout('setMenuPos()',500);
	//debug('timeout:' + setTimeout('setMenuPos()',500));
	debug('layoutMenut::ready: header.y:' + bBox.y + ' header.height:' + bBox.height + ' menu.height:' + 
		menuHeight + ' menuPos.top:'+ menuPos.top);
	//menuObject.showRoot();
	setTimeout('menuObject.showRoot()',1500)
	//dumpLayout(menuObject);
}

function setMenuPos(){
	menuObject.style.top = menuPos.top + 'px';	
	menuObject.style.left = menuPos.left + 'px';	
	debug('setMenuPos:' + menuObject.style.top + ' x ' + menuObject.style.left);
	if(debugging)dumpLayout(menuObject);	
}

var menuSlideDir = false;
var menuSlideInterval = null;
var slideStep = 5;
//var slideInit = false;

function slideMenuStart(back){
	clearInterval(menuSlideInterval);
	menuSlideDir = back;
	/*if(slideInit) 
	else{
		slideInit = true;
		return;
	}*/
	menuSlideInterval = setInterval("slideMenu()", 50);
}

function clearSlide(){
	clearInterval(menuSlideInterval);
}

function slideMenu(){
	//debug(menuSlideDir + ' menuPos.left:' + menuPos.left + ' offsetLeft:'+ menuObject.offsetLeft + ' menuPos.leftVisible:' + menuPos.leftVisible);
	if(menuSlideDir){//back
		if(menuObject.offsetLeft< (menuPos.left )){
			menuObject.style.left = (menuObject.offsetLeft + slideStep) > menuPos.left? menuPos.left  + 'px': 
			(menuObject.offsetLeft + slideStep) + 'px';
		}
		else{
			//menuObject.style.left = menuPos.left + 'px';	
			clearInterval(menuSlideInterval);
		}
	}
	else{
		if(menuObject.offsetLeft>(menuPos.leftVisible + slideStep)){
			menuObject.style.left = (menuObject.offsetLeft - slideStep) + 'px';
		}
		else{
			//menuObject.style.left = menuPos.leftVisible + 'px';
			clearInterval(menuSlideInterval);
		}
	}
}


function hideSitemap(){
	menuObject.style.top = -h +'px';
}

function mainLoad(url){
	debug('mainLoad caller: '+mainLoad.caller);
	showPage = url;
	window.status = url;
	menuObject.style.top = -h + 'px';
	menuObject.buttonAction();	
	mainFrameEl.src = url +'.php?swf=1';
	if(debugging) debug('mainLoad:'+url + ' showPage:'+showPage );
	frames[0].focus();

}

function opacitySupported()
{
    if (!window.getComputedStyle) return false;
    var style = window.getComputedStyle(document.lastChild, document);
    if (typeof style.opacity != "undefined") return true;
    return false;
}

function hideSubmenu(){
	menuObject.hide();
}

function myReload(){
	window.onresize = null;
	if(debugging) debug('myReload');
	setTimeout(function(){hideSitemap();init();frames[0].location.reload();}, 500);
	//setTimeout(function(){hideSitemap();init();}, 500);
}

var param = new Array();
function query() {
	var q = window.location.search.substring(1);
	var parms = q.split('&');
	for (var i=0; i<parms.length; i++) {
		var pos = parms[i].indexOf('=');
		if (pos > 0) {
			var key = parms[i].substring(0,pos);
			var val = parms[i].substring(pos+1);
			//if(!firstQuery && key == 'showPage') continue;
			param[key] = val;
		}
	}
	//firstQuery = 0;
}

function errorHandler (message, file, row) {
  if(typeof(debug != 'undefined'))debug('Error in ' + file +':' + row + '\n'+ message);
  return true;
}
