
/*
global definierte Daten:
var gallerydata = { maxwidth:800, maxheight:600, currentindex:0,
                    gallerydata:[ [url,width,height,alt,longdesc], [], ... ] };
*/

var bordersize=5; // Border-Größe des DIVs um das große Bild
var galleryimages=new Array();
var currentIndex=0;
var numImagesLoaded=0;
var galleryDivPos=null; // Position des Gallery-Divs [x,y]
var highlightedPreview=null;


function preloadImages() {
  // Originalbild entfernen
  var gdiv=document.getElementById("gallerydiv");
  var rimg=gdiv.getElementsByTagName("IMG")[0];
  if (rimg)
    gdiv.removeChild(rimg);

  galleryDivPos=cumulativeOffset(gdiv);
  for (var i=0; i<gallerydata.gallerydata.length; i++) {
    var img=new Image;
    img._index=i;
    img.id="galleryimage"+i;
    img.src=gallerydata.gallerydata[i][0];
    img.alt=gallerydata.gallerydata[i][3];
    img.longdesc=gallerydata.gallerydata[i][4];
    if (i==currentIndex) {
      highlightedPreview=document.getElementById("gallerypreviewimage"+currentIndex);
      if (highlightedPreview) highlightedPreview.className+=" a1";
    } else {
      img.style.display="none";
    }
    img.style.position="absolute";
    img.style.left=galleryDivPos[0]+"px";
    img.style.top=galleryDivPos[1]+"px";
    galleryimages[i]=img;
    document.body.appendChild(img);
    img.onload=imageLoaded;
  }
}

function imageLoaded() {
  numImagesLoaded++;
  if (numImagesLoaded==gallerydata.gallerydata.length) {
    preloadComplete();
  }
}

function preloadComplete() {
  layoutGalleryImages();
}

function layoutGalleryImages() {
  var gallerydiv=document.getElementById("gallerydiv");
  galleryDivPos=cumulativeOffset(gallerydiv);
  for (var j=0; j<galleryimages.length; j++) {
    var img=galleryimages[j];
    img.style.left=Math.ceil(galleryDivPos[0]+bordersize+(gallerydata.maxwidth-img.width)/2)+"px";
    img.style.top=Math.ceil(galleryDivPos[1]+bordersize+(gallerydata.maxheight-img.height)/2)+"px";
    //alert(galleryDivPos[0]+" "+img.style.left+" "+gallerydata.maxwidth);
    //break;
  } 
}

function showNextSlide() {
  
  var newIndex=currentIndex + 1;
  if (newIndex>=galleryimages.length) { newIndex=0; }
  
  switchSlide(newIndex);
  return false;
}

function showPrevSlide() {
  
  var newIndex=currentIndex - 1;
  if (newIndex<0) { newIndex=galleryimages.length-1; }
  
  switchSlide(newIndex);
  return false;
}

function switchSlide(newIndex) {
  if (newIndex==currentIndex) return; 
  
  animateGallery(currentIndex, newIndex);
  
  currentIndex=newIndex;
  var el=document.getElementById("gallerynum");
  if (el) el.innerHTML=(currentIndex+1);
  el=document.getElementById("galleryalt");
  if (el) el.innerHTML=gallerydata.gallerydata[currentIndex][3];
  el=document.getElementById("gallerylongdesc");
  if (el) el.innerHTML=gallerydata.gallerydata[currentIndex][4];
  
  var previewImage=document.getElementById("gallerypreviewimage"+currentIndex);
  if (previewImage) {
    if (highlightedPreview!=null) {
      highlightedPreview.className=highlightedPreview.className.replace(/ ?a1/g, "");
    }
    previewImage.className+=" a1";
    highlightedPreview=previewImage;
  }
}

/* automatisch Slideshow starten */
function startSlideshow(switchSlide) {
  if (switchSlide) showNextSlide();
  window.setTimeout("startSlideshow(true)", 5000);
}

function animateGallery(oldimgidx, newimgidx) {
  galleryimages[oldimgidx].style.zIndex=999;
  galleryimages[newimgidx].style.zIndex=998;
  if (navigator.appVersion.indexOf("MSIE")>=0) { // IE
    galleryimages[newimgidx].style.filter="alpha(opacity=0)";
  } else {
    galleryimages[newimgidx].style.opacity=0;
  }
  galleryimages[newimgidx].style.display="block";
  window.setTimeout(function() {
    var steps=10;
    var duration=800;
    for (var i=0; i<=steps; i++) {
      var func="";
      if (navigator.appVersion.indexOf("MSIE")>=0) { // IE
        func+="galleryimages["+newimgidx+"].style.filter=\"alpha(opacity="+((i/steps)*100)+")\";\n";
        func+="galleryimages["+oldimgidx+"].style.filter=\"alpha(opacity="+((1-i/steps)*100)+")\";\n";
      } else {
        func+="galleryimages["+newimgidx+"].style.opacity="+(i/steps)+";\n";
        func+="galleryimages["+oldimgidx+"].style.opacity="+(1-i/steps)+";\n";
      }
      if (i==steps) func+="galleryimages["+oldimgidx+"].style.display='none';\n";
      setTimeout(func, 1+Math.floor(i*duration/steps));
    }  
  }, 100);
}

function windowSizeChanged() {
  layoutGalleryImages();  
}

function cumulativeOffset(element) {
  var valueT = 0, valueL = 0;
  do {
    valueT += element.offsetTop  || 0;
    valueL += element.offsetLeft || 0;
    element = element.offsetParent;
  } while (element);
  return [valueL, valueT];
}

function initGallery() {
  currentIndex=gallerydata.currentindex;
  
  var gallerydiv=document.getElementById("gallerydiv");
  gallerydiv.style.width=gallerydata.maxwidth+"px";
  gallerydiv.style.height=gallerydata.maxheight+"px";
  
  document.getElementById("galleryprevlink").onclick=showPrevSlide;
  document.getElementById("gallerynextlink").onclick=showNextSlide;
  
  var a=document.getElementById("gallerypreviews").getElementsByTagName("A");
  for (var i=0; i<a.length; i++) {
    a[i]._index=i;
    a[i].onclick=function() { switchSlide(this._index); return false; }
  }
  
  preloadImages();
  
  window.onresize=windowSizeChanged;
}
addOnLoad(initGallery);



