(function($) {
$.fn.jSimpleHWScroller = function(o) {
	var o = $.extend({
        btnPrev: null,
        btnNext: null,
        activeClass: 'active',
        container: null,
        vertical: false
    }, o || {});

    return this.each(function() {
        var obj = $(this);
        var currMargin = 0;
        var container = $(o.container, obj).eq(0);
        var btnNext = $(o.btnNext, obj);
        var btnPrev = $(o.btnPrev, obj);

        var blockWH, containerWH, maxMargin;
        blockWH = containerWH = maxMargin = 0;
        var timer = null;
        var bbe, bfe;
        bbe = bfe = false;

        if (o.vertical)
        	containerWH += height(container);
        else
        	containerWH = width(container);

        var ul = $('ul', container).eq(0)
        var lis = $('li', ul);

        lis.each(function() {
        	if (o.vertical)
        		blockWH += height($(this));
        	else
        		blockWH += width($(this));
        });

        maxMargin = blockWH - containerWH;

        if (maxMargin <= 0)
        	return;

        var html = container.html();
        container.empty();

        var containerIn = $('<div>').appendTo(container);

        containerIn.css({
        	position: 'static'
        });

        if (o.vertical)
        	containerIn.css('height', blockWH + 'px');
        else
        	containerIn.css('width', blockWH + 'px');

		containerIn.html(html);

		bfe = true;
		btnNext.addClass(o.activeClass);

		btnNext.mouseover(function() {
			clearInterval(timer);

			timer = setInterval(function() {
				if (currMargin < maxMargin) {
					currMargin += 3;

					if (currMargin >= maxMargin) {
						currMargin = maxMargin;
						bfe = false;
						btnNext.removeClass(o.activeClass);
					}

					 if (o.vertical)
					 	containerIn.css("margin-top", (currMargin * -1) + 'px');
					 else
						containerIn.css("margin-left", (currMargin * -1) + 'px');

					if (!bbe) {
						bbe = true;
						btnPrev.addClass(o.activeClass);
					}
				} else {
					clearInterval(timer);
				}
			}, 25);
		});

		btnNext.mouseout(function() {
			clearInterval(timer);
		});

		btnPrev.mouseover(function() {
			clearInterval(timer);

			timer = setInterval(function() {
				if (currMargin > 0) {
					currMargin -= 3;

					if (currMargin <= 0) {
						currMargin = 0;
						bbe = false;
						btnPrev.removeClass(o.activeClass);
					}

					if (o.vertical)
					 	containerIn.css("margin-top", (currMargin * -1) + 'px');
					 else
						containerIn.css("margin-left", (currMargin * -1) + 'px');

					if (!bfe) {
						bfe = true;
						btnNext.addClass(o.activeClass);
					}
				} else {
					clearInterval(timer);
				}
			}, 25);
		});

		btnPrev.mouseout(function() {
			clearInterval(timer);
		});
    });
};

function width(el) {
    return el[0].offsetWidth + el.outerWidth(true) - el.outerWidth();
};
function height(el) {
    return el[0].offsetHeight + el.outerHeight(true) - el.outerHeight();
};

})(jQuery);
