﻿(function ($) {
    $.fn.miniscroller = function (options) {
        var defaults = {
            next: ".next",
            prev: ".prev",
            type: "horizontal",
            pause: 5000,
            speed: 500,
            itemsInGroup: 1
        };
        var mask = null;
        var items = null;
        var delta = 0;
        var index = 0;
        var _locked = false;
        var _intvl = 0;
        var options = $.extend(defaults, options);
        var _type = options.type;
        var _next_selector = options.next;
        var _prev_selector = options.prev;
        var _cssProperty = options.type == "vertical" ? "top" : "left";        
        function _reset() {
            _locked = true;
            var anim = {};
            anim[_cssProperty] = 0;
            mask.children().eq(0).animate(anim, options.speed, function () {
                _locked = false;
                index = 0;
                if (index < items - 1)
                    $(_next_selector).css("visibility", "visible");
                if (index == 0)
                    $(_prev_selector).css("visibility", "hidden");
            });
        }
        function _prev() {
            if (_locked || index == 0)
                return;
            _locked = true;
            var anim = {};
            anim[_cssProperty] = ("+=" + delta);
            mask.children().eq(0).animate(anim, options.speed, function () {
                _locked = false;
                index--;
                if (index < items - 1)
                    $(_next_selector).css("visibility", "visible");
                if (index == 0)
                    $(_prev_selector).css("visibility", "hidden");
            });
        }
        function _next() {
            if (_locked || index == items)
                return;
            _locked = true;
            var anim = {};
            anim[_cssProperty] = ("-=" + delta);
            mask.children().eq(0).animate(anim, options.speed, function () {
                _locked = false;
                index++;
                if (index == items - 1)
                    $(_next_selector).css("visibility", "hidden");
                if (index > 0)
                    $(_prev_selector).css("visibility", "visible");
            });
        }
        return this.each(function () {
            mask = $(this);
			mask.css("position", "relative")
				.css("overflow", "hidden");
			mask.children().eq(0).css("position", "absolute")								
								.css("width", "100000px")
								.css("left", "0")
								.css("top", "0");
            delta = options.type == "vertical" ? mask.height() : mask.width();
            $(_prev_selector).css("visibility", "hidden").click(_prev);
            $(_next_selector).css("visibility", "hidden").click(_next);
			
			var items_w_class = mask.find(".item").size();
			if(items_w_class == 0)
				items = Math.ceil(mask.children().eq(0).children().size() / options.itemsInGroup);					
			else
				items = Math.ceil(mask.find(".item").size() / options.itemsInGroup);
				
			
            if (items > 1)
				
				if(options.type == "horizontal")
				{
					mask.children().eq(0).children().each(function () {
						$(this).css("float", "left");
					});					
				}
                $(_next_selector).css("visibility", "visible");
            _intvl = setInterval(function () {
                if (index == items - 1)
                    _reset();                
                else 
                    _next();                
            }, options.pause);
        });
    };
})(jQuery);
