
function setOpacity(obj, opacity) {

	opacity = (opacity == 100)?99.999:opacity;
  
	// IE/Win
	obj.style.filter = "alpha(opacity:"+opacity+")";
  
	// Safari<1.2, Konqueror
	obj.style.KHTMLOpacity = opacity/100;
  
	// Older Mozilla and Firefox
	obj.style.MozOpacity = opacity/100;
  
	// Safari 1.2, newer Firefox and Mozilla, CSS3
	obj.style.opacity = opacity/100;
}


function fadeOut(imgOldId, imgNewId, opacity) {
	var imgOld = document.getElementById(imgOldId);
	var imgNew = document.getElementById(imgNewId);
	if (opacity > 0) {
	  setOpacity(imgOld, opacity);
	  opacity -= 3;
	  window.setTimeout("fadeOut('"+imgOldId+"','"+imgNewId+"',"+opacity+")", 30);
	} else {
		imgOld.src = imgNew.src;
		fadeIn(imgOldId, 0);
	}
		
}

function fadeIn(objId, opacity) {
	var obj = document.getElementById(objId);
	if (opacity <= 100) {
	  setOpacity(obj, opacity);
	  opacity += 3;
	  window.setTimeout("fadeIn('"+objId+"',"+opacity+")", 30);
	}
}

function blendImage(imgOld, imgNew){
	
	var imgOldId = imgOld.id;
	var imgNewId = "temporaererImageContainerBlend";
	
	if (document.getElementById(imgNewId)) {
		document.getElementById(imgNewId).src = imgNew.src;
	} else {
		var tmpImage = new Image();
		tmpImage.id = imgNewId;
		tmpImage.style.display = "none";
		tmpImage.src = imgNew.src;
		document.body.appendChild(tmpImage);
	}
	
	
	fadeOut(imgOldId, imgNewId, 100);
}


function Diashow(currentImageNr, maxLinks, pUrl, bildContId, naviId, langtextId, redPraefix, diaImages)
{
	var self = this; // assign reference to current object to "this"
	//Variablen
	this.diashowImages = diaImages;		//Bildobjekte
    this.aktiv; 						//TimeInterval Variable
    this.current = currentImageNr; 		//aktuelle Bildnummer
    this.max = this.diashowImages.length; 	//Anzahl Bilder
    this.maximages = maxLinks; 			//Anzahl Bild-Links 
    this.pageurl = pUrl; 				//Seitenurl
    this.redaktionsPraefix = redPraefix;

    this.bildContainer = document.getElementById(bildContId); //Container, der das Bild beinhaltet
    this.navigationsContainer = document.getElementById(naviId);
    this.langtextContainer = document.getElementById(langtextId);

    this.bildContainerId = bildContId;
    
    //Funktionen
    this.renderNavigation = renderNavigation;    
    this.setNextImageNumber = setNextImageNumber;
    this.diaShowKernel = diaShowKernel;

}

//Baut das HTML Navigation auf und gibt es als String zurueck
function renderNavigation(current){

    var navi = '';
    //Zurueck-Link
    if( current > 0 ) {
        navi += '<a class="LinkeSpalte-Galerie-Nav-Aktiv-Back" href="' + this.pageurl + '?p=' + current + '" title="Zur&uuml;ck">Vorheriges Bild</a> ';
    } else {
    	navi += '<span class="LinkeSpalte-Galerie-Nav-Inaktiv-Back">Vorheriges Bild</span> ';
    }
  
    //1. Bild mit Punkten...
    if( current >= this.maximages - 1 ) {
    	navi += ' <a href="' + this.pageurl + '?p=1" title="1. Bild">1</a>&nbsp;|&nbsp;...&nbsp;|';
    }

    //Berechnung begin und end fuer Linkschleife
    var begin = 0;
    var end = current + this.maximages;
    if( current >= this.maximages - 1 ) {
    	if (current <= (this.max - this.maximages)) {
    	    begin = current - Math.floor(this.maximages / 2) + 1;
    	    end = begin + this.maximages - 2;
   	    } else {
            begin = this.max - this.maximages;  
            end = this.max;  
   	    }   
   	} else {
   	    end = begin + this.maximages;
   	}
    if (end > this.max) {
        end = this.max;
    }

   //Erzeugung der Links in Schleife
    for( var j = begin; j < end; j++ ) {
        var next = j + 1;
        if (j != current) {
        	navi += '&nbsp;<a href="' + this.pageurl + '?p=' + next + '">' + next + '</a>';
        	if (j < this.max - 1){
        		navi += '&nbsp;|';
        	}
        } else {
            //Aktuelles Element
        	navi += '&nbsp;<span class="LinkeSpalte-Galerie-Nav-Inaktiv">' + next + '</span>';
            if (j < this.max - 1){
        		navi += '&nbsp;|';
        	}
        }
    } 

    //Letzes Bild mit ...Punkten
    if (current + this.maximages <= this.max) {    
    	navi += '&nbsp;...&nbsp;|&nbsp;<a  href="' + this.pageurl + '?p=' + (this.max) + '" title="' + this.max + '. Bild">' + (this.max) + '</a>';
    }

    //Naechstes Bild link
    if( current + 1 < this.max ) {
        var next = current + 2;
        navi += '&nbsp;<a href="' + this.pageurl + '?p=' + next + '" class="LinkeSpalte-Galerie-Nav-Aktiv-Next" title="Weiter">N&auml;chstes Bild</a>';
    } else {
    	navi += '&nbsp;<span class="LinkeSpalte-Galerie-Nav-Inaktiv-Next">N&auml;chstes Bild</span>';
    }
    this.navigationsContainer.innerHTML = navi;
}

//Setzt die naechste Bildnummer, faengt wenn das Ende erreicht wurde wieder bei 0 an.
function setNextImageNumber(){
	if (this.current < this.diashowImages.length - 1){
		this.current++;
    } else {
    	this.current = 0;
    }
}

//Funktion, die ueber setInterval aufgerufen wird
function diaShowKernel(){
	this.setNextImageNumber();
	var currentImage = new Image();


	var bild = this.bildContainer;//temporaere Variable, weil die inner function this.bildContainer nicht kennt
    currentImage.onload = function () {
    	blendImage(bild, currentImage);
    	bild.alttext = this.alttext;
    }
    //Achtung Wegen des Cachings muss das onload vor dem erneuten setzen der src sein (IE)!
	currentImage.src = this.diashowImages[this.current].fotoUrl;
	
    this.langtextContainer.innerHTML = this.diashowImages[this.current].langtext;
    this.renderNavigation(this.current);		
    
}

