var taglib_arrGalleries = new Array();

function taglib_imagegallery_mouseover(galleryId, intImage){
  taglib_arrGalleries[galleryId].mouseover(intImage);
}

function taglib_imagegallery_mouseout(galleryId, intImage){
  taglib_arrGalleries[galleryId].mouseout(intImage);
}

function taglib_imagegallery_mouseclick(galleryId, intImage){
  taglib_arrGalleries[galleryId].mouseclick(intImage);
  if(taglib_arrSlideshowByGalleryId[galleryId])
    taglib_arrSlideshowByGalleryId[galleryId].stopSlideshow();
}

function taglib_imagegallery_nextPage(galleryId){
  taglib_arrGalleries[galleryId].nextPage();
}

function taglib_imagegallery_prevPage(galleryId){
  taglib_arrGalleries[galleryId].prevPage();
}

function taglib_imagegallery_init(galleryId){
  taglib_arrGalleries[galleryId].init();
}

function taglib_imagegallery_addToMyGallery(galleryId){
  taglib_arrGalleries[galleryId].addToMyGallery();
}

///////////////////////////////////////////////////////////////////////////////

function ImageItem(thumb_off, thumb_on, zLink, alt, additionalInfo){
  var strThumb_off;
  var strThumb_on;
  var strLink;
  var strAlt;
  var additionalInfo;
  
  this.strThumb_off = thumb_off;
  this.strThumb_on  = thumb_on;
  this.strLink      = zLink;
  this.strAlt       = alt;
  this.additionalInfo = additionalInfo;
}

ImageItem.prototype.getThumbOff = function(){
  return this.strThumb_off;
}

ImageItem.prototype.getThumbOn = function(){
  return this.strThumb_on;
}

ImageItem.prototype.getLink = function(){
  return this.strLink;
}

ImageItem.prototype.getAlt = function(){
  return this.strAlt;
}

ImageItem.prototype.getAdditionalInfo = function(){
  return this.additionalInfo;
}

///////////////////////////////////////////////////////////////////////////////

function ImageGallery(blocId, 
                      intColumns, 
                      intRows, 
                      intCurrentImage, 
                      bolHighlightSelectedImage,
                      strSpacerPath, 
                      strRedrawHandler){
  var blocId;
  var arrImages;
  var arrPreloadedImages;
  
  var intColumns;
  var intRows;
  var intTotalCols;
  var intTotalImages;
  var intVisibleImages;
  var intCurrentImage;
  var intCurrentColumn;
  
  var intDecay;
  
  var bolHighlightSelectedImage;
  var bolUsePrevNext;
  
  var strSpacerPath;
  var strRedrawHandler;
  
  var strPrev;
  var strNext;
  
  this.blocId                    = blocId;
  this.intColumns                = intColumns;
  this.intRows                   = intRows;
  this.intCurrentImage           = intCurrentImage;
  this.bolHighlightSelectedImage = bolHighlightSelectedImage;
  this.strSpacerPath             = strSpacerPath;
  this.strRedrawHandler          = strRedrawHandler;
  
  this.arrImages          = new Array();
  this.arrPreloadedImages = new Array();
  
  taglib_arrGalleries[blocId] = this;
}

ImageGallery.prototype.addItem = function(thumb_off, thumb_on, zLink, alt, additionalInfo){
  var item = new ImageItem(thumb_off, thumb_on, zLink, alt, additionalInfo);
  this.arrImages[this.arrImages.length] = item;
}

ImageGallery.prototype.getImgTagId = function(intImage){
  return 'img_'+this.blocId+'_'+intImage;
}

ImageGallery.prototype.init = function(){
  this.intTotalImages = this.arrImages.length;
  this.intTotalCols = Math.ceil(this.intTotalImages / this.intRows);
  this.intVisibleImages = Math.min(this.intColumns * this.intRows, this.intTotalImages);
  
  this.setCurrentImage(this.intCurrentImage);
  
  
  
  if(getE("prev_" + this.blocId)){
    this.bolUsePrevNext = true;
    this.strPrev = getE("prev_" + this.blocId).innerHTML;
    this.strNext = getE("next_" + this.blocId).innerHTML;
    getE("prev_" + this.blocId).style.display = "";
    getE("next_" + this.blocId).style.display = "";
  }
  
  
  this.redraw();
  
  displayE(getE(this.blocId));
  this.preloadImages();
}

ImageGallery.prototype.setCurrentImage = function(intCurrentImage){
  this.intCurrentColumn = Math.floor(Math.max(intCurrentImage, 0) / this.intRows);
  
  
  if(this.intCurrentColumn < this.intColumns)
    this.intCurrentColumn = 0;
    
  while(this.intCurrentColumn > 0 && this.intCurrentColumn + this.intColumns -1 >= this.intTotalCols)
    this.intCurrentColumn--;
    
  this.intDecay = this.intCurrentColumn * this.intRows;
}

ImageGallery.prototype.nextImage = function(){
  this.intCurrentImage++;
  
  if(this.intCurrentImage == this.intTotalImages)
    this.intCurrentImage = 0;
    
  this.go(this.intCurrentImage);
  this.setCurrentImage(this.intCurrentImage);
  this.redraw();
}

ImageGallery.prototype.prevImage = function(){
  this.intCurrentImage--;
  
  if(this.intCurrentImage < 0)
    this.intCurrentImage = this.intTotalImages - 1;
    
  this.go(this.intCurrentImage);
  this.setCurrentImage(this.intCurrentImage);
  this.redraw();
}

ImageGallery.prototype.go = function(intIndex){
  if(!this.arrImages[intIndex]){
    intIndex = 0;
    this.intCurrentImage = 0;
  }
  
  var strLink = this.arrImages[intIndex].strLink;
  if(strLink != null){
    if(strLink.indexOf("/") == 0 || strLink.toLowerCase().indexOf("http://") == 0 || strLink.toLowerCase().indexOf("https://") == 0){
      document.location = strLink;
    }else{
      eval(strLink);
    }
  }
}

ImageGallery.prototype.mouseover = function(intImage){
  var img = getE(this.getImgTagId(intImage));
  img.src = this.getImage(intImage, "strThumb_on");
}

ImageGallery.prototype.mouseout = function(intImage){
  var img = getE(this.getImgTagId(intImage));
  
  var bolOn = this.bolHighlightSelectedImage && (this.intDecay + intImage == this.intCurrentImage);
  img.src = this.getImage(intImage, "strThumb_"+(bolOn?"on":"off"));
}

ImageGallery.prototype.mouseclick = function(intImage){
  var strLink = this.getImage(intImage, "strLink");
  if(strLink != null){
    if(strLink.indexOf("/") == 0 || strLink.toLowerCase().indexOf("http://") == 0 || strLink.toLowerCase().indexOf("https://") == 0){
      if(this.intCurrentImage != this.intDecay + intImage){
        document.location = strLink;
      }
    }else{
      if(this.intCurrentImage != this.intDecay + intImage){
        eval(strLink);
        this.intCurrentImage = this.intDecay + intImage;
        this.redraw();
      }
    }
  }
}

ImageGallery.prototype.redraw = function(){
  for(var i=0; i < this.intVisibleImages; i++){

    var bolOn = this.bolHighlightSelectedImage && (this.intDecay + i == this.intCurrentImage);

    var strImg = this.getImage(i, "strThumb_" + (bolOn?"on":"off"));
    var objImg = getE(this.getImgTagId(i));
    
    objImg.src = strImg;
    
    
    var bolEmpty = strImg == this.strSpacerPath;
    if(!bolEmpty){
      bolEmpty = !this.getImage(i, "strLink");
    }
    
    objImg.alt = this.getImage(i, "strAlt");
    
    if(bolEmpty || (this.bolHighlightSelectedImage && (this.intDecay + i == this.intCurrentImage)))
      objImg.style.cursor = "auto";
    else
      objImg.style.cursor = "pointer";
    
    if(this.strRedrawHandler)
      eval(this.strRedrawHandler+"("+i+", '"+strImg+"', "+(bolEmpty?'true':'false')+");");
  }
  
  if(this.bolUsePrevNext){
    if(this.intCurrentColumn == 0){
      getE("prev_" + this.blocId).innerHTML = "";
    }else{
      getE("prev_" + this.blocId).innerHTML = this.strPrev;
    }
      
    if(this.intCurrentColumn == this.intTotalCols - this.intColumns){
      getE("next_" + this.blocId).innerHTML = "";
    }else{
      getE("next_" + this.blocId).innerHTML = this.strNext;
    }
  }
}

ImageGallery.prototype.nextPage = function(){
  if(this.intCurrentColumn < (this.intTotalCols - this.intColumns))
    this.intCurrentColumn++;
    
  this.intDecay = this.intCurrentColumn * this.intRows;
  this.redraw();
}

ImageGallery.prototype.prevPage = function(){
  if(this.intCurrentColumn > 0)
    this.intCurrentColumn--;
    
  this.intDecay = this.intCurrentColumn * this.intRows;
  this.redraw();
}

ImageGallery.prototype.getImage = function(intImage, type){
  if(this.arrImages[this.intDecay + intImage]){
    return this.arrImages[this.intDecay + intImage][type];
  }
    
  if(type == "strLink")
    return null;
  if(type == "strAlt")
    return "";
    
  return this.strSpacerPath;
}

ImageGallery.prototype.preloadImages = function(){
  for(var i = 0; i < this.intVisibleImages; i++){
    this.arrPreloadedImages[i] = new Array();
    (this.arrPreloadedImages[i]["thumb_on"] =  new Image()).src = this.arrImages[i].strThumb_on;
  }
  
  for(var i = this.intVisibleImages - 1; i < this.arrImages.length; i++){
    this.arrPreloadedImages[i] = new Array();
    (this.arrPreloadedImages[i]["thumb_off"] = new Image()).src = this.arrImages[i].strThumb_off;
    (this.arrPreloadedImages[i]["thumb_on"] =  new Image()).src = this.arrImages[i].strThumb_on;
  }
}

ImageGallery.prototype.addToMyGallery = function(){
  var additionalInfo = this.arrImages[this.intCurrentImage].getAdditionalInfo();
  var uidRootFolder  = additionalInfo[0];
  var strThumbFolder = additionalInfo[1];
  var strThumb_on    = additionalInfo[2];
  var strThumb_off   = additionalInfo[3];
  var strBigFolder   = additionalInfo[4];
  var strBigImage    = additionalInfo[5];
  
  var addToMyGalleryform = document.createElement('form');
  getE(this.blocId).appendChild(addToMyGalleryform);
  addToMyGalleryform.action = '/mytagheuer/picture-gallery/index.lbl';
  addToMyGalleryform.method = 'get';
  
  unDisplayE(addToMyGalleryform);
  
  var str = '';
  str += '<input type="hidden" name="add"            value="1">';
  str += '<input type="hidden" name="uidRootFolder"  value="'+uidRootFolder+'">';
  str += '<input type="hidden" name="strThumbFolder" value="'+strThumbFolder+'">';
  str += '<input type="hidden" name="strThumb_on"    value="'+strThumb_on+'">';
  str += '<input type="hidden" name="strThumb_off"   value="'+strThumb_off+'">';
  str += '<input type="hidden" name="strBigFolder"   value="'+strBigFolder+'">';
  str += '<input type="hidden" name="strBigImage"    value="'+strBigImage+'">';
  
  addToMyGalleryform.innerHTML = str;
  addToMyGalleryform.submit();
}