function jsAnimaatio(div, div2, vali) {
    // Jos annettiin id, haetaan sen perusteella elementti.
    if (typeof(div) != "object") {
        div = document.getElementById(div);
    }
    if (!div) throw "Ei annettu diviŠ!";
    
    if (typeof(div2) != "object") {
        div2 = document.getElementById(div2);
    }
    if (!div2) throw "Ei annettu div2:ta!";
    
    // Muutetaan vŠli millisekunneiksi.
    this.vali = Math.round(vali * 1000);
    
    // KŠynnissŠ / pysŠytettynŠ
    this.kaynnistetty = true;
    
    this.ajastinlaskija = 0;
    
    // Haetaan kuvat.
    this.kuvat = [];
    this.kuvat2 = [];
    this.kohta = 0;
    for (var img = div.firstChild; img; img = img.nextSibling) {
        if (img.tagName && img.tagName.toLowerCase() == "img") {
            this.kuvat.push(img);
            this.piilota(img);
        }
    }
    for (var img = div2.firstChild; img; img = img.nextSibling) {
        if (img.tagName && img.tagName.toLowerCase() == "a") {
            this.kuvat2.push(img);
            this.piilota(img);
        }
    }
    
    // Lasketaan animaation pituus.
    this.loppu = Math.round(this.kuvat.length);
    
    // Nollataan laskuri.
    this.nollaa();
}

/* Kuvan indeksi. (SisŠinen funktio.) */
jsAnimaatio.prototype.kohta_mod = function () {
    // Otetaan modulo kuvataulun pituudella;
    // kikkaillaan vŠhŠn, jotta negatiivinenkin kohta toimii.
    var tmp = this.kuvat.length;
    return (this.kohta % tmp + tmp) % tmp;
}

/* Kuvan piilotus. (SisŠinen funktio.) */
jsAnimaatio.prototype.piilota = function (img) {
    // Otetaan luokka "nakyva" pois.
    img.className = img.className.replace(/\s*nakyva/, '', 'g');
}

/* Kuvan nŠyttš. (SisŠinen funktio.) */
jsAnimaatio.prototype.nayta = function (img) {
    // LisŠtŠŠn luokka "nakyva".
    img.className = img.className.replace(/\s*nakyva/, '', 'g') + " nakyva";
}

/* Animaation nollaus. */
jsAnimaatio.prototype.nollaa = function (alkuun) {
    if (!this.kuvat.length) return this;
    if (alkuun == null) {
        alkuun = true;
    }
    // Piilotetaan nŠkyvŠ kuva.
    this.piilota(this.kuvat[this.kohta_mod()]);
    this.piilota(this.kuvat2[this.kohta_mod()]);
    if (alkuun) {
        // Animaatio alkaa nollasta.
        this.kohta = 0;
    } else if (this.loppu == Infinity) {
        // €ŠrettšmŠn animaation "loppu" on viimeinen kuva;
        // toistoilla ei ole merkitystŠ.
        this.kohta = this.kuvat.length - 1;
    } else {
        // €Šrellisen animaation loppu on juuri ennen loppua.
        this.kohta = this.loppu - 1;
    }
    // NŠytetŠŠn uusi kuva.
    this.nayta(this.kuvat[this.kohta_mod()]);
    this.nayta(this.kuvat2[this.kohta_mod()]);
    return this;
}

/* animaatio pŠŠllŠ / pois */
jsAnimaatio.prototype.paallapois = function () {
    if(this.kaynnistetty == true){
        this.kaynnistetty = false;
        this.pysayta();
    } else if(this.kaynnistetty == false){
        this.kaynnistetty = true;
        this.kaynnista();
    }
}

/* Animaation kŠynnistys: laitetaan ajastin kŠyntiin. */
jsAnimaatio.prototype.kaynnista = function () {
    // PysŠytetŠŠn ja aloitetaan uudestaan.
    this.pysayta();
    var _this = this;
    this.interval_id = setInterval(
        function() {
            _this.ajastinlaskija++;
            if(_this.ajastinlaskija == 200){
                // Ajastin vaihtaa kuvaa haluttuun suuntaan.
                _this.seuraava();
                _this.ajastinlaskija = 0;
            }
            if(_this.ajastinlaskija == 0){
                var tmp = _this.kuvat[_this.kohta-1].src;
                document.getElementById("temp").src=tmp;
                if(navigator.appName.indexOf("Microsoft")!= -1){
                    document.getElementById("temp").style.filter = "alpha(opacity = 100)";
                } else {
                    document.getElementById("temp").style.opacity = 1;
                }
            }
            switch(_this.ajastinlaskija) {
                case 1:
                    if(navigator.appName.indexOf("Microsoft")!= -1){
                        document.getElementById("temp").style.filter = "alpha(opacity = 80)";
                    } else {
                        document.getElementById("temp").style.opacity = 0.8;
                    }
                    break;
                case 2:
                    if(navigator.appName.indexOf("Microsoft")!= -1){
                        document.getElementById("temp").style.filter = "alpha(opacity = 60)";
                    } else {
                        document.getElementById("temp").style.opacity = 0.6;
                    }
                    break;
                case 3:
                    if(navigator.appName.indexOf("Microsoft")!= -1){
                        document.getElementById("temp").style.filter = "alpha(opacity = 40)";
                    } else {
                        document.getElementById("temp").style.opacity = 0.4;
                    }
                    break;
                case 4:
                    if(navigator.appName.indexOf("Microsoft")!= -1){
                        document.getElementById("temp").style.filter = "alpha(opacity = 20)";
                    } else {
                        document.getElementById("temp").style.opacity = 0.2;
                    }
                    break;
                case 5:
                    if(navigator.appName.indexOf("Microsoft")!= -1){
                        document.getElementById("temp").style.filter = "alpha(opacity = 0)";
                    } else {
                        document.getElementById("temp").style.opacity = 0;
                    }
                    break;
            }
        },
        40
    );
    return this;
}

/* Animaation pysŠytys: suljetaan ajastin. */
jsAnimaatio.prototype.pysayta = function () {
    if (!this.interval_id) return this;
    // Poistetaan ajastin.
    clearInterval(this.interval_id);
    this.interval_id = null;
    return this;
}

/* Seuraava kuva. */
jsAnimaatio.prototype.seuraavaNappi = function () {
    this.seuraava();
}
jsAnimaatio.prototype.edellinenNappi = function () {
    this.edellinen();
}

jsAnimaatio.prototype.seuraava = function () {
    // Piilotetaan kuva, nostetaan indeksiŠ ja nŠytetŠŠn uusi.
    this.piilota(this.kuvat[this.kohta_mod()]);
    this.piilota(this.kuvat2[this.kohta_mod()]);
    if(this.kohta < this.loppu){
       this.kohta += 1;
    } else {
        this.kohta = 1;  
    }
    this.nayta(this.kuvat[this.kohta_mod()]);
    this.nayta(this.kuvat2[this.kohta_mod()]);
    this.kuvat[this.kohta_mod()].style.opacity = 1;
    return this;
}

jsAnimaatio.prototype.siirtymaseuraava = function () {
        var tmp = this.kuvat[this.kohta_mod()].src;
        document.getElementById("temp").src=tmp;
        document.getElementById("temp").style.opacity = 1;
        var _this = this;
        this.seuraava();
        //document.getElementById("temp").style.opacity = (10-this.siirtyma)/10;
        this.interval_id2 = setInterval(
            function() {
                _this.siirtyma++;
                if(_this.siirtyma < 10){
                    document.getElementById("temp").style.opacity = (10-_this.siirtyma)/10;
                } else if(_this.siirtyma == 10){
                    _this.siirtyma = 0;
                    document.getElementById("temp").style.opacity = 0; 
                }
            },
            5
        );

}

/* Edellinen kuva. */
jsAnimaatio.prototype.edellinen = function () {
    // Piilotetaan kuva, lasketaan indeksiŠ ja nŠytetŠŠn uusi.
    this.piilota(this.kuvat[this.kohta_mod()]);
    this.piilota(this.kuvat2[this.kohta_mod()]);
    if(this.kohta > 0){
       this.kohta -= 1;
    } else {
        this.kohta = this.loppu-1;
    }
    this.nayta(this.kuvat[this.kohta_mod()]);
    this.nayta(this.kuvat2[this.kohta_mod()]);
    this.kuvat[this.kohta_mod()].style.opacity = 1;
    return this;
}
