﻿// zRSSFeed - http://www.zazar.net/developers/zrssfeed/default.html
(function ($) {
    $.fn.rssfeed = function (url, options, fn) {
        var defaults = { limit: 10, header: true, titletag: 'h4', date: true, content: true, snippet: true, showerror: true, errormsg: '', key: null, ssl: false, linktarget: '_self' }; var options = $.extend(defaults, options); return this.each(function (i, e) {
            var $e = $(e); var s = ''; if (options.ssl) s = 's'; if (!$e.hasClass('rssFeed')) $e.addClass('rssFeed'); if (url == null) return false; var api = "http" + s + "://ajax.googleapis.com/ajax/services/feed/load?v=1.0&callback=?&q=" + encodeURIComponent(url); if (options.limit != null) api += "&num=" + options.limit; if (options.key != null) api += "&key=" + options.key; api += "&output=json_xml"
            $.getJSON(api, function (data) {
                if (data.responseStatus == 200) { _process(e, data.responseData, options); if ($.isFunction(fn)) fn.call(this, $e); } else {
                    if (options.showerror)
                        if (options.errormsg != '') { var msg = options.errormsg; } else { var msg = data.responseDetails; }; $(e).html('<div class="rssError"><p>' + msg + '</p></div>');
                };
            });
        });
    }; var _process = function (e, data, options) {
        var feeds = data.feed; if (!feeds) { return false; }
        var html = ''; var row = 'odd'; var xml = getXMLDocument(data.xmlString); var xmlEntries = xml.getElementsByTagName('item'); if (options.header)
            html += '<div class="rssHeader">' + '<a href="' + feeds.link + '" title="' + feeds.description + '">' + feeds.title + '</a>' + '</div>'; html += '<div class="rssBody">' + '<ul>'; for (var i = 0; i < feeds.entries.length; i++) {
            var entry = feeds.entries[i]; var entryDate = new Date(entry.publishedDate); var pubDate = entryDate.toLocaleDateString() + ' ' + entryDate.toLocaleTimeString(); html += '<li class="rssRow ' + row + '">' + '<' + options.titletag + '><a href="' + entry.link + '" title="View this feed at ' + feeds.title + '" target="' + options.linktarget + '">' + entry.title + '</a></' + options.titletag + '>'
            if (options.date) html += '<p class="published">' + pubDate + '</p>'
            if (options.content) {
                if (options.snippet && entry.contentSnippet != '') { var content = entry.contentSnippet; } else { var content = entry.content; }
                html += '<p>' + content + '</p>'
            }
            if (xmlEntries.length > 0) {
                var xmlMedia = xmlEntries[i].getElementsByTagName('enclosure'); if (xmlMedia.length > 0) {
                    html += '<div class="rssMedia"><div>Media files</div><ul>'
                    for (var m = 0; m < xmlMedia.length; m++) { var xmlUrl = xmlMedia[m].getAttribute("url"); var xmlType = xmlMedia[m].getAttribute("type"); var xmlSize = xmlMedia[m].getAttribute("length"); html += '<li><a href="' + xmlUrl + '" title="Download this media">' + xmlUrl.split('/').pop() + '</a> (' + xmlType + ', ' + formatFilesize(xmlSize) + ')</li>'; }
                    html += '</ul></div>'
                }
                html += '</li>';
            }
            if (row == 'odd') { row = 'even'; } else { row = 'odd'; } 
        }
        html += '</ul>' + '</div>'
        $(e).html(html);
    }; function formatFilesize(bytes) { var s = ['bytes', 'kb', 'MB', 'GB', 'TB', 'PB']; var e = Math.floor(Math.log(bytes) / Math.log(1024)); return (bytes / Math.pow(1024, Math.floor(e))).toFixed(2) + " " + s[e]; }
    function getXMLDocument(string) {
        var browser = navigator.appName; var xml; if (browser == 'Microsoft Internet Explorer') {
            xml = new ActiveXObject('Microsoft.XMLDOM'); xml.async = 'false'
            xml.loadXML(string);
        } else { xml = (new DOMParser()).parseFromString(string, 'text/xml'); }
        return xml;
    } 
})(jQuery);

/*
* Google Calendar feed reader - plugin to get upcoming events from a *public* google calendar
* Parameters: FeedUri, MaxResults & DisplayCount
* @version 1.0
*/

(function ($) {
    //Add gcal element
    $(document).ready(function () {
        $('#calendar-feed').append('<div id="gcal" class="rssHeader">Loading&hellip;</div>');
    });

    //Resize image on ready or resize
    $.gCalReader = function (options) {
        //Default settings
        var settings = {
            feedUri: 'http://www.google.com/calendar/feeds/en.usa%23holiday%40group.v.calendar.google.com/public/full',
            maxresults: 20,
            displayCount: 1
        };

        var feedUri = options.feedUri;
        if (feedUri.indexOf("public/full") == -1) {
            feedUri = settings.feedUri;
        }

        var options = $.extend(settings, options);

        function _run() {
            var calendarService = new google.gdata.calendar.CalendarService('GoogleInc-jsguide-1.0');

            // The "public/full" feed is used to retrieve events from the named public calendar with full projection.
            var query = new google.gdata.calendar.CalendarEventQuery(feedUri);
            query.setOrderBy('starttime');
            query.setSortOrder('ascending');
            query.setFutureEvents(true);
            query.setSingleEvents(true);
            query.setMaxResults(options.maxresults);

            var callback = function (result) {

                var entries = result.feed.getEntries();
                $('#gcal').html('');
                //if (options.displayCount) {
                //    $('#gcal').html(entries.length + ' upcoming events');
                // }
                $('#gcal').append('<div class="rssbody"><ul id="eventlist"></ul></div>');

                for (var i = 0; i < entries.length; i++) {
                    var eventEntry = entries[i];
                    var eventTitle = eventEntry.getTitle().getText();
                    var startDateTime = null;
                    var eventDate = null;
                    var eventWhere = null;
                    var eventContent = eventEntry.getContent().getText();
                    //var eventLink = eventEntry.getLink().getText();

                    var times = eventEntry.getTimes();
                    if (times.length > 0) {
                        startDateTime = times[0].getStartTime();
                        eventDate = startDateTime.getDate();
                    }

                    var d_names = new Array("Sunday, ", "Monday, ", "Tuesday, ", "Wednesday, ", "Thursday, ", "Friday, ", "Saturday, ");
                    var m_names = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

                    var a_p = "";
                    var d = eventDate;
                    var curr_hour = d.getHours();
                    if (curr_hour < 12) {
                        a_p = " AM";
                    }
                    else {
                        a_p = " PM";
                    }
                    if (curr_hour == 0) {
                        curr_hour = 12;
                    }
                    if (curr_hour > 12) {
                        curr_hour = curr_hour - 12;
                    }

                    var curr_min = d.getMinutes();
                    curr_min = curr_min + "";

                    if (curr_min.length == 1) {
                        curr_min = "0" + curr_min;
                    }

                    var time = curr_hour + ':' + curr_min + a_p;
                    var day = eventDate.getDay();
                    var month = eventDate.getMonth();
                    var date = eventDate.getDate();
                    var dayname = d_names[day];
                    var monthname = m_names[month];
                    var eventyear = eventDate.getFullYear();
                    var location = eventEntry.getLocations();
                    var eventWhere = location[0].getValueString();

                    var eventhtml = '<h3><a href="/eventcalendar.aspx">' + eventTitle + '</a></h3><p class="published">' + dayname + ' ' + monthname + ' ' + date + ', ' + eventyear + ' ' + time + '</p><p class="where"><span class="underline">Where:</span> ' + eventWhere + '</p>'; //'</p><p>' + eventContent + '</p>'
                    $('#eventlist').append('<li>' + eventhtml + '</li>');
                }
            };

            // Error handler to be invoked when getEventsFeed() produces an error
            var handleError = function (error) {
                $('#gcal').html('<pre>' + error + '</pre>');
            };

            // Submit the request using the calendar service object
            calendarService.getEventsFeed(query, callback, handleError);
        }
        google.setOnLoadCallback(_run);

        $(window).load(function () {

        }); //End window load
    };

})(jQuery);

