(function($, global) {
    var doc_ready = false;

    global.DistributorWidgetHandler = function() {
        var publicAPI = null,
            numItems = 0,
            pos = 0,
            scrollwidth = 0,
            area = 0,
            scrolling = false
            ;

        function init() {
            $(".slider .arrowLeft").bind("dragstart", function(evt) { evt.preventDefault(); return false; });
            $(".slider .arrowRight").bind("dragstart", function(evt) { evt.preventDefault(); return false; });

            $(".slider .arrowLeft").bind("click", endMoveRight);
            $(".slider .arrowRight").bind("click", endMoveLeft);

            $(".slider .arrowLeft").bind("mousedown", startMoveRight);
            $(".slider .arrowRight").bind("mousedown", startMoveLeft);

            $(".slider .scrollableItem").each(function() {
                scrollwidth += $(this).width() + global.parseInt($(this).css("marginRight"));
                numItems++;
            });

            area = $(".slider .slide-master").width();

            updateControls();
        }

        function startMoveLeft(evt) {
            if (!scrolling) {
                if (pos < (scrollwidth - area)) {
                    scrolling = true;
                    $(".slider .arrowRight").bind("click", endMoveLeft).bind("mouseleave", endMoveLeft);
                    moveLeft();
                }
            }
            evt.preventDefault();
            return false;
        }

        function moveLeft() {
            if (pos < (scrollwidth - area)) {
                delta = Math.min(30, scrollwidth - area - pos);
                pos += delta;
                $(".slider ul").animate({ left: "-=" + delta }, 50, null, function() {
                    if (scrolling) moveLeft();
                    else updateControls();
                });
                updateControls();
            }
            else endMoveLeft();
        }

        function endMoveLeft(evt) {
            $(".slider .arrowRight").unbind("mouseleave");
            updateControls();
            scrolling = false;
            if (evt) evt.preventDefault();
            return false;
        }

        function startMoveRight(evt) {
            if (!scrolling) {
                if (pos > 0) {
                    scrolling = true;
                    $(".slider .arrowLeft").bind("click", endMoveRight).bind("mouseleave", endMoveRight);
                    moveRight();
                }
            }
            evt.preventDefault();
            return false;
        }

        function moveRight() {
            if (pos > 0) {
                delta = Math.min(pos, 30)
                pos -= delta;
                $(".slider ul").animate({ left: "+=" + delta }, 50, null, function() {
                    if (scrolling) moveRight();
                    else updateControls();
                });
                updateControls();
            }
            else endMoveRight();
        }

        function endMoveRight(evt) {
            $(".slider .arrowLeft").unbind("mouseout").unbind("mouseleave");
            updateControls();
            scrolling = false;
            if (evt) evt.preventDefault();
            return false;
        }

        function updateControls() {
            if (pos == 0) $(".slider .arrowLeft").addClass("hidden");
            else $(".slider .arrowLeft").removeClass("hidden");
            if (pos >= (scrollwidth - area)) $(".slider .arrowRight").addClass("hidden");
            else $(".slider .arrowRight").removeClass("hidden");
        }

        publicAPI = {
            init: init
        };
        return publicAPI;
    } ();

    $(document).ready(function() {

        doc_ready = true;

        global.DistributorWidgetHandler.init();

    });

})(jQuery, window);