//—Copyright (c) 2007 wollzelle GmbH, (http://www.wollzelle.com). All Rights Reserved.

var Lightbox = {
  initialize: function() {
    this.lightbox         = $('lightbox');
    this.thumbsContainer  = $('thumbs');
    this.thumbsCurtain    = Site.thumbsCurtain;
    this.loadingIndicator = new Spinner('spinner', 12);
    this.registerEvents();
        
    this.beautyThumbs     = new Carousel(
      this.thumbsContainer, {
      afterScroll: function() {
        this.currentThumb.morph('opacity:0.3', {
           duration:0.7,
           afterFinish: function() {
             // spinner centered or on thumb
             var spinner_left_offset, spinner_margin_left;
             if (Site.currentLightbox == 'advertising')
                spinner_left_offset = Position.positionedOffset(this.currentThumb)[0] + this.currentThumb.getWidth()/2 + 'px';
             else
                spinner_left_offset = '50%';
             
             $('spinner').setStyle({ left: spinner_left_offset });
                 
             if(Prototype.Browser.IE)
                $('spinner').show();
             else
               $('spinner').appear({duration:0.5});

             var image_url = this.currentThumb.__src.gsub('small','big');
             Loader.load(image_url, {onComplete: function() {
               var captionText = this.currentThumb.readAttribute('rel').split(',')[0];
               var captionAlignment = this.currentThumb.readAttribute('rel').split(',')[1];
               Lightbox.swapImages({image_url:image_url, captionText:captionText, captionAlignment:captionAlignment});
               if(Prototype.Browser.IE)
                 $('spinner').hide();
               else
                 $('spinner').fade({duration:0.3});
               if(Site.currentSection) {
                 Site.currentSection.fade();
                 Site.currentSection = null;
                 Menu.indicate(this.thumbsContainer.down('div.clip-region').id.gsub('carousel_',''));
               }
             }.bind(this)}); //k thx bye loader
          }.bind(this)
        });
        this.oldThumb = this.currentThumb;  
      }.bind(this)
    });
  },
  
  swapImages: function(options) {
    // crossfades two images
    var imageToAppear;
    $('caption_text').update(options.captionText);
    $('caption').style.textAlign = options.captionAlignment;
    
    var imageToAppear = new Image();
    imageToAppear.src = options.image_url;
    
		if (!options.dontFade) {
      Canvas.crossfadeImage(imageToAppear, options.queue ? {queue:options.queue}:{});
		}
		else {
		  Canvas.drawImage(imageToAppear);
		}
  },

  show: function(event) {
    Event.stop(event);
    this.currentThumb = Event.element(event);
    if(this.oldThumb)
      this.oldThumb.setOpacity(0.999);  
    this.beautyThumbs.scrollToCenter(this.currentThumb);
  },
  registerEvents: function() {
    if(Prototype.Browser.IE) {
      /* make IE use its native mouseenter/mouseleave events */
      this.thumbsContainer.onmouseenter = function(event) {this.riseThumbs()}.bind(this);
      this.thumbsContainer.onmouseleave = function(event) {this.lowerThumbs()}.bind(this);
    }
    else {
      this.thumbsContainer.onmouseenter(this.riseThumbs.bind(this));
      this.thumbsContainer.onmouseleave(this.lowerThumbs.bind(this));
    }
    Event.observe(document, 'mouseover', function(event) {
      var e = Event.element(event);
      if (e == this.thumbsContainer || e.descendantOf(this.thumbsContainer) || e == this.thumbsCurtain)
        this._eventElement = null;
      else
        this._eventElement = e;
    }.bind(this));
  },
  lowerThumbs: function() {
    this.thumbsCurtain.show();
    new Effect.Opacity(this.thumbsCurtain, {from:0.001, to:0.7, duration:0.4, queue: {scope: 'out', limit:1}, afterFinish: function() {
      if (!this._eventElement) this.riseThumbs();
    }.bind(this)});
  },
  riseThumbs: function() {
    new Effect.Opacity(this.thumbsCurtain, {from:0.7, to:0.001, duration:0.2, queue: {scope: 'in', limit:1}, afterFinish: function(effect) {
    effect.element.hide();
    if (this._eventElement) this.lowerThumbs();
  }.bind(this)});
  }
}



Element.addMethods({
  onmouseenter: function(element, observer) {
    element = $(element);
    element.observe('mouseover', function(event, currentTarget) {
      var relatedTarget = $(event.relatedTarget || event.fromElement);
      if( relatedTarget != currentTarget && relatedTarget.childOf(currentTarget) == false ) {
        observer();
      }
    }.bindAsEventListener({}, element));
    return element;
  },
  onmouseleave: function(element, observer) {
    element = $(element);
    element.observe('mouseout', function(event, currentTarget) {
      var relatedTarget = $(event.relatedTarget || event.toElement);
      if( relatedTarget != currentTarget && relatedTarget.childOf(currentTarget) == false ) {
        observer();
      }
    }.bindAsEventListener({}, element));
    return element;
  }
});