
(function ($) {
    $.fn.slide = function (clickUrl, w) {
        var adbox = $(this);
        w = w == null ? 241 : w;
        var count = adbox.children("a.ad").length;
        var currentPosition = 0;
        var prevPosition = 0;
        var nextPosition = 0;
        var timerId = 0;
        var isClicked = false;
        adbox.width(count * w);



        function moveFw() {
            adbox.css({ "left": 0 });
            adbox.children("a.ad:first").appendTo(adbox);
            prevPosition = currentPosition;
            currentPosition = currentPosition + 1 >= count ? 0 : currentPosition + 1;
        }

        function moveRv() {
            prevPosition = currentPosition;
            currentPosition = currentPosition - 1 < 0 ? count - 1 : currentPosition - 1;
        }

        function getDistance(targetPosition) {
            if (currentPosition == count - 1 && targetPosition == 0) return 1;
            if (currentPosition == 0 && targetPosition == count - 1) return -1;
            return targetPosition - currentPosition;
        }

        function setPager(oldPage, newPage, duration) {
            $("a#p" + oldPage).fadeTo(duration, 1);
            $("a#p" + newPage).fadeTo(duration, 0.2);
        }

        function setSlide(targetPosition, duration, easing) {
            clearInterval(timerId);

            if (targetPosition - currentPosition == 0) {
                isClicked = false;
                nextPosition = currentPosition == count - 1 ? 0 : currentPosition + 1;
                var showTime = $("#ShowTime:eq(0)").val();
                timerId = setInterval(function () { setSlide(nextPosition); }, showTime);
                return;
            }

            duration = duration || 600;
            easing = easing || "swing";

            var distance = getDistance(targetPosition);
            var isRev = distance < 0;
            if (isRev) {
                adbox.css({ "left": -w });
                adbox.children("div.ad:last").prependTo(adbox);
            }

            var newPage = isRev
                          ? (currentPosition - 1 < 0 ? count - 1 : currentPosition - 1)
                          : (currentPosition + 1 >= count ? 0 : currentPosition + 1);
            setPager(currentPosition, newPage, duration);

            adbox.animate({ "left": isRev ? 0 : -w }, duration, easing, function () {
                if (isRev) moveRv(); else moveFw();
                setSlide(targetPosition, duration, easing);
            });
        };

        for (var i = 0; i < count; i++) {
            $(document.createElement("a"))
                .attr({
                    id: ("p" + i),
                    rel: i,
                    href: "javascript:void(0);",
                    "class": i == 0 ? "active" : ""
                })
			    .html("<strong>" + (i + 1) + "</strong>")
			    .appendTo("#pagerinner")
			    .click(function () {
			        isClicked = true;
			        clearInterval(timerId);
			        var targetPosition = ($(this)).attr('rel');
			        var rounds = Math.abs(getDistance(targetPosition));
			        var duration = 600 / rounds;
			        var easing = rounds > 1 ? "linear" : "";
			        setSlide(targetPosition, duration, easing);
			    });
        };


        $("#pagerFw").click(function () {
            if (!isClicked)
                setSlide(currentPosition == count - 1 ? 0 : currentPosition + 1);
            isClicked = true;
        });

        $("#pagerBw").click(function () {
            if (!isClicked)
                setSlide(currentPosition == 0 ? count - 1 : currentPosition - 1);
            isClicked = true;
        });

        $("a.ad").click(function (e) {
            var bannerId = jQuery(this).children("#BannerId").val();
            var campaignId = jQuery(this).children("#CampaignId").val();
            clickUrl = clickUrl == null ? "/banner/AddClick" : clickUrl;

            $.post(clickUrl, { bannerId: bannerId, campaignId: campaignId },
              function (data) {
                  
              });
            return true;
        });

        $("div.ad[rel]").css('cursor', 'pointer');
        $("#pagerinner").css("width", count * 19);
        setPager(10);
        setSlide(0);
    };
})(jQuery);
