if (typeof GE === "undefined") GE = {}

GE.feeds = {

    // A regex for stripping the time part of a datetime string.
    // Assigned to a variable for performance.
    dateOnlyRegex: /^(.*) [0-9]{2}:[0-9]{2}.*/,

    // For some reason IE6 and 7 were making whitespace significant in
    // an entry that had an odd run of whitespace between two
    // words. It may have been a fluke, but we'll regex that from
    // happening anyway.
    whitespaceRegex: /[ \t\n\r]+/g,


    // Used when converting month number indexes from the getDate()
    // method of JS date objects
    monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],

    /**
     * Display entry publish dates in a consistent format
     */
    formatDate: function(date_string) {
        var date = new Date(date_string);
        return GE.feeds.monthNames[date.getMonth()] + " " + date.getDate() + ", " + date.getFullYear();
    },

    /**
     * Display an unavailability message in case anything goes wrong.
     */
    failGracefully: function(node) {
        node.append("<p class='error'>The news feed is temporarily unavailable.<br/>Please try again in a few minutes.</p>");
    },


    /**
     * Populate the Press Releases and GE Reports sections of the homepage.
     *
     * Separate requests are used for each module. Google's
     * FeedControl class could have been used to collapse that down to
     * one request, but the price for that is reduced flexibility when
     * formatting the results. In particular, we need to put the
     * publishedDate above the title.
     */
    renderHomepageFeeds: function() {

        // feed urls are pulled from the page, not hard coded in this file
        var pr_url = jQuery("#media .press-release-container .media-icons A.rss").attr("href");
        var pr_feed = new google.feeds.Feed(pr_url);

        var report_url = jQuery("#media .report-container .media-icons A.rss").attr("href");
        var report_feed = new google.feeds.Feed(report_url);

        var entry, title, formatted_date, author, li, h6, a, span;

        // A formatting fuction for processing feed results. Used for
        // both feeds.
        var onLoadCallback = function(result) {

            if (result.feed.feedUrl === pr_url) {
                var receiving_node = jQuery("#media .press-release-container .press-release-feed");
				var class_to_show = 's_trackpv2';
            } else if (result.feed.feedUrl === report_url) {
                var receiving_node = jQuery("#media .report-container .report-feed");
				var class_to_show = 's_trackpv3';
            }

            if (result.error) {
                GE.feeds.failGracefully(receiving_node);
            } else {
                try{
                    var entry_list = jQuery(document.createElement('ul'));

                    for (var i = 0; i < result.feed.entries.length; i++) {
                        entry = result.feed.entries[i];
                        title = entry["title"].replace(GE.feeds.whitespaceRegex, " ");
                        formatted_date = GE.feeds.formatDate(entry["publishedDate"]);
                        li = jQuery(document.createElement('li'));
                        h6 = jQuery(document.createElement('h6'));
                        h6.html(formatted_date);
                        a = jQuery(document.createElement('a')).html(title).attr({'href': entry.link,
																				  'class': class_to_show,
																				  'target': '_blank'});
                        author = (entry["author"] === "")? "": " by " + entry["author"];
                        span = jQuery(document.createElement('span')).html(author);
                        li.append(h6, a, span);
                        entry_list.append(li);
                    }
                    receiving_node.html(entry_list);
					var js = document.createElement('script');
					js.type = 'text/javascript';  
					js.text = "oMyWA.s.initClasses('"+ class_to_show +"','click',false,oMyWA.track,'s_trackpv','','',oMyWA);";
					document.getElementsByTagName("head")[0].appendChild(js);
					/*var script_to_add = document.createElement('script');
					script_to_add.innerHTML = "oMyWA.s.initClasses('"+ class_to_show +"','click',false,oMyWA.track,'s_trackpv_sbu','','',oMyWA);";
					document.getElementById('footer').appendChild(script_to_add);*/
			
                }  catch(e) {
                    GE.feeds.failGracefully(receiving_node);
                }
            }

            // Keep the height of each div equal
            jQuery("#media > DIV").setAllToMaxHeight();
        }

        pr_feed.setNumEntries(2);
        pr_feed.load(onLoadCallback);

        report_feed.setNumEntries(2);
        report_feed.load(onLoadCallback);
    },

    renderNews: function() {
        // The feed url is taken from the page, not included in this file.
        var feed_url = jQuery("#news-feed-rss-link").attr("href");

        var feed = new google.feeds.Feed(feed_url);
        feed.setNumEntries(12);

        var entry, formatted_date, dt, dd, title, a, link_attribs;

        var onLoadCallback = function(result) {
            if (result.error) {
                jQuery("#newsfeed-container").append("<p>The news feed is temporarily unavailable. Please try again in a few minutes.</p>");
            } else {
                var entry_list = jQuery(document.createElement('dl'));
				var class_to_show = 's_trackpv2';
                for (var i = 0; i < result.feed.entries.length; i++) {
                    entry = result.feed.entries[i];

                    formatted_date = GE.feeds.formatDate(entry["publishedDate"]);

                    dt = jQuery(document.createElement('dt')).html(formatted_date);
                    dd = jQuery(document.createElement('dd'));

                    title = entry["title"].replace(GE.feeds.whitespaceRegex, " ") ;

                    link_attribs = {
                        'target': '_blank',
                        'class': class_to_show,
                        'href': entry.link
                    };

                    a = jQuery(document.createElement('a')).attr(link_attribs).html(title);
                    entry_list.append(dt);
                    entry_list.append(dd.append(a));
                }

                jQuery("#newsfeed-container").html(entry_list);
				var js = document.createElement('script');
				js.type = 'text/javascript';  
				js.text = "oMyWA.s.initClasses('"+ class_to_show +"','click',false,oMyWA.track,'s_trackpv','','',oMyWA);";
				document.getElementsByTagName("head")[0].appendChild(js);
				/*var script_to_add = document.createElement('script');
				script_to_add.innerHTML = "oMyWA.s.initClasses('"+ class_to_show +"','click',false,oMyWA.track,'s_trackpv','','',oMyWA);";
				document.getElementById('footer').appendChild(script_to_add);*/
            }
        }

        feed.load(onLoadCallback);
    },

    renderCareersModule: function() {
        var feed_node  = jQuery("DIV.module A.careers-feed-source");
        var module_body = feed_node.closest("DIV.module-body");
		var class_to_show = 's_trackpv4';
        GE.feeds.renderGenericModule(feed_node.attr("href"), module_body, 6, false, class_to_show);
    },

    renderReportsModule: function() {
        var feed_node  = jQuery("DIV.module A.reports-feed-source");
        var module_body = feed_node.closest("DIV.module-body");
		var class_to_show = 's_trackpv3';
        GE.feeds.renderGenericModule(feed_node.attr("href"), module_body, 3, true, class_to_show);
    },

    renderPressModule: function() {
        var feed_node  = jQuery("DIV.module A.press-release-feed-source");
        var module_body = feed_node.closest("DIV.module-body");
		var class_to_show = 's_trackpv2';
        GE.feeds.renderGenericModule(feed_node.attr("href"), module_body, 3, false, class_to_show);
    },

    renderGenericModule: function(feed_url, destination_node, num_entries, include_author, class_to_show) {
        var feed = new google.feeds.Feed(feed_url);

        var dt, dd, a, span, entry_list;
        
        feed.setNumEntries(num_entries);
        
        var onLoadCallback = function(result) {
            if (!result.error) {
                var entry_list = jQuery(document.createElement('dl'));

                for (var i = 0; i < result.feed.entries.length; i++) {
                    entry = result.feed.entries[i];

                    var formatted_date = GE.feeds.formatDate(entry["publishedDate"]);

                    dt = jQuery(document.createElement('dt')).html(formatted_date);
                    dd = jQuery(document.createElement('dd'));

                    title = entry["title"].replace(GE.feeds.whitespaceRegex, " ") ;

					a = jQuery(document.createElement('a')).html(title).attr({'href': entry.link, 'target': '_blank', 'class': class_to_show});
                    entry_list.append(dt);

                    if (include_author === true) {
                        author = (entry["author"] === "")? "": " by " + entry["author"];
                        span = jQuery(document.createElement('span')).html(author);
                        entry_list.append(dd.append(a, span));
                    } else {
                        entry_list.append(dd.append(a));
                    }
                }

                destination_node.append(entry_list);
				var js = document.createElement('script');
				js.type = 'text/javascript';  
				js.text = "oMyWA.s.initClasses('"+ class_to_show +"','click',false,oMyWA.track,'s_trackpv','','',oMyWA);";
				document.getElementsByTagName("head")[0].appendChild(js);
				/*var script_to_add = document.createElement('script');
				script_to_add.innerHTML = "oMyWA.s.initClasses('"+ class_to_show +"','click',false,oMyWA.track,'s_trackpv_sbu','','',oMyWA);";
				document.getElementById('footer').appendChild(script_to_add);*/
            }
        }

        feed.load(onLoadCallback);
    }
}

