BN('CDSCarousel',function(){
    function CDSCarousel($self,options){
        var settings = {
		    group:4,
		    navigatorCss:'navi',
		    currentPageCss:'active',
		    enablePngFix:false
	    };
        var 
            id,
            load_complete = false,
            my_size,
            paging_links,
            api,
            wrapper;
            
        function loadProducts() {
            if (load_complete) return;
            
            $('#'+ id + '.' + $self.attr('class') + ' ul li:gt('+(my_size-1)+')').remove();
            var 
                fillSpot=my_size,
                newItem,
                html='';
    		
            while((newItem=CDSCarousel.items_collection[id][fillSpot])!== undefined && fillSpot < CDSCarousel.items_collection[id].length){ 
	            html+=getItemHTML(newItem);
	            fillSpot++;
            }
            if(html.length > 0){
	            api.getItemWrap().append(html);
	            api.reload();
	            load_complete = true;
	            api.setPage(1);
            }
            
            if (settings.enablePngFix) {
                $self.pngFix();
            }
            
            return false;
        };
        function highlightPage() {

            paging_links.removeClass();        
            $(paging_links[this.getPageIndex()]).addClass(settings.currentPageCss)
        };
        function initPaging() {
            
            wrapper = api.getRoot().parent();
            id = $(wrapper).attr('id');
            var 
                totalPages = Math.ceil(CDSCarousel.items_collection[id].length / my_size),
                html='<div class="'+settings.navigatorCss+'"><dl>'
                pageNum='';
                
            for(var i=0;i<totalPages;i++) {
               html+="<dt>";
               pageNum = i+1;
               if(i===0){html+="<a class='active' href='#" + id + "_page_" + pageNum +"'></a>"}
               else {html+="<a href='#" + id + "_page_" + pageNum + "'></a>"}
               html+="</dt>";
            }
            
            html+="</dl></div>"
            $(html).appendTo(wrapper);
                
            paging_links = $(wrapper).find('div.'+settings.navigatorCss +' dl dt a');
            paging_links.click(function() {
                if (!load_complete)
                    loadProducts();
                api.setPage(paging_links.index(this))
                return false; 
            });
        };
        function getItemHTML(item) {
            var 
                dims = '',
                pp='';
                
            if (item.dimensions) {
                dims = '" width="'+ item.dimensions.width +'" height="' + item.dimensions.height;
            }
            if (item.href.indexOf("pv=y")>-1)
                pp = 'onmouseout="ProductPreview.triggerMouseOut()" onmouseover="ProductPreview.triggerMouseOver(this)"'
            return '<li><a target="_parent" ' + pp + ' href="' + item.href + '">' + '<img src="' + item.url + dims  + '" alt="' + item.title + '" /></a>' + item.seeInside+'</li>';
        };
        function init() {
            $.extend(settings,options);
            my_size = settings.group,
            
            api = $self.scrollable({
                size:my_size,
                api:true,
                onBeforeSeek:loadProducts,
                onSeek:highlightPage,
                clickable:false
            });
            initPaging();
        }
        init();
    };
    CDSCarousel.items_collection={}
    return {
        createCarousel:function(s,o){return new CDSCarousel(s,o)},
        items_collection:CDSCarousel.items_collection
        }
});