(function ($) {

    $.fn.jFlow = function (options) {

        var opts = $.extend({},

        $.fn.jFlow.defaults, options);

        var cur = 0;

        var timer;

        var selected_class = "jFlowSelected";

        var maxi = $(".jFlowControl").length;

        $(this).find(".jFlowControl").each(function (i) {

            $(this).click(function () {

                dotimer();

                $(".jFlowControl").removeClass(selected_class);

                $(this).addClass(selected_class); //alert(cur);

                //alert(i);

                var dur = Math.abs(cur - i);

                $(".jFlowSlideContainer").hide();

                $(opts.slides).animate({

                    marginLeft: "-" + (i * $(opts.slides).find(":first-child").width() + "px")

                },

                1);

                $(".jFlowSlideContainer").fadeIn('slow', function () {});

                cur = i;

            });

        });

        $(opts.slides).before('<div class="jFlowSlide"></div>').appendTo(".jFlowSlide");

        $(opts.slides).children("div").each(function () {

            $(this).before('<div class="jFlowSlideContainer"></div>').appendTo($(this).prev());

        }); //initialize the controller

        $(".jFlowControl").eq(cur).addClass(selected_class);

        var resize = function (x) {

            $(".jFlowSlide").css({

                position: "relative",

                width: opts.width,

                height: opts.height,

                overflow: "hidden"

            });

            $(opts.slides).css({

                position: "relative",

                width: $(".jFlowSlide").width() * $(".jFlowControl").length + "px",

                height: $(".jFlowSlide").height() + "px",

                overflow: "hidden"

            });

            $(opts.slides).children().css({

                position: "relative",

                width: $(".jFlowSlide").width() + "px",

                height: $(".jFlowSlide").height() + "px",

                "float": "left"

            });

            $(opts.slides).css({

                marginLeft: "-" + (cur * $(opts.slides).find(":first-child").width() + "px")

            });

        }

        resize();

        $(window).resize(function () {

            resize();

        });

        $(".jFlowPrev").click(function () {

            dotimer();

            doprev();

        });

        var doprev = function (x) {

            if (cur > 0) cur--;

            else cur = maxi - 1;

            $(".jFlowControl").removeClass(selected_class);

            $(".jFlowSlideContainer").hide();

            $(opts.slides).animate({

                marginLeft: "-" + (cur * $(opts.slides).find(":first-child").width() + "px")

            },

            1);

            $(".jFlowControl").eq(cur).addClass(selected_class);

            $(".jFlowSlideContainer").fadeIn('slow', function () {});

        }

        $(".jFlowNext").click(function () {

            donext();

            dotimer();

        });

        var donext = function (x) {

            if (cur < maxi - 1) cur++;

            else cur = 0;

            $(".jFlowControl").removeClass(selected_class);

            $(".jFlowSlideContainer").hide();

            $(opts.slides).animate({

                marginLeft: "-" + (cur * $(opts.slides).find(":first-child").width() + "px")

            },

            1);

            $(".jFlowControl").eq(cur).addClass(selected_class);

            $(".jFlowSlideContainer").fadeIn('slow', function () {});

        }

        var dotimer = function (x) {

            if (timer != null) clearInterval(timer);

            timer = setInterval(function () {

                donext();

            },

            8000);

        }

        dotimer();

    };

    $.fn.jFlow.defaults = {

        easing: "swing",

        duration: 100,

        width: "100%"

    };

})(jQuery);


