


//
// Schaltet die Anzeige von Menüelementen in Abhängigkeit von Ereignissen.
// Initial werden alle Elemente angezeigt, damit auch ohne JS navigiert werden kann.
// 1. onload() --- Abschalten der Anzeige von allen Knoten,
//                   die keiner der folgenden Gruppen angehören:
//                   - root
//                   - Knoten der obersten Menüebene
//                   - Direkte Vorväter des aktuellen Knotens
//                   - Geschwisterknoten des aktuellen Knotens
//                   - Kindknoten des aktuellen Knotens
// 2. klapp()  --- Umschalten der Anzeige aller Kindknoten des angeclickten Knotens.
//

// Konstantendefinitionen
// *** Gibt's für die nodeTypes eine 'offizielle' Konstantendekl.?
var DOM_NODETYPE_TEXT = 3;        // Lt. W3-Std. für das DOM
var MENU_GESCHLOSSEN_ALT = '\u21D2';    // Unicodezeichen für Doppelpfeil nach rechts
var MENU_OFFEN_ALT       = '\u21D3';    // Unicodezeichen für Doppelpfeil nach unten

// Klassendefinition für einen Knoteninhalt
// *** Noch besser wäre eine Kapselung der gesamten Siterepräsentation
function menunode( elemid,father ) {
  this.elemid = elemid;   // id des Knotens im DOM
  this.father = father;   // id des übergeordneten Knotens
};

// Klassendefinition für eine Sammlung von IMG-Attributen
function imgattrs( src,alt,style,title ) {
  this.src = src;
  this.alt = alt;
  this.style = style;
  this.title = title;
};

// Datenstruktur zur Sitebeschreibung;
// wird vom CMS aus der serverseitigen Sitebeschreibung erstellt.
// *** Diese URLs sind für die bleibende Lösung mit dem hierarchisch niedrigsten
// *** Teil des FQDN zu prefixen.
var site = new Array();
site['/'] = new menunode( "n1","n1" ),   // father == index => root
site['/meine-brille/'] = new menunode( "n130","n1" );
site['/meine-brille/qualitaet/'] = new menunode( "n131","n130" );
site['/meine-brille/kosten/'] = new menunode( "n132","n130" );
site['/geschaefte/'] = new menunode( "n2","n1" );
site['/geschaefte/bad-bevensen/'] = new menunode( "n3","n2" );
site['/geschaefte/braunschweig/'] = new menunode( "n4","n2" );
site['/geschaefte/braunschweig/friedrich-wilhelm-strasse/'] = new menunode( "n5","n4" );
site['/geschaefte/braunschweig/schlossarkaden/'] = new menunode( "n6","n4" );
site['/geschaefte/hameln/'] = new menunode( "n7","n2" );
site['/geschaefte/hameln/baeckerstrasse/'] = new menunode( "n8","n7" );
site['/geschaefte/hameln/deisterstrasse/'] = new menunode( "n9","n7" );
site['/geschaefte/hannover/'] = new menunode( "n10","n2" );
site['/geschaefte/hannover/ernst-august-galerie/'] = new menunode( "n1100","n10" );
site['/geschaefte/hannover/georgstrasse/'] = new menunode( "n11","n10" );
site['/geschaefte/hannover/lister-meile/'] = new menunode( "n12","n10" );
site['/geschaefte/hannover/stolzestrasse/'] = new menunode( "n13","n10" );
site['/geschaefte/hannover/fiedelerstrasse/'] = new menunode( "n14","n10" );
site['/geschaefte/hannover/lister-platz/'] = new menunode( "n15","n10" );
site['/geschaefte/hannover/limmerstrasse/'] = new menunode( "n16","n10" );
site['/geschaefte/hannover/brillen-melle/'] = new menunode( "n17","n10" );
site['/geschaefte/hannover/optiker-staude/'] = new menunode( "n18","n10" );
site['/geschaefte/hannover/brillen-genser/'] = new menunode( "n19","n10" );
site['/geschaefte/helmstedt/'] = new menunode( "n20","n2" );
site['/geschaefte/hildesheim/'] = new menunode( "n21","n2" );
site['/geschaefte/neustadt-nrue/'] = new menunode( "n22","n2" );
//site['/geschaefte/neustadt-nrue/robby/'] = new menunode( "n29","n22" );
site['/geschaefte/peine/'] = new menunode( "n23","n2" );
site['/geschaefte/springe/'] = new menunode( "n24","n2" );
site['/geschaefte/wolfsburg/'] = new menunode( "n25","n2" );
site['/geschaefte/wunstorf/'] = new menunode( "n26","n2" );
site['/wir/'] = new menunode( "n50","n1" );
site['/wir/geschichte/'] = new menunode( "n51","n50" );
site['/wir/geschichte/becker/'] = new menunode( "n52","n51" );
site['/wir/geschichte/floege/'] = new menunode( "n53","n51" );
site['/wir/geschichte/becker-floege/'] = new menunode( "n54","n51" );
site['/wir/geschaeftsnachfolge/'] = new menunode( "n55","n50" );
site['/wir/jobs/'] = new menunode( "n56","n50" );
site['/wir/lehrstellen/'] = new menunode( "n57","n50" );
site['/wir/lehrstellen/augenoptik/'] = new menunode( "n58","n57" );
// site['/wir/lehrstellen/buero/'] = new menunode( "n59","n57" );
site['/medien/'] = new menunode( "n60","n1" );
site['/medien/meldungen/'] = new menunode( "n61","n60" );
site['/medien/spiegel/'] = new menunode( "n62","n60" );
//site['/kontakt/'] = new menunode( "n70","n1" );
//site['/kontakt/feedback/'] = new menunode( "n71","n70" );
//site['/datenschutz/'] = new menunode( "n91","n1" );
//site['/impressum/'] = new menunode( "n92","n1" );

site['/rechtsichtigkeit/'] = new menunode( "n207","n1" );
site['/fehlsichtigkeit/'] = new menunode( "n210","n1" );
site['/fehlsichtigkeit/alterssichtig/'] = new menunode( "n212","n210" );
site['/fehlsichtigkeit/kurzsichtig/'] = new menunode( "n214","n210" );
site['/fehlsichtigkeit/stabsichtig/'] = new menunode( "n216","n210" );
site['/fehlsichtigkeit/weitsichtig/'] = new menunode( "n218","n210" );
site['/fehlsichtigkeit/loesungen/'] = new menunode( "n232","n210" );
site['/fehlsichtigkeit/loesungen/nahbereichsglaeser/'] = new menunode( "n235","n232" );
site['/fehlsichtigkeit/loesungen/gleitsichtglaeser/'] = new menunode( "n237","n232" );

site['/brillen-faq/'] = new menunode( "n220","n1" );
site['/brillen-faq/brillenwahl/'] = new menunode( "n222","n220" );
site['/brillen-faq/reinigung/'] = new menunode( "n224","n220" );
site['/brillen-faq/kinderbrille/'] = new menunode( "n226","n220" );
site['/brillen-faq/urlaub/'] = new menunode( "n228","n220" );

site['/kontaktlinsen-faq/'] = new menunode( "n240","n1" );
site['/kontaktlinsen-faq/typen/'] = new menunode( "n242","n240" );
site['/kontaktlinsen-faq/alltag/'] = new menunode( "n243","n240" );
site['/kontaktlinsen-faq/sport/'] = new menunode( "n244","n240" );
site['/kontaktlinsen-faq/kosmetik/'] = new menunode( "n245","n240" );
site['/kontaktlinsen-faq/pflege/'] = new menunode( "n246","n240" );
site['/kontaktlinsen-faq/anpassung/'] = new menunode( "n247","n240" );
site['/kontaktlinsen-faq/gewoehnungszeit/'] = new menunode( "n248","n240" );

site['/low-vision/'] = new menunode( "n250","n1" );
site['/low-vision/krankheitsbilder/'] = new menunode( "n251","n250" );
site['/low-vision/loesungen/'] = new menunode( "n257","n250" );
site['/low-vision/loesungen/lupen/'] = new menunode( "n252","n257" );
site['/low-vision/loesungen/lupenbrillen/'] = new menunode( "n253","n257" );
site['/low-vision/loesungen/bildschirmlesegeraete/'] = new menunode( "n254","n257" );
site['/low-vision/loesungen/sprachausgabe/'] = new menunode( "n255","n257" );

// Themenmenue in der linken Spalte
// site['/aktion/'] = new menunode( "t1000","n1" );
// site['/aktion/einstaerkenglaeser/'] = new menunode( "t1110","t1000" );
// site['/aktion/sonnenbrillen/'] = new menunode( "t1120","t1000" );
// site['/aktion/marken-gleitsichtglaeser/'] = new menunode( "t1130","t1000" );
// site['/aktion/kontaktlinsen/'] = new menunode( "t1150","t1000" );

// site['/sonnenbrillen/sansibar/'] = new menunode( "t2000","n1" );

site['/vergroessernde-sehhilfen/'] = new menunode( "t3000","n1" );
site['/vergroessernde-sehhilfen/senseview/'] = new menunode( "t3010","t3000" );
site['/vergroessernde-sehhilfen/senseview/anwendung/'] = new menunode( "t3010","t3000" );
site['/vergroessernde-sehhilfen/senseview/datenblatt/'] = new menunode( "t3010","t3000" );
site['/vergroessernde-sehhilfen/senseview/angebote/'] = new menunode( "t3010","t3000" );
site['/vergroessernde-sehhilfen/leselupe-compact-plus/'] = new menunode( "t3020","t3000" );
site['/vergroessernde-sehhilfen/leselupe-compact-plus/anwendung/'] = new menunode( "t3020","t3000" );
site['/vergroessernde-sehhilfen/leselupe-compact-plus/datenblatt/'] = new menunode( "t3020","t3000" );
site['/vergroessernde-sehhilfen/leselupe-compact-plus/angebote/'] = new menunode( "t3020","t3000" );
site['/vergroessernde-sehhilfen/visio/'] = new menunode( "t3030","t3000" );
site['/vergroessernde-sehhilfen/visio/anwendung/'] = new menunode( "t3030","t3000" );
site['/vergroessernde-sehhilfen/visio/datenblatt/'] = new menunode( "t3030","t3000" );
site['/vergroessernde-sehhilfen/visio/angebote/'] = new menunode( "t3030","t3000" );
site['/vergroessernde-sehhilfen/lesesystem-videomatic-rp/'] = new menunode( "t3040","t3000" );
site['/vergroessernde-sehhilfen/lesesystem-videomatic-rp/anwendung/'] = new menunode( "t3040","t3000" );
site['/vergroessernde-sehhilfen/lesesystem-videomatic-rp/datenblatt/'] = new menunode( "t3040","t3000" );
site['/vergroessernde-sehhilfen/lesesystem-videomatic-rp/angebote/'] = new menunode( "t3040","t3000" );
site['/vergroessernde-sehhilfen/lesesystem-videomatic-lux/'] = new menunode( "t3050","t3000" );
site['/vergroessernde-sehhilfen/lesesystem-videomatic-lux/anwendung/'] = new menunode( "t3050","t3000" );
site['/vergroessernde-sehhilfen/lesesystem-videomatic-lux/datenblatt/'] = new menunode( "t3050","t3000" );
site['/vergroessernde-sehhilfen/lesesystem-videomatic-lux/angebote/'] = new menunode( "t3050","t3000" );
site['/vergroessernde-sehhilfen/topolino-click/'] = new menunode( "t3060","t3000" );
site['/vergroessernde-sehhilfen/topolino-click/anwendung/'] = new menunode( "t3060","t3000" );
site['/vergroessernde-sehhilfen/topolino-click/datenblatt/'] = new menunode( "t3060","t3000" );
site['/vergroessernde-sehhilfen/topolino-click/angebote/'] = new menunode( "t3060","t3000" );

site['/professionell/'] = new menunode( "t4000","n1" );
site['/professionell/fernrohrlupen-brille-gtx-25/'] = new menunode( "t4010","t4000" );
site['/professionell/fernrohrlupen-brille-gtx-25/anwendung/'] = new menunode( "t4010","t4000" );
site['/professionell/fernrohrlupen-brille-gtx-25/datenblatt/'] = new menunode( "t4010","t4000" );
site['/professionell/fernrohrlupen-brille-gtx-25/angebote/'] = new menunode( "t4010","t4000" );


// Liefert nur für das Wurzelelement des Menüs TRUE, sonst FALSE
function ismenuroot( e ) {
  return (site[e].elemid == site[e].father)
};

// Liste aller Kinder eines gegebenen Vater-Elementes liefern
function kinder( father ) {
  var e;
  var k = new Array();
  for ( e in site ) {
	if ( (site[e].father == father) && !ismenuroot( e ) ) {k.push( site[e].elemid );}
  }
  return k;
 
};   // kinder()

// Anzeige einer Knotenliste schalten
// Anzeige einer Knotenliste schalten
function toggle( liste,displayproperty ) {
  var e;
//  alert(liste.length);
  if (liste.length > 0) { // Nur schalten, wenn die Liste nicht leer ist.
    for ( e in liste ) {
//  alert( e+','+liste[e] ); // ***aktion 
	  document.getElementById( liste[e] ).style.display = displayproperty;
    }	
}
};   // toggle()

// Anzeige der Kindknoten von elemid umschalten
function klapp( elemid ) {
// type(elemid) = IMG-Elem. DOM-node 
  var oldstat; var arrcolor;
  var newpic; var newstat;

// alert( 'elemid='+elemid );
  // Aktuellen Zustand des Pfeils ermitteln ...
  oldstat = elemid.getAttribute( 'alt' );
// alert( 'oldstat='+oldstat );
  // ... und ebenso die Pfeilfarbe. *** Abhängig vom Aufbau der Pfeilgraphikdateinamen
  arrcolor = elemid.getAttribute('src').substr( -7,3 );
// alert( 'arrcolor='+arrcolor );

// alert( 'old==geschlossen?='+(oldstat==MENU_GESCHLOSSEN_ALT) );
  if (oldstat==MENU_GESCHLOSSEN_ALT) {
    // Kinder ausklappen
    newpic = new imgattrs( '/img/shared/arr-un-'+arrcolor+'.png',
                           MENU_OFFEN_ALT,
                           'visibility: visible;',
                           'Menü einklappen' 
                         );
    newstat = 'block';
  }
  else {
    // Kinder einklappen 
    newpic = new imgattrs( '/img/shared/arr-re-'+arrcolor+'.png',
                           MENU_GESCHLOSSEN_ALT,
                           'visibility: visible;',
                           'Menü ausklappen' 
                         );
    newstat = 'none';
  } 
//  alert( 'newpic: src='+newpic.src+', alt='+newpic.alt+', style='+newpic.style+', title='+newpic.title );
//  alert( 'newstat='+newstat );

  elemid.setAttribute( 'src',newpic.src );  
  elemid.setAttribute( 'alt',newpic.alt );  
  elemid.setAttribute( 'style',newpic.style );  
  elemid.setAttribute( 'title',newpic.title );  
  
//  alert( 'elemid.parentNode='+elemid.parentNode.getAttribute('id') );
  var k = kinder( elemid.parentNode.getAttribute('id') );
  toggle( k,newstat );
}   // klapp()

// Anzeige der Kindknoten von elemid im linken Menü umschalten
function tklapp( elemid ) {
// type(elemid) = IMG-Elem. DOM-node 
  var oldstat; var arrcolor;
  var newpic; var newstat;

// alert( 'elemid='+elemid );
  // Aktuellen Zustand des Pfeils ermitteln ...
  oldstat = elemid.getAttribute( 'alt' );
// alert( 'oldstat='+oldstat );
  // ... und ebenso die Pfeilfarbe. *** Abhängig vom Aufbau der Pfeilgraphikdateinamen
  arrcolor = elemid.getAttribute('src').substr( -7,3 );
// alert( 'arrcolor='+arrcolor );

// alert( 'old==geschlossen?='+(oldstat==MENU_GESCHLOSSEN_ALT) );
  if (oldstat==MENU_GESCHLOSSEN_ALT) {
    // Kinder ausklappen
    newpic = new imgattrs( '/img/shared/arr-un-'+arrcolor+'.png',
                           MENU_OFFEN_ALT,
                           'visibility: visible;',
                           'Menü einklappen' 
                         );
    newstat = 'block';
  }
  else {
    // Kinder einklappen 
    newpic = new imgattrs( '/img/shared/arr-re-'+arrcolor+'.png',
                           MENU_GESCHLOSSEN_ALT,
                           'visibility: visible;',
                           'Menü ausklappen' 
                         );
    newstat = 'none';
  } 
//  alert( 'newpic: src='+newpic.src+', alt='+newpic.alt+', style='+newpic.style+', title='+newpic.title );
//  alert( 'newstat='+newstat );

  elemid.setAttribute( 'src',newpic.src );  
  elemid.setAttribute( 'alt',newpic.alt );  
  elemid.setAttribute( 'style',newpic.style );  
  elemid.setAttribute( 'title',newpic.title );  
  
// alert( 'elemid.parentNode='+elemid.parentNode.getAttribute('id') );
  if (elemid.parentNode.getAttribute('id')=='t1000' )
      var k = new Array( 't1110','t1120','t1130','t1150' );
  if (elemid.parentNode.getAttribute('id')=='t3000' )
     var k = new Array( 't3010','t3020','t3030','t3040','t3050','t3060' );
  if (elemid.parentNode.getAttribute('id')=='t4000' )
     var k = new Array( 't4010' );
     
  toggle( k,newstat );
}   // tklapp()