$(document).ready(function() {

    if (jQuery('.sticky').length > 0) {
        $(window).scroll(sticky_relocate);
        sticky_relocate();
    }
	
    // Nice looking select box
    $("#whatFormInput").dropkick();
    $("#themeFormInput").dropkick();

    $(document).on('click', '.breadcrumbs a[href=#]', function() {
        return false;
    });
    
    $(document).on('click', '.click-track', function() {
        ga('send', 'event', 'Outbound Links', 'Listings', this.href);
        return true;
    });

    $(document).on('click', '.groupon-link-matched', function() {
        ga('send', 'event', 'Outbound Links', 'groupon_matched', this.href);
        return true;
    });

    $(document).on('click', '.groupon-link-standalone-1', function() {
        ga('send', 'event', 'Outbound Links', 'groupon_standalone', this.href);
        return true;
    });

    $(document).on('click', '.groupon-link-standalone-2', function() {
        ga('send', 'event', 'Outbound Links', 'groupon_standalone_restaurants', this.href);
        return true;
    });
    
    $(document).on('click', '.filterMap span', function() {
        var activeClass = 'active';
        loader();
        $('.filterMap li').removeClass(activeClass);
        $(this).parent('li').addClass(activeClass);
        $('#refine-search #distance').val($(this).data('value'));
        
        var currentPage = $('#refine-search #currentPage').val();
        // reset the current page
        $('#refine-search #currentPage').val('1');
        $.post(
            $('#refine-search').attr('action'),
            $('#refine-search').serialize() + '&changedFilter=distance' + generateSpecialCityPageInfo(),
            function(result) {
                if (currentPage > 1) {
                    window.location.href = $('#refine-search').attr('action');
                }
                else {
                    mapInitialized = false;
                    $('#page-content').html(result);
                   loader('hide');
                }
            }
        );
        return false;
    });
    
    $(document).on('click', '.sortMain li', function() {
        var sorto;
        var activeClass = 'active';
        if ($(this).hasClass(activeClass)) {
            if ($(this).hasClass('no-reverse')) {
                return false;
            }
            if ($(this).hasClass('asc')) {
                $(this).removeClass('asc').addClass('desc');
                sorto = 'desc';
            }
            else {
                $(this).removeClass('desc').addClass('asc');
                sorto = 'asc';
            }
        }
        else {
            $(this).parents('.sortMain').find('li').removeClass(activeClass);
            $(this).addClass(activeClass);
            if ($(this).hasClass('asc')) {
                sorto = 'asc';
            }
            else {
                $(this).addClass('desc');
                sorto = 'desc';
            }
        }
        
        loader();
        $('#refine-search #sort').val($(this).find('a').data('value'));
        $('#refine-search #sortOrder').val(sorto);
        // reset the current page
        $('#refine-search #currentPage').val('1');
        
        var appendPostData = '&changedSort=' + $(this).find('a').data('value');
        
        $.post(
            $('#refine-search').attr('action'),
            $('#refine-search').serialize() + appendPostData + generateSpecialCityPageInfo(),
            function(result) {
                mapInitialized = false;
                $('#page-content').html(result);
                loader('hide');
            }
        );
        return false;
    });
    
    // reset all
    $(document).on('click', '#resetSearch', function() {
        loader();
        $('html, body').animate({
            scrollTop: $("#page-content").offset().top
        }, 1500);
        $('#categoriesSearch .categoriesList input[type=checkbox]:not(#cat_all)').attr('checked', false);
        $('#categoriesSearch .categoriesList #cat_all').attr('checked', true);
        $('#refine-search #category').val('');
        $('#categoriesSearch .citiesList input[type=checkbox]:not(#city_all)').attr('checked', false);
        $('#categoriesSearch .citiesList #city_all').attr('checked', true);
        $('#refine-search #cities').val('');


        var currentPage = $('#refine-search #currentPage').val();
        // reset the current page
        $('#refine-search #currentPage').val('1');
        
        $.post(
            $('#refine-search').attr('action'),
            $('#refine-search').serialize() + generateSpecialCityPageInfo(),
            function(result) {
                if (currentPage > 1) {
                    window.location.href = $('#refine-search').attr('action');
                }
                else {
                    mapInitialized = false;
                    $('#page-content').html(result);
                    loader('hide');
                }
            }
        );
        return false;
    });
    
    // categories filter
    $(document).on('change', '#categoriesSearch .categoriesList input[type=checkbox]', function() {
        if ($(this).attr('id') == 'cat_all') {
            $('#categoriesSearch .categoriesList input[type=checkbox]:not(#cat_all)').attr('checked', false);
            $('#refine-search #category').val('');
        }
        else {
            $('#categoriesSearch .categoriesList #cat_all').attr('checked', false);
            var items = [], $selected = $('#categoriesSearch .categoriesList input[type=checkbox]:checked');
            $selected.each(function(index, element) {
                items.push($(element).attr('name').split('_')[1]);
            });
            $('#refine-search #category').val(items.join(','));
        }
        
        var currentPage = $('#refine-search #currentPage').val();
        // reset the current page
        $('#refine-search #currentPage').val('1');
        loader();
        $('html, body').animate({
            scrollTop: $("#page-content").offset().top
        }, 1500);
        
        var appendPostData = '';
        if ($(this).is(':checked')) {
            appendPostData = '&changedFilter=category&changedFilterValue=' + $(this).attr('name').split('_')[1];
        }
        
        if ($('#categoriesSearch .subcategoriesList #sub_all').is(':checked')) {
            $.post(
                $('#refine-search').attr('action'),
                $('#refine-search').serialize() + appendPostData + generateSpecialCityPageInfo(),
                function(result) {
                    if (currentPage > 1) {
                        window.location.href = $('#refine-search').attr('action');
                    }
                    else {
                        mapInitialized = false;
                        $('#page-content').html(result);
                        loader('hide');
                    }
                }
            );
        }
        else {
            $('#categoriesSearch .subcategoriesList #sub_all').trigger('click');
        }
        
        return true;
    });
    
    // subcategories filter
    $(document).on('change', '#categoriesSearch .subcategoriesList input[type=checkbox]', function() {
        if ($(this).attr('id') == 'sub_all') {
            $('#categoriesSearch .subcategoriesList input[type=checkbox]:not(#sub_all)').attr('checked', false);
            $('#refine-search #subcategory').val('');
        }
        else {
            $('#categoriesSearch .subcategoriesList #sub_all').attr('checked', false);
            var items = [], $selected = $('#categoriesSearch .subcategoriesList input[type=checkbox]:checked');
            $selected.each(function(index, element) {
                items.push($(element).attr('name').split('_')[1]);
            });
            $('#refine-search #subcategory').val(items.join(','));
        }
        
        var currentPage = $('#refine-search #currentPage').val();
        // reset the current page
        $('#refine-search #currentPage').val('1');
        loader();
        $('html, body').animate({
            scrollTop: $("#page-content").offset().top
        }, 1500);
        
        var appendPostData = '';
        if ($(this).is(':checked')) {
            appendPostData = '&changedFilter=subcategory&changedFilterValue=' + $(this).attr('name').split('_')[1];
        }
        
        $.post(
            $('#refine-search').attr('action'),
            $('#refine-search').serialize() + appendPostData + generateSpecialCityPageInfo(),
            function(result) {
                if (currentPage > 1) {
                    window.location.href = $('#refine-search').attr('action');
                }
                else {
                    mapInitialized = false;
                    $('#page-content').html(result);
                   loader('hide');
                }
            }
        );
        return true;
    });
    
    // cities filter
    $(document).on('change', '#categoriesSearch .citiesList input[type=checkbox]', function() {
        if ($(this).attr('id') == 'city_all') {
            $('#categoriesSearch .citiesList input[type=checkbox]:not(#city_all)').attr('checked', false);
            $('#refine-search #cities').val('');
        }
        else {
            $('#categoriesSearch .citiesList #city_all').attr('checked', false);
            var items = [], $selected = $('#categoriesSearch .citiesList input[type=checkbox]:checked');
            $selected.each(function(index, element) {
                items.push($(element).attr('name').split('_')[1]);
            });
            $('#refine-search #cities').val(items.join(','));
        }
        
        var currentPage = $('#refine-search #currentPage').val();
        // reset the current page
        $('#refine-search #currentPage').val('1');
        loader();
        $('html, body').animate({
            scrollTop: $("#page-content").offset().top
        }, 1500);
        
        var appendPostData = '';
        if ($(this).is(':checked')) {
            appendPostData = '&changedFilter=city&changedFilterValue=' + $(this).attr('name').split('_')[1];
        }
        
        
        $.post(
            $('#refine-search').attr('action'),
            $('#refine-search').serialize() + appendPostData + generateSpecialCityPageInfo(),
            function(result) {
                if (currentPage > 1) {
                    window.location.href = $('#refine-search').attr('action');
                }
                else {
                    mapInitialized = false;
                    $('#page-content').html(result);
                   loader('hide');
                }
            }
        );
        return true;
    });
    
    // filters filter
    $(document).on('change', '#categoriesSearch .filtersList input[type=checkbox]', function() {
        if ($(this).attr('id') == 'filter_all') {
            $('#categoriesSearch .filtersList input[type=checkbox]:not(#filter_all)').attr('checked', false);
            $('#refine-search #filters').val('');
        }
        else {
            $('#categoriesSearch .filtersList #filter_all').attr('checked', false);
            var items = [], $selected = $('#categoriesSearch .filtersList input[type=checkbox]:checked');
            $selected.each(function(index, element) {
                items.push($(element).attr('name').split('_')[1]);
            });
            $('#refine-search #filters').val(items.join(','));
        }
        
        var currentPage = $('#refine-search #currentPage').val();
        // reset the current page
        $('#refine-search #currentPage').val('1');
        loader();
        $('html, body').animate({
            scrollTop: $("#page-content").offset().top
        }, 1500);
        
        var appendPostData = '';
        if ($(this).is(':checked')) {
            appendPostData = '&changedFilter=filters&changedFilterValue=' + $(this).attr('name').split('_')[1];
        }
        
        $.post(
            $('#refine-search').attr('action'),
            $('#refine-search').serialize() + appendPostData + generateSpecialCityPageInfo(),
            function(result) {
                if (currentPage > 1) {
                    window.location.href = $('#refine-search').attr('action');
                }
                else {
                    mapInitialized = false;
                    $('#page-content').html(result);
                   loader('hide');
                }
            }
        );
        return true;
    });


    $('#thumbnails div').click(function() {
       var id = $(this).data('id');
        $('#main-frame img.current').removeClass('current');
        $('#main-frame img[data-id="' + id + '"]').addClass('current');
        $('#thumbnails div.active').removeClass('active');
        $(this).addClass('active');
    });

    /*var height = $('#attraction-gallery').height();
    $('#main-frame').height(height);*/

    $('.recommendation-title').each(function() {
        $clamp(this, {clamp: 3, useNativeClamp: false});
    });
    
    $(document).on('click', '.CityBox .imageBox a', function() {
        setupAttractionClickCookie($(this).parents('.CityBox'), 'Image');
    });
    
    $(document).on('click', ".CityBox [itemprop='name'] a", function() {
        setupAttractionClickCookie($(this).parents('.CityBox'), 'Text');
    });
    
    function setupAttractionClickCookie($cityBox, clickSource)
    {
        var listingData = $('#mainContentInside').data(),
            cookieOptions = ';path=/'
        ;
        
        if ('specialCityPage' in window) {
            document.cookie = 'specialCityPage=1' + cookieOptions;
        }
        document.cookie = 'attractionClicked=1' + cookieOptions;
        document.cookie = 'caRank=' + $cityBox.data('rank') + cookieOptions;
        document.cookie = 'caDistance=' + $cityBox.data('distance') + cookieOptions;
        document.cookie = 'caPage=' + listingData.page + cookieOptions;
        document.cookie = 'caListingCity=' + listingData.listingCity + cookieOptions;
        document.cookie = 'caClickSource=' + clickSource + cookieOptions;

    }
    
    function generateSpecialCityPageInfo()
    {
        if ('specialCityPage' in window) {
            return '&specialCityPage=1';
        }
        
        return '';
    }

    if(window.innerWidth < 768) {
        var el = $('.mobile-listing');
        if (el.length > 0) {
            var h = el.find('li').first().height();
            el.css({height: h});
        }
    }

});

function sticky_relocate() {
    var window_top = jQuery(window).scrollTop();
    var div_top = jQuery('#sticky-anchor').offset().top;
    if (window_top > div_top) {
        jQuery('.sticky').addClass('sticky-element');
    } else {
        jQuery('.sticky').removeClass('sticky-element');
    }
}

var mapInitialized = false;

function initScrollbar(){
    return $(".filter-holder:not(.no-scroll)").mCustomScrollbar();
}

function loader(whattodod){
    if (whattodod === undefined) {
        var whattodod = 'show';
    }

    if(whattodod == 'show') {
        $('.listing-box').addClass('loading');
    } else {
        $('.listing-box').removeClass('loading');
    }
}
