var ApiModuleMain = ApiModule.prepare({
    urls : {
        checkLike : '/SitesCatalog/index/checklike'
    },

    micro : {
        filter : 'targeting_filter'
    },

    attrs : {
        active       : 'active',
        siteId       : 'site-id',
        sitePosition : 'site-position',
        siteRating   : 'site-rating',
        categoryId   : 'category-id'
    },

    classes : {
        collapse    : 'b-itree_collapsed',
    },

    selectors : {
        likesCount     : '.js-likes-count',
        circleRating   : '.circle-rating-svg svg circle',
        filterCategory : '.js-filter-category',
        sortRewSite    : '.js-sort-reviews-sites'
    },

    data : {
        $place      : null,
    },

    events : {
        'click .js-site-like'           : 'onLike',
        'click .js-sort-sites'         : 'onSort',
        'change .js-sort-reviews-sites' : 'onReviewsSortAndFilter'
    },

    listeners : {
        onLike : function(el, ev) {
            var that = this;
            if ($(el).parents('.likebox').hasClass(that.attrs.active)) {
                return;
            }

            $(el).parents('.likebox').addClass(that.attrs.active);
            var likesCount = $(el).parents('.likebox').find(that.selectors.likesCount);
            likesCount.text(parseInt(likesCount.text()) + 1);

            var siteId        = $(el).data(that.attrs.siteId);
            var sitePosition  = $(el).data(that.attrs.sitePosition);
            var categoryId    = $(el).data(that.attrs.categoryId);
            $.post(that.urls.checkLike,
                {siteId : siteId, sitePosition : sitePosition, categoryId : categoryId},
                function(res) {}
            );
        },

        onSort : function(el) {
            var value    = $(el).data('sort');
            var dataCat  = $(el).data('category');
            var category = dataCat != undefined || dataCat.length != 0 ? '?category=' + dataCat : '';
            $('[data-value=' + value + ']').trigger((/iphone|ipad/gi).test(navigator.appVersion) ? "touchstart" : "mousedown");
            $.fn.yiiListView.update('sitesList', {url: '/SitesCatalog/index/index/sort/' + value + category, complete: function(){}});
            return false;
        },

        onReviewsSortAndFilter : function(el) {
            var sortVal   = $(this.selectors.sortRewSite).val();
            var sort      = sortVal != undefined || sortVal.length != 0 ? '/sort/' + sortVal : '';
            $.fn.yiiListView.update('sitesList', {url: window.location.href + sort});
            return false;
        }
    },

    api : {
        circleRating : function() {
            var that = this;
            $(that.selectors.circleRating).each(function() {
                var rating = ($(this).parent().next().text()).replace(',', ".");
                var ratingFloat = parseFloat(rating);
                if (!isNaN(ratingFloat)) {
                    if (ratingFloat && ratingFloat < 0.3) {
                        ratingFloat = 0.3;
                    }

                    var circleStroke = 188 - (ratingFloat*18.8);
                    var circleStrokeRound= Math.round(circleStroke)
                        $(this).animate({   
                             'stroke-dashoffset' : circleStrokeRound
                          }, 2000);
                }
            });
        }
    }
})();