// =============================================
// Sitemap erstellen
//
// Copyright (C) Andreas Richter, 2009
// =============================================

// verwendete Graphiken
var imgPlus="sitemap_plus.GIF"
var imgMinus="sitemap_minus.GIF"
var imgWinkel="sitemap_T.GIF"
var imgAbzweig="sitemap_L.GIF"
var imgLeer="sitemap_leer.GIF"
var imgLinieSenkrecht="sitemap_senkrecht.GIF"
var imgLinieWaagrecht="sitemap_waagrecht.GIF"

// Merker für zuvor ausgewählten Inhalt
var TT_oldID="";

// zur Markierung  des Schlagworts wird es mit einer speziellen Klasse
// dargestellt, d.h. vor und hinter dem Schlagwort werden folgende 
// Code-Teile eingefügt:
var KennzeichnungAnfang="<span class='STWort'"
var KennzeichnungID=" id='wSMap'        >"
var KennzeichnungEnde="</span><i></i>"


// ------------------------------------------------------------------------
// Funktionen zur Sitemap
// ------------------------------------------------------------------------


// alle Unterebenen öffnen, die notwendig sind, damit man den über ID
// angegebenen Inhalt sehen kann
function Sitemap_InhaltPfad_oeffnen(ID) {
  var i=0;
  // alle Inhalte durchgehen, bis der übergebene Inhalt gefunden wird
  for (i=0;i<ID2.length;i++) {
    if (ID2[i]==ID) {
      // zugehörige Gruppierung öffnen
      SitemapAuf(ID1[i])
      // falls noch nicht ganz oben, in die nächsthöhere Ebene springen
      if (ID1[i]!=0) {
         Sitemap_InhaltPfad_oeffnen(ID1[i])
      }
    }
  }
}

// wird vor Ausführen der Suchfunktion ausgeführt, um alte Markierungen zu
// löschen und wenn der Lösch-Button angeklickt wurde.
function SitemapZuruecksetzen() {
    // Markierungen löschen
    Sitemap_alleInhalte_demarkieren()
    // Trefferliste löschen
    document_getElementById("Treffer").innerHTML=Text0
    // Ebenen zuklappen
    Sitemap_Ebenen_oeffnen(3)
}


function Sitemap_alleInhalte_demarkieren() {
    var textzeile_alt="";
    var textzeile_neu="";
    var tmpID=0;
    var i=0;
    for (i=0;i<sk.length;i++) {
        if (sk[i]) {
            // ID des Inhalts bestimmen
            tmpID=si[i]
            // nur wenn's das Element gibt
            if (document_getElementById("aSMap"+tmpID)) {
                // zu dem Inhalt gehörende Textzeile holen
                textzeile_alt=document_getElementById("aSMap"+tmpID).innerHTML
                // Schlagwort innerhalb der Textzeile markieren
                textzeile_neu=Sitemap_Schlagwort_demarkieren(textzeile_alt)
                // modifizierte Textzeile wieder einfügen
                document_getElementById("aSMap"+tmpID).innerHTML=textzeile_neu
                // Markierung der ganzen Zeile löschen
                Sitemap_Inhalt_demarkieren(tmpID)
            }
        }
    }
 }

// eine vorgegeben Anzahl Ebenen in der Sitemap öffnen
// und die anderen schliessen
function Sitemap_Ebenen_oeffnen(ebenen) {
  var i=0;
  var tmpID="";
  for (i=0;i<e.length;i++) {
    tmpID=ID2[i]
    if (document_getElementById("SMap"+tmpID+"Grp")) {
      if (e[i]>(ebenen)) {
        SitemapZu(tmpID)
      } else {
        SitemapAuf(tmpID)
      }
    }
  }
}

// Unterebene der Sitemap zu-/aufklappen
// wenn die Unterebene offen ist, wird sie zugeklappt und umgekehrt
function SitemapZuAuf(tmpID) {
  var tmpElement = document_getElementById("SMap"+tmpID+"Grp")
  if (tmpElement.style.display != "none") {
    SitemapZu(tmpID)
  } else {
    SitemapAuf(tmpID)
  }
}

// Unterebene der Sitemap zuklappen
function SitemapZu(tmpID) {
  var tmpElement = document_getElementById("SMap"+tmpID+"Grp")
  var tmpKnoten = document_getElementById("SMap"+tmpID+"Img")
  // Gruppe unsichtbar machen
  tmpElement.style.display ="none"
  // Knoten-Symbol und TipText austauschen
  var tmpSrc=tmpKnoten.src
  if (tmpSrc.indexOf("_.gif")>0) {
    tmpKnoten.src="P_.gif" 
  } else {
    tmpKnoten.src="P.gif" 
  }
  tmpKnoten.alt="Unterpunkte einblenden" 
  tmpKnoten.title="Unterpunkte einblenden" 
  //
  var tmpElement = document_getElementById("SMap"+tmpID+"Grp_")
  tmpElement.style.display = "block"
}

// Unterebene der Sitemap aufklappen
function SitemapAuf(tmpID) {
  var tmpElement = document_getElementById("SMap"+tmpID+"Grp")
  var tmpKnoten = document_getElementById("SMap"+tmpID+"Img")
  if (tmpElement!=null) {
  // Gruppe sichtbar machen
  tmpElement.style.display = "block"
  // Knoten-Symbol und TipText austauschen
  var tmpSrc=tmpKnoten.src
  if (tmpSrc.indexOf("_.gif")>0) {
    tmpKnoten.src="M_.gif" 
  } else {
    tmpKnoten.src="M.gif" 
  }
  tmpKnoten.alt="Unterpunkte ausblenden" 
  tmpKnoten.title="Unterpunkte ausblenden" 
  //
  var tmpElement = document_getElementById("SMap"+tmpID+"Grp_")
  tmpElement.style.display ="none"
  }
}
//


// ------------------------------------------------------------------------
// Funktionen zur Suche
// ------------------------------------------------------------------------

// Suchformular umschalten
// (typ=0 --> Schlagwortsuche, typ=1 --> Volltextsuche)
function Sitemap_Suchtyp(typ) {
  var tmp="";
  if (typ==1) {
    // Volltextsuche ausgewählt
    document_getElementById("Sitemap_Schlagwortsuche").style.display="none"
    document_getElementById("Sitemap_Volltextsuche").style.display="block"
    document_getElementById("SitemapRadioButton_1").src="radiobutton_0.gif"
    document_getElementById("SitemapRadioButton_0").src="radiobutton_1.gif"
    // den Inhalt der Schlagwortsuche holen
    try {
        tmp=document_getElementById("word").value
    } catch (e) {}
    // falls das nicht der Standardbegriff ist, diesen übernehmen
    if (tmp!=SearchWord0) {
      document_getElementById("q").value=tmp
    }
    // Inhalt der Volltextsuche holen
    tmp=document_getElementById("q").value  
    // falls das Feld leer ist, den Standardbegriff einsetzen
    if (tmp.length==0) {
      document_getElementById("q").value=SearchWord1
    }
  } else {
    // Schlagwortsuche ausgewählt
    document_getElementById("Sitemap_Schlagwortsuche").style.display="block"
    document_getElementById("Sitemap_Volltextsuche").style.display="none"
    document_getElementById("SitemapRadioButton_1").src="radiobutton_1.gif"
    document_getElementById("SitemapRadioButton_0").src="radiobutton_0.gif"
    // den Inhalt der Volltextsuche holen
    try {
        tmp=document_getElementById("q").value
    } catch (e) {}
    // falls das nicht der Standardbegriff ist, diesen übernehmen
    if (tmp!=SearchWord1) {
      document_getElementById("word").value=tmp
    }
    // Inhalt der Schlagwortsuche holen
    tmp=document_getElementById("word").value
    // falls das Feld leer ist, den Standardbegriff einsetzen
    if (tmp.length==0) {
      document_getElementById("word").value=SearchWord0
    }
  }
}

// Vor Abschicken des Formulars (Start der Suche) das Schlagwort prüfen.
// Die Länge des Schlagworts muss mindestens 2 Zeichen sein.
function PruefeSchlagwort() {
    // Schlagwort
    var tmpSchlagwort=document_getElementById("word").value
    if (tmpSchlagwort.length<2) {
        return false;
    } else {
        return true;
    }
}

// wird beim Seitenaufbau aufgerufen, wenn ein Suchbegriff als Parameter
// in der URL mit übergeben wurde.
function SucheSchlagwort() {
    // Schlagwort
    var tmpSchlagwort=document_getElementById("word").value
    // alle Buchstaben kleinschreiben
    tmpSchlagwort=tmpSchlagwort.toLowerCase()
    // bisherige Markierungen löschen
    SitemapZuruecksetzen()
    // Markierung von aufrufender Seite oder alte Suchergebnisse löschen
// (wird nicht gebraucht, da Seite neu aufgebaut wird)
//Sitemap_Inhalt_demarkieren()
    // Datenbank-Dateien durchgehen 
    // und ggf. den Inhalt in der Sitemap aufklappen
    var treffer1=Suche_in_Kurzinfo(tmpSchlagwort)
    var treffer2=Suche_in_Langinfo(tmpSchlagwort)
    var treffer3=Suche_in_Beschreibung(tmpSchlagwort)
    var treffer=(treffer1+treffer2+treffer3)
    if (treffer==0) {
        document_getElementById("Treffer").innerHTML="kein Suchergebnis!"
    } else {
        var tmpText=treffer+" Suchergebnisse<br>"
        tmpText+="&nbsp;("+treffer1+" im Titel und<br>"
        tmpText+="&nbsp;&nbsp;"+(treffer2+treffer3)+" in der Kurzinfo)"
        document_getElementById("Treffer").innerHTML=tmpText
   }
}

// Datenbank-Datei "kurzinfo.js" durchgehen 
// und ggf. den Inhalt in der Sitemap aufklappen
function Suche_in_Kurzinfo(tmpSchlagwort) {
    var tmpTreffer=0;
    var i=0;
    for (i=0;i<sk.length;i++) {
        if (sk[i]) {
            // Textzeile aus Array übernehmen und prüfen
            tmpTreffer+=Suche_in_Textzeile(1,i,sk[i],tmpSchlagwort)
        }
    }
    return tmpTreffer
}

// Datenbank-Datei "langinfo.js" durchgehen 
// und ggf. den Inhalt in der Sitemap aufklappen
function Suche_in_Langinfo(tmpSchlagwort) {
    var tmpTreffer=0;
    var i=0;
    for (i=0;i<sl.length;i++) {
        if (sl[i]) {
            // Textzeile aus Array übernehmen und prüfen
            tmpTreffer+=Suche_in_Textzeile(0,i,sl[i],tmpSchlagwort)
        }
    }
    return tmpTreffer
}

// Datenbank-Datei "beschreibung.js" durchgehen 
// und ggf. den Inhalt in der Sitemap aufklappen
function Suche_in_Beschreibung(tmpSchlagwort) {
    var tmpTreffer=0;
    var i=0;
    for (i=0;i<sb.length;i++) {
        if (sb[i]) {
            // Textzeile aus Array übernehmen und prüfen
            tmpTreffer+=Suche_in_Textzeile(0,i,sb[i],tmpSchlagwort)
        }
    }
    return tmpTreffer
}

function Suche_in_Textzeile (modus,i,tmpTextzeile,tmpSchlagwort) {
    var tmp="";
    var textzeile_alt="";
    var textzeile_neu="";
    var tmpID=0;
    var tmpTreffer=0;
    // alles in Kleinbuchstaben wandeln
    tmp=tmpTextzeile.toLowerCase()
    // Schlagwort suchen
    if (tmp.indexOf(tmpSchlagwort)>=0) {
        // ID des Inhalts bestimmen
        tmpID=si[i]
        // nur wenn's das Element gibt
        if (document_getElementById("aSMap"+tmpID)) {
            // Merker setzen, dass irgendwas gefunden wurde
            tmpTreffer++
            // Eltern-Objekt öffnen
            SitemapAuf(InhaltElternobjekt(tmpID))
            if (modus==0) {
              // Inhalt markieren
              Sitemap_Inhalt_markieren(tmpID)
            } else {
              // zu dem Inhalt gehörende Textzeile holen
              textzeile_alt=document_getElementById("aSMap"+tmpID).innerHTML
              // Schlagwort innerhalb der Textzeile markieren
              textzeile_neu=Sitemap_Schlagwort_markieren(tmpID,textzeile_alt,tmpSchlagwort)
              // modifizierte Textzeile wieder einfügen
              document_getElementById("aSMap"+tmpID).innerHTML=textzeile_neu
            }
        }
    }
    return tmpTreffer;
}

// Inhalt (ganze Zeile) markieren 
function Sitemap_Inhalt_markieren(ID) {
  // der Inhalt soll markiert werden
  // und ggf. geschlossene Ebenen, geöffnet werden
  var tmpID="";
  tmpID="aSMap"+ID
  if (document_getElementById(tmpID)) {
    var Element=document_getElementById(tmpID)
    Element.className="STmarkiert"
  }
  // evtl. Unterebenen aufklappen
  Sitemap_InhaltPfad_oeffnen(ID)  
}

// Markierung des Inhalts (ganze Zeile) zurücknehmen
function Sitemap_Inhalt_demarkieren(IDInhalt) {
  // der Inhalt soll demarkiert werden
  var tmpID="";
  tmpID="aSMap"+IDInhalt
  if (document_getElementById(tmpID)) {
    var Element=document_getElementById(tmpID)
    Element.className="ST"
  }
}

// das Schlagwort innerhalb des Textes markieren (ggf. mehrfach)
// und den markierten Text zurückgeben
function Sitemap_Schlagwort_markieren(IDInhalt,Text,Schlagwort) {
  var tmpID=IDInhalt
  // das übergebene Schlagwort ist immer in Kleinbuchstaben,
  // deshalb muss zum Vergleichen der Text ebenfalls in Kleinbuchstaben 
  // umgewandelt werden
  var tmp=Text.toLowerCase()
  // der Text muss in der vorgegebenen Formatierung beibehalten werden
  var textzeile_neu=Text;
  // Länge des Schlagworts ermitteln
  var LaengeSchlagwort=Schlagwort.length
  // Länge der ID
  // KennzeichnungID=" id='wSMap'>        "
  var LaengeID=KennzeichnungID.length
  // 
  var tmpLeft="";
  var tmpWord="";
  var tmpRight="";
  // Anfang des Schlagworts suchen
  var tmpPos=tmp.indexOf(Schlagwort)
  // solange das Schlagwort in der Textzeile vorkommt...
  while (tmpPos>=0) {
    tmpKennungID=KennzeichnungID.substr(0,10)+tmpID+"'>"+KennzeichnungID.substr(tmpID.length+11,LaengeID-tmpID.length-12)
    // in Kleinbuchstaben gewandelten Text mit Kennungen erweitern
    tmpLeft=tmp.substr(0,tmpPos)
    tmpWord=tmp.substr(tmpPos,LaengeSchlagwort)
    tmpRight=tmp.substr(tmpPos+LaengeSchlagwort,tmp.length-tmpPos-LaengeSchlagwort)
    tmp=tmpLeft+KennzeichnungAnfang+tmpKennungID+tmpWord+KennzeichnungEnde+tmpRight
    // Original-Textzeile mit Kennungen erweitern
    tmpLeft=textzeile_neu.substr(0,tmpPos)
    tmpWord=textzeile_neu.substr(tmpPos,LaengeSchlagwort)
    tmpRight=textzeile_neu.substr(tmpPos+LaengeSchlagwort,textzeile_neu.length-tmpPos-LaengeSchlagwort)
    textzeile_neu=tmpLeft+KennzeichnungAnfang+tmpKennungID+tmpWord+KennzeichnungEnde+tmpRight
    // nächste Position suchen
    tmpPos=tmp.indexOf(Schlagwort,tmpPos+1+KennzeichnungAnfang.length+LaengeID)
  }
  return textzeile_neu;
}

// das Schlagwort innerhalb des Textes demarkieren (ggf. mehrfach)
// und den demarkierten Text zurückgeben
function Sitemap_Schlagwort_demarkieren(Text) {
  var textzeile_neu=Text;
  textzeile_neu=textzeile_neu.replace(/\"/g,"'")
  var tmpLeft="";
  var tmpRight="";
  var tmpOffset=0;
  var tmpPos=textzeile_neu.indexOf(KennzeichnungAnfang)
  // solange die Schlagwort-Kennzeichnung in der Textzeile vorkommt...
  while (tmpPos>=0) {
    // Textteil vor der Kennzeichnung
    tmpLeft=textzeile_neu.substr(0,tmpPos)
    // 
    tmpOffset=tmpPos+KennzeichnungAnfang.length+1
    // Textteil nach der Kennzeichnung
    tmpRight=textzeile_neu.substr(tmpOffset,textzeile_neu.length-tmpOffset)
    // schliessendes ">" suchen
    tmpPos=tmpRight.indexOf(">")+1
    // rechten Textteil bilden
    tmpRight=tmpRight.substr(tmpPos,tmpRight.length-tmpPos)
    // Anfangskennzeichnung ausschneiden
    textzeile_neu=tmpLeft+tmpRight
    // Ende-Kennzeichnung suchen
    tmpPos=textzeile_neu.lastIndexOf(KennzeichnungEnde)
    if (tmpPos>=0) {
        // Textteil vor der Kennzeichnung
        tmpLeft=textzeile_neu.substr(0,tmpPos)
        //
        tmpOffset=tmpPos+KennzeichnungEnde.length+1
        // Textteil nach der Kennzeichnung
        tmpRight=textzeile_neu.substr(tmpOffset,textzeile_neu.length-tmpOffset)
        // Endekennzeichnung ausschneiden
        textzeile_neu=tmpLeft+tmpRight
    }
    // nächste Anfang-Kennzeichnung suchen 
    tmpPos=textzeile_neu.indexOf(KennzeichnungAnfang)
  }
  return textzeile_neu;
}


// zu dem übergebenen Inhalt das zugehörige Eltern-Objekt suchen
// und dessen ID zurückgeben
function InhaltElternobjekt(IDInhalt) {
  var tmpID=-1;
  // zugehöriges Eltern-Objekt suchen
  var j=0;
  for (j=0;j<ID2.length;j++) {
    if (ID2[j]==IDInhalt) {
      // wenn gefunden, Wert übernehmen
    tmpID=ID1[j]
      // Abbruch-Bedingung für Schleife setzen
      j=ID2.length
    }
  }
  return tmpID
}

// wird aufgerufen, wenn Lösch-Button angeklickt wurde.
function LoescheSchlagwort() {
    // Standardbegriff ins Eingabefeld eintragen
    document_getElementById("word").value=SearchWord0
    //
    SitemapZuruecksetzen()
}






// ------------------------------------------------------------------------
// Funktionen zu TipTexte
// ------------------------------------------------------------------------

// wird bei Mausbewegung über der Sitemap aufgerufen
function TT(e) {
  // das Element bestimmen, das den Event ausgelöst hat
  var event_element=e.target? e.target : e.srcElement;
  // die ID des Elements bestimmen
  var event_elementID=event_element.id
  // die Mauskoordinaten des Events ermitteln
  var event_mouseX=e.clientX-360
  var event_mouseY=e.clientY
  // Mauskoordinaten entsprechend Fenstergröße und Scrollbalken korrigieren
  // wenn das Fenster breiter als die Tabelle ist, die die Seite strukturiert,
  // muss der links neben der Tabelle entstehende Freiraum von den Maus-
  // Koordinaten abgezogen werden.
  if (document.body.clientWidth>1024) {
    event_mouseX=event_mouseX-((document.body.clientWidth-1060)/2)
  }
  event_mouseX=event_mouseX+getScrollX()
  event_mouseY+=document_getElementById("globalContainer").scrollTop-70
  // die Nummer des Inhalts bestimmen
  var tmpID="";
  if ((event_elementID.substr(0,5)=="aSMap")||(event_elementID.substr(0,5)=="wSMap")) {
    tmpID=event_elementID.substr(5,event_elementID.length-5)
  }
  // Tiptext sichtbar/unsichtbar machen
  if (tmpID=="") {
    document_getElementById("STT").style.display="none";
  } else {
    document_getElementById("STT").style.display="block";
  }
  // prüfen, ob andere Zeile 
  if (tmpID!=TT_oldID) {
    // andere Zeile.
    var tmpSchlagwort=document_getElementById("word").value
    // d.h. es muss der zum Inhalt gehörende Tiptext gebildet
    // und in das div-Element des Tiptext eingefügt werden
    var tmpPos=PosInhalt(tmpID);
    if (tmpPos>=0) {
      document_getElementById("STT_1").innerHTML=Sitemap_Schlagwort_markieren(tmpID,sl[tmpPos],tmpSchlagwort);
      document_getElementById("STT_2").innerHTML=Sitemap_Schlagwort_markieren(tmpID,sb[tmpPos],tmpSchlagwort);
      //document_getElementById("STT_3").innerHTML=Sitemap_Schlagwort_markieren(tmpID,ss[tmpPos],tmpSchlagwort);
    }
    // momentane ID des Inhalts merken
    TT_oldID=tmpID
  }
  // Tiptext mit der Maus bewegen 
  try {
    document_getElementById("STT").style.left=event_mouseX+"px";
    document_getElementById("STT").style.top=event_mouseY+"px";
  } catch(e) {}
}

// die Positionsnummer des übergebenen Inhalts im Array "si" ermitteln
function PosInhalt(tmpID) {
  var i=0;
  var tmpPos=-1
  for (i=0;i<si.length;i++) {
    if (si[i]==tmpID) {
      tmpPos=i
      i=si.length
    }
  }
  return tmpPos
}

// ------------------------------------------------------------------------
// Funktionen zu Bildschirmauflösung-Umschaltung
// ------------------------------------------------------------------------

function resizeImages(){
  for (x=0;x<document.images.length;x++){
     //iHeight = document.images[x].height;
     //iWidth = document.images[x].width;
     var iSrc = document.images[x].src
     var iFile = iSrc.substr(iSrc.length-5,iSrc.length)
     //if (document.images[x].className="SK") {alert(document.images[x].src)}
     if (iFile=="L.gif") {document.images[x].src="L_.gif"}
     if (iFile=="M.gif") {document.images[x].src="M_.gif"}
     if (iFile=="P.gif") {document.images[x].src="P_.gif"}
     if (iFile=="S.gif") {document.images[x].src="S_.gif"}
     if (iFile=="T.gif") {document.images[x].src="T_.gif"}
     if (iFile=="W.gif") {document.images[x].src="W_.gif"}
  }
}


// -------------------------------------------------------





