(function($){
$.fn.CJSlider = function(options) {
    var self = this;

    var defaults = {
        animationLength: 1200,
        container: self.find(".slider_container").children("div"),
        controls: self.find(".slider_controls"),
        current: 0,
        slideInterval: 3000
    },
    options = $.extend(options, defaults);

    options.slides = options.container.find('div');
    options.slideWidth = options.slides.filter(':eq(0)').width();
    options.total = options.slides.length;

    var functions = {
        bindEvents: function() {
            options.btn.live('click', functions.clickEvent);
        },
        clearTimer: function() {
            clearInterval(options.interval);
        },
        clickEvent: function() {
            var _this = $(this);
            var number = _this.index()+1;
					
					if (options.current+1 !== number) {
              functions.clearTimer();
              options.container.stop(true, false);
              functions.setBtnClass(options.current, false);
              options.current = number-2;
              functions.next();
					}
        },
			  createButtons: function() {
			  		var html = '';
			  
			  		options.slides.each(function(k) {
						html += '<div>' + (k+1) + '</div>';
					});

					options.controls.html(html);
					options.btn = options.controls.find('div');
					options.btn.filter(':eq(0)').addClass('active');
			  },
        next: function() {
            var left = -(options.current+1)*options.slideWidth;

            if ((options.current+1) === options.total) {
                left = 0;
            }

            options.container.animate({
                marginLeft: left
            }, {
                duration: options.animationLength,
                complete: function() {
                    functions.setBtnClass(options.current, false);

                    if (left === 0) {
                        options.current = 0;
                    } else {
                        options.current++;
                    }

                    functions.setBtnClass(options.current, true);
                    functions.setTimer();
                }
            });
        },
        setBtnClass: function(key, active) {
            var btn = options.btn.filter(':eq(' + key + ')');

            if (active === true) {
                btn.addClass('active');
            } else{
                btn.removeClass('active');
            }
        },
        setTimer: function() {
            options.interval = setTimeout(functions.next, options.slideInterval);
        }
    };

		functions.createButtons();
    functions.bindEvents();
    functions.setTimer();
}
})(jQuery);
