//******************************************************************************************************
//                                Image Fader V0.2 - k²bytes http://www.webdesigns-rosenheim.de
//
//   Dieses Javaskript darf frei verwendet werden. Verwendung in eigener Verantwortung.
//******************************************************************************************************

var GlobalImgFades = new Array();
var GlobalImgFadesCount = 0;

function CreateImgFadeObj(){
        this.ImgArray = new Array();          //Array der Bilder
        this.LinkArray = new Array();   //Array der Links
        this.ImgElemName = "";
        this.ImgChangeTime = 3; //Sekunden
        this.DoImgPreloading = true;
        this.ImgWidth = -1;
        this.ImgHeight = -1;

        var NewImg = null;                                //Neues Bild private
        var NewLink = null;                         //Wenn Links eingeschalten sind
        var OldImg = null;                                 //Zuvor angezeigtes Bild
        var OldLink = null;                         //Wenn Links...
        var CurImgArrPos = 1;                        //Aktuelle Arrayposition der Bilder
        var TimerVal = 0;
        var CurOpacity = 0;
        var ImgDiv = null;

        //Für setTimeout globalen Verweis hinterlegen
        var GlobalIdx = GlobalImgFadesCount;
        GlobalImgFades[GlobalImgFadesCount] = this;
        GlobalImgFadesCount++;

        /**
         * Hinzufügen von Bilder mit Alt-Attribut
         */
        this.AddImage = function(imgPath, imgAlt){
                if(imgAlt == null){
                        imgAlt = "";
                }
                this.ImgArray[this.ImgArray.length] = new Array(imgPath, imgAlt);
        }
        /**
        * Links mit Target-Attribute, default = _self (Target = _blank, _self, _parent, _top)
        * Wird ein Link hinzugefügt, gilt dieser für alle Bilder.
        *Werden weniger Links als Bilder hinzugefügt, wird der letzte Link für den Rest der Bilder verwendet.
        *
        */
        this.AddLink = function(imgLink, linkRel){
                if(linkRel == "" || linkRel == null){
                        linkRel = "_self";
                }
                this.LinkArray[this.LinkArray.length] = new Array(imgLink, linkRel);
        }

        this.Start = function() {
                if (document.getElementById(this.ImgElemName)) {
                        ImgDiv = document.getElementById(this.ImgElemName);
                        if(this.LinkArray.length > 0){
                                NewLink = ImgDiv.getElementsByTagName("a")[0];
                                //ist die Länge des Link-Array kleiner der Länge des Image-Arrays, muss das Link-Array aufgefüllt werden
                                if(this.LinkArray.length < this.ImgArray.length){
                                        for (var i=this.LinkArray.length-1; i<this.ImgArray.length; i++) {
                                                this.LinkArray[this.LinkArray.length] = new Array(this.LinkArray[i][0], this.LinkArray[i][1]);
                                        }
                                }
                        }

                        NewImg = ImgDiv.getElementsByTagName("img")[0];

                        if(this.DoImgPreloading){
                                var tmpDoLoad;
                                for (var j=0; j<this.ImgArray.length; j++) {
                                        tmpDoLoad = new Image();
                                        tmpDoLoad.src = this.ImgArray[j][0];
                                }
                        }
                        setTimeout("GlobalImgFades[" + GlobalIdx + "].DoFade();", this.ImgChangeTime * 1000);
                }
        }

        this.DoFade = function() {
                if(this.ImgArray.length <= 0 || ImgDiv == null) {
                        return;
                }
                OldImg = NewImg;   //Altes Bild übergeben
                OldLink = NewLink;
                NewImg = document.createElement("img");
                NewImg.src = this.ImgArray[CurImgArrPos][0];
                NewImg.alt = this.ImgArray[CurImgArrPos][1];
                NewImg.style.opacity = "0";
                NewImg.style.filter = "alpha(opacity=0)";

                //Wenn Breite und/oder Höhe vorgegeben sind, dann setzen
                if(this.ImgWidth > -1) {
                        NewImg.width = this.ImgWidth;
                        NewImg.style.width = this.ImgWidth;
                }
                if(this.ImgHeight > -1) {
                        NewImg.height = this.ImgHeight;
                        NewImg.style.height = this.ImgHeight;
                }

                if(this.LinkArray.length > 0){
                        NewLink = document.createElement("a");
                        NewLink.rel = this.LinkArray[CurImgArrPos][1];  
                        NewLink.href = this.LinkArray[CurImgArrPos][0];
                        NewLink.appendChild(NewImg);
                        ImgDiv.appendChild(NewLink);
                }
                else{
                        ImgDiv.appendChild(NewImg);
                }
                if (CurImgArrPos == (this.ImgArray.length-1)) {
                        CurImgArrPos = 0;
                } else {
                        CurImgArrPos++;
                }
                TimerVal = setInterval("GlobalImgFades[" + GlobalIdx + "].DoOpacity();", 20);
        }

        this.DoOpacity = function() {
                if (CurOpacity >= 100) {
                        clearTimeout(TimerVal);
                        TimerVal = 0;
                        CurOpacity = 0;

                        //ImgDiv.removeChild(ImgDiv.getElementsByTagName("img")[0]);
                        if(this.LinkArray.length > 0){
                                if(OldLink != null){
                                        ImgDiv.removeChild(OldLink);
                                        OldLink = null;
                                }
                        }
                        else{
                                if(OldImg != null){
                                        ImgDiv.removeChild(OldImg);
                                        OldImg = null;
                                }
                        }
                        setTimeout("GlobalImgFades[" + GlobalIdx + "].DoFade();", this.ImgChangeTime * 1000);
                        return false;
                }

                NewImg.style.opacity = CurOpacity/100;
                NewImg.style.filter = "alpha(opacity=" + CurOpacity + ")";
                CurOpacity = CurOpacity+2;

        }
}
