﻿ldh = {
    $: function(o) { return typeof o == "string" ? document.getElementById(o) : o },
    $$: function(o, p) { return (p == undefined ? document : this.$(p)).getElementsByTagName(o) },
    on: function(o, type, fn) { o.attachEvent ? o.attachEvent('on' + type, function() { fn.call(o) }) : o.addEventListener(type, fn, false); },
    opacity: function(who, x) {
        who = this.$(who);
        if (x == undefined) {
            if (!!window.ActiveXObject) {
                return who.filters.alpha ? (who.filters.alpha.opacity / 100) : 1;
            } else {
                var op = who.style.opacity;
                return isNaN(op) ? 1 : op * 1;
            }
        }
        who.style.filter = "alpha(opacity=" + parseInt(x * 100) + ")";
        who.style.opacity = x;
        return this;
    },
    fadeTo: function(who, x, fn) {
        who = this.$(who);
        var fm = this.opacity(who), m = 1, r = Math.floor, s = 2, v;
        if (fm > x) { m = -1; r = Math.ceil; s = 1 };
        var iFx = function() { return fm = r((fm + m * 0.02 * s) * 100) / 100 };
        clearInterval(who.opacityTimer);
        who.opacityTimer = setInterval(function() {
            var v = Math.max(0, Math.min(x, iFx()));
            ldh.opacity(who, v);
            if (v == x) {
                fn && fn.call(who);
                clearInterval(who.opacityTimer);
            };
        }, 13); return this;
    },
    fadeOut: function(who, fn) { return this.fadeTo(who, 0, fn) },
    fadeIn: function(who, fn) { return this.fadeTo(who, 1, fn) },
    move: function(who, attr, val, s, fn) {
        who = this.$(who);
        var fm = parseInt(who.style[attr]) || 0;
        var iFx = this.fx(fm, val, s);
        clearInterval(who.moveTimer);
        who.moveTimer = setInterval(function() {
            var v = iFx();
            who.style[attr] = v + 'px';
            if (v == val) {
                fn && fn.call(who);
                clearInterval(who.moveTimer);
            };
        }, 13); return this;
    },
    fx: function(form, to, s) {
        var m = Math[form < to ? 'ceil' : 'floor'];
        return function() { return form += m((to - form) * (s || 0.13)) };
    }
};
try { document.execCommand("BackgroundImageCache", false, true); } catch (e) { }; //for IE6
shower = {
    init: function(setting) {
        var ini = { box: ldh.$(setting.box), tip: ldh.$(setting.tip), index: 0, z: 99, list: [] };
        for (var Id in ini) this[Id] = ini[Id];
        var imgs = ldh.$$('img', this.box);
        for (var i = 0; i < imgs.length; ++i) {
            this.list.push(imgs[i]);
            imgs[i].style.zIndex = i;
        };
        this.tip.innerHTML = imgs[0].getAttribute('alt');
        this.hideTip();
    },
    show: function() {
        var p2 = this.list[this.index++];
        if (this.index == this.list.length) this.index = 0;
        ldh.opacity(p2, 0);
        p2.style.zIndex = ++this.z;
        ldh.fadeIn(p2, function() {
            shower.tip.innerHTML = p2.getAttribute('alt');
            ldh.move(shower.tip, 'bottom', 0, 0.1, function() {
                setTimeout(function() { shower.hideTip() }, 4000);
            }).opacity(shower.tip, 0.8);
        })
    },
    hideTip: function() {
        shower.show();
        ldh.move(this.tip, 'bottom', -100, 0.05);
    }
}

ldh.on(window, 'load', function() {
    shower.init({
        box: 'fx_box',
        tip: 'tip'
    });
})
