﻿(function ($) {

    $.fn.csFlowSilde = function (options) {

        var defaults = {
            width: 470,
            height: 400,
            timeout: 12000,
            duration: 450,
            slides: "#slides",
            slide: ".slide",
            easing: "easeInOutCirc",
            paging: true,
            navigation: true
        };

        var options = $.extend(defaults, options);

        var container = $(this);
        var slides = $(options.slides, container);

        var slide = 0;
        var loop = null;
        var paging = null;
        var next = null;
        var prev = null;

        var length = $(options.slide, container).length;
        
        
        if(length < 2)
        {
        	options.paging = false;
        	options.navigation = false;
        }

        var AddNavLinks = function () {
            if (options.paging) {
                paging = $('<div />', { 'class' : 'paging' }).appendTo(container);

                for (i = 0; i < length; i++) {
                    var a = $('<a/>').text(i + 1).data('slide', i).appendTo(paging);
                    a.click(function (event) {
                        var i = $(this).data('slide');
                        if (loop != null)
                            clearTimeout(loop);
                        SlideTo(i);
                    })
                }
            }

            if (options.navigation) {
                prev = $('<div />', { 'class' : 'nav prev' }).appendTo(container);
                next = $('<div />', { 'class' : 'nav next' }).appendTo(container);

                $('<a />').click(function () {
                    if (slides.is(":not(:animated)")) {
                        if (Next()) {
                            Clear();
                            Slide();
                        }
                    }
                }).appendTo(next);

                $('<a />').click(function () {
                    if (slides.is(":not(:animated)")) {
                        if (Prev()) {
                            Clear();
                            Slide();
                        }
                    }
                }).appendTo(prev);
            }
        }

        var Next = function () {
            if (slide < (length - 1)) {
                slide++;
                return true;
            }
            return false;
        }

        var Prev = function () {
            if (slide > 0) {
                slide--;
                return true;
            }
            return false;
        }

        var Clear = function () {
            if (loop != null) clearTimeout(loop);
        }


        var Slide = function () {
            ShowHideNav();

            if (slide < 0) slide = 0;

            slides.animate({ 'left': -(slide * options.width) }, options.duration, options.easing, function () {
                SetActiveLink();
                ShowHideNav();
                loop = setTimeout(function () {
                    if (!Next()) slide = 0;
                    Slide();
                },
						options.timeout);
            });
        }


        var SetActiveLink = function () {
            if (options.paging) {
                $('a', paging).removeClass('active');
                $('a:eq(' + slide + ')', paging).addClass('active');
            }
        }

        var ShowHideNav = function () {
            if (options.navigation) {
                (slide == 0) ? $('a', prev).hide() : $('a', prev).show();
                (slide == length - 1) ? $('a', next).hide() : $('a', next).show();
            }
        }

        var SlideTo = function (i) {
            slide = i;
            Slide();
        }

        AddNavLinks();
        Slide();
    }

})(jQuery);
