/**
 * Created by SonicK.
 * User: vadim.lyahovic
 * Date: 5/16/11
 * Time: 5:41 PM
 * To change this template use File | Settings | File Templates.
 */
(function($) {
    function RotatorGallery(obj) {
        this.obj = obj;
        this.opts = {
            sels : {
                next       : ".next",
                previos    : ".previos",
                nextTr     : ".nextTr",
                previosTr  : ".previosTr",
                container  : ".container",
                hero_arrow : ".heroArrow"
            },
            props : {
                arrow_width : 37,
                item_width  : 265
            },
            count    : $(this.obj).find(".item").size(),
            index    : 0,
            interval : 5000
        };
        this.init();
    }

    RotatorGallery.prototype.init = function() {
        var instance = this;
        var slideNext = function() {
            instance.opts.index++;
            if (instance.opts.index < instance.opts.count) {
				$(instance.obj)
                        .find(instance.opts.sels.container)
						.animate({'marginLeft': "-=" + instance.opts.props.item_width}, "fast");
            } else {
                instance.opts.index = instance.opts.count - 1;
                clearInterval(autoSliding);
            }
			
			showControls();

			if (instance.opts.index == instance.opts.count - 1) {
				hideNext();
			}
		};
        var slidePrevios = function() {
            instance.opts.index--;
            if (instance.opts.index >= 0) {
                $(instance.obj)
                        .find(instance.opts.sels.container)
                        .animate({"marginLeft" : "+=" + instance.opts.props.item_width}, "fast");
            } else {
                instance.opts.index = 0;
            }
			
			if (instance.opts.index == 0) {
				hidePrevious();
			}
			
			showControls();
        };
        $(this.obj).find(this.opts.sels.nextTr).click(function() {
            clearInterval(autoSliding);
            slideNext();
        });
        $(this.obj).find(this.opts.sels.previosTr).click(function() {
            clearInterval(autoSliding);
            slidePrevios();
        });
		
		var showControls = function() {
			if (instance.opts.index < instance.opts.count - 1) {
				$(instance.obj).find(instance.opts.sels.next)
						.stop()
						.animate({ right : 0 }, "fast");
			}
			
			if (instance.opts.index > 0) {
				$(instance.obj).find(instance.opts.sels.previos)
						.stop()
						.animate({ left : 0 }, "fast");
			}
		}
		
		var hideNext = function() {
			$(instance.obj).find(instance.opts.sels.next)
				.stop()
				.animate({
							 right : -instance.opts.props.arrow_width
						 }, "fast");
		}
		
		var hidePrevious = function() {
			$(instance.obj).find(instance.opts.sels.previos)
				.stop()
				.animate({
							 left : -instance.opts.props.arrow_width
						 }, "fast");
		}
		
		var hideControls = function() {
			hideNext();
			hidePrevious();			
		}
		
		$(this.obj).mouseenter(function() {
			showControls();
		});
		
		$(this.obj).mouseleave(function() {
			hideControls();
		});

		$(this.obj)
			.find(this.opts.sels.container)
			.css("width", this.opts.count * 265);

		showControls();
        var autoSliding = setInterval(slideNext, this.opts.interval);
    };
	

    $.fn.extend({
        RotatorGallery: function() {
            return this.each(function() {
                this.hero = new RotatorGallery(this);
            });
        }
    });
})(jQuery);
