// ++ DHTML Layer Menu 
// ++ Martin Klempau + factor4 + 8/2001
// 

// ------------------------ Konfiguration ------------------------------------------

// Zielframe
var dstFrame = "body";
// Quellframe (also das Frame, in dem die Auslöser-Links sind)
// Die Links müssen als onMouseOver und onMouseOut die Routinen menOpen(i) und menClose(i) haben,
// die in diesem File definiert sind. "i" bezeichnet die Nummer des Menüs, welches zu dem Link gehört
var srcFrame = "top";

// Style der MenuBoxen (<div> - nur Optik, keine Positionierung, kein Visiblity bitte)
var menuBoxStyle = "font-family:Arial; color:#009900;background-color:#DDDDDD;";
var menuBackgroundCol = "#DDDDDD";

// Zeit die vergehen darf, bis der User den Layer überfährt oder einen neuen Knopf auswählt
var closeTimeout = 2000;

// Die Definition der Menüpunkte (Doppeltes Array, im Äusseren stehen die spätere X/Y Positionen der
//   Ebene und dann folgt das jeweils innere Array, dass die Menüpunkte enthält. Für jeden Punkt ist
//   in der Reihenfolge angegeben: Titel,Url,Target)
var menuPoints = new Array(
                   110,0,  
                   new Array('Editorial','/html/ueber_oewerk.htm','_top',
                             'Satzung','/html/satzung.htm','_top',
                             'Historie','/html/historie.htm','_top',
                             'Impressum','/html/impressum.htm','_top'
                            ),
                   205,0,
                   new Array('Warum ökowerk?','/html/leistungen.htm','_top',
                             'Betriebe','/html/leist_betriebe.htm','_top',
                             'Selbständige','/html/leist_selbstaendige.htm','_top',
                             'Versicherungsangebot','/html/leist_angebot.htm','_top'
                            ),
                   285,0,
                   new Array('Verbände','/html/links.htm','_top',
                             'Mitglieder','/html/mitglieder.htm','_top',
                             'nützliche Links','/html/nuetz_links.htm','_top',
                             'in eigener Sache','/html/oekow_links.htm','_top'
                            ),
                   365,0,
                   new Array('Beitrittserklärung','/html/beitrittserklaerung.htm','_top',
                             'Unterlagenanforderung','/html/unterlagenanforderung.htm','_top',
                             'Adressänderung','/html/adressaenderung.htm','_top',
                             'Konto-Nr-Änderung','/html/kto_aenderung.htm','_top',
                             'Newsletter-Bestellung','/html/newsletter_bestellung.htm','_top'
                            )
                 );      
                
                     
// -------------------------------- Und los gehts mit (dem) System -----------------------

// Enthält später die Layer-Objekte (myObjectLayer.js)
var mCount = Math.floor(menuPoints.length/3);
var mLayer = new Array(mCount);

var running = false;
var neverRun = false;
var dstWin = 0;       // Enthält die Referenz auf das Zielfenster
var ctimer = 0;       // Enthält den Countdown

// document.write Ersatz
function dwrt(s) {
  document.write(s);
}

// Schreibt den Html Code für die Menu-Layer in das Zielframe, die Layer müssen aber bereits mit <div> eingerichtet sein,
// also pro Menüebene muss bereits ein <div id="lMenuX" style="position:absolute; left:0; top:0;">&nbsp;</div> existieren,
// X ist dabei eine fortlaufende Nummer von 0 aufwärts
function buildMenuLayers() {
  for (var i=0; i<mCount; i++) {
    var s = new String();
    s = '<table border=0 cellspacing=0 cellpadding=0 bgcolor="' + menuBackgroundCol + '">';
    for (var j=0; j<Math.floor(menuPoints[i*3+2].length/3); j++) 
      s = s + '<tr><td class="menuTD">&nbsp;</td><td class="menuTD"><nobr><font face=verdana color=#000099><b><a href="' +
        menuPoints[i*3+2][j*3+1] + '" target="' + 
        menuPoints[i*3+2][j*3+2] + '">' + menuPoints[i*3+2][j*3] + '</a></td><td class="menuTD">&nbsp;</td></tr>';
    s = s + "</table>";
    mLayer[i].setHtml('<span style="' + menuBoxStyle + '">' + s + '</span>');
  }
}

// Verbindet die Layer mit den Objekten
function connectLayers() {
  // Jetzt die LayerObjekte anbinden und initialisieren
  for (var i=0; i<mCount; i++) {
    mLayer[i] = new myLayerObj_constructor('lMenu' + i)
    mLayer[i].setPositionType('absolute');
    mLayer[i].setOverflow('visible');
    mLayer[i].setWidth(40);
    mLayer[i].setPos(menuPoints[i*3],menuPoints[i*3+1]);
    mLayer[i].setVisible(false);
  }  
}

// Öffnet den MenuLayer, der zur übergebenen Nummer gehört, macht die anderen unsichtbar
function menOpen(i) {
  if (!running || neverRun) return 0;
  if (self != dstWin) { 
    if (new String(dstWin.menOpen) != 'undefined') dstWin.menOpen(i);
    return 0;
  }
  stopTimeout();
  for (var j=0; j<mCount; j++) {
    if (i==j) {
      mLayer[j].setVisible(true);
      // Wenn der Anwender schon gescrollt hat --> Relative Position errechnen
      var relPosY = (document.all) ? document.body.scrollTop : self.pageYOffset;
      relPosY += menuPoints[i*3+1];
      mLayer[i].setPos(menuPoints[i*3],relPosY);
    } else {
      mLayer[j].setVisible(false);
    }
  }
}

// Schliesst alle MenuLayer per Timeout, der lässt sich aber durch weitere 
// Layer-MouseOver hinauszögern
function menClose() {
  if (closeTimeout==0) return 0;
  if (!running || neverRun) return 0;
  if (self != dstWin) { 
    if (new String(dstWin.menClose) != 'undefined') dstWin.menClose();
    return 0;
  }
  ctimer = self.setTimeout("internalClose()",closeTimeout);
}

function internalClose() {
  ctimer = 0;
  for (var j=0; j<mCount; j++) {
    mLayer[j].setVisible(false);
  }
}

function stopTimeout() {
  if (ctimer==0) return 0;
  self.clearTimeout(ctimer);
}


// Wartet im DstFrame auf Running=true und setzt es in diesem dann auch
function waitForRunning(n) {
  if (neverRun) return 0;
  if (n > 300*5) return 0;
  if (!dstWin.running) self.setTimeout('waitForRunning('+ (n+1) + ')',200);
    else running = true;
}


// ---------------------------------------- Init --------------------------------------------------

function layerMenuInit() {
  // DstFrame belegen (Referenz suchen)
  dstWin = (self.name == dstFrame) ? self : parent.frames[dstFrame];
  
  // Window gefunden ?
  if (new String(dstWin) != 'undefined') {
    // Die Menuframes aufbauen, wenn der Fenstername stimmt
    if (self.name == dstFrame) {
      connectLayers();
      buildMenuLayers(); 
      // Fertig, ready for takeoff
      running = true;
    } else 
      waitForRunning(0);
  
    // Ende
  }
}

