var easybox = new Class({

  /**
	* Inicializace
	*/ 
  initialize: function(options) {
    this.delay = 300;
    this.minusPositionPreloader = 60;
    this.objPreloader = '<img src="'+options['preloaderPathToImg']+'" alt="" />';
    this.closeTextEB = options['closeTextEB'];
    this.prevTextEB = options['prevTextEB'];
    this.nextTextEB = options['nextTextEB'];
    this.main();
  },
  
  
  /**
	* Hlavni ridici funkce
	*/ 
  main: function() {    
    $$("a.easybox").addEvent('click', this.eventShowEB.bindWithEvent(this));
    $$("a.easybox img").addEvent('click', this.eventShowEB.bindWithEvent(this));
  },


  /**
	* Zobrazeni easy boxu 
	*/  
  eventShowEB: function(event) {
    if($('EB_wrap_img')) return;
    new Event(event).stop();

    (function(){
      var img = new Element('img', {'src': event.target.get('href'),'id':'EB_img','alt': '','styles':{'position':'relative','opacity':0 }});
      var frame = new Element('div', {'id':'EB_frame', 'styles':{'opacity': 0,'position':'absolute','left':0,'top':0,'background-color':'#000','width':window.getScrollWidth(),'height':window.getScrollHeight()-1}});
      var wrapImg = new Element('div', {'id':'EB_wrap_img','styles':{'position':'absolute','left':'-10000px','top':'-10000px','opacity': 0 }});
      var load = new Element('div', {'html': this.objPreloader,'id': 'EB_preloader','styles': {'display': 'none'}});
      var title = new Element('div', {'id': 'EB_title'});
      var close = new Element('div', {'id': 'EB_close','html':'<a href="#">'+this.closeTextEB+'</a>'});
      var closeWrap = new Element('div', {'id': 'EB_close_wrap'});
      var prev = new Element('div', {'id': 'EB_prev','html': '<a href="#">'+this.prevTextEB+'</a>'});
      var next = new Element('div', {'id': 'EB_next', 'html': '<a href="#">'+this.nextTextEB+'</a>'});
      var caption = new Element('div', {'id': 'EB_caption'});    
      
      $$('body').adopt(frame);
      
      caption.adopt(prev);
      caption.adopt(next);
      if(event.target.get('title')!='') caption.adopt(title);
          
      wrapImg.adopt(closeWrap);
      closeWrap.adopt(close);
      wrapImg.adopt(img);
      wrapImg.adopt(caption);
      
      $$('body').adopt(wrapImg);
      $$('body').adopt(load);
      
      var effectFrame = new Fx.Tween(frame,{duration: '300',transition: Fx.Transitions.Sine.easeOut});
      var effectWrapImg = new Fx.Tween(wrapImg,{duration: '300',transition: Fx.Transitions.Sine.easeOut});
      var effectImg = new Fx.Tween(img,{duration: '300',transition: Fx.Transitions.Sine.easeOut});
      
      effectFrame.start('opacity', '0.6');
      effectImg.start('opacity', '1');
      effectWrapImg.start('opacity', '1');
      
      $('EB_frame').addEvent('click', this.eventRemoveEB.bindWithEvent(this,[effectFrame,effectWrapImg,effectImg]));
      $('EB_img').addEvent('click', this.eventRemoveEB.bindWithEvent(this,[effectFrame,effectWrapImg,effectImg]));
      $('EB_close').addEvent('click', this.eventRemoveEB.bindWithEvent(this,[effectFrame,effectWrapImg,effectImg]));
      
      $('EB_prev').getElement('a').addEvent('click', this.eventNextPrev.bindWithEvent(this,[-1]));
      $('EB_next').getElement('a').addEvent('click', this.eventNextPrev.bindWithEvent(this,[1]));
      
      // Zobrazeni obrazku
      var url = event.target.get('href')==null ? event.target.getParent().get('href') : event.target.get('href');
      this.loadImageEB(url,0);
      
      $$("a.easybox").each(function(item, index){
        if(url == item.get('href')) indexActual = index;
      });
      
      // Prepocitani pozice po zmene rozmeru prohlizece nebo scrollingu
      var doRePosition = function() {
        var size = new Array(img.getSize().x, img.getSize().y);
        if(!$('EB_wrap_img')) return; 
        this.setPositionEB(size);
        this.setFrameEB();
      }.bind(this);
      window.onresize = doRePosition;
      window.onscroll = doRePosition;
    }).delay(this.delay, this);
  },
  
  
  /**
	* Dalsi a predchozi odkaz
	*/  
  eventNextPrev: function(event,pos) {
    new Event(event).stop();
    
    $$("a.easybox").each(function(item, index){
      if($('EB_img').get('src') == item.get('href')) indexActual = index;
    });
    
    var url = $$("a.easybox")[indexActual+pos].get('href');
    this.loadImageEB(url,pos);
  },
  
  
  /**
	* Zobrazeni obrazku
	*/
  loadImageEB: function(url,pos) {
    var left = (window.getScrollLeft()+(window.getWidth()/2));
    var top = (window.getScrollTop()+(window.getHeight()/2));
    $('EB_preloader').setStyles({'display':'block','position':'absolute','left':left-this.minusPositionPreloader,'top':top});
    imgObj = new Image();
    imgObj.onload = function(){
      imgObj.onload = null;
      
      $$("a.easybox").each(function(item, index){
        if($('EB_img').get('src') == item.get('href')) indexActual = index;
      });
      
      if(pos==1) {
        $('EB_prev').getElement('a').setStyle('visibility', 'visible');
        if($$("a.easybox").length-2 == indexActual) $('EB_next').getElement('a').setStyle('visibility', 'hidden');
      } else {
        $('EB_next').getElement('a').setStyle('visibility', 'visible');
        if(indexActual == 1) $('EB_prev').getElement('a').setStyle('visibility', 'hidden');
      }
      
      if($$("a.easybox").length==1 || $$("a.easybox").length == (indexActual+1+pos)) $('EB_next').getElement('a').setStyle('visibility','hidden');
      if($$("a.easybox").length==1 || (indexActual+pos) == 0) $('EB_prev').getElement('a').setStyle('visibility','hidden');
      
      $('EB_title').set('html',$$("a.easybox")[indexActual+pos].get('title'));

      // Pokud neni nastaven rel, nezobrazi se predchozi a dalsi link
      if($$("a.easybox")[indexActual+pos].get('rel') == '' || $$("a.easybox")[indexActual+pos].get('rel') == null)  {
        $('EB_prev').setStyle('display','none');
        $('EB_next').setStyle('display','none');
        if($$("a.easybox")[indexActual+pos].get('title') == '' || $$("a.easybox")[indexActual+pos].get('title') == null) $('EB_title').setStyle('display','none');
        else  $('EB_title').setStyle('text-align','left');
      }

      $('EB_img').set({'width':imgObj.width,'height':imgObj.height,'src':url});
      $('EB_preloader').setStyle('display','none');
      $('EB_caption').setStyle('width',imgObj.width);
      var size = new Array(imgObj.width, imgObj.height);
      this.setPositionEB(size);
    }.bind(this);
    imgObj.src = url;
  },
  
  
  /**
	* Nastaveni pozicovani
	*/  
  setPositionEB: function(sizeImg) {
    var paddingTop = $('EB_wrap_img').getStyle('padding-top').toInt();
    var paddingRight = $('EB_wrap_img').getStyle('padding-right').toInt();
    var paddingBottom = $('EB_wrap_img').getStyle('padding-bottom').toInt();
    var paddingLeft = $('EB_wrap_img').getStyle('padding-left').toInt();
    var caption = $('EB_caption').getStyle('height').toInt();
    var close = $('EB_close_wrap').getStyle('height').toInt();    
    
    $('EB_wrap_img').setStyles({
      position: 'absolute',
      left: (window.getScrollLeft()+(window.getWidth()/2))-(sizeImg[0]/2)-((paddingLeft+paddingRight)/2),
      top: (window.getScrollTop()+(window.getHeight()/2))-(sizeImg[1]/2)-((paddingTop+paddingBottom)/2)-(caption/2)-(close/2)
    });
  },
  
  
  /**
	* Nastaveni framu
	*/ 
  setFrameEB: function() {
    $('EB_frame').setStyles({'width':window.getScrollWidth(),'height':window.getScrollHeight()})
  },


  /**
	* Zruseni easy boxu
	*/ 
  eventRemoveEB: function(event,effectFrame,effectWrapImg,effectImg) {
    new Event(event).stop();
    (function(){ 
      effectFrame.start('opacity', '0');
      effectWrapImg.start('opacity', '0');
      effectImg.start('opacity', '0');
      (function(){ 
        $('EB_wrap_img').destroy();
        $('EB_frame').destroy();
        $('EB_preloader').destroy();
      }).delay(300);
    }).delay(this.delay, this);
  }
})


window.addEvent("domready", function() {  
  new easybox({
    preloaderPathToImg: "typo3conf/ext/od_photogallery/view/easybox/ajax-loader.gif",
    prevTextEB: "Předchozí",
    nextTextEB: "Další",
    closeTextEB: "Zavřít"
  });
}); 
