
// Diese Datei ist in allen Projekten identisch!

var Und, AnzahlUndTreffer = 0, SeitenInhalt = "", Seitenprotokoll = "", Trefferprotokoll = "";
var ua=navigator.userAgent.toLowerCase()
browser_opera=ua.indexOf("opera")>-1?parseInt(ua.substring(ua.indexOf("opera")+6,ua.length)):0
browser_ie=document.all&&!browser_opera?parseFloat(ua.substring(ua.indexOf("msie")+5,ua.length)):0
browser_ie4=parseInt(browser_ie)==4
browser_netsc4=navigator.appName.toLowerCase()=="netscape"&&!document.getElementById
browser_netsc=browser_netsc4||document.getElementById&&!document.all
if (ua.indexOf("firefox") > -1) browser_netsc=false
// alert("Browser: " + "\nua = " + ua + "\nbrowser_opera = " + browser_opera + "\nbrowser_ie = " + browser_ie + "\nbrowser_netsc = " + browser_netsc);

function WortSuche() {
   var AnzahlTreffer, rest, p, i, soz = 0, SuchWort = new Array();
   var AllePar = unescape(changeall(window.location.search,sozvon, soznach, 0));
   var von  = EinzelPar(AllePar, "von");
   Und  = EinzelPar(AllePar, "Und");
   var SuchWorte = trim(EinzelPar(AllePar, "SuchWorte"));
   document.SuchForm.SuchWorte.focus();
   document.SuchForm.SuchWorte.value = SuchWorte;
// der folgende alert muss anspringen, sonst ist in der SearchWords.js etwas faul!
// alert("WortSuche: " + "\nSuchWorte = " + SuchWorte);
   if (browser_netsc && SuchWorte.indexOf("xx") > -1) {
      document.SuchForm.SuchWorte.value = "";
      Seitenprotokoll += "SuchWorte: <br>" +  SuchWorte + "<br><br>";
   }
   if (Und == 'x') { document.SuchForm.Und.checked = "checked"; }
   NetscapeUserText = (browser_netsc) ? NetscapeUser : "";
   if (SuchWorte == '') { SeitenInhalt = (von == "search") ? SuchWorteLeer : SuchEinleitung + NetscapeUserText ;  return; }
   SuchWort  = EinzelSuchWort(SuchWorte);

// Jetzt gehts ans Eingemachte: Trefferliste ertellen
   AnzahlTreffer = LinkListe (SuchWort);
   if (AnzahlTreffer == 0) {
      while(soz < nokey.length) { if (SuchWort[0].indexOf(nokey.charAt(soz)) > -1) { SeitenInhalt = SonderZeichen; return; } soz++; }
      SeitenInhalt = changeall(NichtsGefunden,"[SuchWorte]",SuchWorte, 0);
   } else {
      Trefferprotokoll = AnzahlTreffer + " Treffer";
      if (Und != 'x' && SuchWort.length > 1) Trefferprotokoll += " (und: " + AnzahlUndTreffer + ")";
      if (browser_netsc) {
         SeitenInhalt = changeall(SeitenInhalt, umlvon, umlnach, 0);
         Seitenprotokoll = changeall(Seitenprotokoll, umlvon, umlnach, 0);
      }
   }
}

// Einzelnen Parameter aus der Übergabeleiste separieren
function LinkListe (SuchWort) {
   var AnzahlTreffer = 0, EinzelLink, ziel, zieltext, textzeile, zielgewicht, p, i, j, nr, arrlen = sw.length;
   var alias = new Array(arrlen), titel = new Array(arrlen), worte = new Array(arrlen), punkte = new Array(arrlen);
   var swlen = SuchWort.length, SVar = new Array(swlen), UndPoints = new Array(swlen), SortArray = new Array(arrlen);

// Suchworte sw aus dem Datenbestand zerlegen in alias, titel und worte = Suchworte
   for (i = 0; i < arrlen; i++) {
      p = sw[i].indexOf("+"); alias[i] = sw[i].substr(0,p); rest = sw[i].substr(p+1);
      p = rest.indexOf("+"); titel[i] = rest.substr(0,p); worte[i] = rest.substr(p+1);
//    0: Verweis auf Original, 1: Punkte, 2: Trefferworte, 2: Anzahl Trefferworte;
      punkte[i] = new Array(4); punkte[i] [0] = i; punkte[i] [1] = 0; punkte[i] [2] = ""; punkte[i] [3] = 0;
   }

   for (j = 0; j < swlen; j++) {
      SVar [j] = new Array(5);
//    0: ptTxCapEx, 1: ptTxEx, 2: ptTxBeg, 3: ptTxCapBeg, 4: ptTx
      SVar [j] [0] =  tz + SuchWort[j] + tz;   SVar [j] [1] = SVar [j] [0].toLowerCase();
      SVar [j] [2] =  tz + SuchWort[j];        SVar [j] [3] = SVar [j] [2].toLowerCase();
      SVar [j] [4] =  SuchWort[j].toLowerCase();
   }

   for (i = 0; i < arrlen; i++) {
      wortegross = worte[i]; wortelower = wortegross.toLowerCase();
      for (j = 0; j < swlen; j++) { UndPoints [j] = 0; }
      erg = WortVergleich(i, swlen, arrlen, wortegross, wortelower, "c", SVar, punkte, 0, ptTxCapEx , alias, UndPoints);
      erg = WortVergleich(i, swlen, arrlen, wortegross, wortelower, "l", SVar, punkte, 1, ptTxEx    , alias, UndPoints);
      erg = WortVergleich(i, swlen, arrlen, wortegross, wortelower, "c", SVar, punkte, 2, ptTxCapBeg, alias, UndPoints);
      erg = WortVergleich(i, swlen, arrlen, wortegross, wortelower, "l", SVar, punkte, 3, ptTxBeg   , alias, UndPoints);
      erg = WortVergleich(i, swlen, arrlen, wortegross, wortelower, "l", SVar, punkte, 4, ptTx      , alias, UndPoints);

      var sp = 0; for (j = 0; j < swlen; j++) { sp += UndPoints [j]; }
      if (sp < swlen) { if (Und == "x") { punkte[i] [1] = 0; } } else { AnzahlUndTreffer += 1; }
   }

   for (i = 0; i < arrlen; i++) { SortArray[i] = (punkte[i] [1] + 1) * 10000 + i; }
   SortArray.sort(Numsort);

   for (i = 0; i < arrlen; i++) {
      nr = SortArray[i] % 1000; zielgewicht = punkte[nr] [1]; ziel = alias [nr]; zieltext = titel [nr];
      if (zielgewicht == 0) break;
      zielsuchworte = punkte[nr] [2].substr(2); // Trennkomma vor dem ersten Wort entfernen
      EinzelLink   = changeall(LinkMuster,"[href]",ziel, 0);
      EinzelLink   = changeall(EinzelLink,"[hreftext]",zieltext, 0);
      EinzelLink   = changeall(EinzelLink,"[suchworte]",zielsuchworte, 0);
      EinzelLink   = changeall(EinzelLink,"[gewicht]",zielgewicht, 0);
      SeitenInhalt = SeitenInhalt + changeall(EinzelLink,"[textzeile]",textzeile, 0);
      AnzahlTreffer += 1;
   }

   return AnzahlTreffer;
}

// Eine Datei mit einer Suchmethode (Großklein, ganzes Wort, ...) und allen Suchwörtern duchnudeln
function WortVergleich(i, swlen, arrlen, wortvar, wortelower, Lower, SVar, punkte, vt, pts, alias, UndPoints) {
   var j, erg = 0, gefpos, gefpose, GefWort, GefWortHilf, GefWortMark, GefWortLowerS, GefWortLowerG, GefWortLowerC, target;
   for (j = 0; j < swlen; j++) { gefpos = 0; gefpose = 0;
      while (gefpos > -1) {
         if (Lower == "c" && (SVar [j] [vt] == SVar [j] [vt].toLowerCase())) { break; }
         if ((Lower == "c" && (gefpos = wortvar.indexOf(SVar [j] [vt], gefpose)) > -1)
         ||  (Lower == "l" && (gefpos = wortelower.indexOf(SVar [j] [vt], gefpose)) > -1))  {
            while (gefpos > 0 && wortvar.charAt(gefpos) != tz) { gefpos -= 1; }
            gefpos += 1; gefpose = wortvar.indexOf(tz, gefpos);
            GefWortHilf = wortvar.substr(gefpos, gefpose - gefpos); GefWortMark = GefWortHilf;
            if (MarkFarbe.substr(0,1) == "#") {
               GefWortLowerS = GefWortHilf.toLowerCase();
               GefWortLowerG = SVar [j] [vt].replace(tz ,"").toLowerCase();
               gefpos = GefWortLowerS.indexOf(GefWortLowerG);
               GefWortLowerC = GefWortHilf.substr(gefpos,GefWortLowerG.length);
               GefWortMark = GefWortHilf.replace(GefWortLowerC,'<span style="background-color:' + MarkFarbe + '">' + GefWortLowerC + '</SPAN>');
            }
            if ((GefWortHilf.substr(0,5) == "http:") 
            ||  (GefWortHilf.substr(0,7) == "mailto:")
            ||  (GefWortHilf.substr(GefWortHilf.length - 4,4) == ".xls") 
            ||  (GefWortHilf.substr(GefWortHilf.length - 4,4) == ".pdf")) {
               if (GefWortHilf.substr(0,5) == "http:") { target = '" target="_blank">';  } else { target = '">'; }
               GefWort = ", " + '<a href="' + GefWortHilf + target + GefWortMark + '</a>';
            } else {
               GefWort = ", " + GefWortMark;
            }
            if (punkte[i] [2].indexOf(GefWort) < 0) {
               if (punkte[i] [3] == MaxWorteProTreffer) { GefWort = ", ..."; }
               if (punkte[i] [3] <= MaxWorteProTreffer) { punkte[i] [2] = punkte[i] [2] + GefWort; }
               punkte[i] [1] += pts; erg += 1; punkte[i] [3] += 1; UndPoints [j] = 1;
            }
            if (alias[i] == "xxccxximprdoku") {
               Seitenprotokoll = Seitenprotokoll + "WV: Hilf = " +  GefWortHilf + ", Mark = " +  GefWortMark + ", LS = " +  GefWortLowerS + ", LG = " +  GefWortLowerG + ", LC = " +  GefWortLowerC + ", SVar = " +  SVar [j] [vt] + ", gefpos = " +  gefpos + ", l = " +  GefWortLowerG.length + ", p = " +  punkte[i] [2] + "<br><br>";
            }
         }
      }
   }
   return erg;
}

// Einzelnen Parameter aus der Übergabeleiste separieren
function EinzelPar(von, par) {
   var erg=''; von = von + "&";
   var i=von.indexOf(par+"=");
   if (i>-1) {
      i += par.length + 1;
      var j=von.indexOf("&", i);
      erg = von.substring(i,j);
   }
   return erg;
}

// Einzelne Suchworte separieren
// Die Suchworte sind durch Leerzeichen getrennt
// Sind die Suchworte in " eingeschlossen, zählt alles als ein Suchwort
function EinzelSuchWort(von) {
   var j = 0, h = von, spos = h.indexOf(" "); erg = new Array();
   if (h.charAt(0) == '"') {
      h = h.substr(1);
      if (h.charAt(h.length-1) == '"') { h = h.substr(0, h.length-1); }
      erg [0] = h;
   }  else {
      if (spos < 0) { erg [0] = h; }
      else {
         while(spos > -1 && j < 9) {
            erg [j] = h.substr(0, spos);
            h = (spos) ? trim(h.substr(spos + 1)) : ""; j++;
            spos = h.indexOf(" ");
            if (spos<0) erg [j] = h;
         }
      }
   }
   return erg;
}

// Leerzeichen vorne und hinten weg
function trim(von) {
   while(von.charAt(0) == ' ') { von = von.substr(1); }
   while(von.charAt(von.length-1) == ' ') { von = von.substr(0, von.length-1); }
   return von;
}

// changeall: on & change all 'von' to 'nach'; von und nach können Einzelwerte oder Wertereihen sein.
function changeall(orig, von, nach, ab) {
   var ersetzt = '', hilf = orig, i = -1, j, svon = new Array(), snach = new Array();
   if ((typeof von) == "string") { svon[0] = von; snach[0] = nach; } else { svon = von; snach = nach; }
   for (j = ab; j < svon.length; j++) {
      while(hilf.length>0) {
         i=hilf.indexOf(svon[j],i+1);
         if(i<0) {
            ersetzt+=hilf;hilf='';
         } else {
            ersetzt+=hilf.substring(0,i)+snach[j];
            hilf=hilf.substr(i+svon[j].length);i=-1;
         }
      }
      hilf = ersetzt;  ersetzt = '';
   }
   return hilf;
}

// alert("WortVergleich: " + "\nGefWortHilf = " + GefWortHilf + "\nwortvar = " + wortvar);
// JavaScriptkrcke fr absteigenden numerischen Sort
function Numsort (a, b) {
  return b - a;
}




