﻿//from: http://www.leigeber.com/2008/05/ajax-image-gallery-slideshow/

var slideShow = function() {
    var bxs, bxe, fxs, fxe, ys, ye, ta, ia, ie, st, ss, ft, fs, xp, yp, ci, t, tar, tarl, ta, ia, t, ie;
    st = 3; ss = 3; ft = 10; fs = 20; xp, yp = 0;
    return {
        init: function() {
            ta = document.getElementById(snGalleryThumbId);
            ia = document.getElementById(snGalleryImageId);
            t = ta.getElementsByTagName('li');
            ie = document.all ? true : false;
            document.onmousemove = this.pos; window.onresize = function() { setTimeout("slideShow.lim()", 500) };
            ys = this.toppos(ta); ye = ys + ta.offsetHeight;
            len = t.length; tar = [];
            for (i = 0; i < len; i++) {
                var id = t[i].value; tar[i] = id;
                t[i].onclick = new Function("slideShow.getimg('" + id + "')");
                if (i == 0) { this.getimg(id) }
            }
            tarl = tar.length;
        },
        scrl: function(d) {
            clearInterval(ta.timer);
            var l = (d == -1) ? 0 : (t[tarl - 1].offsetLeft - (ta.parentNode.offsetWidth - t[tarl - 1].offsetWidth) + 10)
            ta.timer = setInterval(function() { slideShow.mv(d, l) }, st);
        },
        mv: function(d, l) {
            ta.style.left = ta.style.left || '0px';
            var left = ta.style.left.replace('px', '');
            if (d == 1) {
                if (l - Math.abs(left) <= ss) {
                    this.cncl(ta.id); ta.style.left = '-' + l + 'px';
                } else { ta.style.left = left - ss + 'px' }
            } else {
                if (Math.abs(left) - l <= ss) {
                    this.cncl(ta.id); ta.style.left = l + 'px';
                } else { ta.style.left = parseInt(left) + ss + 'px' }
            }
        },
        cncl: function() { clearTimeout(ta.timer) },
        getimg: function(id) {
            if (auto) { clearTimeout(ia.timer) }
            if (ci != null) {
                var ts, tsl, x;
                ts = ia.getElementsByTagName('img'); tsl = ts.length; x = 0;
                for (x; x < tsl; x++) {
                    if (ci.id != id) { var o = ts[x]; clearInterval(o.timer); o.timer = setInterval(function() { slideShow.fdout(o) }, fs) }
                }
            }
            if (!document.getElementById(id)) {
                var lin = document.createElement('a');
                lin.id = id + "_link";
                lin.href = snGalleryImageArray[id];
                lin.target = "_blank";
                ia.appendChild(lin);
                var i = document.createElement('img');
                var g = document.getElementById('snImageGalleryDescription');
                lin.appendChild(i);
                i.id = id; i.av = 0; i.style.opacity = 0;
                i.style.filter = 'alpha(opacity=0)';
                i.src = snGalleryImageArray[id] + '?NodeProperty=$Binary_0';
                i.style.marginLeft = Number(-i.width / 2) + 'px';
                i.style.marginTop = Number(-i.height / 2) + 'px';
                i.style.cursor = 'pointer';
                g.innerHTML = '<h2 class="snImageTitle">' + snGalleryTitleArray[id] + ' (' + id + '/' + (snGalleryImageArray.length - 1) + ')</h2><div class="snImageDesc">' + snGalleryDescArray[id] + '</div>';
            } else {
                i = document.getElementById(id); clearInterval(i.timer);
            }
            i.timer = setInterval(function() { slideShow.fdin(i) }, fs);
        },
        nav: function(d) {
            var c = 0;
            for (key in tar) { if (tar[key] == ci.id) { c = key } }
            if (tar[parseInt(c) + d]) {
                this.getimg(tar[parseInt(c) + d]);
            } else {
                if (d == 1) {
                    this.getimg(tar[0]);
                } else { this.getimg(tar[tarl - 1]) }
            }
        },
        auto: function() { ia.timer = setInterval(function() { slideShow.nav(1) }, autodelay * 1000) },
        fdin: function(i) {
            if (i.complete) {
                i.style.marginLeft = Number(-i.width / 2) + 'px';
                i.style.marginTop = Number(-i.height / 2) + 'px';
                i.av = i.av + fs; i.style.opacity = i.av / 100; i.style.filter = 'alpha(opacity=' + i.av + ')';
            }
            if (i.av >= 100) {
                i.style.opacity = null; i.style.filter = null;
                if (auto) { this.auto() };
                clearInterval(i.timer);
                ci = i;
            }
        },
        fdout: function(i) {
            i.av = i.av - fs; i.style.opacity = i.av / 100;
            i.style.filter = 'alpha(opacity=' + i.av + ')';
            if (i.av <= 0) { clearInterval(i.timer); if (i.parentNode) { i.parentNode.removeChild(i) } }
        },
        lim: function() {
            var taw, taa, len; taw = ta.parentNode.offsetWidth; taa = taw / 4;
            bxs = slideShow.leftpos(ta); bxe = bxs + taa; fxe = bxs + taw; fxs = fxe - taa;
        },
        pos: function(e) {
            xp = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX;
            yp = ie ? event.clientY + document.documentElement.scrollTop : e.pageY;
            if (xp > bxs && xp < bxe && yp > ys && yp < ye) {
                slideShow.scrl(-1);
            } else if (xp > fxs && xp < fxe && yp > ys && yp < ye) {
                slideShow.scrl(1);
            } else { slideShow.cncl() }
        },
        leftpos: function(t) {
            var l = 0;
            if (t.offsetParent) {
                while (1) { l += t.offsetLeft; if (!t.offsetParent) { break }; t = t.offsetParent }
            } else if (t.x) { l += t.x }
            return l;
        },
        toppos: function(t) {
            var p = 0;
            if (t.offsetParent) {
                while (1) { p += t.offsetTop; if (!t.offsetParent) { break }; t = t.offsetParent }
            } else if (t.y) { p += t.y }
            return p;
        }
    };
} ();