(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);
 $(opts.slides).animate({
 marginLeft: "-" + (i * $(opts.slides).find(":first-child").width() + "px")
 }, opts.duration*(dur));
 cur = i;
 });
 });

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

 $(opts.slides).find("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);
 $(opts.slides).animate({
 marginLeft: "-" + (cur * $(opts.slides).find(":first-child").width() + "px")
 }, opts.duration);
 $(".jFlowControl").eq(cur).addClass(selected_class);
 }



 $(".jFlowNext").click(function(){
 donext();
 dotimer();
 });

 var donext = function (x){
 if (cur < maxi - 1)
 cur++;
 else
 cur = 0;

 $(".jFlowControl").removeClass(selected_class);
 $(opts.slides).animate({
 marginLeft: "-" + (cur * $(opts.slides).find(":first-child").width() + "px")
 }, opts.duration);
 $(".jFlowControl").eq(cur).addClass(selected_class);
 }

 var dotimer = function (x){
 if(timer != null)
 clearInterval(timer);

 timer = setInterval(function() {
 donext();
 }, 10000);

 }

 dotimer();
 };

 $.fn.jFlow.defaults = {
 easing: "swing",
 duration: 400,
 width: "99%"
 };

})(jQuery);