var SeitenArray = new Array ();   // Liste der Steiten-Elemente
var SeitenIndex = 0
var QsArray = new Array()       // Liste der Qs-Elemente
var QsIndex = 0
var SessionId
var validCardinalFieldChars = new Array(8, 9, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105);

/**************************************************************
*  Helper functions
**************************************************************/
/*function getElById(idVal) {
  if (document.getElementById != null)
    return document.getElementById(idVal);
  if (document.all != null)
    return document.all[idVal];

  alert('HTML-Element konnte nicht anhand seiner id (' + idVal + ') gefunden werden.');
  return null;
}*/

function getElById(idVal, parentNode) {
  if (typeof parentNode == 'undefined') {
    if (document.getElementById != null)
      return document.getElementById(idVal);
    if (document.all != null)
      return document.all[idVal];
  } else {
    if (parentNode.getElementById != null)
      return document.getElementById(idVal);
    if (parentNode.all != null)
      return document.all[idVal];
  }
  return null;
}

function cardinalFieldKeyDown(e) {
  if (typeof e == 'undefined') {
    e = window.event;
    alert(e.keyCode);
  }
  if (validCardinalFieldChars.indexOf(e.keyCode) == -1) {
    e.returnValue = false;
    if (e.preventDefault)
      e.preventDefault();
  }
}

function plzFieldKeyDown(e) {
  if (typeof e == 'undefined') {
    e = window.event;
    alert(e.keyCode);
  }
  aEl = getElById('Land');
  if (aEl)
    if (aEl.value == 'ee' || aEl.value == 'ca') {

    } else
      if (validCardinalFieldChars.indexOf(e.keyCode) == -1) {
        e.returnValue = false;
        if (e.preventDefault)
          e.preventDefault();
      }
}

function addBookmark(aTitle, aURL) {
  if (window.sidebar) {
    window.sidebar.addPanel(aTitle, aURL,'');
  } else if(document.all) {
    if (window.external) {
      alert('Hallo');
      window.external.AddFavorite(aURL, aTitle);
    }
  } else if(window.opera && window.print) {
    return true;
  }
}

function addBookmarkCode(aTitle, aURL) {
  aStr = '<div id="ArtInfo2">\n';
  aStr += '<p><a href="#" onclick="return addBookmark(\'' + aTitle + '\', \'' + aURL + '\');" class="ul">Diese Seite als Favorit speichern</a></p>\n';
  aStr += '</div>\n';
  if (window.sidebar) {
    document.write(aStr);
  } else if(document.all) {
    if (window.external) {
      document.write(aStr);
    }
  } else if(window.opera) {
    return true;
  }
}

function makeCoord()            // object für Koordinaten
{
  this.top = 0;
  this.left = 0;
  this.width = 0;
  this.height = 0;
}
co = new makeCoord();

//**************************************************************
//  Bestimmung der Browsereigenschaften
//**************************************************************

function BrowserCheck() {
  var b = navigator.appName;
  if (b=="Netscape") this.b = "ns"
  else if (b=="Microsoft Internet Explorer") this.b = "ie"
  else this.b = b;
  this.version = navigator.appVersion;
  var ms = this.version.indexOf("MSIE");
  var mac = this.version.indexOf("Macintosh");
  this.v = parseInt(this.version);
  this.ns = (this.b=="ns" && this.v >= 4);
  this.ie = (this.b=="ie" && (parseInt(this.version.substring(ms+5, ms+6)) == 4));
  this.ie5 = (this.b=="ie" && (parseInt(this.version.substring(ms+5, ms+6)) == 5));
  this.iemac = (this.b=="ie" && mac > -1);
  this.min = (this.ns||this.ie);
//  this.load = window.onload
}
is = new BrowserCheck();

//**************************************************************
// Die Inits
//**************************************************************

function SizeBarInit(objname,zu,anf,ende) {
  SeitenArray[SeitenIndex] = new Array()
  SeitenArray[SeitenIndex][0] = objname
  SeitenArray[SeitenIndex][1] = zu
  SeitenArray[SeitenIndex][2] = anf
  SeitenArray[SeitenIndex][3] = ende
 SeitenIndex++
}

function qsListeIni(name) {
  QsArray[QsIndex] = name
  QsIndex ++
}

function init(ses)
{
  is.load = window.onload
  document.onmousedown = mouseDown
  document.onmouseup = mouseUp
  if (is.ns) document.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP)
        SessionId = ses
}

//**************************************************************
//  Die Event-Handler
//**************************************************************

// event für qs

function mouseDown(e) {
  if (is.load) {
    if (! is.iemac) {
      var namen = "";
      for(var i=0;i<=QsArray.length-1;i++) {
        namen = QsArray[i]
        coord(namen,i)
        var x = (is.ns)? e.pageX : (is.ie5)? event.x+document.body.scrollLeft : event.x;
        var y = (is.ns)? e.pageY : (is.ie5)? event.y+document.body.scrollTop  : event.y;
        if (is.ie) {co.left =co.left-6}         // !!
        if (getroffen(x, y)) {
          SucherPattern = SucherFindSelection(window.top);    // Markierung holen
          SucherStartQuery(namen);
          break
        }
       }
     }
   }
}

// event für Seite

function mouseUp(e) {

  if (is.load) {
    if (! is.iemac) {
      for(var i=0;i<=SeitenArray.length-1;i++) {
        bildname = SeitenArray[i][0];
        var Seitenanf = SeitenArray[i][2];
        var Seitenende = SeitenArray[i][3];
        coord(bildname,i);
        var x = (is.ns)? e.pageX : (is.ie5)? event.x+document.body.scrollLeft : event.x;
        var y = (is.ns)? e.pageY : (is.ie5)? event.y+document.body.scrollTop  : event.y;
        if (getroffen(x, y)) {
          zeigeSeite(Seitenanf,Seitenende,x,y);
          break;
        }
      }
    }
  }
}

//**************************************************************
//  Der Seiten-Ermittler
//**************************************************************

//  Berechnung

function Seite(Seitenanf, Seitenende,x,y){
  var Seiten = Seitenende-Seitenanf;
  var korrect = (is.ns)? 0 :-1;
  var erg = Math.round(((x - co.left + korrect)*Seiten) / co.width);
  return erg+Seitenanf;
}

//  Window-Wechsel

function zeigeSeite(Seitenanf,Seitenende,x,y) {
  window.location.href = "/scripts/db.dll?s="+SessionId+"&sp=/pa/"+Seite(Seitenanf,Seitenende,x,y)+"/";
}

//**************************************************************
// Der Quicksearch
//**************************************************************

var SucherPattern = "";

// Markierung holen

function SucherFindSelection (w) {
var SucherWhitespace = new RegExp('([ \\n\\t\\v\\r\\f]|%0D|%0A|%20)+', 'g');
  var pattern = "";
  var TextRange;
  if (is.ie||is.ie5) {
    TextRange = w.document.selection.createRange().text;
  }
  if (is.ns) {
    pattern = escape(w.document.getSelection());
    pattern = pattern.replace (SucherWhitespace,"%20");
  } else if ( (is.ie || is.ie5) && TextRange ) {
    pattern = escape(TextRange);
  }
  return (pattern);
}


//  Window-Wechsel

function SucherStartQuery(na) {
  if (SucherPattern.length > 0) {
    window.location.href = "/scripts/db.dll?s="+SessionId+"&qs=/qw/"+SucherPattern+"/na/"+na+"/";
      return true;
  } else {
    alert ("Markieren Sie zuerst ein oder mehrere Wörter.");
    return false;
  }
}

//**************************************************************
//  Ermittlung der XY-Koordinaten, sowie Höhe und Breite des Objekts
//**************************************************************

function offLeft(na) {
  var el = document[na];
  var x = el.offsetLeft;
  for (e = el.offsetParent; e; e = e.offsetParent)
    x += e.offsetLeft;
  return x;
}

function offTop(na) {
  var el = document[na];
  var y = el.offsetTop;
  for (e = el.offsetParent; e; e = e.offsetParent){
    y += e.offsetTop;
   }
  return y;
}

function coord(name,i) {
  var docObj = document[name];
  co.top     = (is.ns)? docObj.y       : (is.ie5)? offTop(name)  : offTop(name)+11
  co.left    = (is.ns)? docObj.x-2     : (is.ie5)? offLeft(name) : offLeft(name)+7        //  !!
  co.width   = (is.ns)? docObj.width+2 : docObj.offsetWidth+1     //  !!
  co.height  = (is.ns)? docObj.height  : docObj.offsetHeight
}

//**************************************************************
//  Überprüfen der Mouse-Koordinaten mit der Objekt-Fläche
//**************************************************************

function getroffen(x,y) {
  if ((y - co.top <= co.height) && (y > co.top)) {        // !!
    var a =(x-co.left)<=co.width;
    if ((x - co.left <= co.width) && (x > co.left)) {
      return true;
    }
  }
}

//**************************************************************
//  ComboBox Generieren
//**************************************************************
var comboArray = new Array ();
var comboIndex = 0;

var maxLaenge = 0;
function getLaenge(wert) {   // zum feststellen der max. Wortlänge für NS
  if (maxLaenge < wert) {maxLaenge = wert;}
}

var maxLinie = 0;
var neuLinie = 0;
function getLine(stufe) {   // zum feststellen der max. Einträge in der Combo für NS
  if ((0 < stufe)) {
    neuLinie += 1;
    if (maxLinie < neuLinie) {maxLinie = neuLinie;}
  } else {neuLinie = 0;}
}


function combFormInit(formName) {
 combForm = formName;
}

function combInit(name,abh,selVal) {
  comboArray[comboIndex] = new Array ();
  comboArray[comboIndex][0] = name;
  comboArray[comboIndex][1] = abh;
  comboArray[comboIndex][2] = selVal;
  for (var i=3;i < arguments.length;i++) {
    comboArray[comboIndex][i] = arguments[i];
  }
  combowrite(comboIndex);
  comboIndex++;
}

var seld = false;
function combowrite(ind) {
  seld           = false
  var namarr     = comboArray[ind][0]
  var theList    = new Object
  if (comboArray[ind][1] != '') {
    var theList = combForm+'.'+comboArray[ind][1]
  }
  document.write("<select name=")
  document.write(comboArray[ind][0])
  document.write(" Size='1'")
  if (comboArray[ind][1] != '') {       // abhängige Combo?
    document.write(" onchange='changeValue(")
    document.write(combForm+"."+namarr)
    document.write(".selectedIndex,")
    document.write(theList+","+namarr+","+ind)
  }
  document.writeln(")'>")
  if (comboArray[ind][3] != '') {
    getLaenge(comboArray[ind][2].length)
    var pos = 0
    for (var i=3; i <= comboArray[ind].length-1; i++) {
      getLaenge(comboArray[ind][i].length)
      pos = i-3                     //
      document.write('<option ')
      if (pos == parseInt(comboArray[ind][2]))
        { document.write('selected '); seld = true;}
      document.writeln('value="'+pos+'">'+leerz(schneider(comboArray[ind][i]),true)+comboArray[ind][i]+'</option>')
      getLine(schneider(comboArray[ind][i]))
    }
  } else {
    var mas = getMaster(comboArray[ind][0],ind)
    var Linie = 0
    if ((mas != null) && (parseInt(comboArray[ind][2]) != 255))
    {
       Linie = filSlave(mas,comboArray[ind][2],ind)
    }
    var leerzeich = (is.ns) ? leerz((maxLaenge+maxLaenge/2),true) : leerz(maxLaenge,true)
    document.writeln('<option value="255">'+leerzeich+'</option>')
    if (is.ns) {  // damit nicht nur eine Zeile bei weiterer Auswahl angezeigt wird
      for (var i=0; i<maxLinie - Linie;i++) {
        document.writeln('<option value="255">'+leerzeich+'</option>')
      }
    }
  }
 document.write('<option ')
 if ( ! seld) { document.write('selected ') }
 document.writeln('value="255" ></option>')
 document.writeln('</select>')
}

function getMaster(slna,slin) {
  var ma = 255;
  for (var i=0;i<=comboIndex-1;i++)   {
    if ((slna == comboArray[i][1]) && (slin != i) && (comboArray[i][2] != ''))     {
      ma = i;
    }
  }
  return ma;
}

function filSlave(mast,sin,sl) {
  var start = parseInt(sin)+3 // +2 für Array
  var marker = schneider(comboArray[mast][parseInt(sin)+2])
  for (var i = start;i>0;i--) {                  ///
    if (i>3) {
      if (schneider(comboArray[mast][i]) == marker) {
        start = i;
      } else {
        break;
      }
    } else {
      start = i;
      break;
    }
  }
  var i=start
  var stelle = 0
  var einenrauf = false
  while ((marker<= schneider(comboArray[mast][i])) && (schneider(comboArray[mast][i])>0)) {
    document.write('<option ')
    if (i-3 == parseInt(comboArray[sl][2]))
      { document.write('selected '); seld = true}
    document.writeln('value="'+(i-3)+'">'+leerz(schneider(comboArray[mast][i]),true)+comboArray[mast][i]+'</option>')
    stelle++
    if ((marker < schneider(comboArray[mast][i])) && (! einenrauf)) {
      einenrauf = true
      marker = schneider(comboArray[mast][i])
    }
    i++
    if (i > comboArray[mast].length-1) {break}
  }
  return stelle
}

function schneider(wert) {
  var erg = 0
  for (var i=0; i < wert.length-1 ; i++) {
    if (wert.substring(i,i+1) == ' ') {
     erg = i+1
    } else
    { break }
  }
  return erg
}

var htm = true
function leerz(anz,htm) {    // gibt Leerzeichen für HTML-Code
  var erg =''
  for (var i=0; i<anz; i++) {
    erg = (htm) ?  erg +'&nbsp;' : erg +' '
  }
  return erg
}

function changeValue(IndexSelected,abhtl,name,ind) {
  if (abhtl != name) {               // abhängiges Combo vorhanden?
    var kills     = abhtl.length
    var begin     = IndexSelected+3     //  +erstes Obj = name, +zweites Obj = abhängiges Combo
    for (var i = 0;i<kills;i++) {
      deleteAnItem(abhtl,0)   // Oberstes Objekt wird gelöscht, folgende rutschen auf
    }
    if (begin < comboArray[ind].length) {
      var marker    = schneider(comboArray[ind][begin])
      if (name.length >= begin) { // kommen noch Felder?
        var i = 1
        while (marker < schneider(comboArray[ind][begin+i])) {
          addAnItem(abhtl,comboArray[ind][begin+i],i-1,IndexSelected+i)
          i++
          if (i+begin >= comboArray[ind].length) {break}    // Abbruch bei Listenende
        }
        addAnItem(abhtl,leerz(maxLaenge+maxLaenge/2,false),i-1,255,true)
      } else {
        addAnItem(abhtl,leerz(maxLaenge+maxLaenge/2,false),0,255,true)
      }
    } else {
      addAnItem(abhtl,leerz(maxLaenge+maxLaenge/2,false),0,255,true)
    }
  }
}

function addAnItem(List, item,index,valw,sel) {
  var option = new Option(item)
  option.value = valw
  List.options[index]=option
  if (sel){option.selected = true}
}

function deleteAnItem(theList,itemNo) {
   theList.options[itemNo]=null
}

function macweiter(na) {
  if (is.iemac) {
    SucherPattern=prompt('Neuer Text?','')
    if (SucherPattern != null) {
      SucherStartQuery(na)
    }
  }
}

function hideElement(elementName, idName) {
  for (e = 0; e < document.getElementsByTagName(elementName).length; e++) {
    aelem = document.getElementsByTagName(elementName)[e];
    switch (aelem.id) {
      case idName:
        aelem.style.display = 'none';
    }
  }
}

function showElement(elementName, idName) {
  for (e = 0; e < document.getElementsByTagName(elementName).length; e++) {
    aelem = document.getElementsByTagName(elementName)[e];
    switch (aelem.id) {
      case idName:
        aelem.style.display = 'block';
    }
  }
}

function toggleShowXpressImages() {
  linkEl = getElById('toggleXpressLink');
  for (e = 0; e < document.getElementsByTagName('img').length; e++) {
    aelem = document.getElementsByTagName('img')[e];
    if (aelem.className == 'orderXpress') {
      if (aelem.style.display == 'none') {
        aelem.style.display = 'block';
        aelem.style.visibility = 'visible';
        linkEl.innerHTML = 'Zum Ausblenden der Abbildungen in der Tabelle bitte hier klicken';
      } else {
        aelem.style.display = 'none';
        aelem.style.visibility = 'hidden';
        linkEl.innerHTML = 'Zum Einblenden der Abbildungen in der Tabelle bitte hier klicken';
      }
    }
  }
}

function toggleShowSchaeppchenImages() {
  linkEl = getElById('toggleSchaeppchenLink');
  for (e = 0; e < document.getElementsByTagName('img').length; e++) {
    aelem = document.getElementsByTagName('img')[e];
    if (aelem.className == 'orderSchnaeppchen') {
      if (aelem.style.display == 'none') {
        aelem.style.display = 'block';
        aelem.style.visibility = 'visible';
        linkEl.innerHTML = 'Zum Ausblenden der Abbildungen in der Tabelle bitte hier klicken';
      } else {
        aelem.style.display = 'none';
        aelem.style.visibility = 'hidden';
        linkEl.innerHTML = 'Zum Einblenden der Abbildungen in der Tabelle bitte hier klicken';
      }
    }
  }
}

/**************************************************************
*  Bestellprozess
**************************************************************/
function showHideZahlung() {
  for (e = 0; e < document.getElementsByName('Zahlung').length; e++) {
    aelem = document.getElementsByName('Zahlung')[e];
    if (aelem.checked) {
      if (aelem.value == 'KARTE') {
        showElement('fieldset', 'cardFieldset');
        hideElement('fieldset', 'bankFieldset');
      } else if (aelem.value == 'BANK') {
        hideElement('fieldset', 'cardFieldset');
        showElement('fieldset', 'bankFieldset');
      } else {
        hideElement('fieldset', 'cardFieldset');
        hideElement('fieldset', 'bankFieldset');
      }
    }
  }
}

function showHideZahlungiPayment() {
  for (e = 0; e < document.getElementsByName('choosePayment').length; e++) {
    aelem = document.getElementsByName('choosePayment')[e];
    if (aelem.checked) {
      if (aelem.value == 'KARTE') {
        hideElement('form', 'rechnungForm');
        hideElement('form', 'bankForm');
        showElement('form', 'creditcardForm');
        showElement('form', 'creditcardBackForm');
      } else if (aelem.value == 'BANK') {
        hideElement('form', 'rechnungForm');
        showElement('form', 'bankForm');
        hideElement('form', 'creditcardForm');
        hideElement('form', 'creditcardBackForm');
      } else {
        showElement('form', 'rechnungForm');
        hideElement('form', 'bankForm');
        hideElement('form', 'creditcardForm');
        hideElement('form', 'creditcardBackForm');
      }
    }
  }
}

/**************************************************************
*  Galerie
**************************************************************/
function initGallery(catCount) {
  for (i = 1; i <= catCount; i++) {
    aEl = getElById('galleryCatToggle' + i.toString());
    if (aEl) {
      aEl.style.visibility = 'visible';
      aEl.style.display    = 'block';
    }
  }
}

function galleryCatToggle(catNo) {
  aEl = getElById('galleryCatToggle' + catNo.toString());
  if (aEl) {
    aEl2 = getElById('galleryCat' + catNo.toString());
    if (aEl.className.indexOf('minus') > -1) {
      aEl.className = 'galleryCatToggle plus';
      if (aEl2) {
        aEl2.style.visibility = 'hidden';
        aEl2.style.display    = 'none';
      }
    } else {
      aEl.className = 'galleryCatToggle minus';
      if (aEl2) {
        aEl2.style.visibility = 'visible';
        aEl2.style.display    = 'block';
      }
    }
  }
  return false;
}

/**************************************************************
*  General Tree
**************************************************************/
function initToggleTree() {
  for (i = 1; i <= 1000; i++) {
    aEl = getElById('toggleTree' + i.toString());
    if (aEl) {
      aEl.style.visibility = 'visible';
      aEl.style.display    = 'block';
    }
  }
}

function toggleTree(catNo) {
  aEl = getElById('toggleTree' + catNo.toString());
  if (aEl) {
    aEl2 = getElById('toggleElem' + catNo.toString());
    if (aEl.className.indexOf('minus') > -1) {
      aEl.className = 'toggleTree plus';
      if (aEl2) {
        aEl2.style.visibility = 'hidden';
        aEl2.style.display    = 'none';
      }
    } else {
      aEl.className = 'toggleTree minus';
      if (aEl2) {
        aEl2.style.visibility = 'visible';
        aEl2.style.display    = 'block';
      }
    }
  }
  return false;
}