/// <reference path="jquery-1.6.2.min.js" />

//======================================================
// Autor:   Marvin Martins Mendes
// Data:    10/10/2011
// Descrição: Classe Slider para apresentação de 
//            Destaques com melhorias
//======================================================

jQuery.fn.tickerText = function (text, options) {
    var opt = {
        delay: 30,
        tickChar: ["-", "_"]        
    }

    opt = jQuery.extend(opt, options);

    var $this = $(this);

    if (text == undefined || text === "") {
        $this.html("");
        return $this;
    }

    var pos = 0;

    var onTick = function () {
        var txt = text.substring(0, pos) + (pos % 2 ? opt.tickChar[0] : opt.tickChar[1]);
        $this.html(txt);
        if (pos == text.length) {
            $this.html(text);
        } else {
            pos++;
            window.setTimeout(onTick, opt.delay);
        }
    }

    window.setTimeout(onTick, opt.delay);
}

jQuery.fn.bannerSlider = function (options) {


    var opt = {
        transition: 1000,
        delay: 5000,
        items: ".slider-item",
        showNav: true,
        showNavNumber: true,
        showTitulo: true,
        showTituloTick: true,
        onchange: function (item) { },
        onload: function (item) { }
    }

    opt = jQuery.extend(opt, options);

    var slideTime = 0;
    var _idx_slide = 0;
    var $this = $(this);
    var $container = $this.find(".slide-container");
    var $items = $container.find(opt.items);
    var $navigator = $this.find(".slide-nav");
    var $titulo = $this.find(".slide-titulo");

    if ($items.length > 0) {
        $container.css("width", ($items.eq(0).width() * $items.length) + "px");
    }

    var showTitulo = function (pos) {
        var $img = $items.eq(pos).find("img");
        if (opt.showTituloTick) {
            $titulo.tickerText($img.attr("title"));
        } else {
            $titulo.html($img.attr("title"));
        }
    }

    var setOn = function (pos) {
        var $nav = $navigator.find("a");
        $nav.removeClass("on");
        $nav.eq(pos).addClass("on");
        if (opt.showTitulo) {
            showTitulo(pos);
        }
    }

    var slide = function (pos) {
        if (pos == _idx_slide) {
            setOn(pos);
            return;
        }
        var trans = opt.transition;
        if (pos < 0 || pos == $items.length) {
            pos = 0;
            trans = opt.transition * ($items.length / 2);
        }
        var $currItem = jQuery($items.eq(pos));
        var itemWidth = $currItem.width();
        var currLeft = parseInt($container.css("left"));
        var toLeft = itemWidth * pos * (-1);
        $container.stop().animate({ left: toLeft + "px" }, trans);
        setOn(pos);
        _idx_slide = pos;
        if (opt.onchange && typeof opt.onchange == 'function') {
            opt.onchange($items.eq(pos));
        }
    }

    var autoPlay = function () {
        clearTimeout(slideTime);
        slide(_idx_slide + 1);
        slideTime = setTimeout(autoPlay, opt.delay);
    }

    var initNavigation = function () {
        if (!opt.showNav) {
            return;
        }
        var nav = $navigator;
        for (var i = 0; i < $items.length; i++) {
            var ni = jQuery("<li></li>");
            if (opt.showNavNumber) {
                ni.append("<a href='#'>" + (i + 1) + "</a>");
                //ni.append("<a href='#'></a>");
            } else {
                ni.append("<a href='#'></a>");
            }
            nav.append(ni);
        }

        nav.find("a").click(function (e) {
            e.preventDefault();
            clearTimeout(slideTime);
            var idx = nav.find("a").index(jQuery(this));
            slide(idx);
            slideTime = setTimeout(autoPlay, opt.delay);
        });

        setOn(_idx_slide);

        if (opt.onload && typeof opt.onload == 'function' && $items.length > 0) {
            opt.onload($items.eq(0));
        }
    }

    initNavigation();

    slideTime = setTimeout(autoPlay, opt.delay);
}
