var Gallery = new Class({
  id: false,
  eventId: false,
  galleryDiv: false,
  currentImage: false,
  images: [],
  opacityChange: false,
  
  initialize: function(eventId, id, images) {
    this.currentImage = 1;
    this.eventId = eventId;
    this.id = id;
    this.images = images;
    this.galleryDiv = "gallery_"+this.eventId+"_"+this.id;
  },
  
  initImages: function()
  {
    this.images.each( function(image) {
      var img = new Image();
      img.src = image;
    });
    var me = this;
    setTimeout(function() { me.show(); }, 1000);
  },
  
  show: function()
  {
    $(this.galleryDiv).getElement("div.galleryPhotoContainer").setStyle("position", "relative");
    $(this.galleryDiv).getElements("div.galleryPhoto").each(function( el ) {
      el.addClass("galleryFocus");
    });
  },
  
  destroy: function()
  {
    $(this.galleryDiv).getElements("div.galleryPhoto").each(function( el ) {
      el.removeClass("galleryFocus");
    });
    $(this.galleryDiv).getElement("div.galleryPhotoContainer").setStyle("position", "static");
  },
  
  prevImage: function(gallery_name)
  {
    var first = "galleryPhoto"+this.currentImage;
    
    if (this.currentImage <= 1) {
      this.currentImage = this.images.length;
    } else {
      this.currentImage--;
    }
    
    var second = "galleryPhoto"+this.currentImage;
    var firstElement = $(this.galleryDiv).getElement("div#"+first);
    var secondElement = $(this.galleryDiv).getElement("div#"+second);
    if (!secondElement) this.createImageContainer(this.currentImage,gallery_name, firstElement);
    
    this.updateControls(this.currentImage);
    this.fade(first, second);
    
    return false;
  },
  
  nextImage: function(gallery_name)
  {
    var first = "galleryPhoto"+this.currentImage;
    
    if (this.currentImage >= this.images.length) {
      this.currentImage = 1;
    } else {
      this.currentImage++;
    }
    
    var second = "galleryPhoto"+this.currentImage;
    var firstElement = $(this.galleryDiv).getElement("div#"+first);
    var secondElement = $(this.galleryDiv).getElement("div#"+second);
    if (!secondElement) this.createImageContainer(this.currentImage,gallery_name, firstElement);
    
    this.updateControls(this.currentImage);
    this.fade(first, second);
    
    return false;
  },
  
  showImage: function(nr, gallery_name, image_name)
  {
    var first = "galleryPhoto"+this.currentImage;
    var second = "galleryPhoto"+nr;

    if (nr == this.currentImage) return false;
    
    var container = $(this.galleryDiv).getElement("div.galleryPhotoContainer");
    var firstElement = container.getElement("div#"+first);
    var secondElement = container.getElement("div#"+second);
    if (!secondElement) this.createImageContainer(nr,gallery_name, firstElement);
    
    this.updateControls(nr);
    this.fade(first, second);
    this.currentImage = nr;
    return false;
  },
  
  createImageContainer: function(nr, gallery_name, injectAfterElement)
  {
    var url = "/simple/gallery/"+gallery_name+"/"+nr+"/2/"+this.images[nr-1];
    //alert($(this.galleryDiv).getElement("div.galleryPhotoContainer"));
    //var element = $(this.galleryDiv).getElement("div#galleryPhotoEmpty").clone();
    var container = $(this.galleryDiv).getElement("div.galleryPhotoContainer");
    var element = new Element("div", {
      "class": "galleryPhoto galleryPhoto"+nr+" galleryFocus",
      "id":"galleryPhoto"+nr
    });
    var imgElement = new Element("img", {
      "width": "430",
      "height": "320",
      "src": url
    });
    element.appendChild(imgElement);
    element.setStyle('display', "none");
    container.appendChild(element); //.injectAfter(injectAfterElement);
  },
  
  updateControls: function(currentSelected) {
    var container = $(this.galleryDiv).getElement("div.galleryControl");
    var links = container.getElements("a.imageLink");
    var name = container.getElement("div.imageName");
    
    links.each( function (link) {
      if (link.id == "imageLink["+currentSelected+"]") {
        link.addClass("selected");
        name.innerHTML = link.href.substring(link.href.search("#")+1);
      } else {
        link.removeClass("selected");
      }
    });
  },

  fade: function(first, second)
  {
    var me = this;
    var firstElement = $("gallery_"+me.eventId+"_"+me.id).getElement("div."+first);
    var secondElement = $("gallery_"+me.eventId+"_"+me.id).getElement("div."+second);
    var fadeOut;
    
    fadeOut = new Fx.Style(firstElement, "opacity", {
      duration: 500,
      onStart: function() {
        var fadeIn = new Fx.Style(secondElement, "opacity", { duration: 500 });
        fadeIn.set(0);
        secondElement.setStyle('display', 'block');
        fadeIn.start(0,1);
      },
      onComplete: function() {
        fadeOut.set(0);
        firstElement.setStyle('display', 'none');
        if (secondElement.style.display == "none") {
          var fadeIn = new Fx.Style(secondElement, "opacity", { duration: 500 });
          fadeIn.set(0);
          secondElement.setStyle('display', 'block');
          fadeIn.start(0,1);
        }
      }
    });
    fadeOut.start(1,0);
  }
});

