useTimeouts = 1;
timeoutLength = 500;
shutdownOnClick = 1;
menuTopShift = 0;
menuRightShift = 15;
menuLeftShift = -5;
thresholdY = 1;
abscissaStep = 195;
loaded = 0;
layersMoved = 0;
layerPoppedUp = '';
currentY = 0;
timeoutFlag = 0;
lwidthDetected = 0;
layerLeft = new Array();
layerTop = new Array();
toBeHidden = new Array();
toBeHiddenLeft = new Array();
toBeHiddenTop = new Array();
lwidth = new Array();

DOM = (document.getElementById) ? 1 : 0;
NS4 = (document.layers) ? 1 : 0;

Konqueror = (navigator.userAgent.indexOf('Konqueror') > -1) ? 1 : 0;
Konqueror22 = (navigator.userAgent.indexOf('Konqueror 2.2') > -1 || navigator.userAgent.indexOf('Konqueror/2.2') > -1) ? 1 : 0;
Konqueror30 =	(
		navigator.userAgent.indexOf('Konqueror 3.0') > -1
		|| navigator.userAgent.indexOf('Konqueror/3.0') > -1
		|| navigator.userAgent.indexOf('Konqueror 3;') > -1
		|| navigator.userAgent.indexOf('Konqueror/3;') > -1
		|| navigator.userAgent.indexOf('Konqueror 3)') > -1
		|| navigator.userAgent.indexOf('Konqueror/3)') > -1
	)	? 1 : 0;
Konqueror31 = (navigator.userAgent.indexOf('Konqueror 3.1') > -1 || navigator.userAgent.indexOf('Konqueror/3.1') > -1) ? 1 : 0;

Konqueror32 = (navigator.userAgent.indexOf('Konqueror 3.2') > -1 || navigator.userAgent.indexOf('Konqueror/3.2') > -1) ? 1 : 0;
Konqueror33 = (navigator.userAgent.indexOf('Konqueror 3.3') > -1 || navigator.userAgent.indexOf('Konqueror/3.3') > -1) ? 1 : 0;
Opera = (navigator.userAgent.indexOf('Opera') > -1) ? 1 : 0;
Opera5 = (navigator.userAgent.indexOf('Opera 5') > -1 || navigator.userAgent.indexOf('Opera/5') > -1) ? 1 : 0;
Opera6 = (navigator.userAgent.indexOf('Opera 6') > -1 || navigator.userAgent.indexOf('Opera/6') > -1) ? 1 : 0;
Opera56 = Opera5 || Opera6;
IE = (navigator.userAgent.indexOf('MSIE') > -1) ? 1 : 0;
IE = IE && !Opera;
IE5 = IE && DOM;
IE4 = (document.all) ? 1 : 0;
IE4 = IE4 && IE && !DOM;



if (Opera56 || IE4)	useTimeouts = 0;
if (NS4 || Opera56 || IE4)	shutdownOnClick = 1;

function setVisibility(layer, on){
	if (on) {
		if (DOM) document.getElementById(layer).style.visibility = 'visible';
		else if (NS4) document.layers[layer].visibility = 'show';
		else document.all[layer].style.visibility = 'visible';
	} else {
		if (DOM) document.getElementById(layer).style.visibility = 'hidden';
		else if (NS4) document.layers[layer].visibility = 'hide';
		else document.all[layer].style.visibility = 'hidden';
	}
}

function isVisible(layer){
	 if (DOM) return (document.getElementById(layer).style.visibility == 'visible');
	 else if (NS4) return (document.layers[layer].visibility == 'show');
   else return (document.all[layer].style.visibility == 'visible');
}

function setLeft(layer, x){
layerLeft[layer] = x;
	if (DOM && !Opera5) document.getElementById(layer).style.left = x + 'px';
	else if (Opera5) document.getElementById(layer).style.left = x;
	else if (NS4) document.layers[layer].left = x;
	else document.all[layer].style.pixelLeft = x;
}

function getOffsetLeft(layer){
	var value = 0;
	if (DOM) {
		object = document.getElementById(layer);
		value = object.offsetLeft;

		while (object.tagName != 'BODY' && object.offsetParent) {
			object = object.offsetParent;
			value += object.offsetLeft;
		}
	} else if (NS4) value = document.layers[layer].pageX;
	else {
		if (document.all['IE4' + layer]) layer = 'IE4' + layer;
		object = document.all[layer];
		value = object.offsetLeft;
		while (object.tagName != 'BODY') {
			object = object.offsetParent;
			value += object.offsetLeft;
		}
	}
	return (value);
}

function setTop(layer, y){
layerTop[layer] = y;
	 if (DOM && !Opera5)	document.getElementById(layer).style.top = y + 'px';
	 else if (Opera5)	document.getElementById(layer).style.top = y;
	 else if (NS4)	document.layers[layer].top = y;
	 else document.all[layer].style.pixelTop = y;
}

function getOffsetTop(layer){

	var value = 0;
	if (DOM) {
		object = document.getElementById(layer);
		value = object.offsetTop;
		while (object.tagName != 'BODY' && object.offsetParent) {
			object = object.offsetParent;
			value += object.offsetTop;
		}
	} else if(NS4) 	value = document.layers[layer].pageY;
	else {
		if (document.all['IE4' + layer]) layer = 'IE4' + layer;
		object = document.all[layer];
		value = object.offsetTop;
		while (object.tagName != 'BODY') {
			object = object.offsetParent;
			value += object.offsetTop;
		}
	}
	return (value);
}

function setWidth(layer, w){
	if (DOM) document.getElementById(layer).style.width = w;
	else	document.all[layer].style.pixelWidth = w;
}

function getOffsetWidth(layer) {
	var value = 0;
	if (DOM && !Opera56) value = document.getElementById(layer).offsetWidth;
	else if (NS4) value = document.layers[layer].document.width;
	else if (Opera56) value = document.getElementById(layer).style.pixelWidth;
	else {
		if (document.all['IE4' + layer]) layer = 'IE4' + layer;
		value = document.all[layer].offsetWidth;
	}
	return (value);
}

function getOffsetHeight(layer){
	var value = 0;
	if (DOM && !Opera56) value = document.getElementById(layer).offsetHeight;
	else if (NS4) value = document.layers[layer].document.height;
	else if (Opera56) value = document.getElementById(layer).style.pixelHeight;
	else {
		if (document.all['IE4' + layer]) layer = 'IE4' + layer;
		value = document.all[layer].offsetHeight;
	}
	return (value);
}

function getWindowWidth() {
	var value = 0;
	if ((DOM && !IE) || NS4 || Konqueror || Opera)	value = window.innerWidth;
	else {
		if (document.documentElement && document.documentElement.clientWidth)	value = document.documentElement.clientWidth;
	  else if (document.body) value = document.body.clientWidth;
	}
	if (isNaN(value)) value = window.innerWidth;
	return (value);
}

function getWindowXOffset() {
	var value = 0;
	if ((DOM && !IE) || NS4 || Konqueror || Opera) value = window.pageXOffset;
	else {
  	 if(document.documentElement&&document.documentElement.scrollLeft) value = document.documentElement.scrollLeft;
		 else if (document.body) value = document.body.scrollLeft;
	}
	return (value);
}

function getWindowHeight() {
	var value = 0;
	if ((DOM && !IE) || NS4 || Konqueror || Opera) value = window.innerHeight;
	else {
		 if(document.documentElement&&document.documentElement.clientHeight)	value=document.documentElement.clientHeight;
		 else if (document.body) value = document.body.clientHeight;
	}
	if (isNaN(value)) value = window.innerHeight;
	return (value);
}

function getWindowYOffset() {
	var value = 0;
	if ((DOM && !IE) || NS4 || Konqueror || Opera)	value = window.pageYOffset;
	else {
  	if (document.documentElement && document.documentElement.scrollTop) value = document.documentElement.scrollTop;
		else if (document.body) value = document.body.scrollTop;
	}
	return (value);
}


function grabMouse(e)	{	currentY = e.pageY;}

if (NS4) {
	document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE);
	document.onmousemove = grabMouse;
}

function seeThroughElements(show){
	if (show) foobar = 'visible';
	else 	foobar = 'hidden';
	for (i=0; i<toBeHidden.length; i++) { toBeHidden[i].style.visibility = foobar;	}
}

function shutdown() {
	for (i=0; i<numl; i++) {LMPopUpL(listl[i], false); }
	layerPoppedUp = '';
	if (Konqueror || IE5) seeThroughElements(true);
}

if (shutdownOnClick) {
	if(NS4) document.onmousedown = shutdown;
	else document.onclick = shutdown;
}

function setLMTO(){
	if(useTimeouts) timeoutFlag = setTimeout('shutdown()', timeoutLength);
}

function clearLMTO(){
	if(useTimeouts) clearTimeout(timeoutFlag);
}

function moveLayer(menuName){

	if (!loaded || (isVisible(menuName) && menuName != layerPoppedUp))	return;

	if (father[menuName] != '') {
		if (!Opera5 && !IE4) {
			width0 = lwidth[father[menuName]];
			width1 = lwidth[menuName];
		} else if (Opera5) {
			width0 = abscissaStep;
			width1 = abscissaStep;
		} else if (IE4) {
			width0 = getOffsetWidth(father[menuName]);
			width1 = getOffsetWidth(menuName);
		}

		onLeft = getOffsetLeft(father[menuName]) - width1 + menuLeftShift;
		onRight = getOffsetLeft(father[menuName]) + width0 - menuRightShift;
		windowWidth = getWindowWidth();
		windowXOffset = getWindowXOffset();

		if (onLeft < windowXOffset && onRight + width1 > windowWidth + windowXOffset) {
			if (onRight + width1 - windowWidth - windowXOffset > windowXOffset - onLeft) onLeft = windowXOffset;
			else onRight = windowWidth + windowXOffset - width1;
		}
		if (back[father[menuName]]) {
			if (onLeft < windowXOffset) back[menuName] = 0;
			else back[menuName] = 1;
		} else {
			if (onRight + width1 > windowWidth + windowXOffset)	back[menuName] = 1;
			else	back[menuName] = 0;
		}
		if (back[menuName]) setLeft(menuName, onLeft);
		else setLeft(menuName, onRight);
 }
	moveLayerY(menuName);
}

function moveLayerY(menuName){
	if (!loaded || (isVisible(menuName) && menuName != layerPoppedUp)) return;
	if (!layersMoved) {
		moveLayers();
		layersMoved = 1;
	}
	if (!NS4)		newY = getOffsetTop('ref' + menuName);
	else	newY = currentY;

	newY += menuTopShift;
	layerHeight = getOffsetHeight(menuName);
	windowHeight = getWindowHeight();
	windowYOffset = getWindowYOffset();
	if (newY + layerHeight > windowHeight + windowYOffset) {
		if (layerHeight > windowHeight) newY = windowYOffset;
		else newY = windowHeight + windowYOffset - layerHeight;
	}
	if(Math.abs(getOffsetTop(menuName) - newY) > thresholdY)	setTop(menuName, newY);
}

function moveLayerX1(menuName, father){
	if (!lwidthDetected) return;
	if (!Opera5 && !IE4) width1 = lwidth[menuName];
	else if(Opera5) width1 = abscissaStep;
	foobar = getOffsetLeft(father + menuName);
if (!IE4) {
	windowWidth = getWindowWidth();
	windowXOffset = getWindowXOffset();
	if (foobar + width1 > windowWidth + windowXOffset) foobar = windowWidth + windowXOffset - width1;
	if (foobar < windowXOffset) foobar = windowXOffset;
}
	setLeft(menuName, foobar - menuLeftShift);
}

function layersOverlap(layer, i){
	if (Konqueror22)	return true;

	xa1 = layerLeft[layer];
	xa2 = xa1 + getOffsetWidth(layer);
	ya1 = layerTop[layer];
	ya2 = ya1 + getOffsetHeight(layer);

	xb1 = toBeHiddenLeft[i];
	xb2 = xb1 + toBeHidden[i].offsetWidth;
	yb1 = toBeHiddenTop[i];
	yb2 = yb1 + toBeHidden[i].offsetHeight;

	if(xb1>xa1) xa1=xb1; if(xb2<xa2) xa2=xb2;
	if(yb1>ya1) ya1=yb1; if(yb2<ya2) ya2=yb2;

	return (xa2>xa1 && ya2>ya1);
}

function seeThroughWorkaround(menuName, on){
	for (i=0; i<toBeHidden.length; i++) {
		if (layersOverlap(menuName,i)) {
			if (on) toBeHidden[i].style.visibility = 'hidden';
			else toBeHidden[i].style.visibility = 'visible';
		}
	}
}


function highlightMenu(menuname, on){
  return true;
	if (father[menuname]=='')	menuid = 'mm' + menuname;
  else	menuid = 'ref' + menuname;

  el = document.getElementById(menuid);
	if (el!=null)		{
			if (on)	{
        el.style.backgroundColor='#f5f5f6';
        el.style.fontColor='black';
   		}	else	{
         el.style.backgroundColor='';
         el.style.color ='black';
     }
   }
}



function LMPopUpL(menuName, on){
	if(!loaded) return;
	highlightMenu(menuName, on);

	if (!layersMoved) {
		moveLayers();
		layersMoved = 1;
	}
	setVisibility(menuName, on);
}

function LMPopUp(menuName, isCurrent){
	if (!loaded || menuName == layerPoppedUp || (isVisible(menuName) && !isCurrent)) return;

	if (menuName == father[layerPoppedUp]) LMPopUpL(layerPoppedUp, false);
	else if (father[menuName] == layerPoppedUp) {
		LMPopUpL(menuName, true);
		seeThroughWorkaround(menuName, true);
	} else {
		shutdown();
		foobar = menuName;
		while (foobar) {
			LMPopUpL(foobar, true);
			seeThroughWorkaround(foobar, true);
			foobar = father[foobar];
		}
	}
	layerPoppedUp = menuName;
}

function resizeHandler(){
	if (NS4) window.location.reload();
	shutdown();
	for (i=0; i<numl; i++) {
		setLeft(listl[i], 0);
		setTop(listl[i], 0);
	}
	if (toBeHidden != null && toBeHidden.length > 0) seeThroughCoordinatesDetection();
	layersMoved = 0;
}
window.onresize = resizeHandler;

function yaresizeHandler(){
	if (window.innerWidth != origWidth || window.innerHeight != origHeight) {
		if (Konqueror22 || Opera5) window.location.reload();
		origWidth  = window.innerWidth;
		origHeight = window.innerHeight;
		resizeHandler();
	}
	setTimeout('yaresizeHandler()', 500);
}
function loadHandler(){
	if (Konqueror22 || Opera56) {
		origWidth  = window.innerWidth;
		origHeight = window.innerHeight;
		yaresizeHandler();
	}
}
window.onload = loadHandler;

function fixieflm(menuName){
	if(DOM) setWidth(menuName, '100%');
	else {
		document.write('</div>');
		document.write('<div id="IE4' + menuName + '" class="ie4m">');
	}
}

//INIT

father = new Array(); back = new Array();
listl = ['L1','L2','L4'];
subl  = [5   , 2  ,  3]
//listl = ['L1','L2','L3','L31','L32','L33','L4'];
//subl  = [5   , 2  ,  4 ,  5  ,  6  ,  6  , 3]
numl = listl.length;

for (i=0; i < numl; i++) {
 if(!father[listl[i]]) father[listl[i]] = '';
 for (s=1; s<=subl[i]; s++) {
       curr = listl[i] + s;
       back[curr] = 0;
	     father[curr] = listl[i];
  }
}

function moveLayers() {
	if (!lwidthDetected) {
		for (i=0; i<numl; i++) {	 lwidth[listl[i]] = getOffsetWidth(listl[i]);	}
		lwidthDetected = 1;
	}

	if (IE4) { for (i=0; i<numl; i++) { setWidth(listl[i], abscissaStep); } }

	var mmTOP = getOffsetTop('mmL1');
	var mmHEIGHT = getOffsetHeight('mmL1');

	setTop('L1', mmTOP + mmHEIGHT + menuTopShift);
	moveLayerX1('L1', 'mm');
	setTop('L2', mmTOP + mmHEIGHT + menuTopShift);
	moveLayerX1('L2', 'mm');
	//setTop('L3', mmTOP + mmHEIGHT + menuTopShift+25);
	//moveLayerX1('L3', 'mm');
	setTop('L4', mmTOP + mmHEIGHT + menuTopShift+25);
	moveLayerX1('L4', 'mm');
}

