$(document).ready(function () {
    // language switch functionality
    $('.lang_switch').click(function (event) {
        var langCode = $(this).attr('id').replace('lang_switch__', '');
        var langSwitchForm = $('#lang_switch_form__' + langCode);
        if (langSwitchForm.length) {
            langSwitchForm.submit();
            event.preventDefault();
        }
    });

    manageEventDetailsTimetable();
    manageLanguageSelect();

    manageSeachEvents();
    manageSearchMaps();
    injectSearch();
    manageMapPopups();
    manageTreeviews();
});

var _updateCountyMap = function() {
    $('#option-one-map input[type="checkbox"]').each(function(index, el) {
        var countyDomKeyword = $(el).attr('id').replace('county-checkbox-', '');
        var countyListEl = $('li#list-' + countyDomKeyword);
        if ($(el).attr('checked')) {
            if (!countyListEl.hasClass('active')) {
                countyListEl.addClass('active');
            }
        } else {
            if (countyListEl.hasClass('active')) {
                countyListEl.removeClass('active');
            }
        }
    });
};

var _updateCityMap = function() {
    $('#option-two-map input[type="checkbox"]').each(function(index, el) {
        var cityDomKeyword = $(el).attr('id').replace('city-checkbox-', '');
        var cityListEl = $('li#city-' + cityDomKeyword);
        if ($(el).attr('checked')) {
            if (!cityListEl.hasClass('active')) {
                cityListEl.addClass('active');
            }
        } else {
            if (cityListEl.hasClass('active')) {
                cityListEl.removeClass('active');
            }
        }
    });
};


var clearMapSelections = function(containerElId) {
    $('.map-content').each(function(index, element) {
        if ((containerElId && $(element).attr('id') != containerElId) || !containerElId) {
            $('#' + $(element).attr('id') + ' input[type="checkbox"]:checked').each(function(indx, el) {
                $(el).trigger('click');
            });
            _updateCountyMap();
            _updateCityMap();
        }
    });
};

var manageSearchMaps = function() {
    $('.filter-select a').click(function(event) {
        
        var containerElId = $(this).attr('id').replace('-tab', '-map');
        $('input[name="where"]').val(containerElId == 'option-three-map' ? 'w' : 'e');
        
        $(this).parent('li').parent('ul').children('li').removeClass('active');
        $(this).parent('li').addClass('active');
        $('.map-content').each(function(indx, el) {
            if (!$(el).hasClass('hide'))
                $(el).addClass('hide');
        });
        
        clearMapSelections(containerElId);
        
        $('#' + containerElId).removeClass('hide');
        event.preventDefault();
    });
    
    // map city tooltips
    $('#option-two-map div.map-layer li').tooltip({
        bodyHandler: function() {
            var links = $('a', this);
            var link = (links && links.length) ? links[0]: null;
            if (link) {
                return $(link).html();
            }
            return null
        },
        showURL: false,
        fade: 100,
        track: true
    });
    
    // map county tooltips
    $('#option-one-map map#counties area').tooltip({
        bodyHandler: function() {
            var areaId = $(this).attr('id');
            return $('li#list-' + areaId.replace('area-', '')).html();
        },
        showURL: false,
        fade: 100,
        track: true
    });
    
    
    // county map functionality
    $('#option-one-map input[type="checkbox"]').click(function(event) {
        _updateCountyMap();
    });
    $('map#counties area').click(function(event) {
        var countyDomKeyword = $(this).attr('id').replace('area-', '');
        $('#county-checkbox-' + countyDomKeyword).trigger('click');
        _updateCountyMap();
        event.preventDefault();
    });
    // update county map also after dom is loaded
    // needed in events list and detail view
    _updateCountyMap();
    
    
    // city map functionality
    $('#option-two-map input[type="checkbox"]').click(function(event) {
        _updateCityMap();
    });
    $('#option-two-map li a').click(function(event) {
        var parentListEl = $(this).parent();
        var cityDomKeyword = $(parentListEl).attr('id').replace('city-', '');
        $('#city-checkbox-' + cityDomKeyword).trigger('click');
        _updateCityMap();
        event.preventDefault();
    });
    // update city map also after dom is loaded
    // needed in events list and detail view
    _updateCityMap();
};

var manageSeachEvents = function() {
    // attach jquery calendars to some inputs
    var calendarElements = $('#fromdate-front, #todate-front');
    
    var date = new Date();
    date.setDate(date.getDate() + 2);
    
    // change hidden input values if user manually changes frontend date fields
    calendarElements.keyup(function(event) {
        $('#'+$(this).attr('id').replace('-front', '')).val($(this).val())
    });
    
    var initialDates = {'fromdate-front': new Date(), 'todate-front': date};
    calendarElements.each(function(indx, el) {
        $(el).datepicker({
            altField: '#' + $(el).attr('id').replace('-front', ''),
            altFormat: 'yy-mm-dd',
            showAnim: 'fadeIn',
            minDate: new Date()
        });
        /*var currentValue = $(el).datepicker("getDate");
        if (!currentValue) {
            $(el).datepicker("setDate" , initialDates[$(el).attr('id')]);
        }*/
    });

    // toggle full search form visibility
    $('#toggle-full-search').click(function(event) {
        var parentEl = $(this).parent();
        var isVisible = parentEl.hasClass('active');
        var formContainerEl = $('.search-filters');
        if (isVisible) {
            parentEl.removeClass('active');
            $(this).children('span').children('span').html(TRANS__OPEN_EVENT_SEARCH);
            formContainerEl.addClass('hide');
        } else {
            parentEl.addClass('active');
            $(this).children('span').children('span').html(TRANS__CLOSE_EVENT_SEARCH);
            formContainerEl.removeClass('hide');
        }
        event.preventDefault();
    });

    // select all checkboxes event
    $('.select-all').click(function(event) {
        var checkboxName = $(this).attr('id').replace('select-', '');
        $('input[type="checkbox"][name="' + checkboxName + '"]').each(function(indx, el) {
            $(el).attr('checked', true);
        });
        event.preventDefault();
    });
    
    // clear all checkboxes event
    $('.clear-all').click(function(event) {
        var checkboxName = $(this).attr('id').replace('clear-', '');
        $('input[type="checkbox"][name="' + checkboxName + '"]').each(function(indx, el) {
            $(el).attr('checked', false);
        });
        event.preventDefault();
    });

    // date range radio buttons handling
    $('input[type="radio"][name="when"]').click(function(event) {
        var id = $(this).attr('id');
        var rangeContainerEl = $('div.range');
        if (id != 'when-range') {
            if (!rangeContainerEl.hasClass('hide'))
                rangeContainerEl.addClass('hide');
        } else {
            if (rangeContainerEl.hasClass('hide'))
                rangeContainerEl.removeClass('hide');
        }
    });

    // clear all
    $('#clear-all-selections').click(function(event) {
        $('.clear-all').trigger('click');
        $('#keywords').val('');
        $('#area_all').trigger('click');
        $('#when-range').trigger('click');
        calendarElements.each(function(indx, el) {
            $(el).datepicker("setDate" , '');
        });
        
        clearMapSelections();
        $('#option-one-tab').trigger('click');
        event.preventDefault();
    });

    // focus search field by default
    var searchInput = $('#keywords');
    if (searchInput.length) {
        searchInput.trigger('focus');
        searchInput.select();
    }
    
    // fix for IE, submit search form on enter key
    // didn't work when search form is loaded by ajax
    $('#search-form input[type="text"]').keyup(function(event) {
        if (event.keyCode == 13) {
            $('#search-form').trigger('submit');
            event.preventDefault();
        }
    });
};

var injectSearch = function() {
    // inject search for to some pages by ajax (to preserve caching)
    var searchEl = $('#inject-search');
    if (searchEl.length) {
        $.get(SEARCH_SOURCE_AJAX_URL, function(data) {
            searchEl.html(data);
            manageSeachEvents();
            manageSearchMaps();
            manageTreeviews();
        });
    }
};

var manageLanguageSelect = function() {
    $('div#language-select a.selected').click(function(event) {
        $('div#language-select ul').each(function() {
            if ($(this).hasClass('hide')) {
                $(this).removeClass('hide');
            } else {
                $(this).addClass('hide');
            }
        });
        event.preventDefault();
    });
    
    $('div#language-select a.selected').outerClick(function(event) {
        $('div#language-select ul').each(function(indx, el) {
            if (!$(el).hasClass('hide')) {
                $(el).addClass('hide');
            }
        });
    });
};


var manageEventDetailsTimetable = function() {
    // show more event times logics
    $('a#show-more-times').click(function() {
        $('div.event-details li').each(function(indx, el) {
            if ($(this).hasClass('hide')) {
                $(this).removeClass('hide');
                $(this).addClass('show');
            }
        });
        // table handling
        $('div.event-details tr').each(function(indx, el) {
            if ($(this).hasClass('hide')) {
                $(this).removeClass('hide');
                $(this).addClass('showrow');
            }
        });
        
        $('div.event-details.hide').each(function(indx, el) {
            $(this).removeClass('hide');
            $(this).addClass('show');
        });
        
        $(this).addClass('hide');
        $('a#show-less-times').removeClass('hide');
    });
    
    // show less event times logics
    $('a#show-less-times').click(function() {
        $('div.event-details li').each(function(indx, el) {
            if ($(this).hasClass('show')) {
                $(this).removeClass('show');
                $(this).addClass('hide');
           }
        });
        // table handling
        $('div.event-details tr').each(function(indx, el) {
            if ($(this).hasClass('showrow')) {
                $(this).removeClass('showrow');
                $(this).addClass('hide');
           }
        });
        
        $('div.event-details.show').each(function(indx, el) {
            $(this).removeClass('show');
            $(this).addClass('hide');
        });
        
        $(this).addClass('hide');
        $('a#show-more-times').removeClass('hide');
    });
    
    // show event times tabs logics
    $('div.block-event-details div.group-by a').click(function() {
        var tabId = $(this).attr('id');
        var currentTabKeyword = tabId.replace('group-by-', '');
        var otherTabKeyword = currentTabKeyword == 'place' ? 'date' : 'place';
        
        if (!$(this).parent().hasClass('active')) {
            
            // handle tab colors
            $('#group-by-' + otherTabKeyword).parent().removeClass('active');
            $(this).parent().addClass('active');
            
            //display correct tab content
            $('div#times-by-'+otherTabKeyword).addClass('hide');
            $('div#times-by-'+currentTabKeyword).removeClass('hide');
            
        }
    });

    // show more/less links display logics
    if ($('#times-by-place .hide').length) {
        var actionsHolder = $('#occurrences-actions');
        if (actionsHolder.hasClass('hide')) {
            actionsHolder.removeClass('hide');
        }
    }
};

var manageMapPopups = function() {
    $('span.link-map a').click(function(event) {
        var url = $(this).attr('href');
        var win = window.open(url, "location", 'height=500,width=800,resizable=yes,scrollbars=yes');
        win.focus();
        event.preventDefault();
    });
};

var manageTreeviews = function() {
    $("#topics-tree").treeview({
        animated: "fast",
        collapsed: true
    });
};