//create pack63 namespace if not already present
if (!window['pack63'])
    window['pack63'] = {};

pack63.calendar = {

    template: null, //jQuery selector that returns calendar event template
    container: null, //jQuery selector for container into which calendar events should be rendered,
    errorContainer: null, //jQuery selector for error container (shown if error occurs fetching events)
    url: 'http://www.google.com/calendar/feeds/info@scoutpack63.org/public/full', //feed URL for pack calendar
    maxEvents: 100, //max number of events to be fetched

    load: function()
    {
        //google.gdata.client.init(this.handleError);
        var service = new google.gdata.calendar.CalendarService('pack63-website');
        var query = new google.gdata.calendar.CalendarEventQuery(pack63.calendar.url);
        query.setOrderBy('starttime');
        query.setSortOrder('ascending');
        query.setFutureEvents(true);
        query.setSingleEvents(true);
        query.setMaxResults(pack63.calendar.maxEvents);
        service.getEventsFeed(query, pack63.calendar.renderEvents, pack63.calendar.handleError);
    },
    
    renderEvents: function(feedRoot)
    {
        var entries = feedRoot.feed.getEntries();
        $(pack63.calendar.template).tmpl(entries, {
            getDate: function() {
                var startDateTime = null;
                var startJSDate = null;
                var times = this.data.getTimes();
                if (times.length > 0) {
                    startDateTime = times[0].getStartTime();
                    startJSDate = startDateTime.getDate();
                }
                var dateString = (startJSDate.getMonth() + 1) + "/" + startJSDate.getDate();
                if (!startDateTime.isDateOnly())
                {
                    var hours = startJSDate.getHours();
                    var amOrPm = ' am';
                    if (hours > 12) {
                        hours -= 12;
                        amOrPm = ' pm';
                    }
                    dateString += " " + hours + ":" + pack63.calendar.padNumber(startJSDate.getMinutes()) + amOrPm;
                }
                return dateString;
            },
            getLocation: function() {
                var locations = this.data.getLocations();
                var locationString = '';
                if (locations.length > 0)
                    locationString = locations[0].getValueString();
                return locationString;
            }
        }).appendTo(pack63.calendar.container);
        $('#loading').hide();
        $(pack63.calendar.container).fadeIn();
    },
    
    handleError: function()
    {
        $('#loading').hide();
        $(pack63.calendar.errorContainer).fadeIn();
    },
    
    padNumber: function(num) {
        if (num <= 9)
            return "0" + num;
        return num;
    }
};

