function lightbox(nazevObjektu, rootWebu) {
  var own = this;
  own.dataFotografii = new Array();
  own.nazevObjektu = nazevObjektu;
  own.pocetNactenychMiniatur = 0;
  own.indexAktualniFotografie = null;
  own.posuvnik = null;
  own.miniaturyNacteny = false;
  own.slideshowZapnuto = false;
  own.probihaScrolovani = false; //stavova promenna kvuli zamezeni nasobneho provadeni eventu
  own.htmlKoren = null;
  own.rootWebu = rootWebu;
  own.htmlStruktura =
    '<div id="'+own.nazevObjektu+'">'+
      '<div id="pozadi"></div>'+
      '<div id="prohlizec">'+
        '<div id="kontejner">'+
          '<div id="telo">'+
            '<div id="levaCast">'+
              '<div id="obalMiniatur">'+
                '<table cellspacing="0"></table>'+
                '<div id="posuvnik"></div>'+
                '<div class="ruseniObtekani"></div>'+
              '</div>'+
            '</div>'+
            '<div id="pravaCast">'+
              '<div id="tlacitkoZavrit">'+
                '<a title="Zavřít">&nbsp;</a>'+
              '</div>'+
              '<div id="fotografie">'+
                '<div id="zadniFoto"></div>'+
                '<div id="predniFoto"></div>'+
                '<div id="loader"><img src="'+own.rootWebu+'desimg/lightbox/loader.gif" alt="Loading ..." title="Loading ..." width="31" height="31" /></div>'+
              '</div>'+
              '<div id="ovladaniAPopis">'+
                '<div id="tlacitkoPredchozi"></div>'+
                '<div id="tlacitkoDalsi"></div>'+
                '<div id="popis">'+
                  '<h2></h2>'+
                '</div>'+
              '</div>'+
              '<div id="slideshow">'+
                '<div id="tlacitko"></div>'+
                '<div id="indikator">&nbsp;</div>'+
                '<div class="ruseniObtekani"></div>'+
              '</div>'+
            '</div>'+
            '<div class="ruseniObtekani"></div>'+
          '</div>'+
        '</div>'+
      '</div>'+
    '</div>';
  
  jQuery.fx.off = false; //true - vypnuti vsech animaci v jQuery - nebude fungovat slideshow
  
  //parametry animaci
  own.casEfektuZtmaveni = 200; //ms
  own.casEfektuZesvetleni = 200; //ms
  own.urovenPruhlednosti = 0.5; //0 - 1
  own.casEfektuRozbaleni = 200; //ms
  own.casEfektuZbaleni = 200; //ms
  own.casProlnutiFotografii = 400; //ms
  own.casSnimkuSlideshow = 10000; //ms
  own.maxSirkaIndikatoru = 570; //px - odpovida css
  
  //fce pro prijimani dat
  own.ulozDataFotografie = function(index, pNazev, pPopis, pMiniaturaSrc, pOriginalSrc) {
    //preload miniatur
    var img = new Image();
    img.src = pMiniaturaSrc.replace(/&amp;/g, '&');
    //ulozeni dat
    own.dataFotografii[index] = {nazev:pNazev,
                                 popis:pPopis,
                                 miniaturaSrc:pMiniaturaSrc,
                                 originalSrc:pOriginalSrc};
  }

  //fce pro napojeni fotografii do lightboxu
  own.nahradAtributOnclick = function() {
    var i = 0;
    for (i = 0; i < own.dataFotografii.length; i++) {
      var odkaz = $('[rel="'+own.nazevObjektu+':'+i+'"]');
      odkaz.unbind('click');
      odkaz.removeAttr('onclick');
      odkaz.removeProp('onclick'); //IE9
      odkaz.bind('click', function() {
        own.zobrazLightbox($(this).attr('rel'));
        return false;
      });
    }
  }
  
  own.aktualizujOznaceniAktivniMiniatury = function() {
    if (own.htmlKoren != null) {
      $('#'+own.nazevObjektu+' TD').removeClass('aktivni');
      var aktivniMiniatura = $('#'+own.nazevObjektu+' #miniatura_'+own.indexAktualniFotografie);
      aktivniMiniatura.addClass('aktivni');
      //spocteni nastaveni pozice tak, aby aktivni miniatura byla vzdy uprosred
      var obalMiniatur = own.htmlKoren.find('#obalMiniatur');
      var poziceMiniatur = parseInt(obalMiniatur.find('TABLE').css('top'));
      var posun = (aktivniMiniatura.offset().top - obalMiniatur.offset().top) + (aktivniMiniatura.innerHeight() / 2) - (obalMiniatur.innerHeight() / 2);
      own.posuvnik.nastavPoziciObsahu(Math.round(Math.abs(poziceMiniatur) + posun));
    }
  }
  
  own.spustitOdpocetSlideshow = function(index) {
    var indikator = own.htmlKoren.find('#slideshow #indikator');
    indikator.css('width', '0px');
    indikator.show(0);
    indikator.animate({width: own.maxSirkaIndikatoru}, own.casSnimkuSlideshow, 'linear', function() {
      own.zmenHlavniFotografii(index);
    });
  }
  
  own.playSlideshow = function(index) {
    own.slideshowZapnuto = true;
    own.zmenHlavniFotografii(index);
  }
  
  own.stopSlideshow = function() {
    var indikator = own.htmlKoren.find('#slideshow #indikator');
    indikator.stop();
    indikator.hide(0);
    own.slideshowZapnuto = false;
    //zatimco own.playSlideshow volá zmenHlavniFotografii(), která aktualizuje tlačítka, tady si to tlačítko musíme aktualizovat sami
    var indexDalsi = parseInt(own.indexAktualniFotografie)+1;
    if (indexDalsi >= own.dataFotografii.length)
      indexDalsi = 0;
    own.zobrazTlacitkoPlaySlideshow(indexDalsi);
  }

  own.zobrazTlacitkoPlaySlideshow = function(index) {
    if (index < own.dataFotografii.length) {
      var tlacitkoSlideshow = own.htmlKoren.find('#slideshow #tlacitko');
      tlacitkoSlideshow.html('<a rel="'+index+'" title="'+own.dataFotografii[index]['nazev']+'" class="play">play &gt;&gt;</a>');
      tlacitkoSlideshow.children('A').bind('click', function(event) {
        event = awm_checkEvent(event);
        awm_stopBubbling(event);
        own.playSlideshow($(this).attr('rel'));
      });
    }
  }
  
  own.zobrazTlacitkoStopSlideshow = function() {
    var tlacitkoSlideshow = own.htmlKoren.find('#slideshow #tlacitko');
    tlacitkoSlideshow.html('<a title="Stop" class="stop">Stop ||</a>');
    tlacitkoSlideshow.children('A').bind('click', function(event) {
      event = awm_checkEvent(event);
      awm_stopBubbling(event);
      own.stopSlideshow();
    });
  }

  own.aktualizujPopisyATlacitka = function(index) {
    if (index < own.dataFotografii.length) {
      var ovladani = own.htmlKoren.find('#ovladaniAPopis');
      //tlacitko predchozi
      var tlacitkoPredchozi = ovladani.find('#tlacitkoPredchozi');
      tlacitkoPredchozi.children('A').unbind('click');
      tlacitkoPredchozi.children('A').detach(); //detach úplně zruší element A
      if (index > 0) {
        var indexPredchozi = parseInt(index)-1;
        tlacitkoPredchozi.html('<a rel="'+indexPredchozi+'" title="'+own.dataFotografii[indexPredchozi]['nazev']+'">&nbsp;</a>');
        tlacitkoPredchozi.children('A').bind('click', function(event) {
          event = awm_checkEvent(event);
          awm_stopBubbling(event);
          if (own.slideshowZapnuto)
            own.stopSlideshow();
          own.zmenHlavniFotografii($(this).attr('rel'));
        });
      }
      //popisy
      ovladani.find('H2').html(own.dataFotografii[index]['nazev']);
      //tlacitko dalsi
      var tlacitkoDalsi = ovladani.find('#tlacitkoDalsi');
      tlacitkoDalsi.children('A').unbind('click');
      tlacitkoDalsi.children('A').detach(); 
      if (index < (own.dataFotografii.length - 1)) {
        var indexDalsi = parseInt(index)+1;
        tlacitkoDalsi.html('<a rel="'+indexDalsi+'" title="'+own.dataFotografii[indexDalsi]['nazev']+'">&nbsp;</a>');
        tlacitkoDalsi.children('A').bind('click', function(event) {
          event = awm_checkEvent(event);
          awm_stopBubbling(event);
          if (own.slideshowZapnuto)
            own.stopSlideshow();
          own.zmenHlavniFotografii($(this).attr('rel'));
        });
      }
      //slideshow
      if (own.slideshowZapnuto)
        own.zobrazTlacitkoStopSlideshow();
      else {
        var indexDalsi = parseInt(index)+1;
        if (indexDalsi >= own.dataFotografii.length)
          indexDalsi = 0;
        own.zobrazTlacitkoPlaySlideshow(indexDalsi);
        own.htmlKoren.find('#slideshow #indikator').hide(0);
      }
    }
  }
  
  //zobrazeni velke fotografie
  own.zmenHlavniFotografii = function(index) {
    index = parseInt(index); //ochrana proti pretypovani
    if ((index != own.indexAktualniFotografie) && (index < own.dataFotografii.length) && (index >= 0)) {
      var bunkaFotografie = $('#'+own.nazevObjektu+' #fotografie');
      var predniFoto = bunkaFotografie.find('#predniFoto');
      var zadniFoto = bunkaFotografie.find('#zadniFoto');
      var loader = bunkaFotografie.find('#loader');
      loader.show(0);
      var img = new Image();
      if (predniFoto.css('backgroundImage') != 'none') {
        zadniFoto.css('backgroundImage', predniFoto.css('backgroundImage'));
        zadniFoto.show(0);
      }
      predniFoto.fadeOut(0);
      img.onload = function() {
        own.indexAktualniFotografie = index;
        loader.hide(0);
        predniFoto.fadeOut(0); //pro jistotu, občas zlobilo
        predniFoto.css('backgroundImage', 'url('+own.dataFotografii[own.indexAktualniFotografie]['originalSrc'].replace(/&amp;/g, '&')+')');
        predniFoto.fadeIn(own.casProlnutiFotografii, function() {  //běží paralelně s fadeOut - každá má své vlákno
          if (own.miniaturyNacteny)
            own.aktualizujOznaceniAktivniMiniatury();
          if (own.htmlKoren != null)
            own.aktualizujPopisyATlacitka(own.indexAktualniFotografie); 
          if (own.slideshowZapnuto) {
            var indexDalsi = own.indexAktualniFotografie + 1;
            if (indexDalsi >= own.dataFotografii.length)
              indexDalsi = 0;
            own.spustitOdpocetSlideshow(indexDalsi);
          }
          if (own.probihaScrolovani)
            own.probihaScrolovani = false;
        });
        zadniFoto.fadeOut(own.casProlnutiFotografii);
      };
      img.src = own.dataFotografii[index]['originalSrc'].replace(/&amp;/g, '&'); //preload
    }
  }
  
  //pri vytvoreni scrollbaru se pocita jeho velikost, tato fce zajisti, ze se vytvori az po nacteni vsech miniatur
  own.vytvorScrollbar = function() {
    own.pocetNactenychMiniatur += 1;
    if (   own.pocetNactenychMiniatur >= own.dataFotografii.length
        && own.posuvnik == null
        && own.htmlKoren != null) {
      var obal = own.htmlKoren.find('#obalMiniatur');
      var obsah = obal.find('TABLE');
      own.posuvnik = new scrollBar(obal, obsah, obal.find('#posuvnik'), own.rootWebu);
      own.miniaturyNacteny = true;
    }
  }
  
  own.naplnMiniatury = function(index) {
    var i = 0;
    var trida = '';
    var obal = own.htmlKoren.find('#obalMiniatur');
    var obsah = obal.find('TABLE');

    for (i = 0; i < own.dataFotografii.length; i++) {
      if (index == i)
        trida = 'aktivni';
      else
        trida = '';
      var idMiniatura = 'miniatura_'+i;
      obsah.append('<tr>'+
                     '<td'+(trida == '' ? '' : ' class="aktivni"')+' id="'+idMiniatura+'">'+
                       '<a rel="'+i+'" title="'+own.dataFotografii[i]['nazev']+'">'+
                         '<img src="'+own.dataFotografii[i]['miniaturaSrc']+'" alt="'+own.dataFotografii[i]['nazev']+'" title="'+own.dataFotografii[i]['nazev']+'" />'+
                       '</a>'+
                     '</td>'+
                   '</tr>');
      $('#'+own.nazevObjektu+' #'+idMiniatura+' A').bind('click', function(event) {
        event = awm_checkEvent(event);
        awm_stopBubbling(event);
        if (own.slideshowZapnuto)
          own.stopSlideshow();
        own.zmenHlavniFotografii($(this).attr('rel'));
      });
      $('#'+own.nazevObjektu+' #'+idMiniatura+' IMG').bind('load', function() {
        own.vytvorScrollbar();
        $(this).unbind('load');
      });
    }
  }
  
  own.vstupZKlavesnice = function(event) {
    var kodKlavesy = ('which' in event) ? event.which : event.keyCode;
    switch (kodKlavesy) {
      case 27: //ESC
        own.skryjLightbox();
        awm_stopBubbling(event);
        break;
      case 37: //sipka vlevo
      case 38: //sipka nahoru
        if (own.slideshowZapnuto)
          own.stopSlideshow();
        own.zmenHlavniFotografii(own.indexAktualniFotografie-1);
        awm_stopBubbling(event);
        break;
      case 39: //sipka vpravo
      case 40: //sipka dolu
        if (own.slideshowZapnuto)
          own.stopSlideshow();
        own.zmenHlavniFotografii(own.indexAktualniFotografie+1);
        awm_stopBubbling(event);
        break;
    }
  }
  
  own.deltaPosunu = function(event) {
    var delta = 0;
    if (event.detail) // FF
      delta = -event.detail / 3; //radky
    else if (event.wheelDelta) // ostatni prohlizece
      delta = event.wheelDelta / 40; //stupne
    return delta;
  }
  //obsluha eventu "scroll"
  own.scroll = function(event) {
    event = awm_checkEvent(event);
    awm_stopBubbling(event);
    if (own.probihaScrolovani == false) {
      if (own.slideshowZapnuto)
        own.stopSlideshow();
      var delta = own.deltaPosunu(event);
      if (delta > 0) { //scrolovani nahoru
        var index = own.indexAktualniFotografie-1;
        if (index >= 0) {
          own.probihaScrolovani = true;
          own.zmenHlavniFotografii(index);
        }
      }
      else if (delta < 0) { //scrolovani dolu
        var index = own.indexAktualniFotografie+1;
        if (index < own.dataFotografii.length) {
          own.probihaScrolovani = true;
          own.zmenHlavniFotografii(index);
        }
      }
    }
  }

  own.naveseniUdalostiOvladani = function() {
    var kontejner = own.htmlKoren.find('#kontejner');
    //uprava velikosti LB vuci oknu
    $(window).bind('resize', function() {
      if (own.htmlKoren != null)
        own.htmlKoren.height($(window).height());
    });
    //click mimo hlavni prohlizec - skryti LB
    own.htmlKoren.find('#prohlizec').bind('click', function(event) {
      event = awm_checkEvent(event);
      awm_stopBubbling(event);
      own.skryjLightbox();
    });
    //zastaveni probublavani eventu click uvnitr LB
    kontejner.bind('click', function(event) {
      event = awm_checkEvent(event);
      awm_stopBubbling(event);
      if (own.slideshowZapnuto)
        own.stopSlideshow();
      own.zmenHlavniFotografii(parseInt(own.indexAktualniFotografie)+1);
    });
    //zastaveni probublavani eventu click uvnitr miniatur
    own.htmlKoren.find('#obalMiniatur').bind('click', function(event) {
      event = awm_checkEvent(event);
      awm_stopBubbling(event);
    });
    //tlacitko zavrit
    own.htmlKoren.find('#tlacitkoZavrit A').bind('click', function(event) {
      event = awm_checkEvent(event);
      awm_stopBubbling(event);
      own.skryjLightbox();
    });
    //ovladani klavesnici
    $(window).bind('keydown', function(event) { //pro IE az od v.9
      event = awm_checkEvent(event);
      own.vstupZKlavesnice(event);
    });
    //scrolovani fotek
    kontejner.bind('DOMMouseScroll', function(event) { own.scroll(event); }); //FF
    kontejner.bind('mousewheel', function(event) { own.scroll(event); }); //opera, safari, google, IE9
    kontejner.bind('onmousewheel', function(event) { own.scroll(event); }); //IE < 9
    //zakazani scrolovani mimo kontejner
    $(window).bind('DOMMouseScroll', function(event) { event = awm_checkEvent(event); awm_stopBubbling(event); }); //FF
    $(window).bind('mousewheel', function(event) { event = awm_checkEvent(event); awm_stopBubbling(event); }); //opera, safari, google, IE9
    $(window).bind('onmousewheel', function(event) { event = awm_checkEvent(event); awm_stopBubbling(event); }); //IE < 9
  }
  
  own.zobrazLightbox = function(rel) {
    rel = rel.split(':');
    var index = rel[1];
    if (own.htmlKoren == null) {  //teoreticky by else nastat nemělo
      //pridani html kodu lightboxu pokud neni jiz v kodu obsazen
      if ($('BODY #'+own.nazevObjektu).length == 0)
        $('BODY').append(own.htmlStruktura);
      own.htmlKoren = $('BODY #'+own.nazevObjektu);
      //animace zobrazeni
      own.htmlKoren.height($(window).height());
      own.htmlKoren.show(0, function() {
        $(this).find('#pozadi').fadeTo(own.casEfektuZtmaveni, own.urovenPruhlednosti, function() {
          $(this).parent().find('#prohlizec').show(0, function() {
            $(this).find('#kontejner').slideDown(own.casEfektuRozbaleni, function(event) {
              $(this).find('#telo').show(0, function() {
                own.zmenHlavniFotografii(index);
                own.naplnMiniatury(index);
                own.naveseniUdalostiOvladani();
              });
            });
          });
        });
      });
    } 
    return false;
  }
  
  own.zruseniUdalostiOvladani = function() {
    var kontejner = own.htmlKoren.find('#kontejner');
    $(window).unbind('resize');
    own.htmlKoren.find('#prohlizec').unbind('click');
    kontejner.unbind('click');
    own.htmlKoren.find('#obalMiniatur').unbind('click');
    own.htmlKoren.find('#tlacitkoZavrit A').unbind('click');
    $(window).unbind('keydown');
    kontejner.unbind('DOMMouseScroll');
    kontejner.unbind('mousewheel');
    kontejner.unbind('onmousewheel');
    $(window).unbind('DOMMouseScroll');
    $(window).unbind('mousewheel');
    $(window).unbind('onmousewheel');
  }
  
  own.skryjLightbox = function() {
    if (own.htmlKoren != null) {
      if (own.slideshowZapnuto)
        own.stopSlideshow();
      own.zruseniUdalostiOvladani();
      own.htmlKoren.find('#telo').hide(0, function() {
        $(this).parent().slideUp(own.casEfektuZbaleni, function() {
          $(this).parent().hide(0, function () { //#prohlizec
            $(this).parent().find('#pozadi').fadeTo(own.casEfektuZesvetleni, 0, function() {
              $(this).parent().hide(0, function() {
                own.htmlKoren.detach();
                own.htmlKoren = null;
                own.indexAktualniFotografie = null;
                own.posuvnik.destructor();
                own.posuvnik = null;
              });
            });
          });
        });
      });
    }
  }
  
  own.toString = function() {
    var retezec = '';
    for (i = 0; i < own.dataFotografii.length; i++)
      retezec = retezec+own.dataFotografii[i]['nazev'];
    return retezec;
  }

}

