var NS4   = (document.layers);    // Which browser?
var IE4   = (document.all);
var ImgDir= "./img/";
var ArtDir= "./artikel/"
if (document.images)
{
  bgimg     = new Image(); bgimg.src     = "./img/menubg.jpg";
  image0on  = new Image(); image0on.src  = "./img/aboutus1.jpg";
  image0off = new Image(); image0off.src = "./img/aboutus0.jpg";
  image0akt = new Image(); image0akt.src = "./img/aboutus2.jpg";
  image1on  = new Image(); image1on.src  = "./img/map1.jpg";
  image1off = new Image(); image1off.src = "./img/map0.jpg";
  image1akt = new Image(); image1akt.src = "./img/map2.jpg";
  image2on  = new Image(); image2on.src  = "./img/contact1.jpg";
  image2off = new Image(); image2off.src = "./img/contact0.jpg";
  image2akt = new Image(); image2akt.src = "./img/contact2.jpg";
  image3on  = new Image(); image3on.src  = "./img/offers1.jpg";
  image3off = new Image(); image3off.src = "./img/offers0.jpg";
  image3akt = new Image(); image3akt.src = "./img/offers2.jpg";
  image4on  = new Image(); image4on.src  = "./img/links1.jpg";
  image4off = new Image(); image4off.src = "./img/links0.jpg";
  image4akt = new Image(); image4akt.src = "./img/links2.jpg";
  image5    = new Image(); image5.src    = "./img/preis.jpg";
  image6    = new Image(); image6.src    = "./img/sonderpreis.jpg";
}

waste = new Array("mailto:", "@", ".");
un  = new Array("service", "service");
sld  = new Array("fahrradhof-halle", "halbig");
tld  = new Array("de", "info");

function mt(x)
{
  var rv = waste[0] + un[x] + waste[1] + sld[x] + waste[2] + tld[x];
  top.location.href = rv
}

function st(x)
{
  var rv = waste[0] + un[x] + waste[1] + sld[x] + waste[2] + tld[x];
  return rv;
}

function turnOn(imageName)
{
  if(document.getElementById(imageName))
    document.getElementById(imageName).src = eval(imageName + "on.src");
}

function turnOff(imageName)
{
  if(document.getElementById(imageName))
    document.getElementById(imageName).src = eval(imageName + "off.src");
}

function show(LayerName)
{
  var typ;
  var NochNichtFertig = true;
  var i               = 0;
  var Layer;

  typ = LayerName.slice(0,5);
  while(NochNichtFertig)
  {
    Layer = typ + i;

    if(Layer == LayerName) eigenschaft = "visible";
    else                   eigenschaft = "hidden";

    if (NS4 && document[Layer])
    {
      document[Layer].visibility = eigenschaft;
    }
    else
    {
      if (IE4 && this.document.all[Layer])
      {
        this.document.all[Layer].style.visibility = eigenschaft;
      }
      else
      {
        if (!NS4 && !IE4 && document.getElementById(Layer))
        {
          document.getElementById(Layer).style.visibility = eigenschaft;
        }
        else
        {
          NochNichtFertig = false;
        }
      }
    }
    i++;
  }
}

function NodeText(knoten, subNodeName, index)
{
  if(index == undefined)index=0;
  if(knoten)
    if(knoten.getElementsByTagName(subNodeName))
      if(knoten.getElementsByTagName(subNodeName)[index].firstChild)
        return knoten.getElementsByTagName(subNodeName)[index].firstChild.nodeValue;
      else
        return "";
  return false
}

function preisschild(elternobjekt, preis, cssName)
{
  if(cssName==undefined)cssName="preis";
  if(preis.indexOf(",")==-1)preis+=",--";   //anfügen, wenn keine Nachkommastellen
  if(elternobjekt)
  {
    var tmp1 = table(elternobjekt,"preis"); //Tabelle incl tbody
    var tmp2 = tr(tmp1);                    //Tabellenzeile
    var tmp3 = td(tmp2, cssName);           //Tabellenzelle
//        tmp3.className=;
        tmp3.appendChild(dctn(preis));
//    alert("Hello World");
  }
}

function dce(name)
{
  return document.createElement(name);
}

function dctn(name)
{
  return document.createTextNode(name);
}

function bild(elternobjekt, quelle, titeltext, cssclasse)
{
  //Produktbild erzeugen
  var tmp1           = dce("img");
      tmp1.src       = quelle;
      tmp1.title     = titeltext;
      tmp1.className = cssclasse;

  // Produktbild einfuegen
  if(elternobjekt)
    elternobjekt.appendChild(tmp1);

  return tmp1;
}

function klonen(quelle, ziel)
{
  for(var i=0;i<quelle.childNodes.length; i++)
  {
    var knoten=quelle.childNodes[i];
    switch(knoten.nodeType)
    {
      case 1: //Elementknoten
              var neu = ziel.appendChild(dce(knoten.nodeName));
              for(var j=0;j<knoten.attributes.length;j++)
              {
                switch(knoten.attributes[j].nodeName)
                {
                  case "class": neu.className = knoten.attributes[j].nodeValue;
                                break;

                  default:      neu.setAttribute(knoten.attributes[j].nodeName, knoten.attributes[j].nodeValue);
                }
              }
              klonen(knoten,neu);
              break;
      case 2: //Attributknoten
              alert("attribut gefunden!");
              break;
      case 3: //Textknoten
              ziel.appendChild(dctn(knoten.nodeValue));
    }
  }
}

function searchChild(node, subNodeName, index)
{
  // looks in the Objecttree below node for the child #index with name subNodeName.
  // searchChild works recoursively!

  subNodeName=subNodeName.toLowerCase();
  if (index==undefined) index = 0;

  for (i = 0; i < node.childNodes.length; i++)
  {
    var aktNode = node.childNodes[i];
    if (aktNode.nodeName.toLowerCase()==subNodeName && i==index) return aktNode;
    else if(aktNode.childNodes.length>0)
    {
      var x=searchChild(aktNode, subNodeName, index);
      if(x) return x;
    }
  }
  return false;
}

function table(pa, cn)
{
  // pa Parent: HTML-Object like <div> or <body>
  // cn className for the CSS-Class of the new Table
  // rt: returnTable
  // rtb: tBody of returnTable
  var rt = dce("table");
  if(pa != undefined) pa.appendChild(rt);
  if(cn != undefined) rt.className = cn;
  var rtb = dce("tbody");
  rt.appendChild(rtb);
  return rtb;
}

function tr(pa, cn)
{
  // pa Parent: HTML-Object like <div> or <body>
  // cn className for the CSS-Class of the new TableRow
  // re: ReturnElement
  var re = dce("tr");
  if(cn != undefined) re.className = cn;
  if(pa != undefined)
  {
    if(pa.nodeName.toLowerCase()=="tbody")
    {
      pa.appendChild(re);
    }
  }
  return re;
}

function td(pa, cn)
{
  // pa Parent: HTML-Object like <div> or <body>
  // cn className for the CSS-Class of the new TableData
  // re: ReturnElement
  var re = dce("td");
  if(cn != undefined) re.className = cn;
  if(pa != undefined)
  {
    if(pa.nodeName.toLowerCase()=="tr")
    {
      pa.appendChild(re);
    }
  }
  return re;
}

function OMC(n, Kategorie, SubKategorie)
{
  // Open Menu Content #n
  // Geht alle div-Elemente in menu0 durch und setzt die Eigenschaft display
  // auf none
  // anschliessend wird von div[n] diesplay auf block gesetzt.
  var me = document.getElementById("menue0").getElementsByTagName("div");
  var Artikel = document.getElementById("offers");
  var SubKatAkt = false;
  if(Artikel.firstChild) if(Artikel.firstChild.firstChild.nodeValue==SubKategorie) SubKatAkt=true;

//    alert(Artikel.firstChild.nodeName+"\n"+Artikel.firstChild.firstChild.nodeValue);

  if(me[n].style.display=="block"&&SubKatAkt)me[n].style.display="none";
  else
  {
    for(i=0;i<me.length;i++) me[i].style.display="none";
    me[n].style.display="block";
    if(!SubKatAkt)daten.holen('offers.xml', 2, 'offers,'+Kategorie+','+SubKategorie);
  }
}

function CloseOL()
{
  // Schliesst offene Artikeluebersicht
  // Geht alle div-Elemente in offers durch und setzt die Eigenschaft visibility
  // auf none
  var oe = document.getElementById("offers");
      oe.style.display="none";
}

function ArrayUnique(MyArray)
{
  // Sortiert ein Array und entfernt alle doppelten Elemete
  if(MyArray.sort())
  {
    ra = new Array();
    var j = 0;
    ra[0] = MyArray[0];

    for(i=1;i<MyArray.length;i++)
    {
      if(MyArray[i]!=ra[j])
      {
        ra[++j]=MyArray[i];
      }
    }
  }
  return ra;
}

function print_menu(aktive)
{
  var Hintergrund = "menubg.jpg"; // Hintergrundgrafik
//  var i = 0; // Counter für Menüelemente

  menu = new Array();  // Menu-Array:

  menu[0] = new Array(image0off.src,"aboutus.html");
  menu[1] = new Array(image1off.src,"map.html");
  menu[2] = new Array(image2off.src,"contact.html");
  menu[3] = new Array(image3off.src,"offers.html");
  menu[4] = new Array(image4off.src,"links.html");

  if(aktive<5) menu[aktive][0] = eval("image" + aktive + "akt.src");

  // Link mit Fahrradhof-Image erzeugen
  var MyKopf = document.getElementById("kopf");
  if(!MyKopf) MyKopf = document.getElementById("kopf0");
  if(MyKopf)
  {
    var hil      = dce("a");  //hil = Head-Image-Link
        hil.href = "./";
    var hi     = dce("img"); //hi = Head-Image
        hi.id  = "headimage";
        hi.src = ImgDir+"fahrradhof.jpg";
    hil.appendChild(hi);
    MyKopf.appendChild(hil);
    hi  = null;
    hil = null;

    // Menüpunkte darstellen - zuerst Tabelle und linkes (leeres) Element:
    var ht    = dce("div");      // Head-bereich
        ht.id = "headmenu";

    // nun die Menüeinträge:

    for(i=0;i<menu.length;i++)
    {
      // Link für in die Tabellenzelle
      var htdl            = dce("a");       //htdl = Head-Table-Data-Link
          htdl.href       ="./"+menu[i][1];

      // fuer Eventhandler neue Funktionen erzeugen, da aufruf vorhandener
      // Funktionen nicht funktioniert
      if(i!=aktive)
      {
        htdl.onmouseover=new Function("turnOn('image"+i+"')");
        htdl.onmouseout =new Function("turnOff('image"+i+"')");
      }
      // Bild für in den Link
      var htdi = dce("img")           //htdl = Head-Table-Data-Image
          htdi.src=menu[i][0];
          htdi.id="image"+i;
      // nun das ganze zusammenbasteln
          htdl.appendChild(htdi);
          ht.appendChild(htdl);

      // und den Müll entsorgen:
          htdi = null;
          htdl = null;
          htd  = null;
    }
    MyKopf.appendChild(ht);
    htd = null;
    htr = null;
    ht  = null;
  }
  return true;
}

var daten =
{
  schleifencounter: null, //test
  artikelpreise: new Object(),

  MenuErzeugen: function(datenobjekt, ziel)
  {
    if(ziel!=undefined) ziel = document.getElementById(ziel);
    {
      var Kategorien = datenobjekt.getElementsByTagName("kategorie");
      var zaehler = 0; //fuer Funktionsaufrufe zum auf und Zuklappen der Menues
      for(var k=0;k<Kategorien.length;k++)
      {
        /*
        Für jede Kategorie:
          Überschrift (<h2>name</h2>) erstellen;
          Überschrift an Objekt ziel anhängen;
        */
        var KatHeadLine = dce("h2");
            KatHeadLine.appendChild(dctn(Kategorien[k].getAttribute("name")));
        ziel.appendChild(KatHeadLine);
        //SubKategorien einsammeln
        var SubKategorienTemp = Kategorien[k].getElementsByTagName("type");
        //Array erzeugen, dass die Kategorienamen enthält
        var SubKategorien = new Array();
        // Array mit Kategorienamen fuellen
        for(i=0;i<SubKategorienTemp.length;i++) SubKategorien[i]=SubKategorienTemp[i].firstChild.nodeValue;
        //Array sortieren und doppelte Eintraege entfernen
        SubKategorien = ArrayUnique(SubKategorien);
        // Objekt (eigentlich assoziatives Array) fuer den Zugriff auf die Menuestruktur
        var ArtikelMenue = new Object();
        //Für jede Subkategorie
        for(var sk=0;sk<SubKategorien.length;sk++)
        {
          //Überschrift mit Link erstellen
          //(<h3><a href="JavaScript:OMC(xxx)">SubKatName</a></h3>);
          var SubKatHeadLine = dce("h3");
          var SubKatLink = dce("a");
              SubKatLink.href = "JavaScript:OMC("+(zaehler++)+",'"+Kategorien[k].getAttribute("name")+"','"+SubKategorien[sk]+"')";
//              SubKatLink.href = "JavaScript:daten.holen('offers.xml', 2, 'offers,"+Kategorien[k].getAttribute("name")+","+SubKategorien[sk]+"')";
              SubKatLink.Title= SubKategorien[sk]+" anzeigen/verbergen";
              SubKatLink.appendChild(dctn(SubKategorien[sk]));
          SubKatHeadLine.appendChild(SubKatLink);
          //Überschrift an Objekt ziel anhängen;
          ziel.appendChild(SubKatHeadLine);
          //Blockelement Artikel[SubKatName](<div></div>) für Artikel aus SubKat erzeugen;
          ArtikelMenue[SubKategorien[sk]]=dce("div");
          //Blockelement an ziel anhängen;
          ziel.appendChild(ArtikelMenue[SubKategorien[sk]]);
        }

        //Für jeden Artikel aus aktueller Kategorie:
        var Artikel=Kategorien[k].getElementsByTagName("art");
        for(var a=0;a<Artikel.length;a++)
        {
          //Link erzeugen
          var ArtikelLink   = dce("a");
          var ArtikelText   = NodeText(Artikel[a],"hersteller")+" "+NodeText(Artikel[a],"name");
//          ArtikelLink.href  = "JavaScript:daten.holen('"+ArtDir+NodeText(Artikel[a],'files')+".xml', 1, 'offers')";
          ArtikelLink.href  = "JavaScript:daten.holen('"+ArtDir+NodeText(Artikel[a],'files')+'/'+NodeText(Artikel[a],'files')+".xml', 1, 'offers')";
          ArtikelLink.title = ArtikelText;
          ArtikelLink.appendChild(dctn(ArtikelText));
          //Erzeugten Link an Artikel[SubKatName] anhängen
          ArtikelMenue[NodeText(Artikel[a],"type")].appendChild(ArtikelLink);
        }
      }//for each Kategorie
    }//ziel==defined

    document.getElementById("offer0").style.display="none";
    daten.holen('offers.xml', 2, 'offers');
  },

  ArtikelAusgeben: function(quelle, ziel, datei)
  {
    //kopiert den Inhalt des Objektes quelle in das Objekt (Knoten) ziel

    if(ziel!=undefined) ziel = document.getElementById(ziel);

    ziel.innerHTML = "";
    klonen(quelle, ziel);
    ziel.className    ="offerlayer";
    ziel.style.display="block";
    ziel.style.visibility="visible";
//    CloseOL();
    preisschild(ziel, daten.artikelpreise[datei]);
  },

  ArtikelUebersicht: function(quelle, Argumente)
  {
    //Argumente aufdroeseln
    Argumente=Argumente.split(",");
    var ziel = Argumente.shift();
    Kategorien = Argumente;

    if(ziel!=undefined)
    {
      ziel = document.getElementById(ziel);
      ziel.innerHTML="";
      ziel.className="offerlayer";
      ziel.appendChild(dce("h2"));
      if(Kategorien[1])ziel.firstChild.appendChild(dctn(Kategorien[1]));

      ziel.style.visibility="visible";
      ziel.style.display   ="block";

      var ArtikelTabelle = table(ziel);

      var Kategorie = quelle.getElementsByTagName("kategorie");
      for(var k=0;k<Kategorie.length;k++)
      {
        if(!Kategorien[0]) Kategorien[0]=Kategorie[Math.round(Math.random()*(Kategorie.length-1))].getAttribute("name");

        //korrekte Hauptkategorie suchen
        if(Kategorie[k].getAttribute("name")==Kategorien[0])
        {
          var Artikel = Kategorie[k].getElementsByTagName("art");
          var s = 0;
          for(var a=0;a<Artikel.length;a++)
          {
            if(!Kategorien[1])
            {
              Kategorien[1]=NodeText(Artikel[Math.round(Math.random()*(Artikel.length-1))],"type");
              ziel.firstChild.appendChild(dctn(Kategorien[1]));
              ziel.firstChild.title="zufällig ausgewählte Kategorie";
            }
            if(NodeText(Artikel[a],"type")==Kategorien[1])
            {
              if(s++%3==0)
              {
                // bei jedem dritten Angebot eine neue TabellenZeile erzeugen
                var ErgTR = tr(ArtikelTabelle);
//                var ErgTR = dce("tr");
//                ArtikelTabelle.appendChild(ErgTR);
              }
//              var ErgTD = dce("td");
              var ErgTD = td(ErgTR, "angebote");
//              ErgTD.className="angebote";
//              ErgTD.onclick  =new Function("daten.holen('"+ArtDir+NodeText(Artikel[a],'files')+".xml', 1, 'offers');");
              ErgTD.onclick  =new Function("daten.holen('"+ArtDir+NodeText(Artikel[a],'files')+'/'+NodeText(Artikel[a],'files')+".xml', 1, 'offers');");
//              ErgTR.appendChild(ErgTD);

              //Produkttext erzeugen
              var tmp1 = NodeText(Artikel[a],"hersteller")+" "+NodeText(Artikel[a],"name");

              //Produktbild erzeugen
//              bild(ErgTD, ImgDir+NodeText(Artikel[a],"files")+".jpg", tmp1, "offer")
              bild(ErgTD, ArtDir+NodeText(Artikel[a],"files")+'/'+NodeText(Artikel[a],"files")+".jpg", tmp1, "offer")
              ErgTD.appendChild(dce("br"));

              //Produkttext einfuegen
              ErgTD.appendChild(dctn(tmp1));
//########################### Artikel-Identifyer ###############################

//              ErgTD.appendChild(dce("br"));
//              ErgTD.appendChild(dctn(NodeText(Artikel[a],"files")));

//####################### Artikel-Identifyer ENDE ##############################

              ErgTD.appendChild(dce("br"));

              //Preisschild erzeugen und gleichzeitig einfuegen
              var preis="preis";
              if(Artikel[a].getElementsByTagName("preis")[0].getAttribute("sonderpreis")=="true") preis="sonderpreis";
              preisschild(ErgTD, NodeText(Artikel[a],"preis"), preis);
//              daten.artikelpreise[ArtDir+NodeText(Artikel[a],"files")+".xml"]=NodeText(Artikel[a],"preis");
              daten.artikelpreise[ArtDir+NodeText(Artikel[a],"files")+'/'+NodeText(Artikel[a],"files")+".xml"]=NodeText(Artikel[a],"preis");

              // Bemerkungen zum Produkt ausgeben
              klonen(Artikel[a].getElementsByTagName("note")[0],ErgTD);
            }
          }
        }
      }
    }
  },

  holen: function(datei, aktion, Eimer)
  {
    // Ajax-Verbindung herstellen
    try      // W3C-Standard
    {
      daten.ajax = new XMLHttpRequest();
    }
    catch(w3c)
    {
      try
      {      // Internet Explorer
        daten.ajax = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch(msie)
      {
        try
        {    // Internet Explorer alt
          daten.ajax = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(msie_alt)
        {
          alert("Ihr Browser unterstützt keine dynamische Datenanbindung!\nBitte benutzen Sie eine aktuelle Version des Mozilla Firefox, Opera oder MS Internetexplorer.");
          return false;  // !!! Link auf XML-Dokument
        }
      }
    }

    // Datei anfordern
    daten.ajax.open('GET', datei, true);
    daten.ajax.setRequestHeader('Content-Type', 'text/xml');

    // umgeht Internet Explorers Caching von GET-Anfragen
    daten.ajax.setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT');
    // Test um Browser zum Neuladen der Datei zu bewegen!
    daten.ajax.setRequestHeader('cache-control', '0');
    daten.ajax.send(null);

    // nach Status-Änderungen der Verbindung
    // werden die empfangenen Inhalte geparst
    daten.ajax.onreadystatechange = function()
    {
      // wenn Datei komplett empfangen ist ...
      if (daten.ajax.readyState == 4)
      {
        // Dokument nicht gefunden (Code 0 für lokale Tests):
        if (daten.ajax.status != 304 && daten.ajax.status != 200 && daten.ajax.status != 0)
        {
          alert("Artikeldatei '"+datei+"' konnte nicht geladen werden!\nStatus: "+daten.ajax.status);
          return false;
        }
        switch(aktion)
        {
          case 0:daten.MenuErzeugen(daten.ajax.responseXML, Eimer);
                 break;
          case 1:daten.ArtikelAusgeben(daten.ajax.responseXML, Eimer, datei);
                 break;
          case 2:daten.ArtikelUebersicht(daten.ajax.responseXML, Eimer);
                 break;
        }
      }
    }
  }
};
