(function ($) {
    $.fn.carrossel = function (op) {
        var op = $.extend({ qtd: 1, timer: null, tempo: 4000, autoScroll: false, loop: false, tamanho: null, margin:1, padding:1, bt_ant: null, bt_pro: null, horizontal: true, speed: 200, posicao_atual: 0, total_cliques: 0 }, op);
        var obj = $(this);

        startTimer = function () {
            if (op.timer != null)
                clearInterval(op.timer);
            op.timer = setTimeout(scrollImage, op.tempo);
        };

        scrollImage = function () {
            op.bt_pro.click();
        };

        initialize = function () {
            obj.css("position", "absolute");
            if (op.horizontal) {
                var totalComprimento = ($('li.plano', obj).length * op.tamanho) + ($('li.plano', obj).length * op.margin) + ($('li.plano', obj).length * op.padding);
                $('li.plano', obj).each(function () {
                    $(this).css("width", op.tamanho + "px");
                    $(this).css("float", "left");
                });
				
                if (totalComprimento < (op.tamanho * op.qtd)) {
                    $(op.bt_ant).fadeOut('fast');
                    $(op.bt_pro).fadeOut('fast');
                } else {
                    $(op.bt_ant).fadeIn('fast');
                    $(op.bt_pro).fadeIn('fast');
                }


                obj.css("width", totalComprimento + "px");

                obj.parent().css("position","relative").css("width", (op.tamanho * op.qtd)+ ((op.qtd-1)* op.margin) + (op.qtd * op.padding) + "px").css("height", op.largura + "px").css("overflow", "hidden");
                op.total_cliques = Math.ceil((parseInt(obj.css('width').replace('px', ''))) / (op.tamanho * op.qtd));
            } else {
                obj.parent().css("height", op.tamanho + "px").css("visibility", "visible").css("overflow", "hidden").css("position", "relative");
                op.total_cliques = Math.ceil((parseInt(obj.css('height').replace('px', ''))) / (op.tamanho * op.qtd));
                obj.css("height", op.tamanho + "px");
            }
        };

        if (op.autoScroll)
            startTimer();

        if (op.horizontal) {
            if (op.tamanho == null || op.tamanho == 0) {
                t = parseInt(obj.parent().css("width").replace('px', ''));
                if (t == 0) {
                    alert('Defina o tamanho da div');
                    return false;
                } else
                    op.tamanho = t;
            }

            if (op.bt_ant == null) op.bt_ant = this.parent().after('<a href="#">Anterior</a>');
            if (op.bt_pro == null) op.bt_pro = this.parent().after('<a href="#">Próximo</a>');

            op.bt_ant.click(function () {
				
				/*alert(($('li.plano', obj).length * op.tamanho) + ((op.qtd)* op.margin) + (op.qtd * op.padding));
				alert(obj.css('width').replace('px', ''));
				alert(($('li.plano', obj).length * op.tamanho) != obj.css('width').replace('px', ''));
                if (($('li.plano', obj).length * op.tamanho) != obj.css('width').replace('px', '')) {
                    obj.animate({ left: '0px' }, op.speed, null);
                    initialize();
                    op.posicao_atual = 0;
                    return false;
                }*/

                if (op.posicao_atual != 0 && (op.posicao_atual - 1) < op.total_cliques) {
                    op.posicao_atual--;
                    obj.animate({ left: (parseInt(obj.css('left').replace('px', '')) + (op.tamanho * op.qtd)) + ((op.qtd)* op.margin) + (op.qtd * op.padding) }, op.speed, null);
                } else if (op.loop) {
                    op.posicao_atual = op.total_cliques - 1;
                    obj.animate({ left: parseInt((((op.tamanho * op.qtd)+ ((op.qtd)* op.margin) + (op.qtd * op.padding)) * op.posicao_atual) * -1) }, op.speed, null);
                }

                if (op.autoScroll) {
                    clearInterval(op.timer);
                    startTimer();
                }
                return false;
            });

            op.bt_pro.click(function () {
                if (op.posicao_atual != op.total_cliques && (op.posicao_atual + 1) < op.total_cliques) {
					op.posicao_atual++;
                    obj.animate({ left: (parseInt( (obj.css('left').replace('px', '')=='auto')?0:obj.css('left').replace('px', '') ) - (op.tamanho * op.qtd) - ((op.qtd)* op.margin) - (op.qtd * op.padding)) }, op.speed, null);
                } else if (op.loop) {
                    op.posicao_atual = 0;
                    obj.animate({ left: '0px' }, op.speed, null);
                }
				
                if (op.autoScroll) {
                    clearInterval(op.timer);
                    startTimer();
                }
                return false;
            });

        } else {
            if (op.tamanho == null || op.tamanho == 0) {
                t = parseInt(obj.parent().css("height").replace('px', ''));
                if (t == 0) {
                    alert('Defina o tamanho da div');
                    return false;
                } else
                    op.tamanho = t;
            }

            if (op.bt_ant == null) op.bt_ant = this.parent().before('<a href="#">&lsaquo;</a>');
            if (op.bt_pro == null) op.bt_pro = this.parent().after('<a href="#">&rsaquo;</a>');

            op.bt_ant.click(function () {
                if (op.posicao_atual != 0 && (op.posicao_atual - 1) < op.total_cliques) {
                    op.posicao_atual--;
                    obj.animate({ top: (parseInt(obj.css('top').replace('px', '')) + op.tamanho) }, op.speed, null);
                }
                if (op.autoScroll) {
                    clearInterval(op.timer);
                    startTimer();
                }

                return false;
            });

            op.bt_pro.click(function () {
                if (op.posicao_atual != op.total_cliques && (op.posicao_atual + 1) < op.total_cliques) {
                    op.posicao_atual++;
                    obj.animate({ top: (parseInt(obj.css('top').replace('px', '')) - op.tamanho) }, op.speed, null);
                }

                if (op.autoScroll) {
                    clearInterval(op.timer);
                    startTimer();
                }

                return false;
            });
        }

        this.each(function () {
            initialize();
        });


    };
})(jQuery);
