// CONSTANTS ------------------------------------------------------------------
var HIDDEN   = "hide";
var VISIBLE  = "show";

var IMG_PATH = "/images/navigation/";

var X_OFFSET = 208;
var Y_OFFSET = 30;

var LAYER_Z  = 50;

var X_SPACER = 34;

// simple browser detection ---------------------------------------------------

var ie4 = ( document.all    ) ? true : false;
var ns4 = ( document.layers ) ? true : false;
var ns6 = ( parseInt(navigator.appVersion) == 5 );

// complex browser detection --------------------------------------------------
// Adapted from http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
var agt=navigator.userAgent.toLowerCase();
var is_major = parseInt(navigator.appVersion);
var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
var is_ie3    = (is_ie && (is_major < 4));
var is_ie4    = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) );
var is_ie5    = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) );
var is_mac    = (agt.indexOf("mac")!=-1);

// Is this a Mac running IE5.0 or less?
var is_mac_ie5down = is_mac && (is_ie3 || is_ie4 || is_ie5);

// if ( ns4 || ns6 )
if ( ns4 || ns6 )
  Y_OFFSET--;

if ( ie4 || ns6 ) {

  HIDDEN   = "hidden";
  VISIBLE  = "visible";

} // if

// top level positions --------------------------------------------------------

// Simply let this width[] prescribe the actual layer widths.
// (Instead of the other way round.)
var width = new Array();
var position = new Array();

function charWidth(ch) {
	var chs = "AÄBCDEÉFGHIJKLMNOÖPQRSTUÜVWXYZaäbcdeéfghijklmnoöpqrstuüvwxyz0123456789 ";
	var cws = "77777777774677877767777777877766656666662343866666464666766653555555555";
	// Checked:~~~7~~~~~7~~~~~~~~6~~7~~~~~~~~~~~5666~~~2~~~8666~~464~~67~6~~~~~~~~~~~~
	var p = chs.indexOf(ch);
	return (p < 0)? 5 : parseInt(cws.substring(p, p + 1));
}

function textWidth(s) {
	w = 0;

    if(s.length > 0) {
		s = s.replace(/&#\d*;/g, " ");

		for (i = 0; i < s.length; ++i) {
			w += charWidth(s.charAt(i));
		}	
		
	}

	return w;
}

position[start[0]] = X_OFFSET;
for (nr = start[0]; nr <= end[0]; ++nr) {
	//n = nam[nr].length;
	//width[nr] = 6 + n * 4;
	width[nr] = 8 + textWidth(nam[nr]);
	position[nr + 1] = position[nr] + width[nr] + X_SPACER;
}

//-----------------------------------------------------------------------------
// Global var's:

var lineHeight = ( ie4 || ns6 ) ? 14 : 13;

var level2Counter = 0;

var quitCounter;

var extraCounter;

var currentXPos = 0;

var vislayer1 = HIDDEN;
var vislayer2 = HIDDEN; var vislayer2b = HIDDEN; var vislayer2c = HIDDEN;
var vislayer3 = HIDDEN; var vislayer3b = HIDDEN; var vislayer3c = HIDDEN;
//-----------------------------------------------------------------------------|
var winControl = "flashy";//null;	// to hide during navigation
var winCOld = HIDDEN; // old state of navigation
//function setWinControl(wc) {
//	winControl = wc;
//}
//-----------------------------------------------------------------------------|
function updatevisibility() {
	if ( winControl != null && winCOld != vislayer1 ) {
		winCOld = vislayer1;

		// The object:
		t = "document.";
	    if ( ns4 ) {
			t += winControl;
	    }
	    else if ( ns6 ) {
	        t += "getElementById('" + winControl + "')";
	    }
	    else { // if ( ie4 ) {
			t += "all['" + winControl + "']";
	    }

		s = t;
	    if ( ns4 ) {
			s += winControl;
	    }
	    else { // if ( ns6 || ie4 ) {
			s += ".style";
	    }
		s += ".visibility = '" + ((winCOld == HIDDEN)? VISIBLE : HIDDEN) + "';";
		eval("if(" + t + ")" + s);
	}
    if ( ns4 ) {
        document.lv1.visibility      = vislayer1;
        document.lv2.visibility      = vislayer2;
        document.lv2back.visibility  = vislayer2b;
        document.lv2color.visibility = vislayer2c;
        document.lv3.visibility      = vislayer3;
        document.lv3back.visibility  = vislayer3b;
        document.lv3color.visibility = vislayer3c;
    }
    else if ( ns6 ) {
        document.getElementById( "lv1"      ).style.visibility  = vislayer1;
        document.getElementById( "lv2"      ).style.visibility  = vislayer2;
        document.getElementById( "lv2back"  ).style.visibility  = vislayer2b;
        document.getElementById( "lv2color" ).style.visibility  = vislayer2c;
        document.getElementById( "lv3"      ).style.visibility  = vislayer3;
        document.getElementById( "lv3back"  ).style.visibility  = vislayer3b;
        document.getElementById( "lv3color" ).style.visibility  = vislayer3c;
    }
    else { // if ( ie4 ) {
        document.all[ "lv1"      ].style.visibility = vislayer1;
        document.all[ "lv2"      ].style.visibility = vislayer2;
        document.all[ "lv2back"  ].style.visibility = vislayer2b;
        document.all[ "lv2color" ].style.visibility = vislayer2c;
        document.all[ "lv3"      ].style.visibility = vislayer3;
        document.all[ "lv3back"  ].style.visibility = vislayer3b;
        document.all[ "lv3color" ].style.visibility = vislayer3c;
    }

} // updatevisibility()
//-----------------------------------------------------------------------------|
function stopquitmode() {if (quitCounter) clearTimeout(quitCounter);}
//-----------------------------------------------------------------------------|
function startquitmode() {quitCounter = setTimeout('closenavi()',500);}
//-----------------------------------------------------------------------------|
function closenavi() {vislayer1 = HIDDEN; vislayer2 = HIDDEN; vislayer2b = HIDDEN; vislayer2c = HIDDEN; vislayer3 = HIDDEN;vislayer3b = HIDDEN; vislayer3c = HIDDEN; updatevisibility();}
//-----------------------------------------------------------------------------|
function leftpos(layername,layerX) {

    if (ns4)      document[layername].left = layerX;
    else if (ns6) document.getElementById(layername).style.left = layerX + "px";
    else          document.all[layername].style.left = layerX + "px";
    // if      (ie4) 

}
//-----------------------------------------------------------------------------|
function toppos( layername, layerY ) {

    if (ns4)      document[layername].top = layerY;
    else if (ns6) document.getElementById(layername).style.top = layerY + "px";
    else          document.all[layername].style.top = layerY + "px";
    // if      (ie4) 

}
//-----------------------------------------------------------------------------|
function openlayer(layername, layerX, layerY) {

    // if (ie4_or_ns6) document.write('<span onmouseover="stopquitmode();" onmouseout="startquitmode();" id="'+layername+'" style="position:absolute;left:'+layerX+'px;top:'+layerY+'px;z-index:'+LAYER_Z+'">');

    if (ns4) document.write('<layer onmouseover="stopquitmode();" onmouseout="startquitmode();" id="'+layername+'" name="'+layername+'" pagex='+layerX+' pagey='+layerY+' z-index='+LAYER_Z+'>');
    else     document.write('<div onmouseover="stopquitmode();" onmouseout="startquitmode();" id="'+layername+'" style="position:absolute;left:'+layerX+'px;top:'+layerY+'px;z-index:'+LAYER_Z+'">');
    // if (ie4 || ns6) 

    LAYER_Z++;
}
//-----------------------------------------------------------------------------|
function closelayer() {

    // if (ie4_or_ns6) document.write('</span>');

    if (ns4) document.write('</layer>');
    else     document.write('</div>');
    // if (ie4 || ns6) 

}
//-----------------------------------------------------------------------------|
function layercontent(layername,content) {

    if (ns4) {
        document[layername].document.open();
        document[layername].document.write(content);
        document[layername].document.close();
    }

    else if (ns6) document.getElementById(layername).innerHTML = content;

    else document.all[layername].innerHTML = content;
    // if      (ie4) 


}
//-----------------------------------------------------------------------------|
function firstLevel(nr) {

    currentXPos = position[nr]-5;

    vislayer1  = HIDDEN;
    vislayer2  = HIDDEN;
    vislayer2b = HIDDEN;
    vislayer2c = HIDDEN;
    vislayer3  = HIDDEN;
    vislayer3b = HIDDEN;
    vislayer3c = HIDDEN;

    updatevisibility();

if (!is_mac_ie5down)
{
    //var out = lv1html1;
    var out = lv1html1a + width[nr] + lv1html1b;
    out = out + lv1html2 + '#"><font class="navigation">' + nam[nr] + '</font>' + lv1html3;
}
else
{
    // On Mac/IE5, display only an empty table border
    var lv1width = width[nr] + 7;
    var out = '<table border="1" bordercolor="#C1C4D1" cellspacing="0" cellpadding="0" width="' + lv1width + '" height="14"><tr><td></td></tr></table>'
}

    layercontent("lv1",out);
    leftpos("lv1",currentXPos);

    // display second lv
    // leftpos("lv2",currentXPos);

    var out = lv2html1;

    var count = 0;

    for (i = start[nr]; i <= end[nr]; i++) {
        out = out + lv3html2 + url[i] +
            lv3html3 + 'secondLevel('+i+','+count+');"><font class="dropdown">' + nam[i] + '</font>' + lv3html4;
        count++;
    } // for

    out = out + lv2html2;
	layercontent("lv2",out);
    level2Counter = count;

/*****************************************************************/	
// DEBUG  writeTextToWindow( out );
/*****************************************************************/	

    vislayer1 = VISIBLE;

    if (count > 0) { vislayer2 = VISIBLE; vislayer2b = VISIBLE; }
    else           { vislayer2 = HIDDEN;  vislayer2b = HIDDEN;  }

    var length;

    if (ns4)      length = document.lv2.document.width  - 1;
    else if (ns6) length = document.getElementById("lineal").offsetWidth - 1;
    else          length = document.all["lineal"].offsetWidth - 1;
    // if (ie4)      

    //--------------------- positionen lv2, lv2back, lv2color ----------------------|    
	leftpos("lv2",currentXPos); toppos("lv2",Y_OFFSET+15); 

    out = '<table border=0 cellspacing=0 cellpadding=0 bgcolor="#ffffff"><tr><td><img src="'+IMG_PATH+'blank.gif" width=' + length + ' height=' + ( 9 + level2Counter * lineHeight ) + '></td></tr></table>';
    // layercontent("lv2back", out); leftpos("lv2back",currentXPos+1); toppos("lv2back",Y_OFFSET+18);
    layercontent("lv2back", out); toppos("lv2back",Y_OFFSET+17); leftpos("lv2back",currentXPos+1);

    out = '<table border=0 cellspacing=0 cellpadding=0 bgcolor="#D2DCE7"><tr><td><img src="'+IMG_PATH+'blank.gif" width=' + length + ' height=16></td></tr></table>';
    // layercontent("lv2color", out); leftpos("lv2color",currentXPos+1);
    layercontent("lv2color", out); toppos("lv2color",Y_OFFSET+21+count*lineHeight); leftpos("lv2color",currentXPos+1);
	
    updatevisibility();
} // firstLevel()
//-----------------------------------------------------------------------------|
function writeTextToWindow( text ) {
	myWin = window.open( "about:blank", "" );
	myWin.document.write( text );
} // writeTextToWindow()
//-----------------------------------------------------------------------------|
function secondLevel(nr,count) {

    var length;

    if (ns4)      length = document.lv2.document.width;
    else if (ns6) length = document.getElementById("lineal").offsetWidth;
    else          length = document.all["lineal"].offsetWidth;
    // if      (ie4) 

    extraCounter = count;

    var currentCounter = 0;

    var out = ''; // default.

    // if sublevel exists, build output accordingly.
    if ( start[nr] ) {

        out = lv3html1;

        for (i = start[nr]; i <= end[nr]; i++) {
            out = out + lv3html2 + url[i] + lv3html3 + 'thirdLevel('+currentCounter+');"><font class="dropdown">' + nam[i] + '</font>' + lv3html4;
            currentCounter++;
        } // for

        out = out + lv3html5;

    } // if (start exists)

    layercontent( "lv3", out );

/*****************************************************************/	
// DEBUG  writeTextToWindow( out );
/*****************************************************************/	

    // SUBLEVEL (3) -------------------------------------------------

    if ( start[nr] ) {

        // farbmarkierung für lv3 vorbereiten
        var length2;
        if      (ie4) length2 = document.all["lineal2"].offsetWidth;
        else if (ns4) length2 = document.lv3.document.width;
        else          length2 = document.getElementById("lineal2").offsetWidth;

        //--------------------- positionen lv3, lv3back, lv3color ----------------------| 
		leftpos( "lv3", currentXPos + length + 1 );
   	    toppos ( "lv3", Y_OFFSET + 17 + count * lineHeight );

        out = '<table border=0 cellspacing=0 cellpadding=0 bgcolor="#ffffff"><tr><td><img src="'+IMG_PATH+'blank.gif" width=' + length2 + ' height=' + ( 9 + currentCounter *lineHeight ) + '></td></tr></table>';
        // layercontent("lv3back", out); leftpos("lv3back",currentXPos+1+length); toppos("lv3back",Y_OFFSET+17+count*lineHeight);
        layercontent("lv3back", out); leftpos("lv3back",currentXPos+1+length); toppos("lv3back",Y_OFFSET+17+count*lineHeight);

        out = '<table border=0 cellspacing=0 cellpadding=0 bgcolor="#D2DCE7"><tr><td><img src="'+IMG_PATH+'blank.gif" width=' + length2 + ' height=16></td></tr></table>';
        layercontent("lv3color", out);
        // leftpos("lv3color",currentXPos+length+1);
        leftpos("lv3color",currentXPos+length+1); toppos("lv3back",Y_OFFSET+17+count*lineHeight); 

        // ende der vorbereitung

        // farbmarkierung darstellen
        toppos("lv2color",Y_OFFSET+21+count*lineHeight);

    } // if

    else {

        // out = '';

        // layercontent("lv3back", out); leftpos("lv3back",currentXPos+1+length); toppos("lv3back",Y_OFFSET+17+count*lineHeight);
        layercontent("lv3back", out); leftpos("lv3back",currentXPos+1+length); toppos("lv3back",Y_OFFSET+17+count*lineHeight); toppos("lv2",Y_OFFSET+15);

        layercontent("lv3color", out);
        leftpos("lv3color",currentXPos+length+1);

        toppos("lv2color",Y_OFFSET+21+count*lineHeight);

    } // else

    if ( currentCounter > 0 ) { vislayer3 = VISIBLE; vislayer3b = VISIBLE; }

    vislayer3c = HIDDEN;
    vislayer2c = VISIBLE;

    leftpos( "lv3", currentXPos + length + 1 );
    toppos ( "lv3", Y_OFFSET + 17 + count * lineHeight );

    updatevisibility();

} // secondLevel()
//-----------------------------------------------------------------------------|
function thirdLevel(position) {
    // farbmarkierung darstellen
    toppos( "lv3color", 4 + Y_OFFSET + 17 + extraCounter * lineHeight + ( lineHeight * position ) );
    vislayer3c = VISIBLE;
    updatevisibility();
} // thirdLevel()
//-----------------------------------------------------------------------------|
function displayLevelOneMenu() {

// alert("selectedNavPosition = " + selectedNavPosition);

    //display first-lv-menu
    for (i = start[0]; i <= end[0]; i++) {

        if (i == selectedNavPosition) {

            currentXPos = position[i]-5;
            
            if (!is_mac_ie5down)
            {
                        var out = lv1html1a + width[i] + lv1html1b + lv1html2 + '#" onMouseOver="firstLevel(' + i + ')"><font class="navigation">' + nam[i] + '</font>' + lv1html3;
            openlayer( "mainnav" + i, currentXPos, Y_OFFSET-1 );
            document.write( out );
            closelayer();
            }
            else
            {
                // On Mac/IE5, display first an empty table border ...
                var lv1width = width[i] + 7;
                var out = '<table border="1" bordercolor="#C1C4D1" cellspacing="0" cellpadding="0" width="' + lv1width + '" height="14"><tr><td></td></tr></table>';
                openlayer( "mainborder" + i, currentXPos, Y_OFFSET-1 );
                document.write( out );
                closelayer();
                // ... and then the primary navigation
                openlayer( "mainnav" + i, position[i], Y_OFFSET );
                document.write( '<img src="' + IMG_PATH + 'arrow.gif" border=0><a href="#" onMouseOver="firstLevel(' + i + ')"><span class="navigation">' + nam[i] + '</span></a>' );
                closelayer();
            }
            
            
            
        } // selected!

        else {

            openlayer( "mainnav" + i, position[i], Y_OFFSET );

			//document.write('<span id="lineal1_' + i + '">');
            document.write( '<img src="' + IMG_PATH + 'arrow.gif" border=0><a href="#" onMouseOver="firstLevel(' + i + ')"><span class="navigation">' + nam[i] + '</span></a>' );
			//document.write('</span>');

            closelayer();

        } // else (not selected)
    } // for

    //-----------------------------------------------------------------------------|
    openlayer( "lv1",      1, Y_OFFSET-1  ); closelayer();
    openlayer( "lv2back",  1, Y_OFFSET+15 ); closelayer();
    openlayer( "lv2color", 1, Y_OFFSET+15 ); closelayer();
    openlayer( "lv2",      1, Y_OFFSET+15 ); closelayer();
    openlayer( "lv3back",  1, 1           ); closelayer();
    openlayer( "lv3color", 1, 1           ); closelayer();
    openlayer( "lv3",      1, 1           ); closelayer();

    updatevisibility();

} // displayLevelOneMenu()

//***** HTML STRING SECTION ***************************************************
// This has to be written differently for Macintosh IE5.0 and earlier (is_mac_ie5down = TRUE)

// Level #1 HTML Part #1 ------------------------------------------------------

// lv1html1, splitted to insert width:
if (!is_mac_ie5down)
{
    lv1html1a  = '<table border="0" cellspacing="0" cellpadding="0" bgcolor="#C1C4D1" width="';
    lv1html1b = '"><tr><td colspan="3"><img src="'+IMG_PATH+'blank.gif" width="1" height="1"></td></tr>';
    lv1html1b += '<tr><td><img src="'+IMG_PATH+'blank.gif" width="1" height="1"></td>';
    lv1html1b += '<td bgcolor="#000033" nowrap>';
    lv1html1b += '<img src="'+IMG_PATH+'blank.gif" width=4 height=1><img src="'+IMG_PATH+'arrow';
}
else
{
    // lv1html1a and lv1html1b are not needed for IE5/Mac
}

// Level #1 HTML Part #2 ------------------------------------------------------
if (!is_mac_ie5down)
{
    var lv1html2 = '.gif" border=0><a href="';
}
else
{
    // lv1html2 is not needed for IE5/Mac
}

// Level #1 HTML Part #3 ------------------------------------------------------
if (!is_mac_ie5down)
{
    lv1html3  = '</a>';
    lv1html3 += '<img src="'+IMG_PATH+'blank.gif" width=2 height=1>';
    lv1html3 += '</td>';
    lv1html3 += '<td><img src="'+IMG_PATH+'blank.gif" width=1 height=1></td>';
    lv1html3 += '</tr><tr><td colspan=3><img src="'+IMG_PATH+'blank.gif" width=1 height=1></td></tr>';
    lv1html3 += '</table>';
}
else
{
    // lv1html3 is not needed for IE5/Mac
}

// Level #2 HTML Part #1 ------------------------------------------------------

if (!is_mac_ie5down)
{
    lv2html1  = '<img src="'+IMG_PATH+'blank.gif" width=1 height=2><br clear="all">';
    lv2html1 += '<table border=0 cellspacing=0 cellpadding=0>';
    lv2html1 += '<tr><td colspan=3 bgcolor="#000000"><img src="'+IMG_PATH+'blank.gif" width=1 height=1></td></tr>';
    lv2html1 += '<tr><td bgcolor="#000000"><img src="'+IMG_PATH+'blank.gif" width=1 height=1></td>';
    lv2html1 += '<td nowrap><img src="'+IMG_PATH+'blank.gif" width=1 height=4><br clear=all>';
    lv2html1 += '<font class="dropdown">';
}
    else
{
    lv2html1  = '<img src="'+IMG_PATH+'blank.gif" name="lineal" width=190 height=6><br clear="all">';
    lv2html1 += '<font class="dropdown">';
}

// Level #2 HTML Part #2 ------------------------------------------------------
if (!is_mac_ie5down)
{
    lv2html2  = '</font><img src="'+IMG_PATH+'blank.gif" width=1 height=4><br clear=all>';
    lv2html2 += '</td>';
    lv2html2 += '<td bgcolor="#000000"><img src="'+IMG_PATH+'blank.gif" width=1 height=1></td></tr>';
    lv2html2 += '<tr><td bgcolor="#000000" colspan=3><img src="'+IMG_PATH+'blank.gif" width=1 height=1></td></tr>';
    lv2html2 += '<tr><td colspan=3><img src="'+IMG_PATH+'blank.gif" id="lineal" name="lineal" width="100%" height="1"></td></tr>';
    lv2html2 += '</table>';
}
else
{
    lv2html2  = '</font><img src="'+IMG_PATH+'blank.gif" width=1 height=4><br clear=all>';
}
// Level #3 HTML Part #1 ------------------------------------------------------
if (!is_mac_ie5down)
{
    lv3html1  = '<table border=0 cellspacing=0 cellpadding=0">';
    lv3html1 += '<tr><td colspan=3 bgcolor="#000000"><img src="'+IMG_PATH+'blank.gif" width=1 height=1></td></tr>';
    lv3html1 += '<tr><td bgcolor="#000000"><img src="'+IMG_PATH+'blank.gif" width=1 height=1></td>';
    lv3html1 += '<td nowrap><img src="'+IMG_PATH+'blank.gif" width=1 height=4><br clear=all>';
    lv3html1 += '<span id="content3" class="dropdown">';
}
else
{
    lv3html1  = '<img src="'+IMG_PATH+'blank.gif" name="lineal2" width=190 height=4><br>';
}

// Level #3 HTML Part #2 ------------------------------------------------------
var lv3html2 = '&nbsp;&nbsp;<img src="'+IMG_PATH+'subarrow.gif"><a class="dropdown" href="';

// Level #3 HTML Part #3 ------------------------------------------------------
var lv3html3 = '" onMouseOver="';

// Level #3 HTML Part #4 ------------------------------------------------------
var lv3html4 = '</a>&nbsp;&nbsp;<br>';

// Level #3 HTML Part #5 ------------------------------------------------------
if (!is_mac_ie5down)
{
    lv3html5  = '</span><img src="'+IMG_PATH+'blank.gif" width=1 height=4><br clear=all>';
    lv3html5 += '</td>';
    lv3html5 += '<td bgcolor="#000000"><img src="'+IMG_PATH+'blank.gif" width=1 height=1></td></tr>';
    lv3html5 += '<tr><td bgcolor="#000000" colspan=3><img src="'+IMG_PATH+'blank.gif" width=1 height=1></td></tr>';
    lv3html5 += '<tr><td colspan=3><img src="'+IMG_PATH+'blank.gif" id="lineal2" name="lineal2" width="100%" height="1"></td></tr>';
    lv3html5 += '</table>';
}
else
{
    lv3html5  = '';
}

//***** END -> HTML STRING SECTION ********************************************

/********** RUN AT START! ***************/

displayLevelOneMenu();

/****************************************/