var TINY={};
function az(i){return document.getElementById(i)}
function azaz(e,p){p=p||document; return p.getElementsByTagName(e)}

TINY.slideshow=function(n){
	this.infoSpeed=this.imgSpeed=this.speed=10;
	this.thumbOpacity=this.navHover=50;
	this.navOpacity=25;
	this.scrollSpeed=5;
	this.letterbox='#000';
	this.n=n;
	this.c=0;
	this.a=[];
	this.b =[];
};

TINY.slideshow.prototype = {
    init: function(s, z, b, f, q) {
        s = az(s);
        var m = azaz('li', s), i = 0, w = 0;
        this.l = m.length;
        this.q = az(q);
        this.f = az(z);
        this.r = az(this.info);
        this.o = parseInt(TINY.style.val(z, 'width'));
        this.paused = false;
        if (this.thumbs) {
            var u = az(this.left), r = az(this.right);
            u.onmouseover = new Function('TINY.scroll.init("' + this.thumbs + '",-1,' + this.scrollSpeed + ')');
            u.onmouseout = r.onmouseout = new Function('TINY.scroll.cl("' + this.thumbs + '")');
            r.onmouseover = new Function('TINY.scroll.init("' + this.thumbs + '",1,' + this.scrollSpeed + ')');
            this.p = az(this.thumbs)
        }
        //hack this stupid thing won't set the correct width no matter what I try.
        //so, I'm putting a hack in.  If the timing is correct the SetThumbNailWidth will work.
        //this is a kind of fail safe.
        $(this.p).width(this.l * 120);
        for (i; i < this.l; i++) {
            this.a[i] = {};
            var h = m[i], a = this.a[i];
            a.t = azaz('h3', h)[0].innerHTML;
            a.d = azaz('p', h)[0].innerHTML;
            a.l = azaz('a', h)[0] ? azaz('a', h)[0].href : '';
            a.p = $(h).children("span").text();
            //adds thumbs
            if (this.thumbs) {
                var g = azaz('img', h)[0];
//                $(g).css("opacity", this.thumbOpacity / 100);
//                $(g).css("filter", 'alpha(opacity=' + this.thumbOpacity + ')');
//                g.onmouseover = new Function('TINY.alpha.set(this,100,5)');
//                g.onmouseout = new Function('TINY.alpha.set(this,' + this.thumbOpacity + ',5)');
                g.onclick = new Function(this.n + '.pi(' + i + ',1)');

                $(this.p).append(g);
                $(g).ready(
                  function(){
                    SetThumbNailWidth(g);
                  }  
                );
            }
        }
        if (b && f) {
            b = az(b);
            f = az(f);
//            b.style.opacity = f.style.opacity = this.navOpacity / 100;
//            b.style.filter = f.style.filter = 'alpha(opacity=' + this.navOpacity + ')';
//            b.onmouseover = f.onmouseover = new Function('TINY.alpha.set(this,' + this.navHover + ',5)');
//            b.onmouseout = f.onmouseout = new Function('TINY.alpha.set(this,' + this.navOpacity + ',5)');
            b.onclick = new Function(this.n + '.mv(-1,1)');
            f.onclick = new Function(this.n + '.mv(1,1)')
        }
        this.auto ? this.is(0, 0) : this.is(0, 1)
    },
    mv: function(d, c) {
        var t = this.c + d;
        this.c = t = t < 0 ? this.l - 1 : t > this.l - 1 ? 0 : t;
        this.pr(t, c)
    },
    pi: function(t, c) {
        this.paused = false;
        this.pause(t, c);
    },
    pr: function(t, c) {
        clearTimeout(this.lt);
        if (c) {
            clearTimeout(this.at)
        }
        this.c = t;
        this.is(t, c)
    },
    is: function(s, c) {
        if (this.info) {
            TINY.height.set(this.r, 1, this.infoSpeed / 2, -1)
        }
        //is image cached?
        this.i = this.b[this.a[s].p];
        if(this.i == null)
        {
            //adds the main image to the page
            var i = new Image();
    //        i.style.opacity = 0;
            if($(i).css("width") == null)
                //$(i).css("width","auto");
            if($(i).css("height") == null)
                $(i).css("height","auto");
    //        i.style.filter = 'alpha(opacity=0)';
            this.q.onclick = new Function(this.n + '.pause(' + s + ',' + c + ')')
            this.q.onmouseover = new Function("this.className='" + (this.paused ? this.playButton : this.pauseButton) + "'");
            this.q.onmouseout = new Function("this.className=''");
            this.i = i;
            //alert(this.n + '.le(' + s + ',' + c + ')');
            i.src = this.a[s].p;
            this.b[this.a[s].p] = this.i;
        }
        //i.onload = new Function(this.n + '.le(' + s + ',' + c + ')');
        $(this.i).ready(new Function(this.n + '.le(' + s + ',' + c + ')'));
        if (this.thumbs) {
            var a = azaz('img', this.p), l = a.length, x = 0;
            for (x; x < l; x++) {
                if (x == s) {
                    $(a[x]).attr("class", $(a[x]).attr("class") + " selected");
//                    TINY.alpha.set(a[x], 100, 1);
                    TINY.scroll.move(this.thumbs, a[x].offsetLeft);
                }
                else {
                    $(a[x]).attr("class", $(a[x]).attr("class").replace(" selected", ""));
//                    TINY.alpha.set(a[x], this.thumbOpacity, 1);
                }
            }
        }
    },
    pause: function(s, c) {
        this.q.onmouseover = new Function("this.className='" + (this.paused ? this.playButton : this.pauseButton) + "'");
        if (!this.paused) {
            this.pr(s, c);
            this.paused = true;
        }
        else {
            this.is(s + 1);
            this.paused = false;
        }
    },
    le: function(s, c) {
        var w = this.o - parseInt(this.i.offsetWidth);
        if (w > 0) {
            var l = Math.floor(w / 2);
            //this.i.style.borderLeft = l + 'px solid ' + this.letterbox;
            //this.i.style.borderRight = (w - l) + 'px solid ' + this.letterbox
        }
        TINY.alpha.set(this.i, 100, this.imgSpeed);
                var n = new Function(this.n + '.nf(' + s + ')');
                //this.lt = setTimeout(n, this.imgSpeed * 100);
        if (!c) {
            this.at = setTimeout(new Function(this.n + '.mv(1,0)'), this.speed * 1000)
        }
        var m = azaz('img', this.f);

        //appends new image
//        if (m.length > 0)
//            m[0].src = this.i.src;
//        else
            $(this.f).children().remove();
            $(this.f).append(this.i);

    },
    nf: function(s) {
        if (this.info) {
            s = this.a[s];
            azaz('h3', this.r)[0].innerHTML = s.t;
            azaz('p', this.r)[0].innerHTML = s.d;
            this.r.style.height = 'auto';
            var h = parseInt(this.r.offsetHeight);
            this.r.style.height = 0;
            TINY.height.set(this.r, h, this.infoSpeed, 0)
        }
    }
};

TINY.scroll = function() {
    return {
        init: function(e, d, s) {
            e = typeof e == 'object' ? e : az(e); var p = e.style.left || TINY.style.val(e, 'left'); e.style.left = p;
            var l = d == 1 ? parseInt(e.offsetWidth) - parseInt(e.parentNode.offsetWidth) : 0; e.si = setInterval(function() { TINY.scroll.mv(e, l, d, s) }, 20)
        },
        move: function(e, l) {
            e = typeof e == 'object' ? e : az(e);
            //var p = e.style.left || TINY.style.val(e, 'left');
            //e.style.left = p;
            if ((parseInt(e.offsetWidth) - parseInt(e.parentNode.offsetWidth)) > l)
                e.style.left = (l * -1) + 'px';
            else
                e.style.left = ((parseInt(e.offsetWidth) - parseInt(e.parentNode.offsetWidth)) * -1) + 'px';            
        },
        mv: function(e, l, d, s) {
            var c = parseInt(e.style.left);
            if (c == l) {
                TINY.scroll.cl(e)
            }
            else {
                var i = Math.abs(l + c);
                i = i < s ? i : s;
                var n = c - i * d;
                e.style.left = n + 'px'
            }
        },
        cl: function(e) { e = typeof e == 'object' ? e : az(e); clearInterval(e.si) }
    }
} ();

TINY.height = function() {
    return {
        set: function(e, h, s, d) {
            e = typeof e == 'object' ? e : az(e); var oh = e.offsetHeight, ho = $(e).height();
            ho = oh - parseInt(ho); var hd = oh - ho > h ? -1 : 1; clearInterval(e.si); e.si = setInterval(function() { TINY.height.tw(e, h, ho, hd, s) }, 20)
        },
        tw: function(e, h, ho, hd, s) {
            var oh = e.offsetHeight - ho;
            if (oh == h) { clearInterval(e.si) } else { if (oh != h) { $(e).height(oh + (Math.ceil(Math.abs(h - oh) / s) * hd) + 'px'); } }
        }
    }
} ();

TINY.alpha=function(){
	return{
		set:function(e,a,s){
			e=typeof e=='object'?e:az(e); 
			$(e).fadeTo(1000,a*100);
		}
	}
}();

TINY.style=function(){return{val:function(e,p){e=typeof e=='object'?e:az(e); return e.currentStyle?e.currentStyle[p]:document.defaultView.getComputedStyle(e,null).getPropertyValue(p)}}}();

function SetThumbNailWidth(elem){
    w = parseInt($(elem).parent().attr("w"));
    w += parseInt($(elem).outerWidth());
    $(elem).parent().attr("w", w);
    if($(elem).parent().width() < w){
        $(elem).parent().width(w);        
    }
}

