<?xml version="1.0" encoding="UTF-8" ?> 
<Module>
<ModulePrefs 
	title="__UP_title__" 
   	directory_title="CNN Reader" 
	title_url="http://www.gingagadgets.com/hub.php?caller=cnnreader" 
	description="This space saving RSS reader starts you off with the 5 most popular CNN feeds from iGoogle. From there you can edit the settings (accessed from the down arrow icon in the upper right of the gadget) to change the gadget's title and read whatever feeds you would like." 
	author="Ginga" 
	author_email="ginga.gadgets@gmail.com" 	
    	author_affiliation="Ginga" 
	author_location="USA" 	
	screenshot="http://hosting.gmodules.com/ig/gadgets/file/109859150862124727573/screenshot_cnnreader.png"
	thumbnail="http://hosting.gmodules.com/ig/gadgets/file/109859150862124727573/thumbnail_cnnreader.png"
	height="250" 
	scrolling="false" 
	singleton="false">
  <Require feature="dynamic-height" /> 
<Require feature="analytics" />
  <Require feature="setprefs" /> 
  <Require feature="tabs" /> 

<Require feature="minimessage"/>

</ModulePrefs>

  <UserPref name="title" display_name="Title" default_value="CNN Reader" /> 

  <UserPref name="tabFontSize" display_name="Font Size" default_value="0.8em" /> 

  <UserPref name="showFeedDesc" display_name="Descriptions ?" datatype="bool" default_value="true" /> 


  <UserPref name="feed1" display_name="URL #1:" datatype="string" default_value="http://rss.cnn.com/rss/cnn_topstories.rss" /> 
  <UserPref name="feedTitle1" display_name="Title #1:" datatype="string" default_value="Top" /> 

  <UserPref name="feed2" display_name="URL #2" datatype="string" default_value="http://rss.cnn.com/rss/cnn_world.rss" /> 
  <UserPref name="feedTitle2" display_name="Title #2" datatype="string" default_value="World" /> 

  <UserPref name="feed3" display_name="URL #3" datatype="string" default_value="http://rss.cnn.com/rss/cnn_us.rss" /> 
  <UserPref name="feedTitle3" display_name="Title #3" datatype="string" default_value="U.S." /> 

  <UserPref name="feed4" display_name="URL #4" datatype="string" default_value="http://rss.cnn.com/rss/money_topstories.rss" /> 
  <UserPref name="feedTitle4" display_name="Title #4" datatype="string" default_value="Money" /> 

  <UserPref name="feed5" display_name="URL #5" datatype="string" default_value="http://rss.cnn.com/rss/cnn_tech
" /> 
  <UserPref name="feedTitle5" display_name="Title #5" datatype="string" default_value="Tech" /> 
   


  <UserPref name="entries" display_name="# of Entries" datatype="enum" default_value="3">
  <EnumValue value="3" /> 
  <EnumValue value="4" /> 
  <EnumValue value="5" /> 
  <EnumValue value="6" /> 
  <EnumValue value="7" /> 
  <EnumValue value="8" /> 
  <EnumValue value="9" /> 
  <EnumValue value="10" /> 
  <EnumValue value="11" /> 
  <EnumValue value="12" /> 
  </UserPref>



  <UserPref name="summaries" display_name="Summaries" datatype="enum" default_value="200">
  <EnumValue value="-1" display_value="none" /> 
  <EnumValue value="100" display_value="100 chars" /> 
  <EnumValue value="200" display_value="200 chars" /> 
  <EnumValue value="300" display_value="300 chars" /> 
  <EnumValue value="400" display_value="400 cahrs" /> 
  <EnumValue value="0" display_value="all" /> 
  </UserPref>
  

  <UserPref name="renderHtml" display_name="Render HTML" datatype="bool" default_value="true" /> 

  <UserPref name="showTimestamp" display_name="Show Timestamp" datatype="bool" default_value="true" /> 

  <UserPref name="selectedTab" datatype="hidden" /> 

  <Content type="html">
  <![CDATA[ 


<script type="text/javascript"> 
	_IG_Analytics("UA-2621463-1", "/cnnreader");  	

	var msg = new _IG_MiniMessage(__MODULE_ID__);
	
  _IG_FetchContent('http://www.gingagadgets.com/lib/message_center.php?caller=cnnreader', function (responseText) {
     statusMsg = msg.createDismissibleMessage(responseText);
     statusMsg.style.backgroundColor = "white";
});
</script>




  <style type="text/css">
  .tablib_table {
    font-size: __UP_tabFontSize__;
  }
  .tablib_selected, .tablib_unselected {
    width: 19%;
  }

  .statusLabel {
    font-size: 0.75em;
    font-style: italic;
    padding-top: 10px;
    text-align: center;
  }
  .feedHeader {
    padding-top: 5px;
    font-size: 0.7em;
  }
  .feedHeader .feedTitle {
    font-weight: bold;
    font-size: 1.1em;
  }
  .feedHeader .feedAuthor {
    font-weight: normal;
    font-size: 0.8em;
    color: #676767;
  }

  .feedList {
    font-size: 0.7em;
    margin: 0px;
    padding: 0px 0px 5px 0px;
    border-bottom: 1px solid #aaaaaa;
  }
  .feedList li {
    margin-top: 5px;
    padding: 3px 3px 0px 3px;
    border-top: 1px solid #aaaaaa;
  }
  .feedList li div.entryTitle a {
    font-weight: bold;
  }
  .feedList li div.entryTimestamp {
    font-size: 0.95em;
    font-style: italic;
    color: #676767;
  }
  </style>

  <script>
  // Global variables
  var prefs = new _IG_Prefs(__MODULE_ID__);
  var tabs = new _IG_Tabs(__MODULE_ID__);

  /**
   * Initialize tabs when page loads.
   * Create tab for each userpref only if userpref is not empty.
   */
  function init() {

    var f1 = _trim(prefs.getString("feed1"));
    var f2 = _trim(prefs.getString("feed2"));
    var f3 = _trim(prefs.getString("feed3"));
    var f4 = _trim(prefs.getString("feed4"));
    var f5 = _trim(prefs.getString("feed5"));

    var ft1 = _trim(prefs.getString("feedTitle1"));
    var ft2 = _trim(prefs.getString("feedTitle2"));
    var ft3 = _trim(prefs.getString("feedTitle3"));
    var ft4 = _trim(prefs.getString("feedTitle4"));
    var ft5 = _trim(prefs.getString("feedTitle5"));

    if (f1 != "") {
      tabs.addDynamicTab(((ft1 == "") ? "Feed 1" : ft1), _IG_Callback(callbackTab, f1));
    }
    if (f2 != "") {
      tabs.addDynamicTab(((ft2 == "") ? "Feed 2" : ft2), _IG_Callback(callbackTab, f2));
    }
    if (f3 != "") {
      tabs.addDynamicTab(((ft3 == "") ? "Feed 3" : ft3), _IG_Callback(callbackTab, f3));
    }
    if (f4 != "") {
      tabs.addDynamicTab(((ft4 == "") ? "Feed 4" : ft4), _IG_Callback(callbackTab, f4));
    }
    if (f5 != "") {
      tabs.addDynamicTab(((ft5 == "") ? "Feed 5" : ft5), _IG_Callback(callbackTab, f5));
    }
  };

  /**
   * Fetches an Atom or RSS feed and generates content inside the
   * selected tab's content container.  This function is called whenever
   * a tab is selected.
   */
  function callbackTab(tabId, feedUrl) {
    var showFeedDesc = prefs.getBool("showFeedDesc");
    var summaries = prefs.getInt("summaries");
    var entries = prefs.getInt("entries");
    var renderHtml = prefs.getBool("renderHtml");
    var showTimestamp = prefs.getBool("showTimestamp");
    var container = _gel(tabId);

    // Display loading message before fetching feed.
    container.innerHTML = '<div class="statusLabel">Loading...</div>';

    // Fetch feed and return it as a JSON object.
    // Callback function is defined within local scope.
    _IG_FetchFeedAsJSON(
      feedUrl,
      function(feed) {
        if (typeof feed == "undefined" || typeof feed.Entry == "undefined") {
          container.innerHTML = '<div class="statusLabel">Invalid feed URL:<br>' + feedUrl + '</div>';
        } else {
          // Fetch feed successful.  Generate HTML content from returned JSON object.
          // Create feed header containing title and description.
          var html = new Array();
          html.push('<div class="feedHeader">');
          html.push('<div class="feedTitle">');
          html.push((feed.Link != "") ? '<a target="_top" href="' + _hesc(feed.Link) + '">' + _hesc(feed.Title) + '</a>' : _hesc(feed.Title));
          html.push((feed.Author != "") ? '<span class="feedAuthor"> by ' + _hesc(feed.Author) + '</span>' : "");
          html.push('</div>');
          if (showFeedDesc) {
            html.push('<div class="feedDesc">' + _hesc(feed.Description) + '</div>');
          }
          html.push('</div>');

          // Iterate through each feed entry and generate list of content.
          html.push('<ul class="feedList">');
          for (var n = 0; n < feed.Entry.length; n++) {
            var entry = feed.Entry[n];
            html.push('<li>');
            html.push('<a target="_top" href="' + entry.Link + '"><b>' + _hesc(entry.Title) + '</b></a>');


            // non-working alternate
  	    //if (typeof entry.Summary != "undefined" && entry.Summary != "" && summaries > 0) {
            //  if (entry.Summary.length > summaries) {
            //    html.push('<div class="entrySummary">' + _hesc(summary.substr(0, summaries)) + ' ...</div>');
            //  } else {
            //    html.push('<div class="entrySummary">' + _hesc(summary) + '</div>');
            //  }
            //}

            
            // standard
            if (typeof entry.Summary != "undefined" && entry.Summary != "") {
              var summary = document.createElement("div");
              summary.innerHTML = (summaries == 0) ? entry.Summary : entry.Summary.substr(0, summaries);
              html.push('<div class="entrySummary">');
              html.push((renderHtml ? summary.innerHTML : _hesc(summary.innerHTML)));
              html.push('</div>');
            }




            if (!isNaN(entry.Date) && showTimestamp) {
              html.push('<div class="entryTimestamp">' + new Date(entry.Date * 1000).toLocaleString() + '</div>');
            }
            html.push('</li>');
          }
          html.push('</ul>');
          container.innerHTML = html.join("");
        }

        // Resize iframe height to fit content.
        _IG_AdjustIFrameHeight();
      },
      entries,
      (summaries > -1)
    );
  }

  // Set onload event handler to call init()
  _IG_RegisterOnloadHandler(init);
  </script>


  ]]> 
  </Content>
  </Module>