function later(fn) {
    setTimeout(fn, 1);
}

var sliderClass = function (sel, childsel) {
    var mX = -1.6,
        itemW = null,
        _vel = -0.8,
        _veltimer,
        _calctimer,
        _running = false,
        _items = [],
        _par = null,
        _w = null,
        ow = 960,
        how = ow * .5,
        busy = false;


    this.dispose = function () {
        _running = false;
        clearInterval(_calctimer);
        clearInterval(_veltimer);

        delete _items;
        delete _par;
        delete _w;
    }

    this.stop = function () {
        if (_running) _stop();
    }


    this.start = function () {
        if (!_running) _start();
    }

    _start = function () {
        _running = true;
        _vel = mX;
        clearInterval(_calctimer);
        _calctimer = setInterval(_docalcs, 40);
        clearInterval(_veltimer);
        _veltimer = setInterval(_findvel, 60);
    }

    _stop = function () {
        _running = false;
    }

    _docalcs = function () {
        if (_par == undefined || _par.length == 0) {
                clearInterval(_calctimer);
                return;
            }

        var _ri = _rio;
        while (_ri--) {
            var it= _items[_ri];
            var rl = (it.rl += _vel);
            it.style.left = rl + 'px';
            if (rl <= 0 - it.w) {
                it.rl = (_w - it.w)
            }
        }
    }

    _findvel = function () {
        if (_par == undefined || _par.length == 0) {
            clearInterval(_veltimer);
            return;
        }

        if (_running) {

            _vel = (_vel < mX ? (_vel > 0 - mX ? _vel : 0 - mX) : mX);
            if (_vel <= 0.01 && _vel >= -0.01) {
                _vel = 0;
                running = false;
                clearInterval(_calctimer);
                clearInterval(_veltimer);

                busy = false;
                return;
            }
        } else {
            _vel = (_vel * 0.91 * 100) * .01;
        }
    }
    try {

        /* initialize the slider */
        _par = $(sel);
        _par.css({position:'absolute'});
        _par.parent().mouseleave(/* over */ function () {
            _running = true;
            _vel = mX;
            clearInterval(_calctimer);
            clearInterval(_veltimer);
            _calctimer = setInterval(_docalcs, 32);
            _veltimer = setInterval(_findvel, 60);
        });
        _par.parent().mouseenter(/* out */ function () {
            _running = false;
        });

        _items = _par.find(childsel).toArray();
        _w = 0;
        for (var _ri = 0, _rio = _items.length; _ri < _rio; _ri++) {
            var it = $(_items[_ri]);
            itemW = it.outerWidth();
            it.click(function () {
                later(_stop);
            });
            _items[_ri].w = itemW;
            _items[_ri].style.position = 'absolute';
            _items[_ri].style.zIndex = '200';
            _items[_ri].style.display = 'block';
            _items[_ri].rl = _w;
            _items[_ri].ol = _w;
            _items[_ri].style.left = _w + 'px';
            _w += itemW;
        }
        _start();
    }
    catch (err) {
        //window.trace(err);
    }
}










