$.fn.extend({
    tiny: function(opt) {
        if (this.length > 1) return $(this).each(function() { $(this).tiny(opt) })
        var keeper = $(this).css({ overflow: 'hidden', position: 'relative' }),
			ul = $('>ul', keeper),
			li = [],
			w = 0,
			i = 0,
			slide = function() {
			    $(li).removeClass('current').eq(0).addClass('current')
			    ul.stop().animate({ left: '-' + $('.current', ul).attr('offsetLeft') + 'px' }, opt.duration, opt.easing)
			},
			slideTo = function(n) {
			    $('>ul>li', keeper).eq(n).addClass('current').siblings().removeClass('current')
			    while (!/current/.test(li[0].className)) li.push(li.shift())
			    slide()
			},
			next = function() {
			    li.push(li.shift())
			    slide()
			},
			prev = function() {
			    li.unshift(li.pop())
			    slide()
			}
        opt = $.extend({ prev: '.tiny_prev', next: '.tiny_next', pagination: '.tiny_pagination', easing: '', duration: '' }, opt)
        $('>li', ul).each(function() {
            $(this).css({ 'float': 'left' })
            w += $(this).outerWidth()
            i++
            li.push(this)
        }).eq(0).addClass('current')
        ul.width(w).css({ position: 'relative', left: 0 })
        keeper.width(w / i)
        keeper.siblings(opt.prev + ',' + opt.next).bind('click', function() {
            if ($(this).is(opt.next))
                next()
            else
                prev()
            return false
        })
        keeper.siblings(opt.pagination).find('li a').bind('click', function() {
            slideTo(this.rel)
            $(this).parent().addClass('current').siblings().removeClass('current')
            return false
        })
        keeper.bind('tinyNext', next)
        keeper.bind('tinyPrev', prev)

        return this
    }
})
