/*
    Document   : frontend.js
    Created on : 14.01.2011, 12:53:23
    Author     : Mike vom Scheidt // CTS Media GmbH
    Description: Frontend JS for jQuery 1.4.2
*/

$(function() {
    if($('#main .normalEvent').length > 0) {
        $('#main .mod_eventlist').each(function() {
            var el = $(this);

            if(el.is(':visible')) {
                if(el.find('.normalEvent').length == 1) {
                    el.find('.normalEvent, > h2, > h3').hide();
                    el.find('.fullEvent').show();
                }
            }

        });
    }
    $('.ce_accordion .accordion').slideUp(0);

    $('.ce_accordion .toggler').click(function() {
        $(this).parent().find('> .accordion').slideToggle(1000, function() {
            if($(this).css('display') == 'block') {
                $(this).parent().find('.toggler').addClass('close');
            } else {
                $(this).parent().find('.toggler').removeClass('close');
            }
        });
    });

    setupCalendarFilter();
});

$(window).load(function () {
    setupMap();
});

var setupMap = function() {
    //use tooltip addition to show html tooltips
    $("#map > a:not(.notip)").tooltip({
        effect: 'fade',
        relative: true,
        opacity: 0.80,
        position: 'center left'
    });
};

var setupCalendarFilter = function() {
    var calendarFilter = $("#calendar_filter");
    if(calendarFilter) {
        var calendars = $('#right .mod_calendar');
        var eventLists = $('#main .mod_eventlist')
        if(calendars.length > 1) {
        
            var select = calendarFilter.find("select");
            select.find("option").remove();
            
            //generate optgroups for the select tag
            calendars.each(function() {
                var cssClass = $(this).attr('class');
                //cut out the group_ class
                cssClass = cssClass.substring(cssClass.lastIndexOf('group_'));
                //remove group_ and any classes after the group
                cssClass = cssClass.substring(cssClass.indexOf('_') + 1, cssClass.lastIndexOf(' ')).replace("_", " ");
                if(cssClass.length > 0 && calendarFilter.find("select optgroup[label=\"" + cssClass + "\"]").length < 1) {
                    calendarFilter.find("select").append("<optgroup label=\"" + cssClass + "\"></optgroup>");
                }
            });            
        
            //generate options for the select tag
            calendars.each(function() {
                var text = $(this).find('h1,h2,h3,h4,h5,h6').text();
                var id = $(this).attr('id');
                var cssClass = $(this).attr('class');
                //cut out the group_ class
                cssClass = cssClass.substring(cssClass.lastIndexOf('group_'));
                //remove group_ and any classes after the group
                cssClass = cssClass.substring(cssClass.indexOf('_') + 1, cssClass.lastIndexOf(' ')).replace("_", " ");
                var selected = ($.cookie('calendar') == id)? " selected=\"selected\" " : "";
                //insert into optgroups
                if(calendarFilter.find("select optgroup[label=\"" + cssClass + "\"]").length > 0) {
                    calendarFilter.find("select optgroup[label=\"" + cssClass + "\"]").append("<option value=\"" + id + "\"" + selected + ">" + text + "</option>");
                }
                
            });
        
            calendarFilter.show();
            hideCalendars(calendars, select);
            hideEventLists(eventLists, select);            
        
            //bind both the change and keyup event because change does not catch modifications done by using the keyboard
            select.bind("change keyup",function() {
                //save calender choice of user for this browser session
                $.cookie('calendar', select.val());
                /*hideCalendars(calendars, select);*/
                hideEventLists(eventLists, select);
            });
        
            select.trigger('keyup');
        }
    }
};

var hideCalendars = function(calendars, select) {
    if(calendars.length > 0) {
        /*calendars.each(function() {
            if($(this).attr('id') == select.val() || $.cookie('calendar') == $(this).attr('id')) {
                $(this).show();
                return true;
            }
            $(this).hide();
            return true;
        });
    
        if($.cookie('calendar') ==  null) {
            $(calendars[0]).show();
        }*/
        calendars.hide();
        $(calendars[0]).show();
    }
};

var hideEventLists = function(eventLists, select) {
    if(eventLists.length > 0) {
        eventLists.each(function() {
            if($(this).hasClass(select.val()) || $.cookie('calendar') == $(this).attr('id')) {
                $(this).show();
                return true;
            }
            $(this).hide();
            return true;
        }); 
    
        if($.cookie('calendar') == null) {
            $(eventLists[0]).show();
        }
    }
};

