function zoom()
{
    //# *bei Bedarf* anpassen: 
    //# ============================================================================================================== 

    var outer_div_id = 'content';

    var thumbnail_prefix = 'th_';                            //# Name der Thumbnails darf sich von jenem der grossen 
                                                             //# Bilder nur durch dieses Prefix umterscheiden, z.B: 
                                                             //# Thumbnail: 'th_name.jpg', grosses Bild: 'name.jpg'

    var timer_steps = 2;                                     //# positive Ganzzahl (Sekunden)

    var prelo = 0;                                           //# alle grossen Bilder zu einer Seite vorladen? 

    var path_img_dir = 'media/img/content/';                 //# von der HTML-Datei aus relativer Pfad zum Verzeichnis 
                                                             //# unter dem die Bilder (ein Verzeichnis pro Bilder eines 
                                                             //# Kataloges) abgelegt sind. 
    var path_layout_img_dir = 'media/img/layout/';
    var path_img_dir_icons = path_layout_img_dir + 'icons/'; 

    var hover_extension = '_over';
    var img_file_type = 'gif';


    //# fuer die Icons der Steuerung: 
    var bcImgName = 'close_100x16.gif';
    var bfImgName = 'fwd_16hoch.gif';
    var bbImgName = 'bck_16hoch.gif';
    var blindImgName = 'blind50x16.gif';

    var bcImgSrc = path_img_dir_icons + bcImgName;
    var bfImgSrc = path_img_dir_icons + bfImgName;
    var bbImgSrc = path_img_dir_icons + bbImgName;
    var blindImgName = path_img_dir_icons + blindImgName;

    var bcImgId = 'bc';
    var bfImgId = 'bf';
    var bbImgId = 'bb';



    //# Ab hier nichts aendern: 
    //# ==============================================================================================================

    //# Zu kurze Zeitangaben fuer 'timer_steps' aufrunden: 
    timer_steps = timer_steps <= 1 ? 2000 : timer_steps * 1000;


    //# Basis-html-Elemente initialisieren: 
    this.big = document.createElement('div');     //# aeusserer div fuer die Slideshow 
    this.big.id = 'big';
    this.big.className = 'nodisplay';
    this.bigpic = document.createElement('img');  //# fuer das vergroesserte Bild 
    this.bigpic.id = 'bigpic';

    this.intface = document.createElement('div'); //# fuer die Steuerung 
    this.intface.id = 'intface';


    //# Arrays und Variablen initialisieren: 
    this.img_names = new Array();                 //# Beschrieben in 'atags', benoetigt in 'bw', fuer die 
                                                  //# Namen zu vergroessernder Bilder zur aktuellen Seite 

    this.img_formats = new Array();

    this.bu = new Array();                        //# Button-Eigenschaften fuer die Steuerung 
    this.bucount = 0;                             //# Button-Anzahl wie unten in 'atags' vorgegeben  

    this.numm = new Number();                     //# die an 'showit' uebergebene Link-Nummer Nummer, 
                                                  //# beschrieben in 'showit', benoetigt in 'bw'                                       

    this.verzeichnis = new String();              //# Verzeichnisname unterhalb von 'path_img_dir' 

    this.insrt_txt = new Array();                 //# Inhalt des img-alt-Tags wird zur Bildunterschrift 



    this.atags = function()
    {

        var a_tags = document.getElementsByTagName('a');

        //# Opera7mac versteht 'a_tags = document.getElementById('odi').get
        //# ElementsByTagName('a');' nicht, aber der Zaehler des ersten 
        //# Verweises soll auf jeden Fall Null sein bzw. es interessieren nur 
        //# diejenigen Verweise *innerhalb* des document.getElementById('odi'), 
        //# daher werden hier die ausserhalb vorkommenden aussortiert: 
        var a_tags_tmp = new Array();
        var aCount = 0;

        for(var i = 0; i < a_tags.length; i++)
            if((a_tags[i].className == 'z') && (a_tags_tmp[aCount] = a_tags[i]))
                aCount++;

        a_tags = a_tags_tmp;



        //# Name des Verzeichnises der grossen Bilder ermitteln: 
        //# (*alle* (pro Seite) liegen in *einem* Verzeichnis, muss also 
        //# nur einmal abgefragt werden. Daher ausserhalb der Schleife.) 
        if(a_tags[0].childNodes[0].src)
            this.verzeichnis = a_tags[0].childNodes[0].src.split("/")[a_tags[0].childNodes[0].src.split("/").length - 2] + '/';



        //# Behandlung jedes einzelnen Verweises: 
        for(var ii = 0; ii < a_tags.length; ii++)
            if(a_tags[ii].className == 'z' && a_tags[ii].childNodes[0].nodeName.toLowerCase() == 'img' && a_tags[ii].childNodes[0].src)
            {
                //# Namen der grossen Bilder aus der 'src'-Angabe ziehen, in 'img_names' schreiben: 
                this.img_names[ii] = a_tags[ii].childNodes[0].src.substr(a_tags[ii].childNodes[0].src.lastIndexOf("/") + 1).substr(thumbnail_prefix.length);

                //# Quer- oder Hochformat bestimmen, in 'img_formats' schreiben: 
                if(a_tags[ii].childNodes[0].width < a_tags[ii].childNodes[0].height)
                    this.img_formats[ii] = 'onend';
                else this.img_formats[ii] = 'across';



                //# Eintrag im 'alt'-Tag wird zur Bildunterschrift: 
                if(a_tags[ii].childNodes[0].alt && a_tags[ii].childNodes[0].alt.value != '')
                    this.insrt_txt[ii] = a_tags[ii].childNodes[0].alt;
                //# hizugefuegt am 2007-05-14 (damit, wenn ein Bild mit leerem 
                //# alt-Tag vergroessert werden soll, in der Bildunterschrift 
                //# der Vergroesserung beim ie nicht 'undefined' steht). 
                //# Auch das mal wieder eine reine ie-Sache: Bisher habe ich 
                //# in den alt-Tag einfach ein Leerzeichen geschrieben. Das 
                //# checken eigentlich alle Browser, dass dann bei mouseover 
                //# ueber das Bild keine Textbox mit einem Leerzeichen 
                //# angezeigt werden soll, sondern keine, weil sie den alt-
                //# Tag als leer erkennen. ie gibt ihn als alt-Text aber aus, 
                //# zeigt also eine Textbox mit einem Leerzeichen als Inhalt. 
                else
                    this.insrt_txt[ii] = '';



                if(prelo)
                {
                    var imgtmp = new Image();
                    imgtmp.src = path_img_dir + this.verzeichnis + this.img_names[ii];
                }


                a_tags[ii].nr = ii;
                a_tags[ii].onclick = function(){zoomit.showit(this.nr); return false;};
            }



        //# Html-Elemente in die Seitenstruktur einbinden: 
        document.getElementById(outer_div_id).appendChild(this.big);
        this.big.appendChild(this.bigpic);
        document.getElementById(outer_div_id).appendChild(this.intface);



        //# Buttons fuer die Steuerung anlegen: 
        if(typeof bcImgSrc != 'undefined' && bcImgSrc != '') // close
        {
            this.bu[this.bucount] = new Array(bcImgSrc, bcImgId, function(){zoomit.close(); return false;});
            this.bucount++;
        }

        //# Vor- und zurueck-Buttons nur anzeigen, wenn die zugrunde liegende 
        //# Seite *mehr als ein Bild* enthaelt. 
        if(this.img_names.length > 1)
        {
            if(typeof bfImgSrc != 'undefined' && bfImgSrc != '') // forward 
            {
                this.bu[this.bucount] = new Array(bfImgSrc, bfImgId, function(){zoomit.bw(1); return false;});
                this.bucount++;
            }
    
            if(typeof bbImgSrc != 'undefined' && bbImgSrc != '') // back 
            {
                this.bu[this.bucount] = new Array(bbImgSrc, bbImgId, function(){zoomit.bw(); return false;});
                this.bucount++;
            }
        }

        for(var h = 0; h <= this.bucount - 1; h++) {

            var but = document.createElement('a');
            var icon = document.createElement('img');
            icon.src = this.bu[h][0];

            document.getElementById(this.intface.id).appendChild(but);
            but.appendChild(icon);

            but.id = this.bu[h][1];
            but.onclick = this.bu[h][2];
            but.onmouseover = function() {this.firstChild.src = this.firstChild.src.substring(0, this.firstChild.src.lastIndexOf('.')) + hover_extension + '.' + img_file_type;};
            but.onmouseout = function() {this.firstChild.src = this.firstChild.src.slice(0, this.firstChild.src.lastIndexOf(hover_extension)) + '.' + img_file_type;};
            //# Wenn der close-Button angeklickt wird, wird mit vielen Browsern 
            //# kein mouseout getriggert, siehe hierzu den Kommentar und die 
            //# Loesung in 'showit'. 
        }
        //# ENDE Buttons fuer die Steuerung anlegen 


        //# Bildunterschrift: 
        this.insrt = document.createElement('p');
        this.insrt.id = 'insrt';
        document.getElementById(this.intface.id).appendChild(this.insrt);

        this.insrtText = document.createTextNode('');
        document.getElementById(this.insrt.id).appendChild(this.insrtText);
    }





    this.showit = function(num)
    {

        document.getElementById('bc').firstChild.src = bcImgSrc;
        //alert(document.getElementById('bc').firstChild.src);
        //# Im Normalfall wird in 'atags' in der for-Schleife unter 'Buttons 
        //# fuer die Steuerung anlegen' bei Button-mouseover der String '_over' 
        //# an den Bildnamen (bzw. die src) angehaengt und bei einem mouseout 
        //# wieder entfernt. Wenn auf den close-Button geklickt wird, wird der 
        //# div#big mitsamt der Buttons ausgeblendet und onmouseout wird fuer 
        //# den close-button nicht getriggert, der Teilstring 'over' wird also 
        //# nicht aus dem Bildnamen gesliced. . 
        
        //# Mit Safari laesst sich dann gut beobachten, dass pro Ablauf 
        //# "Vergroesserung offen > geschlossen > wieder offen", wenn die 
        //# Seite zwischenzeitlich nicht nachgeladen wurde, dem Bildnamen pro 
        //# oeffnen/schliessen-Ablauf ein weiteres '_over' an den Dateinamen 
        //# angehaengt wird. Safari findet das Bild dann nicht mehr. 
        //# (Bei Opera z.B. wird dieses mouseout trotzden getriggert (getestet 
        //# per alert), da gibt es dieses Problem nicht. Und Firefox triggert 
        //# der mouseout-event zwar nicht (es kommt keine alert-Dialogbox zum 
        //# Vorschein, wenn die mouseout-Funktion eine solche ausgeben soll), 
        //# haengt diesen 'over' Teilstring auch immer wieder und wieder an 
        //# den Dateinamen, verliert aber den eigentlichen Bildpfad dadurch 
        //# nicht (vielleicht zeigt Ffox, weil er ja fehlende Bilder nicht mit 
        //# einem "Bild-fehlt-Icon" anzeigt, statt dieses Icons das letzte an 
        //# dieser Stelle *ladbare* Bild an ?!? Das waere eine moegliche 
        //# Erklaerung). 
        
        //# Urspruenglich hatte ich obige Zeile in 'atags' unter 'Buttons fuer 
        //# die Steuerung anlegen' in die Funktion fuer den close-Button 
        //# eingebaut. 
        
        //# Damit war das Problem mit Safari nicht mehr zu beobachten, ie5mac 
        //# allerdings hatte damit ein neues Problem: 
        //# offen" nach dem Zyklus "Vergroesserung offen > geschlossen > wieder 
        //# war zuerst noch alles wie gewollt, bei einem mouseover zeigt er 
        //# aber das over-bild nicht an, blieb beim normal-Bild und bei einem 
        //# dann folgenden mouseout verlor er den Bildnamen komplett, der 
        //# lautete dann 'close_16hoch.gi_over.gif'. 

        //# So wie jetzt, mit jedem 'showit' den Bildnamen neu zu schreiben, 
        //# scheint auch ie5mac klar zu kommen. 

        //# Start-Bildnummer, gebraucht in 'bw' 
        this.numm = num; 

        if(document.getElementById(this.big.id) && document.getElementById(this.bigpic.id))
        {

            document.getElementById(this.bigpic.id).src = path_img_dir + this.verzeichnis + this.img_names[this.numm];

            //# Quer- oder Hochformat?
            if(this.img_formats[this.numm] == 'across')
                document.getElementById(this.big.id).className = 'visAcross';
            else
                document.getElementById(this.big.id).className = 'visEnd';

            document.getElementById(this.intface.id).className = 'vis';
            document.getElementsByTagName('body')[0].className= 'nobg';
            document.getElementById(this.insrt.id).firstChild.nodeValue = zoomit.insrt_txt[this.numm];
        }

        else
            alert('Ihr Browser kann diese Funktion leider nicht umsetzen.');
    }




    this.bw = function(dir)
    {
        this.numm = (dir) ? ((this.numm == this.img_names.length - 1) ? 0 : ++this.numm) : ((this.numm == 0) ? (this.img_names.length - 1) : --this.numm);

        document.getElementById(this.bigpic.id).src = path_img_dir + this.verzeichnis + this.img_names[this.numm];
        document.getElementById(this.insrt.id).firstChild.nodeValue = zoomit.insrt_txt[this.numm];

        //# 'angeklickt'-Farbe des Button-Texts zb im Firefox weg bekommen, 
        //# wenn schnell mehrmals nacheinander auf den gleichen Link geklickt 
        //# wird. Hilft Firefox. Bei ie5 (mac) z.B. aendert es nichts.  

        //document.getElementById(this.big.id).focus();
        //#--> erzeugt (nicht immer, je nach (bisher nicht durchschauter 
        //#    Klickabfolge)) Fehlermeldungen und Scriptabbruch mit ie6 
    }




    this.close = function()
    {
        document.getElementById(this.big.id).className = 'nodisplay';
        document.getElementById(this.intface.id).className = '';
        document.getElementsByTagName('body')[0].className= '';
        document.getElementById(this.bigpic.id).src= '';
    }

    //window.onload = this.atags;
    //# Da es hier noch eine weitere 'onload'-Funtionalitaet (Navigation) 
    //# gibt und ich wegen ie5 (mac) keine Eventlistener verwenden will 
    //# (kann), gibt es eine zentrale 'onclick_initialiser.js', die alles,
    //# was 'onload' geschehen soll, zusammenfasst. 
}


if(document.getElementById && document.createTextNode)
    zoomit = new zoom();

