(function(){
    
    function initStopAuto(jc, state)
    {
        if(state == 'init') {
            /*
            jc.options.marksBlock.find("a").live('click', function() {
                var mark    = parseInt($(this).html());
                var scroll    = (mark-1)*jc.options.scroll+1;
                if(jc.options.loaded_items>=(scroll))
                {
                    addMark(jc);
                    jc.options.marksBlock.find("a").removeClass("active");
                    jc.options.marks[mark-1].addClass("active");
                    jc.scroll(scroll);
                    jc.options.currentPage = mark;
                }
                return false;
            });
            */
            jc.list.find("li").live('mousemove',function(e){
                   showHint($(this),e);
            });

            jc.options.nextObj.bind('click', function() {
                jc.options.currentPage++;
                jc.next();
                return false;
            });

            jc.options.prevObj.bind('click', function() {
                jc.options.currentPage--;
                jc.prev();
                return false;
            });

/*            jc.container.hover(function() { 
                jc.stopAuto(); 
            }, function() { 
                jc.startAuto(); 
            });*/                     
        }
    }
    

    function showHint(obj,e)
    {
        var hint = obj.find(".carousel_hint");
        var position = obj.offset();
        var mouse = {"x":0,"y":0};
        
        var top  = "0px";
        var left = "0px";
        
        hint.css({"top":top,"margin-left":left});

        if(hint.css("display")=="none")
        {
            hint.fadeIn("1000");
            obj.bind("mouseleave",function(){hideHint(obj);});
        }
    }
    
    function hideHint(obj)
    {
        var hint = obj.find(".carousel_hint");
        if(hint.css("display")!="none")
        {
            hint.fadeOut("250");
            obj.unbind("mouseleave");
            return true;
        }
        return false;
    }
        
    function itemLoadCallback(jc, state)
    {
        var realFirst = jc.first;
        var realLast = jc.last;
        
        
        if(jc.options.size) {
            //first, last для запроса
            if(Math.abs(realFirst) >= jc.options.size) {
                realFirst = realFirst % jc.options.size;
            }            
            
            if(realFirst <= 0) {
                realFirst = realFirst + jc.options.size;                
            }
            
            //realLast = realFirst + jc.options.scroll - 1;
            realLast = realFirst + jc.last - jc.first

            if(jc.options._preload) {
                realLast += jc.options.scroll;
                if(realLast > jc.options.size) {
                    realLast = jc.options.size;
                }
            }
        }

        if (jc.has(realFirst, realLast)) { //realFirst, realLast
            //TODO: неверно определяется при jc.first, jc.last
            return;
        }

        // добавляем из кеша
        //console.log(jc.options._cache.items.length,realLast);
        if(jc.options._cache && (jc.options._cache.items.length >= realLast)) {
            itemAdd(jc, jc.first, jc.last, {
                total: jc.options._cache.total,
                items: jc.options._cache.items.slice(realFirst - 1, realLast)
            });
            return;
        }
        
        //загружаем с сервера
        jc.options._source.params.first = realFirst;
        jc.options._source.params.last = realLast;
        jQuery.get(jc.options._source.url, jc.options._source.params, function(json) {
                itemAdd(jc, jc.first, jc.last, json);
        }, 'json');

    };    

    function itemAdd(jc, first, last, json)
    {
        //TODO: не устанавливается при первом обращении, полечить
        jc.size(parseInt(json.total));
        
        for(var i = 0; i < json.items.length; i++) {
            jc.options.loaded_items++;
            jc.add(first + i, json.items[i]);
        }
    };
    

    /**
     * Создает карусель
     * @param carouselSelector селектор элемента карусели
     * @param params параметры карусели
     * @param source параметры запроса данных
     * @param cache начальные данные карусели
     */
    function carousel(carouselSelector, params)
    {
        var carouselElement = $(carouselSelector);

        /*var carouselMarks = new Array();
        var carouselMarksBlock = $("<div class='page_nav'></div>");
        
        for(var i=0;i<2;i++)
        {
            carouselMarks[i] = $("<a "+((i==0)?"class='active'":"")+" id='"+carouselSelector+"_mark_"+(i+1)+"'>"+(i+1)+"</a>");
            carouselMarksBlock.append(carouselMarks[i]);
        }*/
        
        var baseParams = {
            selector: carouselSelector,
            //loaded_items:5,
            currentPage:1,
            scroll: 5,
            buttonNextHTML:null,
            buttonPrevHTML:null,
            wrap: 'circular',
            animation: 4000,
            //marks:carouselMarks,
            //marksBlock:carouselMarksBlock,
            itemLoadCallback: { onBeforeAnimation:itemLoadCallback},
        //itemLoadCallback: itemLoadCallback,
            initCallback: initStopAuto,
        };

        if(params._cache) {
            baseParams['size'] = parseInt(params._cache.total);
        }
        
        for(var i in params) {
            baseParams[i] = params[i];
        }        
        
        //создаем карусель
        carouselElement.jcarousel(baseParams);
        //содаем позиционные метки
        //carouselElement.parent().parent().parent().find(".prev").after(carouselMarksBlock);
    };

    /* карусель событий */
    //function loadNewEvents(){}
    
    $(document).ready(function() {
        
        //var language = "ru";
        var language = $('#lang').text();
       
        carousel("#carousel-recommended", {
            //auto: 2, 
            _source: { url: '/ajax/band/photo_band.php', params: { language: "ru"}},
            _cache: recommendedCache,
            nextObj:$('#recommended_photo_band').find('.next'),
            prevObj:$('#recommended_photo_band').find('.prev')
        });
         
        carousel("#carousel-new", { 
            _source: { url: '/ajax/band/new_photo_band.php', params: { language: language}}, 
            _cache: newCache,
            nextObj:$('#new_photo_band').find('.next'),
            prevObj:$('#new_photo_band').find('.prev')
        });
        
        carousel("#carousel-models", { 
            _source: { url: '/ajax/band/model_photo_band.php', params: { language: language}},
            _cache: modelsCache,
            nextObj:$('#model_photo_band').find('.next'),
            prevObj:$('#model_photo_band').find('.prev')
        });
        
        /*
        carousel("#ganre_last_photos", {
            _source: { url: '/ajax/band/model_photo_band.php', params: { language: language}},
            _cache: 0,
            nextObj:$('#ganre_last_photos').find('.next'),
            prevObj:$('#ganre_last_photos').find('.prev')
        });*/
    
        //не использовать карусель внути скрытых display:none элементов, не срабатывает в webkit`е 
        //$("#scrollable-tabs").tabs("#scrollable-panels > div");
    });
})();
