// JavaScript Document
google.load('feeds', '1');
var tabs = [['http://spreadsheets.google.com/feeds/list/o12717285619228049659.365302007215770059/oda/public/basic', 'tab0'], 
            ['http://spreadsheets.google.com/feeds/list/o12717285619228049659.365302007215770059/od6/public/basic', 'tab1'], 
            ['http://spreadsheets.google.com/feeds/list/o12717285619228049659.365302007215770059/od4/public/basic', 'tab2'], 
            ['http://spreadsheets.google.com/feeds/list/o12717285619228049659.365302007215770059/od7/public/basic', 'tab3'], 
            ['http://spreadsheets.google.com/feeds/list/o12717285619228049659.365302007215770059/od5/public/basic', 'tab4']];


/* jsonifySSList
 * Turn content returned by spreadsheet into JSON object
 */
function jsonifySSList(root) {
  for (var x=0; x<root.feed.entries.length; ++x) {
    try {
      // convert the content string into object notation
      // overwrite the content string with the object
      root.feed.entries[x].content = eval('({"'+ root.feed.entries[x]["content"]
          // remove weird whitespace characters
          .replace(/[\n\r\t\f\v\0]/g, '')
          // escape double quotes
          .replace(/\u0022/g, '\\"')
          // encapsulate keys/vals in double quotes
          .replace(/, (\w+): /g, '", "$1": "')
          .replace(/^(\w+): /g, '$1": "')
          +'"})');
    } catch(err) {
      // error handling
    }

  }
  return root.feed.entries;
}


/* toggle_post()
 * Handles clicks on 'show post' and 'hide post'
 * determines which is clicked and executes appropriate code
 */
function toggle_post(expandLinkID, feedURL, blogID) {
  var expandLink = document.getElementById(expandLinkID);
  var state = document.getElementById(expandLinkID).className;

  if (expandLink.className == 'show') {
    expand(feedURL, blogID);
    expandLink.className = 'hide';
    expandLink.firstChild.firstChild.nodeValue =  'Hide latest post';
  } else {
    collapse(blogID);
    expandLink.className = 'show';
    expandLink.firstChild.firstChild.nodeValue =  'Show latest post';
  }
}



/* Code used for subscriber count info*/
function getElementByTagAttr(tagArray, attr, attrValue) {
  var element;
  for (i = 0; i < tagArray.length; i++) {
    if (tagArray[i].getAttribute(attr) == attrValue) {
      element = tagArray[i];
      break;
    }
  }
  return element;
}



/* collapse()
 * execute when 'hide post' is clicked
 * remove first post from displaying in div with id blogID
 */
function collapse(blogID) {
  var container = document.getElementById(blogID);
  for (i=0; i < container.childNodes.length; i++) {
    container.removeChild(container.childNodes[i]);
  }
}  

function getFeedburnerSubscribers(result) {
  var links = result.xmlDocument.getElementsByTagName('link');
  var feedburnerLink = getElementByTagAttr(links, 'rel', 'self').getAttribute('href');
  var feedburnerSrv = 'http://feeds.feedburner.com/';
  var feedburnerCode = feedburnerLink.substring(feedburnerSrv.length, feedburnerLink.length);
  return 'http://feeds.feedburner.com/~fc/' + feedburnerCode + '?bg=E6E6E6&amp;fg=444444&amp;anim=0';
}

/* expand()
 * execute when 'show post' is clicked. 
 * generate snippet from first post in feedURL and populate in div with id blogID
 */
function expand(feedURL, blogID) {
  var feed = getFeedObj(feedURL, 1);
  var post_snippet = document.createElement('div');

  feed.load(function(result) {
    if (!result.error) {
      var post = '';
      var date = result.feed.entries[0].publishedDate.substr(0, result.feed.entries[0].publishedDate.length - 14);

      post = '<div class="post_snippet"><div class="title">' +
             '<a href="' + result.feed.entries[0].link + '">' +
             result.feed.entries[0].title + '</a></div>' +
             '<div class="date">' + date + '</div>' +
             '<div class="snippet">' +
             result.feed.entries[0].contentSnippet +
             '</div><div class="more_link">' +
             '<a href="' + result.feed.entries[0].link +  '">Read more</a>' +
             '</div></div>';

      var expandDiv = document.getElementById(blogID);  
      expandDiv.innerHTML = post;
      post = null;
  }})
  }


/* show_tab()
 * switch tabs and generate new content for given tab
 */
function show_tab(img, tab) {
  var tabNode = document.getElementById("tab" + tab);
  switch_tab(tabNode);
  build_bloglist(tabs[tab][0], img); 
}

function init() {
  var tab = getCategory();
  show_tab('clear.gif', tab);
}


/* getCategory()
 * return the selected tab number based on url param, default is tab 1
 */
function getCategory() {
  var queryStr = window.location.href;
  var param = queryStr.substr(queryStr.indexOf('#')+1, queryStr.length);
  for (i = 0; i < tabs.length; i++) {
    if (tabs[i][1] == param){return tabs[i][1].substr(3,1);}
  }
  
  return tabs[0][1].substr(3,1);
}

/* switch_tab()
 * make tab the active tab
 */
function switch_tab(tab) {
  var tabdivs = (document.getElementById('tabs')).getElementsByTagName('div');
  for (i=0; i < tabdivs.length; i++) {
    tabdivs[i].firstChild.src = tabdivs[i].firstChild.src.replace('-on.gif', '-off.gif'); 
    tabdivs[i].className = 'tab';
  }
  tab.className = 'tab tab_selected';
  tab.firstChild.src = tab.firstChild.src.replace('-off.gif', '-on.gif'); 
}


/* getFeedObj()
 * return a google feed obj given a url and the entry count
 */
function getFeedObj(url, n) {
  var feed = new google.feeds.Feed(url);
  feed.setResultFormat(google.feeds.Feed.MIXED_FORMAT);
  feed.setNumEntries(n);
  return feed;
}


/* build_bloglist()
 */
function build_bloglist(feedStr, img) {
  var feed = getFeedObj(feedStr, 50);

  feed.load(function(result) {
    if (!result.error && result.feed.entries.length) {
      var container = document.getElementById('content');
      container.innerHTML = '';
      var entries = jsonifySSList(result);

      // Loop through all data items returned
      for (i=0; i<result.feed.entries.length; i++) {
        var expandLinksID =  'toggleimg' +  (result.feed.entries[i].title).replace(/ /g, '');
        var expandID = 'blog_' + (result.feed.entries[i].title).replace(/ /g, '');
        var tmpStr = '<div class="entry">' +
                     '<img class="icon" src="' + result.feed.entries[i]["content"].icon  + '" />' + 
                     '<div class="data">' + 
                     '<div class="title">' +
                     '<a href="' + result.feed.entries[i]["content"].url + '" />' + 
                     result.feed.entries[i].title + '</a></div>' + 
                     '<div class="desc">' + result.feed.entries[i]["content"].desc + '</div>' + 
                     '<div class="links"><a class="show" id="' + expandLinksID + 
                     '" href="javascript:toggle_post(\'' +  expandLinksID + '\',\'' +
                     result.feed.entries[i]["content"].feedurl + '\',\'' + expandID + 
                     '\');"><span class="link_txt">Show latest post</span></a>' + 
                     '<span class="spacer">-</span>'+
                     '<a class="feed" href="' + result.feed.entries[i]["content"].feedurl + 
                     '"><span class="link_txt">Subscribe</span></a>' + 
                     '</div><div id="' + expandID + '" \/>' + 
                     '<div class="addr">' + result.feed.entries[i]["content"].url + '</div>' + 
                     '</div></div>';

        container.innerHTML += tmpStr;
        tmpStr = null;
    }
  }});
}


/* build_recent_posts()
 * generate the list of recent blog posts across all blogs
 */
function build_recent_posts(data) {
  var container = document.getElementById('recent_posts');
  var list = [];
  // Loop through all data items returned
  for (var i=0, item; item = data.items[i]; i++) {
    list[i] = '<div class="entry"><a class="post-title" href="'+
              item.alternate.href + '">' +
              item.title + '</a><br /><span class="blog-title">' +
              item.origin.title + '</span></div>';
 }
  container.innerHTML = list.join('');
  list = null;
}
