/////////////////////////////////////////////////////////
//
// FotoViewer 1.00 - Written by KjM <kjm@inline.de>
// Lizenziert fÃ¼r www.fysb.de & www.planespotting.net
// Copyright 2007 by INLINE Internet Online Dienste GmbH
//
/////////////////////////////////////////////////////////
// 
// Document Shortcut
var dcm = document;

// Wrapper fÃ¼r getElementById
function gE(id) {return dcm.getElementById(id);};

// Wrapper fÃ¼r die createTextNode Funktion
function cN(tx) {return dcm.createTextNode(tx);};

// Wrapper fÃ¼r getElementsByTagName
function eB(o,t,e) {var r = o.getElementsByTagName(t); return (e==null)?r:r[e];};

// AppendChild wrapper
function aC(c,t) {c.appendChild(t);};

// Wrapper fÃ¼r die createElement Funtion
function cE(el) {return dcm.createElement(el);};

// Wrapper fÃ¼r setTimeout
function sT(f,v) {return setTimeout(f,v);};

// AJAX Objekt
var FotoViewer = {

  // Seite wurde komplett geladen?
  loaded: false,

  // MSIE?
  ismsie: false,

  // IO Objekt initialisieren
  io: null,

  // X & Y Position fÃ¼r die Views
  posX: -1,
  posY: -1,

  // Suche, Screening, Listing, Crosssearch ist aktiv
  insrch: false,
  inlist: false,
  inscreen: false,
  appeal: false,
  xsearch: false,
  xincluded: new Array(),

  // User ist eingeloggt
  loggedin: false,

  // Nachrichten laden
  getmsg: false,

  // Sortierungs Kriterium
  sortmode: null,

  // Aktuelle Rubrik, Name der Rubrik, Album
  rubrik: 0,
  rubrikname: '',
  hits: 0,
  album: 0,
  lrandom: true,

  // Aktuelle XML Datei
  xml: null,

  // Aktueller Offset
  offset: 0,

  // Anzahl Bilder im aktuellen Set
  bcount: 0,

  // Aktueller Suchstring
  sstring: '',

  // Aktuelles Bild in der Anzeige
  curimg: -1,

  // Maximale Anzahl Bilder pro Seite
  bpage: 20,
  moreav: false,
  onPage: 0,
  lastHits: -1,
  
  // Ausblenden der Vollansicht
  fadetype: 0,
  fullscreenview: false,
 
  // Elements die geleert werden muessen bei einem neuen Bild
  elemID: new Array('type','reg','photoby','extra','comment','airport','airline','country','date','cn'),

  //
  // Klasse loeschen
  //
  unload: function() {

    // Alle offenen Verbindungen abbrechen
    FotoViewer.io.abort(FotoViewer.mod);
    FotoViewer.io.abort(FotoViewer.upl);
    FotoViewer.io.abort(FotoViewer.fff);
    FotoViewer.io.abort(FotoViewer.img);
    FotoViewer.io.abort(FotoViewer.tpl);
    FotoViewer.io.abort(FotoViewer.src);
    FotoViewer.io.abort(FotoViewer.msg);

    // Ok, Seite verlassen
    return true;
  },

  //
  // FotoViewer initialisieren
  //
  load: function() {

    // Kein DOM Support
    if (!dcm.getElementById || !dcm.getElementsByTagName || !dcm.createElement) {
      alert("Ihr Browser ist zu alt fuer diese Anwendung!\n\nWir empfehlen Firefox, Mozilla oder Opera für eine korrekte Darstellung. MSIE ab Version 8.0 mit MSXML Services");
      return;
    }

    // MSIE Erkennung?
    if (!window.opera && navigator.userAgent.indexOf("MSIE") !=-1)
      FotoViewer.ismsie = true;

    // OnBeforeUnload registrieren (ausser Opera)
    if (!window.opera)
      FotoViewer.eH(window,'beforeunload',FotoViewer.unload,false);

    // Positionen fÃ¼r die ZÃ¤hler berechnen
    FotoViewer.posX = gE("preview").offsetLeft;
    FotoViewer.posY = gE("preview").offsetTop;
    for (var i=0;i<FotoViewer.bpage;i++) {
      var d = gE("prv_"+i); var e = cE("div"); FotoViewer.setclass(e,"clicks");
      e.style.top = FotoViewer.posY+d.offsetTop+(d.offsetHeight-11)+"px";
      e.style.left= FotoViewer.posX+d.offsetLeft+2+"px";
            aC(e,cN(" ")); aC(gE("body"),e); e.id = "click_"+i;
    }

    // XML Objekte initialisieren
    FotoViewer.io  = new xrq();
    FotoViewer.img = FotoViewer.io.newconn("img");
    FotoViewer.upl = FotoViewer.io.newconn("upl");
    FotoViewer.fff = FotoViewer.io.newconn("fff");
    FotoViewer.mod = FotoViewer.io.newconn("mod");
    FotoViewer.tpl = FotoViewer.io.newconn("tpl");
    FotoViewer.src = FotoViewer.io.newconn("src");
    FotoViewer.msg = FotoViewer.io.newconn("msg");

    // Eventhandler fÃ¼r die Bildklicks installieren
    for (var i=0;i<FotoViewer.bpage;i++) {
      FotoViewer.eH(gE("prv_"+i),'click',FotoViewer.ladeBild,false);
      
      // Foto in ein Album Ã¼bertragen
      if (FotoViewer.loggedin) 
        FotoViewer.eH(gE("prv_"+i),'dblclick',FotoViewer.meineAlben,false);
    }

    // Event fÃ¼r die Vollansicht
    FotoViewer.eH(gE("dia"),'click',FotoViewer.ladeGross,false);

    // Vollansicht schliessen
    FotoViewer.eH(gE("full"),'click',FotoViewer.schliesseGross,false);

    // Vorheriges & nÃ¤chstes Bild
    FotoViewer.eH(gE("scrolldown"),'click',FotoViewer.scrollpic,false);
    FotoViewer.eH(gE("scrollup"),'click',FotoViewer.scrollpic,false);
    gE("scrolldown").title = "zurück zum vorherigen Foto";
    gE("scrollup").title = "weiter zum nächsten Foto";

    // Weitere Bilder und vorherige Bilder anzeigen
    FotoViewer.eH(gE("nhits"),'click',FotoViewer.scrollpic,false);
    FotoViewer.eH(gE("phits"),'click',FotoViewer.scrollpic,false);

    // Bilder aus der aktuellen Rubrik wÃ¤hlen
    // Wird aus der jeweiligen Seite gemacht
    FotoViewer.bilderladen(true,true);

    // Name der aktuellen Rubrik setzen
    gE("pt").innerHTML = FotoViewer.rubrikname;
    
    // Seite komplett geladen
    FotoViewer.loaded = true;
    
    // Keinen Fotografen Name im Screening
    if (FotoViewer.inscreen) gE("cis").innerHTML = "Screening Infos";
    
    // Nachrichten laden?
    if (FotoViewer.getmsg) FotoViewer.loadusermessages(true,true);
  },

  //
  // Hilfe anzeigen
  //
  showhelp: function(ctx,init) {

    // Daten anfordern
    if (init) {
      var r = FotoViewer.io.fetch(FotoViewer.tpl,false,"/assets/0x055.php","ctx="+ctx,FotoViewer.showhelp); 
      if (r == null) FotoViewer.io.lasterror(FotoViewer.tpl,true);
      return;
    }

    // Daten wurden Ã¼bertragen
    if (FotoViewer.io.isfetched(FotoViewer.tpl)) {

      // Sind Fehler aufgetreten?
      var x = FotoViewer.io.getresponse(FotoViewer.tpl,true);
      if (x==null) { FotoViewer.hide("help",true); return; }
      
      // Daten anzeigen
            gE("help").innerHTML = "<img src='/images/0x057.jpg' width='64' height='44' alt='Hilfe' align='left' border='0' />"+x+"<br /><br /><center><b><u>Hilfefenster schliessen</u></b></center>";
          }
  },

  //
  // Nachrichten des Users laden
  //
  loadusermessages: function(cb,init) {
  
    // Daten anfordern
    if (init) {
      var r = FotoViewer.io.fetch(FotoViewer.msg,false,"/assets/0x053.php","",FotoViewer.loadusermessages); 
      if (r == null) FotoViewer.io.lasterror(FotoViewer.msg,true);    
      return;
    }

    // Daten wurden Ã¼bertragen
    if (FotoViewer.io.isfetched(FotoViewer.msg)) {

      // Sind Fehler aufgetreten?
      FotoViewer.hide("toplist",true);
      var x = FotoViewer.io.getresponse(FotoViewer.msg);
      if (x==null) return;
      
      // Daten auswertet
      var msg_new  = FotoViewer.get(x,"New",true);
      var msg_read = FotoViewer.get(x,"Read",true);
      var msg_send = FotoViewer.get(x,"Send",true);
      
      // Der User hat keine Nachrichten?
      if (msg_new+msg_read+msg_send==0) {
                gE("toplist").innerHTML = "<h3>Keine neuen Nachrichten</h3>";
                FotoViewer.hide("toplist",false); return;
      }
      
      // Nachrichten auflisten
      var y = gE("mails"); var b = eB(x,"MSG");
      for (var i=0;i<b.length;i++) {
        var r = cE("tr"); aC(y,r); FotoViewer.setclass(r,((i%2==0)?"even":"odd"));
        var d = cE("td"); aC(r,d); d.innerHTML = FotoViewer.get(b[i],"Sender");
        FotoViewer.setclass(d,"cell");
        var d = cE("td"); aC(r,d); d.innerHTML = FotoViewer.get(b[i],"Date");
        FotoViewer.setclass(d,"cell");
        switch (FotoViewer.get(b[i],"State")) {
          case 'U':
                        var s = "<b>ungelesen</b>";
                        break;
          case 'R':
                        var s = "gelesen";
                        break;
          case 'S':
                        var s = "gesendet";
                        break;
          default:
            var s = "?";
        }
        
        // Flags anezeigen
        var d = cE("td"); aC(r,d); d.innerHTML = s; FotoViewer.setclass(d,"cell");
        var g = FotoViewer.get(b[i],"MsgID",true); d.id = "msgstate_"+g;
        
        // Betreff und Link erstellen
        var d = cE("td"); aC(r,d); 
        d.msgid = g; d.innerHTML = FotoViewer.get(b[i],"Subject");
        FotoViewer.setclass(d,"cell"); d.style.cursor = "pointer";
        
        // Eventhandler installieren
        FotoViewer.eH(d,'click',FotoViewer.lademsg,false);
      }
    }  
  },

  //
  // Foto in ein eigenes Fotoalbum Ã¼bertragen
  //
  add2album: function(id,init,title) {
  
    // Der User mÃ¶chte das Bild in dieses Album Ã¼bertragen
    if (init==true) {
      var b = eB(FotoViewer.xml,"Fotos"); 
      if (FotoViewer.curimg != -1 || !b.length) {
    
        // Daten an den Server senden
        var t = (title==null)?0:1;
        var r = FotoViewer.io.fetch(FotoViewer.fff,false,"/assets/0x05f.php","t="+t+"&a="+id+"&i="+FotoViewer.get(b[FotoViewer.curimg+FotoViewer.offset],"ID",true),FotoViewer.add2album);
        if (r == null) FotoViewer.io.lasterror(FotoViewer.fff,true);       
        return;
      }
    
      // Anzeige schliessen
      FotoViewer.meineAlben(null); return;
    }
    
    // Daten sind Ã¼bertragen?
    if (FotoViewer.io.isfetched(FotoViewer.fff)) {
      var x = FotoViewer.io.getresponse(FotoViewer.fff,false);
      if (x != null) {
        var a = FotoViewer.get(x,"AlbumID",true);
        switch (FotoViewer.get(x,"OK",true)) {
          case 1:
            var d = gE("albumid_"+a); if (d != null) {
              var c = cE("div"); FotoViewer.setclass(c,"addedok"); aC(d,c);
              sT("FotoViewer.meineAlben()",2000); return;
            }
            break;
          case 2:
            var d = gE("albumtitle_"+a); if (d != null) {
              var c = cE("img"); c.src = "/images/0x066.gif"; aC(d,c);
              sT("FotoViewer.meineAlben()",2000); return;
            }
            break;
        }
      }
      
      // Seite wiederherstellen
      FotoViewer.meineAlben(null); return;
    }
  },

  //
  // Ein Bild wurde doppelt geklickt. Nun die Alben des Users anzeigen
  //
  meineAlben: function(ev) {

    // ev = null, Inhalt wiederherstellen
    if (ev == null) {
    
      FotoViewer.cloneTree("_content","content");
      FotoViewer.cloneTree("_mail","mail");
      var m = gE("mail"); aC(gE("content"),m.parentNode.removeChild(m));
      return;
    }

    // Eventdaten laden
    var e = FotoViewer.getEvent(ev);
    var t = e.target?e.target:e.srcElement;

    // XML ist nicht geladen
    if (!FotoViewer.xml) return;
    var b = eB(FotoViewer.xml,"Fotos"); if (!b.length) return;

    // Bildnummer holen
    var x = /prv_([0-9]+)/;
    if (!x.exec(t.id)) return;
  
    // Offset im XML setzen
    var id = FotoViewer.offset+parseInt(RegExp.$1);
  
    // Originalcontent sichern 
    if (!FotoViewer.cloneTree("mail","_mail")) return;
    if (!FotoViewer.cloneTree("content","_content")) return;
    
    // Nun die Alben des Users einblenden
    var r = FotoViewer.io.fetch(FotoViewer.fff,false,"/assets/0x05e.php","",FotoViewer.fotoalben);
    if (r == null) FotoViewer.io.lasterror(FotoViewer.fff,true); 
  },
  
  //
  // Fotoalben eines Users anzeigen
  //
  fotoalben: function() {

    // Ãœbertragung ist abgeschlossen?
    if (FotoViewer.io.isfetched(FotoViewer.fff)) {

      // Sind Fehler aufgetreten?
      var x = FotoViewer.io.getresponse(FotoViewer.fff,true);
      if (x==null) return;
      
      // Daten anzeigen
      gE("content").innerHTML = x;
    }
  },

  //
  // Nachricht laden und anzeigen
  //
  loadmessage: function() {

    // Daten wurden Ã¼bertragen
    if (FotoViewer.io.isfetched(FotoViewer.msg)) {

      // Sind Fehler aufgetreten?
      var x = FotoViewer.io.getresponse(FotoViewer.msg);
      if (x==null) { FotoViewer.hide("toplist",true); return; }
      
      // Info entfernen
      var z = gE("toplist"); var m = FotoViewer.get(x,"Text");
      m = m.replace(/\n/g, "<br />");
            z.innerHTML  = "<div id='message'>Nachricht von: <b>"+FotoViewer.get(x,"Sender")+"</b>, gesendet am: <b>"+FotoViewer.get(x,"Date")+"</b><br />Betreff der Nachricht: <b>"+FotoViewer.get(x,"Subject")+"</b><br /><br /><i>"+m+"</i><br /><br /><a href='/settings/messages/answer/index.php?msgid="+FotoViewer.get(x,"MsgID",true)+"'>Nachricht beantworten</a> &nbsp; <a href='javascript:FotoViewer.delmsg("+FotoViewer.get(x,"MsgID",true)+")'>Nachricht l&ouml;schen</a></div>";
      gE("msgstate_"+FotoViewer.get(x,"MsgID",true)).innerHTML = "gelesen";
          }  
  },
  
  //
  // Nachricht lÃ¶schen
  //
  delmsg: function(id) {
  
    // Sicherheitsabfrage
        if (!confirm("Diese Nachricht wirklich loeschen?")) return;
        
    // Nachricht vom Server loeschen
    FotoViewer.clearTree(gE("mails"));

    // Informationen anzeigen
        gE("toplist").innerHTML = "<h3>L&ouml;sche Nachricht...</h3>";
        FotoViewer.hide("toplist",false);

    // Nachricht laden    
    var r = FotoViewer.io.fetch(FotoViewer.msg,false,"/assets/0x053.php","del=1&msgid="+id,FotoViewer.loadusermessages);
    if (r == null) FotoViewer.io.lasterror(FotoViewer.msg,true);            
  },

  //
  // Nachricht laden
  //
  lademsg: function(ev) {

    // Eventdaten laden
    var e = FotoViewer.getEvent(ev);
    var t = e.target?e.target:e.srcElement;
    
    // Informationen anzeigen
        gE("toplist").innerHTML = "<h3>Die Nachricht wird geladen...</h3>";
        FotoViewer.hide("toplist",false);

    // Nachricht laden    
    var r = FotoViewer.io.fetch(FotoViewer.msg,false,"/assets/0x053.php","msgid="+t.msgid,FotoViewer.loadmessage);
    if (r == null) FotoViewer.io.lasterror(FotoViewer.msg,true);        
  },

  //
  // Bilder anhand einer Suchangabe anzeigen
  //
  suche: function(init,option,mask,end) {

    // Alten Suchstring lÃ¶schen wenn init = true
    if (init) FotoViewer.sstring = ""; 

    // Neuen Suchbegriff anhÃ¤ngen
    FotoViewer.sstring += "&"+option+"="+escape(mask);
    if (end!=null) FotoViewer.bilderladen(true,true,(end==true)?false:true);
  },

  //
  // NÃ¤chstes od. vorheriges Bild anzeigen
  //
  scrollpic: function(ev) {

    // Eventdaten laden
    var e = FotoViewer.getEvent(ev); var t = e.target?e.target:e.srcElement;

    // XML laden
    if (!FotoViewer.xml) return;
    var b = eB(FotoViewer.xml,"Fotos");

    // die nÃ¤chsten od. die vorherigen?
    if (t.id=='phits' || t.id=='nhits') {
      FotoViewer.scroll((t.id=="nhits")?'next':'prev'); return true;
    }

    // Runter od. hoch?
    var m = (t.id=="scrollup")?true:false;
    
    // Noch kein Bild gewÃ¤hlt?
    if (FotoViewer.curimg != -1) FotoViewer.setclass(gE("prv_"+FotoViewer.curimg),"prv");

    // Nicht zuviel :)
    if (m && FotoViewer.offset+FotoViewer.curimg+1 < b.length) {
      gE("scrolldown").style.display = "inline";

      // Weiterblaettern?
      if (FotoViewer.curimg==FotoViewer.bpage-1) {
        FotoViewer.curimg = 0; FotoViewer.scroll('next'); 
      } else FotoViewer.curimg++;

      if (FotoViewer.curimg+FotoViewer.offset == b.length) FotoViewer.hide('scrollup');
    } else if (!m && FotoViewer.curimg >= 0) {

      // zurÃ¼ck blÃ¤ttern?
      if (!FotoViewer.curimg && FotoViewer.offset) {
        FotoViewer.curimg = FotoViewer.bpage-1; FotoViewer.scroll('prev'); 
      } else if (FotoViewer.curimg>0) FotoViewer.curimg--;

      // Kein zurÃ¼ck mehr mÃ¶glich
      if (FotoViewer.curimg==0 && FotoViewer.offset == 0) FotoViewer.hide('scrolldown',true); 
    }

    // Bild in die Voransicht laden
    FotoViewer.fotopreview();
  },

  //
  // Eventhandler - Crossbrowser version
  //
  getEvent: function(e) {
    if (typeof e == 'undefined') e = window.event;
    if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
    if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
    return e;
  },

  //
  // Auswahlliste laden
  //
  ladeliste: function(type,init,mode,fname,value) {
  
    // Init Prozess
    if (init != null) {
      if (fname==null) fname = "modify";
      if (value==null) value = "";
      if (!FotoViewer.loaded || FotoViewer.inlist == true) {
        sT("FotoViewer.ladeliste('"+type+"',true,"+mode+",'"+fname+"',"+value+")",500); return;
      }
      var r = FotoViewer.io.fetch(FotoViewer.mod,false,"/assets/0x03f.php","list="+type+"&mode="+((mode==true)?'1':'0')+"&fname="+fname+"&value="+value,FotoViewer.ladeliste); 
      if (r == null) FotoViewer.io.lasterror(FotoViewer.mod,true);
      else {
        FotoViewer.inlist = true;
        eval("var F = dcm.forms."+fname+".ed_"+type);
                var e = new Option("Liste wird geladen, bitte warten...","0",true,true);
                F.options[F.length] = e; FotoViewer.hide("load_"+type,true);
      }
      return;
    }
  
    // Ãœbertragung abgeschlossen
    if (FotoViewer.io.isfetched(FotoViewer.mod)) {

      // Sind Fehler aufgetreten?
      var x = FotoViewer.io.getresponse(FotoViewer.mod);
      FotoViewer.inlist = false;
      if (x==null) return;
      
      /* FormName laden */
      var n = FotoViewer.get(x,"FName");
      
      /* Form Referenz */
      eval("var F = dcm.forms."+n+".ed_"+FotoViewer.get(x,"Type"));

      /* Modus lesen */
      var m = FotoViewer.get(x,"Mode",true);
      if (m==1) {
        F.options.length = 0;
                var e = new Option("Liste wurde geladen. Bitte waehle aus...", "0", false, false);
                F.options[F.length] = e;        
      } else F.length = F.length - 1;

      /* Trenner anzeigen */
      F.options[F.length] = new Option("-----------------","0",false,false);

      /* Liste ausgeben */
      var b = eB(x,"Entry");
      for (var i=0;i<b.length;i++) {
        var e = new Option(FotoViewer.get(b[i],"Name"), FotoViewer.get(b[i],"ID"), false, false);
        F.options[F.length] = e;
      }
    }  
  },

  //
  // FormDaten eines Uploads in der Session speichern
  //
  formforget: function(cb,init) {
  
    /* Daten senden */
    if (init!=null) {
      var F = dcm.forms.finish;
      var s = "&day="+F.day.options[F.day.selectedIndex].value+"&month="+F.month.options[F.month.selectedIndex].value+"&year="+F.year.options[F.year.selectedIndex].value+"&comment="+escape(F.comment.value)+"&livery="+((F.livery.checked)?1:0)+"&cargo="+((F.cargo.checked)?1:0)+"&crashed="+((F.crashed.checked)?1:0)+"&night="+((F.night.checked)?1:0);
      var r = FotoViewer.io.fetch(FotoViewer.fff,false,"/assets/0x03e.php","back="+escape(init)+s,FotoViewer.formforget); 
      if (r == null) FotoViewer.io.lasterror(FotoViewer.fff,true);
      return;
    }

    // Ãœbertragung abgeschlossen
    if (FotoViewer.io.isfetched(FotoViewer.fff)) {

      // Sind Fehler aufgetreten?
      var x = FotoViewer.io.getresponse(FotoViewer.fff);
      if (x==null) return;
      
      // Link ausfÃ¼hren
      dcm.location.href = FotoViewer.get(x,"Back"); return;
    }
  },

  //
  // Mittelgrosse Ansicht leeren
  //
  clearmiddle: function() { 
    FotoViewer.hide("linkinfo",true);
    FotoViewer.hide("views",true); FotoViewer.hide("correct",true);
    gE("dia").src = "/images/0x002.gif"; 
    for (var i=0;i<FotoViewer.elemID.length;i++) {
      var e = gE("display_"+FotoViewer.elemID[i]);
      if (e) e.innerHTML = "&nbsp;";
    }
  },

  //
  // Iconansicht leeren
  //
  clearIcons: function() {

    // Aktuelle Bildmarkierung aufheben
    if (FotoViewer.curimg != -1) 
      FotoViewer.setclass(gE("prv_"+FotoViewer.curimg),"prv");    
  
    // Alle Icons lÃ¶schen
    for (var i=0;i<FotoViewer.bpage;i++) {
      gE("prv_"+i).src = '/images/0x002.gif';
      gE("click_"+i).innerHTML = " ";
    }
  },
  
  //
  // Alle Bilder und Referenzen lÃ¶schen
  //
  clearAll: function(kr) {
  
    // Navigationspfeile ausblenden
    FotoViewer.hide('scrollup',true); FotoViewer.hide('scrolldown',true);
    FotoViewer.hide('phits',true); FotoViewer.hide('nhits',true);
    FotoViewer.hide('views',true); FotoViewer.hide('displayinfo',true);
    
    // Voransicht lÃ¶schen
    FotoViewer.clearmiddle();
    
    // Alle Icons lÃ¶schen
    FotoViewer.clearIcons();
    FotoViewer.curimg = -1; FotoViewer.bcount = FotoViewer.offset = 0;
    FotoViewer.xml = null; FotoViewer.sstring = '';
    
    // Rubrik nicht lÃ¶schen 
    if (kr != true) FotoViewer.rubrikname = ""; 
    gE("pt").innerHTML = FotoViewer.rubrikname;
    
    // Paging lÃ¶schen
    FotoViewer.onPage = 0; FotoViewer.moreav = false;
  },

  //
  // Vollansicht schliessen
  //
  schliesseGross: function(ev) {
    FotoViewer.hide("full",true); FotoViewer.fullscreenview = false;
    FotoViewer.hide('body',false); FotoViewer.hide("fullwait",true);
  },

  //
  // Bild in der Vollansicht laden
  //
  ladeGross: function(ev) {

    // Kein Bild in der Anzeige
    if (FotoViewer.curimg<0) return;

    // Info anzeigen
    FotoViewer.hide("fullwait",false);

    // XML Referenz holen
    var b = eB(FotoViewer.xml,"Fotos");

    // Bild laden
    var o = FotoViewer.curimg+FotoViewer.offset; var g = gE("fullview");
    
    // Titel anzeigen
    FotoViewer.fillInfo(b[o],'fulltitle',Array('Airline','!, ','Aircraft','!,','APName','!(','IATA','!/','ICAO','!),','APCountry'));
    FotoViewer.fillInfo(b[o],'fcopyright',Array('!Copyright ©','! ','!by','! ','Username','! '));
    
    FotoViewer.eH(g,'load',FotoViewer.fadeinev,false);
    FotoViewer.fullscreenview = false;
    g.src = "/assets/0x029.php?a="+FotoViewer.get(b[o],"IATA")+"&o="+FotoViewer.get(b[o],"ICAO")+"&p="+FotoViewer.get(b[o],"APID",true)+"&r="+FotoViewer.get(b[o],"Registration")+"&d="+FotoViewer.get(b[o],"ID",true)+"&f="+FotoViewer.get(b[o],"Image")+"&s="+FotoViewer.get(b[o],"InScreen",true)+"&v=1000";
  },

  //
  // Einblendung vorbereiten
  //
  fadeinev: function(ev) {

    // Es wurde schon eingeblendet
    if (FotoViewer.fullscreenview) {
      FotoViewer.hidescreen(); return;
    }    
    FotoViewer.fadetype = 0;
    var o = gE("full");
    o.style.opacity      = 0;
    o.style.MozOpacity   = 0;
    o.style.filter       = "Alpha(opacity=0)";
    o.style.display      = "block";
    FotoViewer.fadein();
  },

  //
  // Bild langsam einblenden
  //
  fadein: function() {
    FotoViewer.fadetype += 20; 
    var o                = gE("full");
    o.style.opacity      = FotoViewer.fadetype/100;
    o.style.MozOpacity   = FotoViewer.fadetype/100;
    o.style.filter       = "Alpha(opacity="+FotoViewer.fadetype+")";
    if (FotoViewer.fadetype < 100) {
      sT("FotoViewer.fadein()",25);
    } else {
      FotoViewer.hidescreen(); 
      FotoViewer.eH(o,'load',FotoViewer.hidescreen,false);
    }
  },

  //
  // Fotoinformationen Ã¤ndern
  //
  correct: function(m) {

    if (FotoViewer.xml == null) return;  
    var b = eB(FotoViewer.xml,"Fotos");
    if (!b.length || FotoViewer.get(b[FotoViewer.curimg+FotoViewer.offset],"O",true)==29 || FotoViewer.get(b[FotoViewer.curimg+FotoViewer.offset],"InScreen",true)) {
      FotoViewer.hide("correct",true); return;
    }
  
    // Referer setzen
    var r = escape(dcm.location.href);
  
    // Redirect ausfÃ¼hren
    if (m==true)
      dcm.location.href="/administration/correct/index.php?back="+r+"&fotoid="+FotoViewer.get(b[FotoViewer.curimg+FotoViewer.offset],"ID",true);
    else
      dcm.location.href="/correct.php?back="+r+"&fotoid="+FotoViewer.get(b[FotoViewer.curimg+FotoViewer.offset],"ID",true);
  },

  //
  // Fullscreen Bild einblenden
  //
  hidescreen: function() {

    // DIV einblenden
    FotoViewer.fullscreenview = true;
    FotoViewer.hide('body',true);
  },

  //
  // Iconanzeige korrigieren und Foto anzeigen
  //
  iconClear: function(id) {
  
    // Aktuelles Bild wieder auf die normale Klasse setzen
    if (FotoViewer.curimg != -1) {
      FotoViewer.setclass(gE("prv_"+FotoViewer.curimg),"prv");    
    } else {
      gE("scrollup").style.display = "inline";
      if (id>0) gE("scrolldown").style.display = "inline";
    }
    FotoViewer.curimg = id;

    // Bild in die Voransicht laden
    FotoViewer.fotopreview();
  },

  //
  // einzelnes Bild in die Voransicht laden
  //
  ladeBild: function(ev) {

    // Eventdaten laden
    var e = FotoViewer.getEvent(ev);
    var t = e.target?e.target:e.srcElement;

    // Bildnummer holen
    var x = /prv_([0-9]+)/; if (!x.exec(t.id)) return;

    // Aktuelles Bild wieder auf die normale Klasse setzen
    FotoViewer.iconClear(parseInt(RegExp.$1));
  },

  //
  // Lokale Nachricht versenden
  //
  localmail: function(init,cb) {
  
    // Callback Entry
    if (cb == null) {
    
      // Ãœbertragung ist abgeschlossen
      if (FotoViewer.io.isfetched(FotoViewer.fff)) {

        // Antwort auswerten
        var x = FotoViewer.io.getresponse(FotoViewer.fff);
        if (x==null) var r = 0;
        else var r = FotoViewer.get(x,"OK",true);

        /* Returncode auswerten */        
        switch (r) {
          case 1:
                        alert("Die Nachricht wurde erfolgreich verschickt!");
                        var F = dcm.forms.m2f;
            F.mailto.selectedIndex = 0;
            F.subject.value = ""; F.message.value = "";
            
            // RÃ¼cksprung?
            if (FotoViewer.get(x,"Jump",true)==1)
              dcm.location.href = "/settings/messages/index.php";
            break;
          case 0:
                        alert("Die Nachricht konnte nicht verschickt werden!");
                        break;
          case 2:
                        alert("Du musst angemeldet sein um lokale Nachrichten versenden zu koennen!");
            dcm.location.href = "/anmeldung/index.php";
                        break;
        }
      }
      
      return;
    }
  
    // Daten senden
    var F = dcm.forms.m2f;

    /* Daten senden */
    var s = "jump="+((cb==false)?1:0)+"&mailto="+F.mailto.options[F.mailto.selectedIndex].value+"&subject="+escape(F.subject.value)+"&message="+escape(F.message.value);
    var r = FotoViewer.io.fetch(FotoViewer.fff,false,"/assets/0x052.php",s,FotoViewer.localmail); 
    if (r == null) FotoViewer.io.lasterror(FotoViewer.fff,true);
  },

  //
  // Nachricht an einen Fotograf senden
  //
  sendmail: function(init,i) {
  
    // Callback
    if (i==null) {
      if (FotoViewer.io.isfetched(FotoViewer.fff)) {
      
        var s = gE("sendmailbutton");
        s.src = "/images/0x040.gif";
        s.disabled = true;

        // Antwort auswerten
        var x = FotoViewer.io.getresponse(FotoViewer.fff);
        if (x==null || FotoViewer.get(x,"OK",true)==0) {
                    alert("Die Nachricht konnte nicht gesendet werden.\nBitte versuch es spaeter erneut!");
                  }
        FotoViewer.hide("mail",true); 
      }
      return;
    }
  
    // Mitteilun an Fotograf senden
    var F = dcm.forms.fmail;
    if (i == -2) {

      // Absender vorhanden?
      if (!F.name.value.length) {
        alert("Bitte gib Deinen Namen an!");
        F.name.focus(); return;
      }
      
      // Keine EMail Adresse vorhanden
      if (!F.email.value.length) {
        alert("Bitte gib Deine EMail Adresse an!");
        F.email.focus(); return;
      }
      
      // EMail Adresse auf GÃ¼ltigkeit prÃ¼fen
      var pattern=/.*\@.*\..*/;
      if ((pattern.test(F.email.value))==false) {
        alert("Bitte gib eine gueltige EMail Adresse an!");
        F.email.focus(); return;
      }     
    
      // Keine Nachricht?
      if (!F.message.value.length) {
        alert("Bitte gib deine Nachricht ein.");
        F.message.focus(); return;
      }
    
      /* Daten senden */
      var s = "ffid="+F.ffid.value+"&fuid="+F.fuid.value+"&name="+escape(F.name.value)+"&email="+escape(F.email.value)+"&message="+escape(F.message.value);
      var r = FotoViewer.io.fetch(FotoViewer.fff,false,"/assets/0x046.php",s,FotoViewer.sendmail); 
      if (r == null) FotoViewer.io.lasterror(FotoViewer.fff,true);
      else {
        var s = gE("sendmailbutton");
        s.src = "/images/0x031.gif";
        s.disabled = true;
      }
      
      /* Form schliessen */
      return;
    } else if (i==-1) {
      FotoViewer.hide("mail",true); return;
    }
  
    // Mail Formular einblenden
    FotoViewer.hide("mail",false);
    var b = eB(FotoViewer.xml,"Fotos");
    F.ffid.value = FotoViewer.get(b[FotoViewer.curimg+FotoViewer.offset],"ID",true);
    F.fuid.value = i;
  },

  //
  // Bild in die Voransicht laden und Infos anzeigen
  // 
  fotopreview: function() {

    // Aktive Vorschau markieren
    var o = FotoViewer.curimg+FotoViewer.offset;

    // XML Referenz holen
    var b = eB(FotoViewer.xml,"Fotos");
    if (o >= b.length) return;

    // aktives Icon hervorheben
    FotoViewer.setclass(gE("prv_"+FotoViewer.curimg),"prvactive");
    
    // mittlere Voransicht leer machen
    FotoViewer.clearmiddle();

    // Linkinfo anzeigen
    var P = (FotoViewer.get(b[o],"O",true)==29 || FotoViewer.get(b[o],"InScreen",true))?true:false;
    if (!P) FotoViewer.linkinfo(FotoViewer.get(b[o],"ID",true));

    // Infos anzeigen
    var s = FotoViewer.get(b[o],"Subtype");
    var cn = FotoViewer.get(b[o],"cn");
    if (cn.length > 1 && cn != '0')
      FotoViewer.fillInfo(b[o],'cn',Array('! (cn ','cn','!)'),Array('mehr','cn',12));
    FotoViewer.fillInfo(b[o],'reg',Array('Registration'),Array('mehr','Registration',8));

    // Im Screening Infos anzeigen
    if (FotoViewer.inscreen) {
    
      // Daten Modifikation anzeigen
      var m = FotoViewer.get(b[o],"Modified",true); var ms = "";
            if (!m) ms = "keine Airline od. Flugzeugtyp &Auml;nderung /";
      if ((m & 1) > 0)  ms += "Typ hinzugef&uuml;gt /";
      if ((m & 2) > 0)  ms += "Typ ausgew&auml;hlt /";
      if ((m & 4) > 0)  ms += "Airline ausgew&auml;hlt /";
      if ((m & 8) > 0)  ms += "Airline hinzugef&uuml;gt /";
      if ((m & 16) > 0) ms += "Typ hinzugef&uuml;gt aber bekannt /";  
      if ((m & 32) > 0) ms += "Flughafen hinzugef&uuml;gt /";
            var g = FotoViewer.get(b[o],"Registration");
      FotoViewer.fillInfo(b[o],'photoby',Array(((m==0)?'!':'?')+ms.substring(0,ms.length-2)),Array(g,'!'+g,70));
    } else{

      // Der User akzeptiert Mails?
      FotoViewer.fillInfo(b[o],'photoby',Array('Username'),Array('mehr','UID',10));
      if (FotoViewer.rubrik != 29 && FotoViewer.rubrik != 28 && FotoViewer.get(b[o],"Mail")!='N') 
        FotoViewer.mailavail(b[o],FotoViewer.get(b[o],"Mail"));
      FotoViewer.bestof(b[o]);

      // Extras (Postkarte senden)
      if (FotoViewer.get(FotoViewer.xml,"Extras",true))
        gE('display_extra').innerHTML = "<br />[<a href='/postcard.php?fotoid="+FotoViewer.get(b[o],"ID",true)+"'>Foto als Postkarte verschicken</a>]";
    }    
    
    // Airline 
    FotoViewer.fillInfo(b[o],'airline',Array('Airline'),Array('mehr','AirlineID',11));
    
    // Subtype vorhanden?
    if (s.length)
      FotoViewer.fillInfo(b[o],'type',Array('Aircraft','!/','!'+s),Array('mehr','acID',13));
    else
      FotoViewer.fillInfo(b[o],'type',Array('Aircraft'),Array('mehr','acID',13));
    FotoViewer.fillInfo(b[o],'country',Array('APCountry'),Array('mehr','APCountry',9));
    
    // Keine ICAO/IATA Anzeige wenn 999
    var iata = FotoViewer.get(b[o],"IATA"); var icao = FotoViewer.get(b[o],"ICAO");
    if (iata == '999'  || iata == '998')  iata = "-";
    if (icao == '9999' || icao == '9998') icao = "-";
    FotoViewer.fillInfo(b[o],'airport',Array('APName','!, ','! (','!'+iata,'!/','!'+icao,'!)'),Array('mehr','APID',14));
    
    // Kommentar des Fotografen
    FotoViewer.fillInfo(b[o],'comment',Array('Comment'));
    
    /* Datum anzeigen */
    var day   = FotoViewer.get(b[o],"Day",true);
    var month = FotoViewer.get(b[o],"Month");
    var year  = FotoViewer.get(b[o],"Year",true);
    
    /* Anzeigevarianten */
    if (day > 0 && month.length > 0 && year > 0)
      FotoViewer.fillInfo(b[o],'date',Array('!, ','Month','! ','!'+day,'!, ','!'+year),Array('mehr','TS',21));
    else if (!day && month.length > 0 && year > 0)
      FotoViewer.fillInfo(b[o],'date',Array('!, ','Month','!, ','!'+year),Array('mehr','TS',21));
    else if (!day && !month && year > 0)
      FotoViewer.fillInfo(b[o],'date',Array('!'+year),Array('mehr','TS',21));
      
    /* Wie oft wurde das Foto angezeigt? */
    FotoViewer.fillInfo(b[o],'views',Array('!Views: ','Views'));
    
    // Views positionieren und einblenden
    var w = FotoViewer.get(b[o],"CW",true);
    var cw = parseInt((430-w)/2); var ch = parseInt((290-FotoViewer.get(b[o],"CH",true))/2);
    var v = gE("display_views"); 
    v.style.top  = 24+ch+"px"; v.style.left = 8+cw+"px";
    v.style.display = "block";

    // Copyright Info positionieren und anzeigen
    var v = gE("display_copyright"); v.style.width = w+"px";
    v.style.bottom = 33+ch+"px"; v.style.right = 8+cw+"px";    
    FotoViewer.fillInfo(b[o],'copyright',Array('! fysb.de ¦ planespotting.net - Copyright ©','! ','Username','! '));
    v.style.display = "block";

    // Einspruch zum Bild einblenden
    if (FotoViewer.appeal) gE("appealreason").innerHTML = FotoViewer.get(b[o],"Appeal");

    // Bild laden
    gE("dia").src = "/assets/0x029.php?a="+FotoViewer.get(b[o],"IATA")+"&o="+FotoViewer.get(b[o],"ICAO")+"&p="+FotoViewer.get(b[o],"APID",true)+"&r="+FotoViewer.get(b[o],"Registration")+"&f="+FotoViewer.get(b[o],"Image")+"&s="+FotoViewer.get(b[o],"InScreen",true)+"&v=430";
    FotoViewer.hide("correct",P);
  },
  
  //
  // Dieser Fotograf akzeptiert Mails
  //
  mailavail: function(r,t) {
    var d = gE("display_photoby"); aC(d,cN(" ["));

    // User akzeptiert nur lokale Nachrichten 
    if (t == 'L' && FotoViewer.get(FotoViewer.xml,"Auth",true)==0) {
            aC(d,cN("Du musst eingeloggt sein um Nachrichten zu senden]"));
            return;
    }
    
    // Link darstellen
    var a = cE("a"); a.href = "javascript:FotoViewer.sendmail(true,"+FotoViewer.get(r,"UID",true)+")"; 
    aC(a,cN("Nachricht"));
    aC(d,a); aC(d,cN("]"));
  },

  //
  // Die besten Fotos dieses Users
  //
  bestof: function(r) {
    var d = gE("display_photoby"); aC(d,cN(" ["));

    // Link darstellen
    var a = cE("a"); a.href = "javascript:FotoViewer.innerLink("+FotoViewer.get(r,"UID",true)+",23)"; 
    aC(a,cN("Best of...")); aC(d,a); aC(d,cN("]"));
  },  
  
  //
  // soeben hochgeladenes Bild anzeigen
  //
  yourupload: function(cb,init) {

    // Bilddaten laden
    if (init) {
      if (!FotoViewer.loaded) { sT("FotoViewer.yourupload(true,true)",500); return; }
      var r = FotoViewer.io.fetch(FotoViewer.upl,true,"/assets/0x032.php","",FotoViewer.yourupload); 
      if (r == null) FotoViewer.io.lasterror(FotoViewer.upl,true);
      return;
    }

    // Ãœbertragung abgeschlossen
    if (FotoViewer.io.isfetched(FotoViewer.upl)) {

      // Sind Fehler aufgetreten?
      FotoViewer.xml = FotoViewer.io.getresponse(FotoViewer.upl);
      if (FotoViewer.xml==null) return;

      // Anzahl der Bilder
      var b = eB(FotoViewer.xml,"Fotos");
      FotoViewer.bcount = b.length;
      if (!FotoViewer.bcount) gE("dia").src = "/images/0x002.gif"; 
      
      // Es gibt nur ein Bild. Kein BlÃ¤ttern mÃ¶glich
      FotoViewer.hide("nhits",true); FotoViewer.hide("phits",true);

      // Bilder anzeigen
      FotoViewer.offset = 0; FotoViewer.anzeige(0);
    }
  },

  //
  // User sucht nach bestimmten Strings
  //
  innerLink: function(v,r,e,s,c) {

    // System ist nicht initialisiert
    if (!FotoViewer.loaded) {
      sT("FotoViewer.innerLink('"+v+"',"+r+",'"+e+"')",250); return;
    }

    // Anzeige lÃ¶schen
    FotoViewer.clearAll(); gE("cis").innerHTML = "Fotograf";

    // Basisdaten setzen
    FotoViewer.suche(true,'match','0');
    FotoViewer.suche(false,'type',r);
    if (c != null) FotoViewer.suche(false,'cross','1');
    else FotoViewer.xincluded = new Array();
    if (e != null) FotoViewer.suche(false,'ext',e);

    // Vorgabe der Sortierung 
    if (s != null) FotoViewer.suche(false,'sort',s);

    // Suche starten
    if (r < 70) FotoViewer.inscreen = false; 
    FotoViewer.xsearch = true;
    FotoViewer.suche(false,'string',v,false);
    FotoViewer.xincluded[FotoViewer.xincluded.length] = r;
    if (r == 14) FotoViewer.xincluded[FotoViewer.xincluded.length] = 9;
  },

  //
  // Existiert ein bestimmter Wert in einem Array
  //
  inArray: function(w,h) {
    for (var i=0;i<h.length;i++) if (h[i]==w) return true;
    return false;
  },

  //
  // Bildinformationen anzeigen anhand des Ã¼bergebenen Arrays
  //
  fillInfo: function(i,d,arr,link) {

    // Daten auslesen
    var t = "";
    for (var j=0;j<arr.length;j++) {
      var e = arr[j];
      if (e.substring(0,1)=='!') t+= e.substring(1);
      else if (e.substring(0,1)=='?') t+= "<font color='#ffff00'>"+e.substring(1)+"</font>";
      else t += FotoViewer.get(i,arr[j]);
    }

    // Daten anzeigen
    gE("display_"+d).innerHTML = t; if (link==null || !link.length) return;
    
    // Text vorgegeben od. kommt er aus dem XML?
    if (link[1].substring(0,1)=='!') t = link[1].substring(1);
    else t = FotoViewer.get(i,link[1]);
    
    // Link erstellen und einbinden
    var l = " [<a href=\"javascript:FotoViewer.innerLink('"+escape(t)+"',"+link[2]+")\">"+link[0]+"</a>";
    
    // weitere VerknÃ¼pfung
    if (FotoViewer.xsearch && link[2] != 21 && !FotoViewer.inArray(link[2],FotoViewer.xincluded)) {
      l+= "/<a href=\"javascript:FotoViewer.innerLink('"+escape(t)+"',"+link[2]+",null,null,true)\">&infin;</a>";
    }
    
    // Daten anzeigen
    gE("display_"+d).innerHTML += l+"]";
  },

  //
  // Verschiedene Toplisten laden
  //
  toplist: function(t,init) {

    // Liste vom Server laden
    if (init) {
      if (!FotoViewer.loaded) {
        sT("FotoViewer.toplist("+t+",true)",1000);
        return;
      }
      if (!t) return;
      var r = FotoViewer.io.fetch(FotoViewer.tpl,false,"/assets/0x02d.php","type="+t,FotoViewer.toplist);
      if (r == null) FotoViewer.io.lasterror(FotoViewer.tpl,true);
      return;
    }

    // Uebertragung abgeschlossen
    if (FotoViewer.io.isfetched(FotoViewer.tpl)) {

      // Sind Fehler aufgetreten?
      var x = FotoViewer.io.getresponse(FotoViewer.tpl);
      if (x==null) return;
      
      // Alten Listeninhalt lÃ¶schen
      var z = gE("toplist"); if (z==null) return;
      FotoViewer.clearTree(z);
      
      /* Topliste aufbauen */
      var b = eB(x,"Entry"); var m = FotoViewer.get(x,"SubMode",true);
      var o = cE("ol"); aC(z,o);
      for (var i=0;i<b.length;i++) {
      
        // Neues Element einfÃ¼gen
        var e = cE("li");
        switch (m) {
          case 1:
          case 3:
          case 4:
          case 5:
            aC(e,cN(FotoViewer.get(b[i],"Name")+", "+FotoViewer.get(b[i],"Count",true)+" Fotos [ "));
            break;
          
          case 2:
            aC(e,cN(FotoViewer.get(b[i],"Name")+", "+FotoViewer.get(b[i],"Count",true)+" Views / Foto [ "));
            break;
        }
        
        // Links einfÃ¼gen
        var a = cE("a"); a.href = "javascript:zeigeFotos("+FotoViewer.get(x,"Mode",true)+","+FotoViewer.get(b[i],"UID",true)+")";
                aC(a,cN("Fotos anzeigen")); 
                aC(e,a); aC(e,cN(" ]")); aC(o,e);
      }
    }  
  },

  //
  // Elementbaum lÃ¶schen
  //
  clearTree: function(z) {
    var e = eB(z,"*"); for (var i=e.length-1;i>=0;i--) e[i].parentNode.removeChild(e[i]); 
  },

  //
  // Elementbaum kopieren
  //
  cloneTree: function(f,t) {
  
    // Originalcontent sichern 
    var d = gE(f); if (d == null) return false;
    var c = gE(t);
    if (c==null) {
      var c = cE("div"); c.id = t;
      c.style.display = "none"; aC(eB(dcm,"body",0),c);
    } else FotoViewer.clearTree(c);
    
    // Content clonen 
    var e = d.getElementsByTagName("*");
    for (var i=0;i<e.length;i++) {
      if (e[i].nodeName != "H1" && e[i].nodeName != "H2" && e[i].nodeName != "FORM" && e[i].nodeName != "P") continue;
      aC(c,e[i].cloneNode(true));
    }
    FotoViewer.clearTree(d); return true;
  },

  //
  // Sortierung setzen und Daten neu anzeigen
  //
  setsort: function() {
    var F = dcm.forms.setsort;
    var s = F.sort.options[F.sort.selectedIndex].value;
    if (s > 0) {
      FotoViewer.clearAll(true); FotoViewer.sortmode = s; 
      FotoViewer.bilderladen(true,true);
    }
  },

  //
  // NÃ¤chste Fotos aus der Datenbank laden
  //
  getnextorprev: function(m) {
  
    // Voransicht lÃ¶schen
    FotoViewer.hide('phits',true); FotoViewer.hide('nhits',true);
    FotoViewer.clearmiddle(); FotoViewer.clearIcons();
    gE("displayinfo").innerHTML = "die nächsten Fotos werden geladen...";
      
    // Alle Icons lÃ¶schen
    for (var i=0;i<FotoViewer.bpage;i++) {
      gE("prv_"+i).src = '/images/0x002.gif';
      gE("click_"+i).innerHTML = " ";
    }
  
    // NÃ¤chste Treffer finden
    FotoViewer.lrandom = false;
    switch (m) {
    
      // vorherige
      case 0:
        FotoViewer.rubrik = 101; FotoViewer.onPage--;
        break;
        
      // nÃ¤chste
      case 1:
        FotoViewer.rubrik = 100; FotoViewer.onPage++;
        break;
    }
    
    // Fotos laden
    var r = FotoViewer.io.fetch(FotoViewer.img,false,"/assets/0x020.php","rubrik="+FotoViewer.rubrik+"&page="+FotoViewer.onPage,FotoViewer.bilderladen); 
    if (r == null) FotoViewer.io.lasterror(FotoViewer.img,true);
  },

  //
  // Bilder laden die auf die Anfrage passen
  //
  bilderladen: function(cb,init,srch) {

    // Bilder laden
    if (init) {
    
      // Rubrik nicht definiert
      if (srch != true && !FotoViewer.rubrik) return;
      
      // Seite noch nicht geladen
      if (!FotoViewer.loaded) {
        sT("FotoViewer.bilderladen("+cb+",true,"+srch+")",500); return;
      }
      
      // Start einer Suche
      if (srch == true) {
        if (FotoViewer.insrch) {
                    alert("Eine Suchanfrage ist noch aktiv. Bitte warten...");
                    return;
        }
        var r = FotoViewer.io.fetch(FotoViewer.src,false,"/assets/0x030.php","rubrik="+FotoViewer.rubrik+FotoViewer.sstring,FotoViewer.resultate);
      } else {
        var r = FotoViewer.io.fetch(FotoViewer.img,false,"/assets/0x020.php","rubrik="+FotoViewer.rubrik+"&album="+FotoViewer.album+FotoViewer.sstring+((FotoViewer.sortmode!=null)?"&sortmode="+FotoViewer.sortmode:""),FotoViewer.bilderladen); 
      }
      if (r == null) {
        FotoViewer.io.lasterror(FotoViewer.img,true);
      } else {
        if (srch == true) {
          FotoViewer.insrch = true; var s = gE("suchbutton");
          if (s) {
            s.src = "/images/0x031.gif";
            s.disabled = true;
          }
        }
        
        // Wartebild anzeigen
        gE("dia").src = "/images/0x034.jpg";
      }
      return;
    }

    // Ãœbertragung abgeschlossen
    if (FotoViewer.io.isfetched(FotoViewer.img)) {

      // Sind Fehler aufgetreten?
      FotoViewer.xml = FotoViewer.io.getresponse(FotoViewer.img);
      if (FotoViewer.xml==null) return;

      // Anzahl der Bilder
      var b = eB(FotoViewer.xml,"Fotos");
      FotoViewer.bcount = b.length;
      if (!FotoViewer.bcount) gE("dia").src = "/images/0x002.gif"; 
      
      // Es gibt mehr als ? Bilder?
      if (b.length > FotoViewer.bpage) {
        gE("nhits").style.display = "inline";
      }

      // Bilder anzeigen
      if (FotoViewer.get(FotoViewer.xml,"OnPage",true)>0)
        gE("phits").style.display = "inline";
      FotoViewer.anzeige((FotoViewer.get(FotoViewer.xml,"ShowLast",true))?b.length-FotoViewer.bpage:0);
    }
  },

  //
  // Suchresultate anzeigen
  //
  resultate: function() {
  
    // Ãœbertragung abgeschlossen
    if (FotoViewer.io.isfetched(FotoViewer.src)) {
  
      // Sind Fehler aufgetreten?
      FotoViewer.xml = FotoViewer.io.getresponse(FotoViewer.src);

      // Suche ist abgeschlossen
      FotoViewer.insrch = false;
      var s = gE("suchbutton");
      if (s) {
        s.src = "/images/0x02b.gif";
        s.disabled = false;
      }
      if (FotoViewer.xml==null) return;
  
      // Anzahl der Bilder
      var b = eB(FotoViewer.xml,"Fotos");
      FotoViewer.bcount = b.length;
        
      // Es gibt mehr als ? Bilder?
      if (b.length > FotoViewer.bpage) gE("nhits").style.display = "inline";      
  
      // Bilder anzeigen
      FotoViewer.anzeige(0);
    }
  },

  //
  // Bilder anzeigen die gefunden wurden
  //
  anzeige: function(offset) {

    // Keine Daten vorhanden!
    FotoViewer.hide("displayinfo",true); FotoViewer.hide("linkinfo",true);
    if (FotoViewer.xml==null) return;

    // Offset setzen
    FotoViewer.offset = offset;    

    // Die ersten ? Bilder anzeigen
    var b = eB(FotoViewer.xml,"Fotos");
    for (var i=0;i<FotoViewer.bpage;i++) {
      if (i==b.length) break;
      gE("prv_"+i).src = "/assets/0x029.php?a="+FotoViewer.get(b[i+offset],"IATA")+"&o="+FotoViewer.get(b[i+offset],"ICAO")+"&p="+FotoViewer.get(b[i+offset],"APID",true)+"&r="+FotoViewer.get(b[i+offset],"Registration")+"&f="+FotoViewer.get(b[i+offset],"Image")+"&s="+FotoViewer.get(b[i+offset],"InScreen",true)+"&v=90";
      gE("prv_"+i).title = FotoViewer.get(b[i+offset],"Airline")+", "+FotoViewer.get(b[i+offset],"Aircraft")+" ["+FotoViewer.get(b[i+offset],"Registration")+"]";
      
            gE("click_"+i).innerHTML = FotoViewer.get(b[i+offset],"Views",true)+"x angezeigt";
          }

    // Kommen weitere Bilder vom Server?
    var h = FotoViewer.get(FotoViewer.xml,"Hits",true);
    FotoViewer.moreav = (FotoViewer.get(FotoViewer.xml,"MoreHits",true))?true:false;

    // Rubrikname wird von der Suche angegeben
    var a = gE("pt");
    if (a!=null) {
      var r = FotoViewer.get(FotoViewer.xml,"Rubrikname");
      if (r.length) {
        a.innerHTML = r;
    
        // Trefferanzahl zeigen
        if (h != -1) {
          a.innerHTML += " / "+h+((1<2)?" Treffer":" Hits");
          FotoViewer.lastHits = h;
        }
      
        // BenÃ¶tigte Zeit angeben
        var u = FotoViewer.get(FotoViewer.xml,"SQLTimeUsed",false);
        if (u > 0) a.innerHTML += " ("+u+")";
      }
    }
    
    // Mindestens ein Foto wurde gefunden
    if (!b.length) {
      FotoViewer.clearmiddle(); return;
    }
    FotoViewer.iconClear((FotoViewer.lrandom)?parseInt((Math.random() * ((b.length<FotoViewer.bpage)?b.length:FotoViewer.bpage))):0);
    FotoViewer.displayinfo(offset);
  },

  //
  // Linkinformationen anzeigen
  //
  linkinfo: function(id) {
    var d = gE("linkinfo");
        d.innerHTML = "Foto Direktlink - http://www.fysb.de/lookup.php?id="+id;
        d.style.display = "block";
  },

  //
  // Welche Fotos sieht der Nutzer?
  //
  displayinfo: function(o) {
  
    // Infos anzeigen
    if (FotoViewer.xml==null) return;
    var l = FotoViewer.get(FotoViewer.xml,"Limit",true);
    var h = FotoViewer.get(FotoViewer.xml,"Hits",true);
    if (h==-2) h = FotoViewer.lastHits;
    var f = parseInt(o+1+l*FotoViewer.get(FotoViewer.xml,"OnPage",true));
    var t = (f+FotoViewer.bpage-1>h)?h:f+FotoViewer.bpage-1;
  
    // Info anzeigen
    gE("displayinfo").innerHTML = "angezeigt werden Fotos "+f+((1<2)?" bis ":" to ")+t+((1<2)?" von insgesamt ":" of total ")+h;
    FotoViewer.hide("displayinfo",false);
  },

  //
  // NÃ¤chste od. vorherige Bilder anzeigen
  //
  scroll: function(t) {

    // ScrollType
    FotoViewer.clearmiddle();
    switch (t) {
    
      /* Eine Seite zurÃ¼ck */
      case 'prev':
        var o = FotoViewer.offset - FotoViewer.bpage;
        if (o <= 0) {
        
          /* Sind wir auf Seite > 1? */
          if (FotoViewer.get(FotoViewer.xml,"OnPage",true)>0) {

            // vorherige Fotos laden
            FotoViewer.getnextorprev(0); return;          
          }
        
          o = 0; 
          FotoViewer.hide('phits',true);
          FotoViewer.hide('scrolldown',true);
        }
        if (o+FotoViewer.bpage < FotoViewer.bcount) {
          gE("nhits").style.display = "inline";
          gE("scrollup").style.display = "inline";
        }
        
        /* Fotos anzeigen */
        FotoViewer.anzeige(o);
      break;
      
      /* Eine Seite weiter */
      case 'next':
        var o = FotoViewer.offset + FotoViewer.bpage;
        if (o >= FotoViewer.bcount-FotoViewer.bpage) {

          // Gibts es mehr Daten in der DB? */
          if (o > FotoViewer.bcount-FotoViewer.bpage && FotoViewer.moreav) {
          
            // weitere Fotos laden
            FotoViewer.getnextorprev(1); return;
          
          } else {
            o = FotoViewer.bcount - FotoViewer.bpage;
            if (!FotoViewer.moreav) {
              FotoViewer.hide('nhits',true);
              FotoViewer.hide('scrollup',true);
            }
          }
        }
        if (o>0) {
          gE("phits").style.display = "inline";
          gE("scrolldown").style.display = "inline";
        }
        
        /* Fotos anzeigen */        
        FotoViewer.anzeige(o);
      break;
    }

    // Ein Bild wurde gewÃ¤hlt
    if (FotoViewer.curimg != -1) FotoViewer.fotopreview();
  },

  //
  // Element zeigen od. verstecken
  //
  hide: function(e,t) {
    var d = gE(e); 
    if (d) d.style.display = (t)?"none":"block";
  },

  // 
  // Event programmieren
  //
  eH: function(obj, evType, fn, useCapture) {

    // Objekt existiert nicht
    if (!obj) {
      alert("Assign fail for "+evType); return;
    }
    if (obj.addEventListener) {
      obj.addEventListener(evType, fn, useCapture);
      return true;
    } else if (obj.attachEvent) {
      var r = obj.attachEvent('on'+evType,fn);
      return r;
    } else {
      obj['on'+evType] = fn;
    }
  },

  //
  // Klasse zuweisen (Crossbrowser Version)
  //
  setclass: function(o, c) { if (FotoViewer.ismsie) o.setAttribute("className",c); else o.setAttribute("class",c); },

  //
  // Short wrapper
  //
  get: function(x,s,l) { 
    try { 
      var r = eB(x,s); 
    } catch (e) { 
      if (l==null) return ""; 
      return (l==true)?0:0.0;
    }
    if ((r.length) && (r[0].firstChild)) {
      var b = r[0].firstChild.nodeValue; 
      if (l==null) return b;
      return (l)?parseInt(b):parseFloat(b);
    } else { return (l!=null)?0:""; }
  }
};

// System initialisieren
FotoViewer.eH(window,'load',FotoViewer.load,false);

