razsor.definePackage("razsor.carousel");

razsor.defineClass({
    "_className" : "OffersCarousel",

    "_package" : razsor.carousel,

    "_static" : {},

    "_class" : {
        "_slider" : null,
        "_progressText" : null,
        "_progressDiv" : null,

        "init" : function(carouselDiv, speed, pause, transitionType, progressText, imageData) {
            var i;
            var imageItems = "";
            for (i = 0; i < imageData.length - 1; i++) {
                var currentImage = imageData[i];
                if (currentImage.url) {
                    var classClause = currentImage.newWindow ? 'class="open-in-new-window"' : '';
                    imageItems += '<li><a ' + classClause + ' href="' + currentImage.url + '" rel="nofollow"><img src="' + currentImage.imageUrl + '" style="width:' + currentImage.width + 'px; height:' + currentImage.height + 'px;" alt="" /></a></li>';
                } else {
                    imageItems += '<li><img src="' + currentImage.imageUrl + '" style="width:' + currentImage.width + 'px; height:' + currentImage.height + 'px;" alt="" /></li>';
                }
            }
            var sliderComponent = carouselDiv.find(".carousel-slider");
            sliderComponent.append(imageItems);
            this._progressDiv = carouselDiv.find(".carousel-progress");
            var self = this;
            this._progressText = progressText;
            this._addExternalLinks(carouselDiv);
            if(imageData.length > 1){
                this._slider = sliderComponent.bxSlider({
                    auto : true,
                    controls : false,
                    easing : transitionType,
                    autoHover : true,
                    speed : speed,
                    pause : pause,
    
                    onAfterSlide : function(currentSlideNumber, totalSlideQty, currentSlideHtmlObject) {
                        self._updateProgressText(currentSlideNumber, totalSlideQty);
                    }
                });

                carouselDiv.find('.carousel-prev').live('click', function() {
                    self._slider.goToPreviousSlide();
                    return false;
                });
    
                carouselDiv.find('.carousel-next').live('click', function() {
                    self._slider.goToNextSlide();
                    return false;
                });
            }
            carouselDiv.find('.controls').css("top", ($(".rzc-carousel").height() / 2) - 22);
        },

        "_updateProgressText" : function(current, total) {
            var newProgressText = this._progressText.replace("{current}", current + 1).replace("{total}", total);
            this._progressDiv.text(newProgressText);
        },
        "_addExternalLinks" : function(carouselDiv) {
            //live would be preferable to bind but webdriver used in container tests does not recognise it
            carouselDiv.find('.open-in-new-window').bind('click',function(event){
                razsor.commonfunctions.CommonFunctions.newWindow(event, this);
            });
        }
    }
});

