fade : function(obj,timer,ftype,cur,fn) {
        if (this.stack == undefined) {this.stack = [];}
        obj = typeof obj == 'string' ? $(obj) : obj;
        if (!obj) return false;        for (var i=0;i<this.stack.length;i++) {
            if (this.stack[i] == obj && (cur == 0 || cur == 100)) return false;
        }
        if (cur == 0 || cur == 100) {this.stack.push(obj);}        ftype = ftype != 'in' && ftype != 'out' ? 'out' : ftype;
        timer = timer || 400;
        var step = 100/(timer/20);
        obj.style.filter = 'Alpha(opacity=' + cur + ')';
        obj.style.opacity = cur / 100;
        cur = ftype == 'in' ? cur + step : cur - step ;
        var fadeTimer = (function(){
            return setTimeout(function () {
                Util.fade(obj, timer, ftype, cur, fn);
            }, 20);
            })();
        this[ftype == 'in' ? 'show' : 'hide'](obj);
        if(ftype == 'in' && cur >= 100 || ftype == 'out' && cur <= 0) {
            clearTimeout(fadeTimer);
            for (i=0;i<this.stack.length;i++) {
                if (this.stack[i] == obj ) {
                    this.stack.splice(i,1); break;
                }
            }            fn = fn || function(){};
            fn(obj);
        }
        return obj;
    },
    fadeIn : function (obj,timer,fn) {
        return this.fade(obj, timer, 'in', 0, fn);
    },