var textSlider = {
    
    /*
     * Presentation Cycle - a jQuery Cycle extension
     * Author:  Gaya Kessler
     * URL:     http://www.gayadesign.com
     * Date:	03-11-09
     */
    
    //slide options
    slideTimeout: 5000,
    containerId: "text-slider",
    
    //cycle options
    cycleFx: 'fade',
    cycleSpeed: 600,  
    
    //progressbar options
    barHeight: 14,
    barDisplacement: 20,
    barImgLeft: "images/",
    barImgRight: "images/",
    barImgCenter: "images/",
    barImgBarEmpty: "images/",
    barImgBarFull: "images/",
    
    //variables this script need
    itemCount: 0,
    currentItem: 0,
    itemBarWidth: 0,
    barContainer: "",
    barContainerActive: "",
    barContainerOverflow: "",
    disableAnimation: false,
    
    init: function() {
        
        textSlider.itemCount = $('#' + textSlider.containerId).children().length;

        textSlider.barContainer = $("<div></div>");
        $(textSlider.barContainer).addClass("pc_bar_container");
        
        var subtrackSpace = (textSlider.itemCount * textSlider.barHeight);
        var totalWidth = $('#' + textSlider.containerId).innerWidth() - textSlider.barDisplacement;
        var fillWidth = Math.floor((totalWidth - subtrackSpace) / (textSlider.itemCount - 1));
        textSlider.itemBarWidth = fillWidth;
        
        for (var i = 0; i < textSlider.itemCount; i++) {
            var item = $("<div>&nbsp;</div>").appendTo(textSlider.barContainer);
            var extra_bar = true;
            if (i == 0) {
                $(item).addClass("left");
                $(item).css({
                    backgroundImage: "url(" + textSlider.barImgLeft + ")",
                    height: textSlider.barHeight + "px",
                    width: textSlider.barHeight + "px"
                });
            } else if (i == (textSlider.itemCount - 1)) {
                $(item).addClass("right");
                $(item).css({
                    backgroundImage: "url(" + textSlider.barImgRight + ")",
                    height: textSlider.barHeight + "px",
                    width: textSlider.barHeight + "px"
                });
                extra_bar = false;
            } else {
                $(item).addClass("center");
                $(item).css({
                    backgroundImage: "url(" + textSlider.barImgCenter + ")",
                    height: textSlider.barHeight + "px",
                    width: textSlider.barHeight + "px"
                });
            }
            $(item).attr('itemNr', (i + 1));
            $(item).css('cursor', 'pointer');
            $(item).click(function() {
               textSlider.gotoSlide($(this).attr('itemNr'));
            });
            
            if (extra_bar == true) {
                var item = $("<div>&nbsp;</div>").appendTo(textSlider.barContainer);
                $(item).addClass("bar");
                 $(item).css({
                    backgroundImage: "url(" + textSlider.barImgBarEmpty + ")",
                    height: textSlider.barHeight + "px",
                    width: fillWidth + "px"
                });
            }
        }
        
        var overflow = $("<div></div>");
        $(overflow).addClass("pc_bar_container_overflow");
        $(overflow).css({
            overflow: "hidden",
            width: totalWidth + "px"
        });
        var underflow = $("<div></div>");
        $(underflow).addClass("pc_bar_container_underflow").appendTo(overflow);
        
        textSlider.barContainerActive = $(textSlider.barContainer).clone().appendTo(underflow);
        $(textSlider.barContainerActive).removeClass("pc_bar_container");
        $(textSlider.barContainerActive).children().each(function () {
            $(this).css({
                backgroundPosition: "right"
            });
            if ($(this).css("background-image").match(textSlider.barImgBarEmpty)) {
                var newImg = $(this).css("background-image").replace(textSlider.barImgBarEmpty, textSlider.barImgBarFull);
                $(this).css("background-image", newImg);
            }
        });
        $(overflow).css({
            width: textSlider.barHeight + "px",
            height: textSlider.barHeight + "px"
        });
        
        textSlider.barContainerOverflow = overflow;
        
        $('#' + textSlider.containerId).cycle({
    		fx: textSlider.cycleFx,
            speed: textSlider.cycleSpeed,
            timeout: textSlider.slideTimeout,
            before: function(currSlideElement, nextSlideElement) { textSlider.beforeSlide(currSlideElement, nextSlideElement); }
    	});
        
        textSlider.barContainer.appendTo($('#' + textSlider.containerId));
        overflow.appendTo($('#' + textSlider.containerId));
        
        var i = 0;
        $(".pc_bar_container_overflow .left, .pc_bar_container_overflow .center, .pc_bar_container_overflow .right").each(function () {
            $(this).attr('itemNr', (i + 1));
            $(this).css('cursor', 'pointer');
            $(this).click(function() {
                textSlider.gotoSlide($(this).attr('itemNr'));
            });
            i++;
        });
    },
    
    beforeSlide: function(currSlideElement, nextSlideElement) {
        if (textSlider.currentItem == 0) {
            textSlider.currentItem = 1;
        } else {
            textSlider.currentItem = (textSlider.itemCount - ($(nextSlideElement).nextAll().length)) + 2;
        }
        textSlider.animateProcess();
    },
    
    animateProcess: function() {
        var startWidth = (textSlider.itemBarWidth * (textSlider.currentItem - 1)) + (textSlider.barHeight * textSlider.currentItem);
        if (textSlider.currentItem != textSlider.itemCount) {
            var newWidth = (textSlider.itemBarWidth * (textSlider.currentItem)) + (textSlider.barHeight * (textSlider.currentItem + 1));   
        } else {
            var newWidth = textSlider.barHeight;
        }
        
        $(textSlider.barContainerOverflow).css({
            width: startWidth + "px"
        });
        if (textSlider.disableAnimation == false) {
            $(textSlider.barContainerOverflow).stop().animate({
                width: newWidth + "px"
            }, (textSlider.slideTimeout - 100));   
        }
    },
    
    gotoSlide: function(itemNr) {
        $(textSlider.barContainerOverflow).stop();
        textSlider.disableAnimation = true;
        $('#' + textSlider.containerId).cycle((itemNr - 1));
        $('#' + textSlider.containerId).cycle('pause');
    }
    
}
