/*
	Datei       : suche.js
	Autor       : Andreas Zierhut
	E-Mail      : Andreas.Zierhut@t-online.de
	Datum       : 23.01.2000
	Version     : 1.00
	Beschreibung: Version III der auf JavaScript-basierten Suchmaschine.
	              Das Script darf für private, nicht gewerbliche Zwecke kostenlos
	              weiterverwendet werden.
	              Die Weitergabe an Dritte ist nur mit ausdrücklicher Zustimmung des
	              Autors möglich und somit ist die Weitergabe in Archiven untersagt.
	              Teile des Scriptes dürfen keinesfalls modifiziert und/oder weiterverwendet
	              werden.

	&copy; Copyright 2000 by Andreas Zierhut. Alle Rechte vorbehalten.
*/

var PT = '__9999';
var OT = '__9998';
var ST = '__9997';

var Zeichen = new Array();
Zeichen[Zeichen.length] = '.,__9996';
Zeichen[Zeichen.length] = '*,__9995';
Zeichen[Zeichen.length] = '/,__9994';
Zeichen[Zeichen.length] = '-,__9993';
Zeichen[Zeichen.length] = '@,__9992';

function suche(eingabe, seite, neu)
{
  var keyw = splitter(eingabe);

  if (!keyw[0]) {
    alert ('Bitte mindestens einen gültigen Suchbegriff eingeben!');
    return;
  }

  var Hash = '';

  if (gesucht && !neu)
    Hash = MParam + seite;

  else {

    if (document.ra && document.ra.Felder) {
      var ls = document.ra.Felder;
      for (var i=0; i < ls.length; i++) {
        if (ls[i].selected)
          Hash += ls[i].value + PT;
      }
    }
    else
      Hash += Kuerzel[2] + PT;
    Hash = Hash.substring(0, Hash.length-PT.length) + OT;

    if (document.ra && document.ra.Kategorien) {
      var ls = document.ra.Kategorien;
      for (var i=0; i < ls.length; i++) {
        if (ls[i].selected)
          Hash += i + PT;
      }
    }
    else
      for (var i=0; i < Kategorien.length; i++)
        Hash += i+PT;
    Hash = Hash.substring(0, Hash.length-PT.length) + OT;

    if (document.ra && document.ra.Casesensitivity && document.ra.Casesensitivity.selectedIndex)
      Hash += '1'+OT;
    else
      Hash += '0'+OT;

    if (document.ra && document.ra.Wortteil) {
      var dd = document.ra.Wortteil;
      Hash += parseInt(dd[dd.selectedIndex].value) + OT;
    }
    else
      Hash += '1' + OT;

    if (document.ra && document.ra.Verknuepfungen) {
      var dd = document.ra.Verknuepfungen;
      Hash += parseInt(dd[dd.selectedIndex].value) + OT;
    }
    else
      Hash += '1' + OT;

    if (document.ra && document.ra.TrefferProSeite) {
      var dd = document.ra.TrefferProSeite;
      Hash += dd.selectedIndex + OT;
    }
    else
      Hash += '1' + OT;

    for (var i=0; i < keyw.length; i++)
      Hash += keyw[i] + PT;

    Hash = Hash.substring(0, Hash.length-PT.length) + OT + seite;
    for (var i=0; i < Zeichen.length; i++)
      Hash = Hash.split(Zeichen[i].split(',')[0]).join(Zeichen[i].split(',')[1]);
    Hash = escape(Hash).split('%').join(ST);

  }
  window.name = Hash;
  history.go(0);
  return;
}

var gesucht = false;
var MParam = null;

function getErgebnis(eingabe)
{
  gesucht = true;
  var Param = eingabe.split(OT);
  for (var i=0; i < Param.length; i++) {
    Param[i] = Param[i].split(PT);
    if (Param[i].length) {
      for (var j=0; j < Param[i].length; j++) {
        Param[i][j] = unescape(Param[i][j].split(ST).join('%'));
        if (i == 6) {
          Param[i][j] = Param[i][j]+' ';
          for (var k=0; k < Zeichen.length; k++) {
            var tmp = Zeichen[k].split(',');
            Param[i][j] = Param[i][j].split(tmp[1]).join(tmp[0]);
          }
          Param[i][j] = Param[i][j].substring(0, Param[i][j].length-1);
        }
      }
    }
    else
      Param[i] = unescape(Param[i].split(ST).join('%'));
  }
  MParam = eingabe.substring(0, eingabe.length-String(Param[7]).length);
  var Beschreibung    = new Object();
  Beschreibung.author = 'Autor';
  Beschreibung.desc   = 'Beschreibung';
  Beschreibung.kw     = 'Stichw&ouml;rter';
  Beschreibung.title  = 'Titel';
  Beschreibung.url    = 'URL';

  var options = '    <tr><td class="Text">Felder:</td><td class="Option">[';
  var SuchIn = new Array();
  for (var i=0; i < Param[0].length; i++) {
    SuchIn[SuchIn.length] = Param[0][i];
    options += Beschreibung[Param[0][i]] + ', ';
  }
  options = options.substring(0, options.length-2) + ']</td></tr>\n';

  var KList = ',';
  options += '    <tr><td class="Text">Kategorien:</td><td class="Option">[';
  for (var i=0; i < Param[1].length; i++) {
    KList += Param[1][i] + ',';
    options += Kategorien[Param[1][i]] + ', ';
  }
  options = options.substring(0, options.length-2) + ']</td></tr>\n    <tr><td class="Text">Gro&szlig;-/Kleinschreibung:</td><td class="Option">[';

  var wortwahl = -1;
  var cs = false;
  if (Param[2] == '1') {
    options += CTexte[1];
    cs = true;
  }
  else
    options += CTexte[0];

  options += ']</td></tr>\n    <tr><td class="Text">Wortteil:</td><td class="Option">[';
  wortwahl = parseInt(Param[3]);
  options += STexte[wortwahl-1];

  options += ']</td></tr>\n';
  var auswahl = parseInt(Param[4]);
  options += '    <tr><td class="Text">Verkn&uuml;pfung:</td><td class="Option">[' + VTexte[auswahl-1] + ']</td></tr>\n';

  var treffer = TTexte[parseInt(Param[5])];
  options += '    <tr><td class="Text">Treffer/Seite:</td><td class="Option">[max. ' + treffer + ']</td></tr>';

  var eoa = p.length + 1;
  var zaehler = 0;

  var liste      = new Array();
  var liste2     = new Array();
  var tquot      = new Array();
  var ausgWort   = new Array();
  var Anker      = new Array();

  for (var i=0; i < p.length; i++) {
    if (KList.indexOf(','+p[i].kat+',') != -1)
      liste[liste.length] = i;
    ausgWort[i] = '';
    Anker[i] = '';
  }
  liste[liste.length] = eoa;

  var keyw = Param[6];
  var seite = parseInt(Param[7]);

  var tmptquot = 0;
  var tmpWort = '';
  var tmpAnker = '';
  var gefunden = false;

  for (var i=0; i < keyw.length; i++) {

    for (var j=0; liste[j] != eoa; j++) {

      for (var k=0; k < SuchIn.length; k++) {

        var suchObj = new Array();

        if (SuchIn[k] != 'kw' && p[liste[j]][SuchIn[k]])
          suchObj = splitter(p[liste[j]][SuchIn[k]]);
        else if (p[liste[j]][SuchIn[k]])
          suchObj = p[liste[j]][SuchIn[k]];

        for (var l=0; l < suchObj.length; l++) {

          var suchKw = '';
          var suchStr = '';

          if (cs) {
            suchKw = suchObj[l];
            suchStr = keyw[i];
          }
          else {
            suchKw = suchObj[l].toLowerCase();
            suchStr = keyw[i].toLowerCase();
          }

          if (suchKw.indexOf(suchStr) != -1 && ((wortwahl == 1 && suchKw.indexOf(suchStr) == 0) || (wortwahl == 2 && suchKw.substring(suchKw.length - suchStr.length) == suchStr) || (wortwahl == 3 && (suchKw.indexOf(suchStr) == 0 || suchKw.substring(suchKw.length - suchStr.length) == suchStr)) || wortwahl == 4 || (wortwahl == 5 && suchKw == suchStr))) {

            if (keyw[i].length / suchKw.length * 100 > tmptquot) {

              tmptquot = keyw[i].length / suchKw.length * 100;

              if (auswahl == 1 || auswahl == 2) {

                if (wortwahl == 1 || (wortwahl == 3 && suchKw.indexOf(suchStr) == 0) || wortwahl == 4 || wortwahl == 5)
                  tmpWort = suchObj[l].substring(0, suchKw.indexOf(suchStr)) + '<font color="#008000"><i>' + suchObj[l].substring(suchKw.indexOf(suchStr), suchKw.indexOf(suchStr)+suchStr.length) + '</i></font>' + suchObj[l].substring(suchKw.indexOf(suchStr)+suchStr.length) + ' (' + Beschreibung[SuchIn[k]] + ')' + ', ';
                else
                  tmpWort = suchObj[l].substring(0, suchKw.length - suchStr.length) + '<font color="#008000"><i>' + suchObj[l].substring(suchKw.length - suchStr.length) + '</i></font>' + ' (' + Beschreibung[SuchIn[k]] + ')' + ', ';

                tmpAnker = suchObj[l].toLowerCase();

              }

              gefunden = true;

            }

          }

        }

      }

      if (gefunden) {

        if (auswahl == 1 || auswahl == 2) {

          ausgWort[liste[j]] += tmpWort;
          Anker[liste[j]] = tmpAnker;

        }

        if (auswahl == 1 || auswahl == 3) {

          liste[zaehler] = liste[j];

          if (!tquot[j])
            tquot[j] = 0;
          tquot[zaehler] = (i * tquot[j] + tmptquot) / (i + 1);

          zaehler++;

        }
        else {

          liste2[j] = 1;

          if (!tquot[j] || tquot[j] < tmptquot)
            tquot[j] = tmptquot;

        }
        gefunden = false;
        tmptquot = 0;

      }

    }
    if (auswahl == 1 || auswahl == 3) {
      liste[zaehler] = eoa;
      tquot[zaehler] = 0;
      if (i+1 < keyw.length)
        zaehler=0;
    }
  }
  if (auswahl == 2 || auswahl == 4) {

    for (var i=0; i < p.length; i++) {

      if (liste2[i]) {

        liste[zaehler] = i;
        tquot[zaehler] = tquot[i];
        zaehler++;

      }
    }
    liste[zaehler] = eoa;
    tquot[zaehler] = 0;

  }
  if (auswahl == 3 || auswahl == 4)
  {

    for (var i=0; i < p.length; i++)
      liste2[i] = i;

    for (i=0; liste[i] != eoa; i++)
      liste2[liste[i]] = eoa;

    zaehler = 0;
    for (var i=0; i < liste2.length; i++) {

      if (liste2[i] != eoa) {

        liste[zaehler] = liste2[i];
        tquot[zaehler] = 100;
        zaehler++;

      }

    }
    tquot[zaehler] = 0;

  }

  var HTMLDok = Kopf(keyw.join(', '), auswahl, options, zaehler);

  if (zaehler) {

    var k = 0;
    for (var i=0; tquot[i]; i++) {

      for (var j=i+1; tquot[j]; j++) {

        if (tquot[i] < tquot[j]) {

          k = liste[j];
          liste[j] = liste[i];
          liste[i] = k;
          k = tquot[j];
          tquot[j] = tquot[i];
          tquot[i] = k;

        }

      }

    }
    for (var i=0; tquot[i]; i++) if (ausgWort[liste[i]]) ausgWort[liste[i]] = ausgWort[liste[i]].substring(0, ausgWort[liste[i]].length-2);
    HTMLDok += '<center><table border=0 cellspacing=0 cellpadding=10 width="80%">';
    for (var i=seite*treffer; i < (seite+1)*treffer && tquot[i]; i++) {

      HTMLDok += '     <tr><td class="Text" valign=top>'+(i+1)+'.</td><td><table border=0 cellspacing=0 cellpadding=1 width="100%"><tr><td bgColor="'+g.BorderColor+'"><table border=0 cellspacing=0 cellpadding=5 width="100%">' +
                 '       <tr><td class="Ueber" colspan=2 bgColor="'+g.UeberBgColor+'" align=center><font color="'+g.UeberFont.Color+'">'+p[liste[i]].title+'</font></td></tr>\n' +
                 '       <tr><td class="Text" bgColor="'+g.BgColor+'" valign=top>Trefferquote:</td><td class="Option" bgColor="'+g.BgColor+'" width="100%">['+Math.round(tquot[i])+'%]</td></tr>\n' +
                 '       <tr><td class="Text" bgColor="'+g.BgColor+'" valign=top>URL:</td><td bgColor="'+g.BgColor+'"><a href="'+p[liste[i]].url;

      if (Anker[liste[i]] && UseAnchor)
        HTMLDok += '#'+Anker[liste[i]];

      HTMLDok += '">'+p[liste[i]].url+'</a></td></tr>\n';

      if (p[liste[i]].author)
        HTMLDok += '      <tr><td class="Text" bgColor="'+g.BgColor+'" valign=top>Autor:</td><td class="Option" bgColor="'+g.BgColor+'">' +p[liste[i]].author+ '</td></tr>\n';

      HTMLDok += '      <tr><td class="Text" bgColor="'+g.BgColor+'" valign=top>Beschreibung:</td><td class="Option" bgColor="'+g.BgColor+'">' +p[liste[i]].desc + '</td></tr>\n';

      if (ausgWort[liste[i]])
        HTMLDok += '      <tr><td class="Text" bgColor="'+g.BgColor+'" valign=top>Treffer:</td><td class="Option" bgColor="'+g.BgColor+'">' + ausgWort[liste[i]] + '</td></tr>\n';

      HTMLDok += '</table></td></tr></table></td></tr>\n';
    }
    HTMLDok += '  </table></center><br>\n<table border=0 cellspacing=0 cellpadding=1 width="100%"><tr><td bgColor="'+g.BorderColor+'"><table border=0 cellspacing=0 cellpadding=3 width="100%"><td width="15%" bgColor="'+g.BgColor+'" align=center>';
    var mseite = Math.floor(zaehler / treffer);

    if (seite)
      HTMLDok += '<a href="#" onClick="suche(\''+keyw.join(' ')+'\','+(seite-1)+');return false;">Vorherige Seite</a>\n';
    else
      HTMLDok += '&nbsp;';

    HTMLDok += '</td><td width="15%" bgColor="'+g.BgColor+'" align=center>';
    if (Math.floor(seite / 10) > 0)
      HTMLDok += '<a href="#" onClick="suche(\''+keyw.join(' ')+'\','+((Math.floor(seite / 10)-1) * 10)+');return false;">Vorherige 10</a>';
    else
      HTMLDok += '&nbsp;';

    HTMLDok += '</td><td width="40%" bgColor="'+g.BgColor+'" align=center><span class="Text">Seite</span> ';
    var start = Math.floor(seite / 10) * 10;
    for (var i=start; i <= mseite && i < start+10; i++) {
      if (seite == i)
        HTMLDok += '<span class="Text">'+(i+1)+'</span>\n';
      else
        HTMLDok += '<a href="#" onClick="suche(\''+keyw.join(' ')+'\','+i+');return false;">'+(i+1)+'</a>\n';
    }

    HTMLDok += '</td><td width="15%" bgColor="'+g.BgColor+'" align=center>';
    if (Math.floor(seite / 10) < Math.floor(mseite / 10))
      HTMLDok += '<a href="#" onClick="suche(\''+keyw.join(' ')+'\','+((Math.floor(seite / 10)+1) * 10)+');return false;">N&auml;chste 10</a>';
    else
      HTMLDok += '&nbsp;';

    HTMLDok += '</td><td width="15%" bgColor="'+g.BgColor+'" align=center>';
    if (mseite > seite)
      HTMLDok += '  <a href="#" onClick="suche(\''+keyw.join(' ')+'\','+(seite+1)+');return false;">N&auml;chste Seite</a>';
    else
      HTMLDok += '&nbsp;';
    HTMLDok += '</tr></table></td></tr></table>\n';

  }
  else
    HTMLDok += '  <center><table border=0 cellspacing=0 cellpadding=1><tr><td bgColor="'+g.BorderColor+'"><table border=0 cellspacing=0 cellpadding=5>' +
               '      <tr><td bgColor="'+g.BgColor+'" class="Text">Leider wurde kein Ergebnis gefunden.</td></tr>\n' +
               '  </table></td></tr></table></center>\n<br>\n';

  window.name = '';
  return HTMLDok;
}

function splitter(Wert)
{
  var tmpWert = Wert.split(' ').join(',').split(',').join('+').split('+').join('&').split('&');

  var retVal = new Array();
  for (var i=0; i < tmpWert.length; i++)
    if (tmpWert[i])
      retVal[retVal.length] = tmpWert[i];

  return (retVal);
}

function Kopf(eingabe, auswahl, options, zaehler)
{
  var retVal = '  <center><img src="suchergebnis.gif" width=400 height=40 alt="Suchergebnis"></center><br>\n' +
               '  <table border=0 cellspacing=0 cellpadding=1><tr><td bgColor="'+g.BorderColor+'"><table border=0 cellspacing=0 cellpadding=0><tr><td bgColor="'+g.BgColor+'"><table border=0 cellspacing=0 cellpadding=5><tr>\n' +
               '    <td class="Text">Suchbegriff(e):</td><td class="Option">['+eingabe+']</td></tr>\n';

  if (Optionen)
    retVal += '    ' + options + '\n';

  retVal += '    <tr><td class="Text">Eingetragene Seiten:</td><td class="Option">['+p.length+']</td></tr>\n' +
            '    <tr><td class="Text">Gefundene Seiten:</td><td class="Option">['+zaehler+']</td></tr>\n' +
            '  </td></tr></table></td></tr></table></td></tr></table><br>\n';

  return (retVal);
}

function loesche()
{
  document.formular.reset();
  document.formular.eingabe.focus();
}