/*
 *
 * Code sollte mit allen W3C kompatiblen Browsern, MS Internet Explorer
 * und Netscape 4.xx auf allen Plattformen laufen.
 *
 * Probleme:
 *   - IE auf dem MAC ist langsam und verlängert unsinnig das Dokument
 *   - Konqueror und setTimeout() klappt nur manchmal
 *   - Konqueror liest die Postionen der Menü Anker nicht richtig
 *   - Opera hat Probleme mit CSS position fixed und funktioniert
 *     nur einigermaßen wenn er sich als Opera identifiziert
 *   - Opera macht kein Highlighting im Pulldown-Menü
 *   - NS4 benutzt die Stylesheets nur sehr eingeschänkt und scheint teilweise
 *     interne Strukturen zu zerstören (z.B. unvollständiges images-array)
 */

var bo_ns4 = (document.layers && ! document.getElementById) ? 1 : 0;		/* NS 4 */
var bo_w3  = (document.getElementById) ? 1 : 0;	/* NS 6, newer IE versions */
var bo_ie  = (navigator.appName=="Microsoft Internet Explorer") ? 1 : 0;

var bo_move = 0;
var bo_static = 0;
var bo_init = 0;

var bo_pd_to_show_anchor;
var bo_pd_to_show;

var bo_navtop;
var bo_navwidth;
var bo_show_navi = false;
var bo_navi_initialized = false;
var bo_navi;
var bo_navrealwidth=0;

/*
w = window.open('','debug','width=600,height=400,scrollbars=1,resizable=1');
var dbg = w.document;
dbg.open('text/plain');
function debug(msg) { dbg.open('text/plain'); dbg.writeln(msg+"<br>"); dbg.close(); }
*/

function bo_shownavi(e) {
  if (! bo_navi) return;

  if (! e) {
    if (! window.event) {
      bo_shownavi1();
      return;
    }
    e = window.event;
  }

  var obj = null;
  if (e.toElement)
    obj = e.toElement;
  else if (e.currentTarget)
    obj = e.currentTarget;

  var inside = true;
  for (; obj; obj=obj.parentNode) {
    inside = false;
    if (obj == bo_navi) {
      inside = true;
      break;
    }
  }

  if (inside) bo_shownavi1();
}


function bo_shownavi1() {
  window.clearTimeout (bo_move);
  bo_pd_hide_all();
  var left = bo_navi.offsetLeft;
  if (left >= 0) return;
  left -= Math.round(left*0.2) - 2;
  bo_navi.style.left = left+"px";
  bo_move = setTimeout("bo_shownavi1()", 20);
}


function bo_hidenavi(e) {
  if (! bo_navi) return;

  if (! e) {
    if (! window.event) {
      clearTimeout (bo_move);
      bo_move = setTimeout ("bo_hidenavi1();", 900);
      return;
    }
    e = window.event;
  }
  
  var obj = null;
  if (e.toElement)
    obj = e.toElement;
  else if (e.relatedTarget)
    obj = e.relatedTarget;

  for (; obj; obj=obj.parentNode) {
    if (obj==bo_navi) {
      return;
    }
  }
  clearTimeout (bo_move);
  bo_move = setTimeout ("bo_hidenavi1();", 900);
}


function bo_hidenavi1() {
  clearTimeout (bo_move);
  if (! bo_navi) return;
  var left = bo_navi.offsetLeft;
  if ((bo_navwidth+left) <= 0) return;
  left -= Math.round((bo_navwidth+left)*0.2) + 1;
  bo_navi.style.left = left+"px";
  bo_move = setTimeout('bo_hidenavi1()', 20);
}

function bo_navi_openclose() {
  if (! bo_navi) return;
  var left = bo_navi.offsetLeft;
  if ((bo_navwidth+left) <= 0)
    bo_shownavi1();
  else
    bo_hidenavi1();
}

function bo_fadein() {
  clearTimeout (bo_move);
  if (! bo_navi) return;

  if ("undefined" == typeof bo_navwidth) {
    var row = bo_navi.firstChild.firstChild.firstChild;
    var bonlist = row.firstChild;
    var bonright = row.lastChild;
    bo_navwidth = bonlist.offsetWidth;
    bo_navi.style.width = (bo_navwidth + bonright.offsetWidth)+"px";
    bo_navi.style.left = (0 - bo_navwidth - 20)+"px";
    bo_navi.style.visibility = "visible";
  }

  var left = bo_navi.offsetLeft;
  if ((bo_navwidth+left) >= 0) return;
  bo_navi.style.left = (left+2)+"px";
  bo_move = setTimeout('bo_fadein()', 100);
}

function bo_staticnavi(e) {
  if (! bo_navi) return;
  if (bo_ie) {
    var st = 0;
    if (document.documentElement)
      st = document.documentElement.scrollTop;
    if (st <= 0 &&  document.body.scrollTop)
      st = document.body.scrollTop;
    bo_navi.style.top = ((st < bo_navtop) ? bo_navtop : st)+"px";
  }
  else if (bo_w3) {
    bo_navi.style.top = ((pageYOffset < bo_navtop) ? bo_navtop-pageYOffset : 0)+"px";
    if (! e) {
      clearTimeout (bo_static);
      bo_static = setTimeout('bo_staticnavi()', 200);
    }
  }
}


function bo_init_navi() {
  if (bo_navi_initialized) return;
  bo_navi_initialized = true;

  if(document.layers && ! document.getElementById)
    return;

  if ((! boolist || boolist.length==0)
      && (! boclist || boclist.length==0)
      && (! bollist || bollist.length==0))
    return;

  var navi;
  var offer;
  var node = (document.getElementById) ? document.getElementById("bocontent") : document.all.bocontent;
  if (! node) return;

  bo_navtop = node.offsetTop;
  if (! bo_navtop) bo_navtop = 60;
  navi = '<div id="bo_navi" style="top:'+bo_navtop+'px;">'+
    '<table><tbody><tr><td class="bonlinks">';

  if(bocluster_href != "") {
    navi += '<a class="bontitle" href="'+bocluster_href+'" target="_top">'+
    '<img src="/images/ml_down.gif" alt="|v|" />'+
    bocluster_title+
    '</a>';
    if (boclist) {
      navi += '<div class="bonclist">';
      while(offer = boclist.shift()) {
        navi += '<a'+((booffer_name==offer[0]) ? ' class="bonactive"' : '')+' href="'+offer[3]+'" target="'+offer[4]+'">'+
          '<img src="/images/ml_'+offer[1]+((offer[2]!='yes') ? '_empty' : '')+'.gif" alt="-" />'+
          offer[5];
	if(offer[4]=="_blank")
	  navi += '<img src="/images/link_extern.gif" alt=" (ext)" />';
	navi += '</a>';
      }
    }
    navi += '</div>';
  }

  if (boolist) {
    while(offer = boolist.shift()) {
      navi += '<a target="_top" href="'+offer[1]+'">'+'<img src="/images/ml_cluster.gif" alt="»" />'+offer[2]+'</a>';
    }
  }

  if (bollist) {
    while(offer = bollist.shift()) {
      navi += '<a href="'+offer[3]+'" target="'+offer[4]+'">'+
        '<img src="/images/ml_'+offer[1]+'_empty.gif" alt="-" />'+
        offer[5];
      if(offer[4]=="_blank")
	navi += '<img src="/images/link_extern.gif" alt=" (ext)" />';
      navi += '</a>';
    }
  }

  navi += '</td>'+
    '<td>'+
    '<a href="javascript:bo_navi_openclose()" onclick="bo_navi_openclose(); return false;">'+
    '<img src="/images/navtop.gif" alt="" /><br />'+
    '<img src="/.bin/navimg.php/'+escape(booffer_title)+'.png" alt="'+booffer_title+'" /><br />'+
    '<img src="/images/navbottom.gif" alt="" />'+
    '</a>'+
    '</td></tr></tbody></table>'+
    '</div>';

  document.writeln (navi);

  bo_navi = (document.getElementById) ? document.getElementById("bo_navi") : document.all.bo_navi;

  if (bo_navi.addEventListener)
    bo_navi.addEventListener ("mouseout", bo_hidenavi, true);
  else
    bo_navi.onmouseout = bo_hidenavi;


  if ("undefined" == typeof document.documentElement.onscroll
      && "undefined" == typeof document.body.onscroll) {
    bo_static = setTimeout('bo_staticnavi()', 200);
  }
  else {
    if (document.documentElement)
      document.documentElement.onscroll = bo_staticnavi;
    if (document.body)
      document.body.onscroll = bo_staticnavi;
  }

  if (! bo_ie)
    bo_navi.style.position = "fixed";

  bo_fadein();
}



/////////////////////////////////////////////////////
// Menüs für die horizontale Navigation
/////////////////////////////////////////////////////


var bo_pd_store = new Array();		// Speicher für gerade sichtbare Menüs
var bo_pd_active_item = null;		// aktiver Menüpunkt


//  menu object definieren
//
// id - id des menu-layers
// node - DOM Object des menu-layers
// anchor - Anker DOM Node des menu-layers
function bo_pd (id, node, anchor)
{
  this.id = id;
  this.node = node;
  this.anchor = anchor;
}


// objekt für menüitem definition
//
// inner - anker html
// href - link url
// sub - id des zu öffnenden submenüs
function bo_item (inner, href, sub)
{
  this.inner = inner;
  this.href = href;
  this.sub = sub;
}


// Menüpunkt aktivieren/deaktivieren
function bo_pd_activate(item,active)
{
  if (typeof document.layers == "undefined") {
    if (item.className.match(/^bopd/))
      item.className = (active ? "bopdactive" : "bopdinactive");
  } else {
    if (active) {
      item.backgroundColor = "#426fd4";
      item.color = "#ffffff";
    } else {
      item.backgroundColor = "#f0f5fb";
      item.color = "#000000";
    }
  }

  bo_pd_active_item = active ? item : null;
}


// einzelnes Menü verstecken
//
// menu - bo_pd menü objekt
function bo_pd_do_hide (menu)
{
  if (bo_ns4) {
    menu.node.visibility = "hide";
  } else {
    menu.node.style.visibility = "hidden";
  }
  bo_pd_activate (menu.anchor, false);
}


// alle menüs verstecken
function bo_pd_hide_all (event)
{
  if (bo_pd_active_item)
    bo_pd_activate (bo_pd_active_item, false);

  for (var i=0; i<bo_pd_store.length; i++)
    bo_pd_do_hide (bo_pd_store[i]);

  bo_pd_store = new Array();
}


// Menü bedingt bei mouseover öffnen
//
// anchor - anchor dom node
// name - id des zu öffnenden menüs
function bo_pd_over(anchor,name)
{
  if (typeof bo_pd_store != "undefined" && bo_pd_store.length > 0)
    bo_pd_show(anchor,name);
}


// Menü an der anker position öffnen
//
// anchor - anchor dom node
// name - id des zu öffnenden menüs
function bo_pd_show(anchor,name)
{
  var menu = null;
  var ax = 0;
  var ay = 0;
  var ayo = 19;

  if (bo_pd_to_show_anchor == anchor) {
    bo_pd_to_show_anchor = null;
    return true;
  }

  if (name == null) {
    // keine Argumente
    name = bo_pd_to_show;
    anchor = bo_pd_to_show_anchor;
  } else {
    // Argumente merken
    bo_pd_to_show = name;
    bo_pd_to_show_anchor = anchor;
  }

  if (name == null)
    return true;

  // Nicht anzuzeigende Menüs ausblenden
  var na = name.split("-");
  var test = new Array();
  var temp = new Array();
  for (var i=0; i<bo_pd_store.length; i++) {
    test[test.length] = na[i];
    var x = test.join ("-");
    if (x == bo_pd_store[i].id) {
      temp[i] = bo_pd_store[i];
    } else {
      // ab der position alte menüs verstecken und neue anzeigen
      for ( ; i < bo_pd_store.length; i++) {
	bo_pd_do_hide (bo_pd_store[i]);
      }
      break;
    }
  }
  bo_pd_store = temp;

  if (bo_pd_store.length == 0 || bo_pd_store[bo_pd_store.length - 1].id != name) {

    if (typeof bo_navi != "undefined")
      bo_hidenavi1();

    // Anker Position feststellen
    if (bo_ns4) {
      ax = anchor.x;
      ay = anchor.y;
      if (bo_pd_store.length > 0) {
	ax += bo_pd_store[bo_pd_store.length - 1].node.pageX;
	ay += bo_pd_store[bo_pd_store.length - 1].node.pageY;
      }
    } else {
      ayo = anchor.offsetHeight;
      for (var obj=anchor; obj != null; obj = obj.offsetParent) {
	ay += parseInt(obj.offsetTop);
	ax += parseInt(obj.offsetLeft);
      }
    }

    if (name.match(/-/)) {
      ax += bo_pd_width - 1;	// Submenü
    } else {
      ay += ayo + 1;		// Pulldown
    }

    // Neues Menü anzeigen
    if (typeof document.getElementById != "undefined") {
      var node = document.getElementById(name);
      if (node != null) {
        menu = new bo_pd (name, node, anchor);
        with (node.style) { left=ax+"px"; top=ay+"px"; width=bo_pd_width+"px"; visibility="visible"; zindex=10+bo_pd_store.length; }
      }
    } else if (typeof document.all != "undefined") {
      var node = document.all.name;
      if (node != null) {
        menu = new bo_pd (name, node, anchor);
        with (node.style) { left=ax+"px"; top=ay+"px"; width=bo_pd_width+"px"; visibility="visible"; zindex=10+bo_pd_store.length; }
      }
    } else if (typeof document.layers != "undefined") {
      var node = document.layers[name];
      if (node != null) {
        menu = new bo_pd (name, node, anchor);
        with (node) { left=ax; top=ay; visibility="show"; zIndex = 10+bo_pd_store.length; }
      }
    }

    if (menu != null) {
      bo_pd_store[bo_pd_store.length] = (menu);
      if (typeof document.captureEvents != "undefined") {
        document.captureEvents(Event.MOUSEUP);
        document.onmouseup = bo_pd_hide_all;
      } else {
        document.body.onmouseup = bo_pd_hide_all;
      }
    }
  }

  return false;
}


// aktuellen menüpunkt aktivieren und submenüs ein- und ausblenden
//
// anchor - anchor dom node
// sub - anzuzeigendes menü
function bo_pd_highlite(anchor,sub)
{
  if (bo_pd_active_item)
    bo_pd_activate (bo_pd_active_item, false);

  if (bo_pd_store.length > 1) {
    for (var i=1; i<bo_pd_store.length; i++) {
      bo_pd_activate(bo_pd_store[i].anchor, true);
    }
  }

  bo_pd_show(anchor, sub);
  bo_pd_activate (anchor, true);
}


function MM_reloadPage(init)
{
  if (init==true)
    with (navigator) {
    if ((appName=="Netscape")&&(parseInt(appVersion)==4))
      {
	document.MM_pgW=innerWidth; document.MM_pgH=innerHeight;
	onresize=MM_reloadPage;
      }
  }
 else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH)
    location.reload();
}


// Menüs initialisieren

var bo_pd_initialized = false;

function bo_pd_init()
{
  if (bo_pd_initialized)
    return;

  var bo_use_div = (typeof document.all != "undefined" || typeof document.getElementById != "undefined" );
  var mhtml = "";

  for (var i in bo_pd_def) {
    if (bo_use_div)
      mhtml += '<div id="'+i+'" style="position:absolute;width:'+bo_pd_width+'px;visibility:hidden;z-index:10;color:#000000;background:#f0f5fb;">';
    else
      mhtml += '<layer name="'+i+'" visibility="hidden" top="0" left="0" width="'+bo_pd_width+'" z-index="10">';

    mhtml +='<table width="100%" cellspacing="0" cellpadding="1" border="0" bgcolor="#0d2f6c"><tr><td>'+
      '<table width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="#f0f5fb">';

    for (var j=0; j<bo_pd_def[i].length; j++) {
      with (bo_pd_def[i][j]) {
        var hsub = (typeof sub != "undefined") ? sub : i;
        var right = (typeof sub != "undefined") ? '»' : '&nbsp;';

        if (href.match(/^https?:\/\//)) {
          var target = 'target="_blank"';
          var onclick = 'onclick="window.open(\''+href+'\',\'_blank\',\'\')"';
          inner += '<img src="link_extern.gif" alt="" width="12" height="11" border="0" />';
          var xhref = href;
        } else {
          var target = 'target="_top"';
          var onclick = 'onclick="top.location.href=\'http://www.rieneck.de'+href+'\'"';
          var xhref = location.protocol + '//' + location.host + href;
        }

        if (bo_use_div) {
          mhtml += '<tr class="bopdinactive" '+onclick+' onmouseover="bo_pd_highlite(this,\''+hsub+
            '\'); window.status=\''+xhref+'\'; return true;"><td>'+inner+'</td><td align="right">'+right+'</td></tr>';
        } else {
          mhtml += '<tr class="bopdinactive"><td><a class="bopdanchor" '+
            'onmouseover="bo_pd_highlite(this,\''+hsub+'\'); window.status=\''+xhref+'\'; return true;" '+
            target+' href="'+href+'">'+inner+'</a></td><td align="right">'+right+'</td></tr>';
        }
      }
    }

    mhtml += ('</table></td></tr></table>');
    mhtml += bo_use_div ? '</div>' : '</layer>';
    mhtml += "\n";
  }
  document.writeln(mhtml);

  // Workaround: Resize BUG Netscape 4
  if (bo_ns4) {
    MM_reloadPage(true);
  }

  bo_pd_initialized = true;
}


function bo_noerrors(msg,file,line) {
  window.onerror = null;
  if (debug)
    debug(file+":"+line+": "+msg);
  return true;
}

window.onerror = bo_noerrors;

