function pagestart( Kollektion ) {
//
// Initialisiert und startet via onload-event die dynamischen Elemente der Seite.
//
// Kollektion: Name einer in kopfanimation.js vordefinierten Bildfolge. Fehlt die
//             Angabe oder ist unter diesem Namen keine Folge abgelegt, wird eine
//             ebenfalls dort definierte Standardfolge angezeigt.

var k;           // Liste zu schaltender Elemente
var d;           // Schleifenvariablen
var e;
var f;
var root;        // Array-Index für die Wurzel des Menübaums

// 1. Aufgabe: Die Animation des Kopfbereichs
kopfanimation( Kollektion );

// 2. Aufgabe: Ggf. die zuvor angepasste Schriftgröße übernehmen.
inherit_font_size();

// 3. Aufgabe: Die passenden Menüeinträge zeigen. Vom Server wurden alle Menüeinträge in
//    eingeschalteter Form geliefert, damit auch ohne JS navigiert werden kann.
// Zuerst alle Menüeinträge mit Ausnahme von root ausschalten

k = new Array();
for ( e in site ) {
  if ( !ismenuroot( e ) ) {
    k.push( site[e].elemid );
  } else {   // root gefunden
    var root = e;
  }	   
}
toggle( k,'none' );
// Ebenso für das linke Menü
// k = new Array( 't1000','t1110','t1120','t2000','t3000','t3010','t3020','t3030','t3040','t3050','t3060','t4000','t4010' );
// toggle( k,'none' );

// Die Kinder von root, d.h. die oberste Ebene, werden immer angezeigt.
k = kinder( site[root].elemid );
toggle( k, 'block' );
// Analog für das linke Menü
// k = new Array( 't1000', 't3000','t4000');  // Mit Aktion
k = new Array( 't3000','t4000');  // Ohne Aktion
toggle( k, 'block' );

// Die weiteren anzuzeigenden Knoten hängen von der aktuellen Seite ab,
// deshalb den Knoten der aktuellen Seite bestimmen.
var thispage = window.location.pathname;
// thispage = '/geschaefte/braunschweig/schlossarkaden/'; // *** debug only
// alert('>'+thispage+'<');

// Alle Vorväter von der aktuellen Seite bis hinauf zu root einblenden.
// *** Diese Logik ist auch serverseitig für den Brotkrumenpfad einzusetzen.
// if (site[thispage]) { // abfangen von Seiten, die nicht in site[] definiert sind
k = new Array();
// alert( thispage );
e = site[thispage].father;
while ( e != site[root].elemid ) {
  for ( f in site )	{
	if ( site[f].elemid == e) break;
  }
  k.push( site[f].elemid );
  e = site[f].father;
}
//alert( k );
toggle( k, 'block' );

// Aktuellen Knoten und seine Geschwister anzeigen
k = kinder( site[thispage].father );
toggle( k, 'block' );
// } // if (site[thispage])

// Kindknoten des akt. Knotens werden ggf. zusammen mit dem dann am
// akt. Knoten vorhandenen Klapppfeil angezeigt.

// 3. Aufgabe: Die Klapppfeile im Menü aktivieren, die initial ausgeblendet
//    sind, weil sie nur mittels JS bedient werden können.
k = new Array();
for ( e in site ) {
  f = document.getElementById( site[e].elemid );
  if (f.firstChild.nodeType != DOM_NODETYPE_TEXT) {  // Der nur dummytext enthaltende root-node wird hier übersprungen
//    alert(  e+': '+f.firstChild.nodeType+f.firstChild.nodeName );
    if ( f.firstChild.nodeName == 'IMG' ) { // *** ist das casing von 'IMG' wirklich immer so?
      // Dieses Element enthält ein einzuschaltendes Pfeilbild
//      alert (e+': IMG gefunden');
      f = f.firstChild;
      f.setAttribute('style','visibility: visible;');
      // Der Klapppfeil der aktuellen Seite wird ggf. als ausgeklappt dargestellt, 
      // und deren Kinder alle angezeigt.
      if (site[e].elemid == site[thispage].elemid) {
	    klapp( f )
      }
    }
  }
}   // for e


// 3. Aufgabe, Teil II: Die Klapppfeile im linken Menü aktivieren,
//    die initial ausgeblendet sind, weil sie nur mittels JS bedient
//    werden können.
var d = document.getElementById( "t1000" );   // Mit Aktion
// var d = document.getElementById( "t1000" );   // Ohne Aktion

// alert(  'd=' + d.firstChild.nodeType+d.firstChild.nodeName );
e = document.getElementById( "t3000" );
// alert(  'e=' + e.firstChild.nodeType+e.firstChild.nodeName );
f = document.getElementById( "t4000" );
// alert(  'f=' + f.firstChild.nodeType+f.firstChild.nodeName );
// ***aktion var dk = d.firstChild;
var ek = e.firstChild;
var fk = f.firstChild;
// ***aktion dk.setAttribute('style','visibility: visible;');
ek.setAttribute('style','visibility: visible;');
fk.setAttribute('style','visibility: visible;');

}   // pagestart()


function popup( pic,zoom ) {
// Popup mit einem Bild von der url 'pic' skaliert mit dem Faktor 'zoom'
 var imgElem = pic.firstChild;
 var winWidth = zoom * imgElem.getAttribute( 'width' ) + 20;
 if (!winWidth) winWidth = zoom * 150;
 var winHeight = zoom * imgElem.getAttribute( 'height' ) + 50;
 if (!winHeight) winHeight = zoom * 100;
 var winTitle = imgElem.getAttribute( 'title' );
 var fenster = window.open( pic.getAttribute( 'href' ), winTitle, 'dependent=yes,width=' + winWidth + ',height=' + winHeight + ',status=yes,menubar=no,scrollbars=no,resizable=no' );
 fenster.focus();

 return false;
}

/* Cookie Funktionen von signalwerk.de */
function set_cookie( my_cookie, value, days ) {
 if (days) {
  var date = new Date();
  date.setTime( date.getTime() + (days*24*60*60*1000) );
  var expires = "; expires=" + date.toGMTString();
 }
 else expires = ""
 document.cookie = my_cookie + "=" + value + expires + "; path=/";
}

function read_cookie( my_cookie ) {
 var my_cookie_eq = my_cookie + "=";
 var ca = document.cookie.split( ';' );
 for (var i=0;i< ca.length;i++) {
  var c = ca[i];
  while (c.charAt( 0 )==' ') {
   c = c.substring( 1, c.length );
  }
  if (c.indexOf( my_cookie_eq ) == 0) {
   return c.substring( my_cookie_eq.length, c.length );
  }
 }
 return null
}

function delete_cookie( my_cookie ) {
 set_cookie( my_cookie, "", -1 );
}

/* Stellraddefinition */
var phi_ausgeblendet = Math.acos(2/9);
var phi_alpha = phi_ausgeblendet; var phi_omega = Math.PI - phi_ausgeblendet;
var fmin = 0.3; var fmax = 2.4; var fsteps = 18;   // Festlegung von Wertebereich und Auflösung
var dflt_fontsize = 0.6; var cook_fontsize = 'font-size';
var curr_fontsize;

/* Initialisierung der Schriftgröße */
function inherit_font_size() {
curr_fontsize = read_cookie( cook_fontsize );
// alert (curr_fontsize);
if (!curr_fontsize) curr_fontsize = dflt_fontsize;
var currfontsizeStr = Math.round( 100*curr_fontsize ) + '%';
// alert (currfontsizeStr);
// Zur Schriftgröße gehörenden Stellradwinkel berechnen
var phi = (phi_omega-phi_alpha)*( Math.log( curr_fontsize/fmin ) / Math.log( fmax/fmin ) ) + phi_alpha;
// Zum Stellradwinkel gehörende x-Position berechnen
var z = (Math.cos( phi_alpha )-Math.cos( phi )) / (Math.cos( phi_alpha )-Math.cos( phi_omega ))* 100;
set_fontsize_marker( z );
var e = document.getElementsByTagName('body')[0];
e.setAttribute( 'style','font-size: '+currfontsizeStr );
}

function set_fontsize_marker( percent ) {
 var e = document.getElementById( 'stellradzeiger' );
 e.setAttribute( 'style','background-position: '+ percent + '%' );
};

function fontsize_inc( direction ) {
// Globale Schriftgröße relativ ändern
 var ffactor = Math.pow( fmax/fmin, 1/fsteps );   // Schrittweite bei logarithmischer Teilung des Wertebereichs
// alert ('#'+ffactor+'#'+fmin+'#'+fmax+'#'+curr_fontsize+'#');

 if (direction=='-') ffactor = 1/ffactor;
 curr_fontsize = Math.max( fmin, Math.min( fmax, curr_fontsize*ffactor ) );
 // Zur neuen Schriftgröße gehörenden Stellradwinkel berechnen
 var phi = (phi_omega-phi_alpha)*( Math.log( curr_fontsize/fmin ) / Math.log( fmax/fmin ) ) + phi_alpha;
 // Zum Stellradwinkel gehörende x-Position berechnen
 var z = (Math.cos( phi_alpha )-Math.cos( phi )) / (Math.cos( phi_alpha )-Math.cos( phi_omega ))* 100;
 set_fontsize_marker( z );
 var currfontsizeStr = Math.round( 100*curr_fontsize ) + '%';
// alert ('#'+currfontsizeStr+'#');
 var e = document.getElementsByTagName('body')[0];
 e.setAttribute( 'style','font-size: '+currfontsizeStr );
 set_cookie( cook_fontsize, curr_fontsize );
 
 return false;
}   // fontsize_inc()

/* Berechnet aus den Koordinaten eines Mausevents im Element 'stellradsensor'
    dessen prozentuale Position auf dem Stellrad. */
	function mouse_percent(event, img) {
 var nMouseX = (document.all ? (event.clientX + document.body.scrollLeft) : event.pageX);
 var nImgX = img.parentNode.parentNode.offsetLeft+2; // Die positionierten Elemente in der Hierarchie überspringen und 2px Rand berücksichtigen.
 var nRelX = nMouseX - nImgX;
 var nImgW = img.width;
 return Math.max( Math.min( (nRelX/nImgW)*100,100 ),0 );
}	
	
function fontsize_set(event, img) {
 // Globale Schriftgröße absolut setzen
 set_fontsize_marker( mouse_percent( event, img ) );
 // Zur Markerposition gehörenden Stellradwinkel berechnen
 var phi = Math.acos( Math.cos( phi_alpha ) + mouse_percent( event, img )/100*(Math.cos( phi_omega ) - Math.cos( phi_alpha )) );
 // Zum Stellradwinkel gehörende Schriftgröße bestimmen, setzen und speichern
 curr_fontsize = fmin*Math.pow( (fmax/fmin), (phi-phi_alpha)/(phi_omega-phi_alpha) )
 var currfontsizeStr = Math.round( 100*curr_fontsize ) + '%';
 var e = document.getElementsByTagName('body')[0];
 e.setAttribute( 'style','font-size: '+currfontsizeStr );
 set_cookie( cook_fontsize, curr_fontsize );

}   // fontsize_set
