/*******************************************************************************
 Gruenfisch Webdesign GbR, Daniel Zenner und Oliver Richter                 
 Mehr-Lesen-Skript - barrierefrei Alternative zu Standard-Akkordeon-Skripten 
 
 ToDO: 
 - Ueberschriften auslesen und ggf. Erstellen.
 - function akkordeonScrollerStop() { window.clearTimeout(timer); }  
*******************************************************************************/




/*******************************************************************************
 Start: Bitte passen Sie das Skript an Ihre Beduerfnisse an:
*******************************************************************************/
// Klasse fuer das Akkordeon-Feld:
var akkordeonKlasse = "akkordeon"; 

// Element-Name fuer das Akkordeon-Feld:
var akkordeonElementname = "div";        

// Beschriftungen des Akkordeon-Schalters:
var akkordeonLinkText1 = unescape("%u25BA ");
var akkordeonLinkText2 = unescape("%u25BC ");
var akkordeonLinkText3 = unescape("anzeigen");
var akkordeonLinkText4 = unescape("ausblenden");
var akkordeonLinkText5 = unescape("%u25BA Wird geladen...");
var akkordeonLinkText6 = unescape("%u25BA Weitere Informationen anzeigen"); 
var akkordeonLinkText7 = unescape("%u25BC Weitere Informationen ausblenden"); 

   
// Geschwindigkeit des Auf- und Zuklappeffektes einstellen (13/90):    
var aufklappPixel = 13;
var aufklappZeit  = 90;   

// Zusaetzliche Pixel (aufgrund von margin-Angaben kann es zu Anzeigeproblemen kommen):
var zusatzPixel = 15;
/*******************************************************************************
 Ende: Bitte passen Sie das Skript an Ihre Beduerfnisse an.
*******************************************************************************/   
   
   
   
   
   
   
   
   

// Erreigniswaechter einstellen: 
if (typeof window.addEventListener != 'undefined') window.addEventListener('load', akkordeonStarter, false);  
else if (typeof document.addEventListener != 'undefined') document.addEventListener('load', akkordeonStarter, false);
else if (typeof window.attachEvent != 'undefined') window.attachEvent('onload', akkordeonStarter); 
   
   
// Globale Variablen   
var aktZaehler;
var timer;
var akkordeonDaten = new Array(); // Array zum Speichern der Akkordeon-Daten aller vorkommenden Akkordeons








function akkordeonStarter()
 {
  if (document.getElementById) // ... wenn DOM verfuegbar
   {   
    aktZaehler = 0;
   
    for (var i = 0; i < document.getElementsByTagName(akkordeonElementname).length; i++) // alle potentiellen Akkordeon-Elemente durchlaufen
     {
      var aktElement = document.getElementsByTagName(akkordeonElementname);
     
      if (aktElement[i].className == akkordeonKlasse) // wenn aktuelles Element der Akkordeon-Feld-Klassen entspricht
       {      
        // Akkordeon-Daten des aktuellen Akkordeons speichern:
        akkordeonDaten[aktZaehler] = new Array();
        akkordeonDaten[aktZaehler][0] = aktZaehler;
        akkordeonDaten[aktZaehler][1] = aktElement[i].offsetHeight + zusatzPixel;
        akkordeonDaten[aktZaehler][2] = ""; // Akkordeon-Schalter-Text
        akkordeonDaten[aktZaehler][3] = ""; // Akkordeon-Schalter-Text      
       
        // Gestaltung des aktuellen Akkordeons anpassen 
        aktElement[i].style.height = "0px";
        aktElement[i].style.overflow  = "hidden"; 
        aktElement[i].setAttribute("id", "akkordeonFeld_"+aktZaehler);
            
            
        // Pruefen ob es einen Akkordeon-Schalter (Beschriftung) gibt
        var akkordeonSchalter = aktElement[i];

        for (var e = 0; e < 3; e++) 
         { 
          akkordeonSchalter = akkordeonSchalter.previousSibling; 
          if (akkordeonSchalter.nodeType == 1) 
           {  
            // alert("Schleife "+e+"\nElement-Name: "+akkordeonSchalter.nodeName+"\nElement-Wert: "+akkordeonSchalter.nodeValue+"\nKlassen-Name: "+akkordeonSchalter.className);     
            if (akkordeonSchalter.className == "akkordeon_schalter")
             { 
              // Textknoten finden
              for (var f = 0; f < akkordeonSchalter.childNodes.length; f++)
               {
                if (akkordeonSchalter.childNodes[f].nodeType == 3)
                 {
                  akkordeonDaten[aktZaehler][2] = akkordeonLinkText1 + akkordeonSchalter.childNodes[f].nodeValue + " " + akkordeonLinkText3;
                  akkordeonDaten[aktZaehler][3] = akkordeonLinkText2 + akkordeonSchalter.childNodes[f].nodeValue + " " + akkordeonLinkText4;
                 }
               } 
             }
            break; // beim ersten gefundenen richtigen Elementknoten die Suche abbrechen
           }  
         }         


        
        
        aktElement = aktElement[i]; 
        do { aktElement = aktElement.parentNode; } while (aktElement.nodeType != 1); 
        
        var neuerAbsatz = document.createElement("p");
        var neuerLink   = document.createElement("a"); 
        var neuerText   = document.createTextNode(  ((akkordeonDaten[aktZaehler][2] != "") ? akkordeonDaten[aktZaehler][2] : akkordeonLinkText6)  );
        
        neuerLink.appendChild(neuerText); 
        neuerAbsatz.appendChild(neuerLink);      
        
        aktElement.insertBefore(neuerAbsatz, document.getElementById("akkordeonFeld_"+aktZaehler))
        
        neuerLink.setAttribute("href", "javascript: akkordeonWechsler( "+(aktZaehler)+", true );");  
        neuerLink.setAttribute("title", "Klicken Sie hier, um das folgende Akkordeon zu oeffnen"); 
        neuerLink.setAttribute("id", "akkordeonLink_"+aktZaehler);    
        neuerLink.className = "akkordeonLink";        
        
        aktZaehler++;        
       } 
     }
   }
 }
 
 
 
 
 
 
function akkordeonWechsler (elementID, sichtbarkeit)
 {
  if (document.getElementById)
   {

    var aktFeld = document.getElementById( "akkordeonFeld_"+elementID );   
    var aktLink = document.getElementById( "akkordeonLink_"+elementID ); 

    if (sichtbarkeit) // Akkordeon oeffnen!
     {
      aktLink.setAttribute("href", "javascript: ;");
      aktLink.firstChild.nodeValue = akkordeonLinkText5; 
      akkordeonOeffner(elementID, true, 0); 

     }
    else // Akkordeon schliessen!
     {
      aktLink.setAttribute("href", "javascript: ;");
      aktLink.firstChild.nodeValue = akkordeonLinkText5;       
      akkordeonOeffner(elementID, false, akkordeonDaten[elementID][1]);   
     }
   }
 }


 

function akkordeonOeffner(elementID, auswahl, elementAktHoehe)
 { 
  var aktElement = document.getElementById("akkordeonFeld_"+elementID);
  var aktLink = document.getElementById( "akkordeonLink_"+elementID );

  if (auswahl) // Akkordeon oeffnen!
   {
    if (  elementAktHoehe < akkordeonDaten[elementID][1]  ) 
     {   
      (elementAktHoehe < (akkordeonDaten[elementID][1]-aufklappPixel)  ) ? elementAktHoehe = parseInt(elementAktHoehe)+aufklappPixel : elementAktHoehe = parseInt(elementAktHoehe)+1;     
      // elementAktHoehe = parseInt(elementAktHoehe)+aufklappPixel;    
      aktElement.style.height = parseInt(elementAktHoehe)+"px";
      timer = window.setTimeout("akkordeonOeffner("+elementID+", true, "+elementAktHoehe+")", aufklappZeit);
     }      
    else
     {
      aktLink.setAttribute("href", "javascript: akkordeonWechsler( "+(elementID)+", false );");
      aktLink.setAttribute("title", "Klicken Sie hier, um das folgende Akkordeon zu schliessen");
      aktLink.firstChild.nodeValue = ((akkordeonDaten[elementID][3] != "") ? akkordeonDaten[elementID][3] : akkordeonLinkText7); 
     }   
   }
  else // Akkordeon Schliessen!
   {
    if (elementAktHoehe > 0 ) 
     {  
     (elementAktHoehe > aufklappPixel) ? elementAktHoehe = parseInt(elementAktHoehe)-aufklappPixel : elementAktHoehe = parseInt(elementAktHoehe)-1;
      if (elementAktHoehe > 0) aktElement.style.height = parseInt(elementAktHoehe)+"px";
      timer = window.setTimeout("akkordeonOeffner("+elementID+", false, "+elementAktHoehe+")", aufklappZeit);
     }  
    else
     {
      aktLink.setAttribute("href", "javascript: akkordeonWechsler( "+(elementID)+", true );");
      aktLink.setAttribute("title", "Klicken Sie hier, um das folgende Akkordeon zu oeffnen"); 
      aktLink.firstChild.nodeValue = ((akkordeonDaten[elementID][2] != "") ? akkordeonDaten[elementID][2] : akkordeonLinkText6);  
     }
   } 
 } 
 
 
 


   

 
 
 
    
    
