﻿var g_FeedsEntriesPerSubitemCount = 5;

var g_devMediaTweetsLoading = false;
var g_devMediaTweetsLoaded = false;
var g_devBlogiFeedLoading = false;
var g_devBlogiFeedLoaded = false;
var g_devPytaniaFeedLoading = false;
var g_devPytaniaFeedLoaded = false;
var g_antylamaFeedLoading = false;
var g_antylamaFeedLoaded = false;
var g_97rzeczyFeedLoading = false;
var g_97rzeczyFeedLoaded = false;

function onDevMediaTweetsLoaded(tweets) {
  g_devMediaTweetsLoading = false;
  g_devMediaTweetsLoaded = true;
  
  $('#devmedia-sidebar-devmedia-subitem .devmedia-sidebar-subitem-body')
    .html(createTweetsHtml(tweets));
}

function initializeSidebarEvents() {
  $('#devmedia-sidebar-devmedia-icon-container')
    .hover(function() {
      if (g_devMediaTweetsLoading || g_devMediaTweetsLoaded) {
        return;
      }
      
      g_devMediaTweetsLoading = true;
      g_devMediaTweetsLoaded = false;
      
      $.getJSON(
        'http://twitter.com/statuses/user_timeline/devMedia_pl.json?callback=?&count=5',
        onDevMediaTweetsLoaded);
    });
    
  $('#devmedia-sidebar-devblogi-icon-container')
    .hover(function() {
      if (g_devBlogiFeedLoading || g_devBlogiFeedLoaded) {
        return;
      }
      
      g_devBlogiFeedLoading = true;
      g_devBlogiFeedLoaded = false;
      
      loadFeedIntoContainer(
        'http://www.devblogi.pl/feeds/posts/default',
        'http://www.devblogi.pl',
        g_FeedsEntriesPerSubitemCount,
        $('#devmedia-sidebar-devblogi-subitem .devmedia-sidebar-subitem-body'),
        function() {
          g_devBlogiFeedLoading = false;
          g_devBlogiFeedLoaded = true;
        },
        function () {
          g_devBlogiFeedLoading = false;
          g_devBlogiFeedLoaded = false;
        }
      )
    });
    
  $('#devmedia-sidebar-devpytania-icon-container')
    .hover(function() {
      if (g_devPytaniaFeedLoading || g_devPytaniaFeedLoaded) {
        return;
      }
      
      g_devPytaniaFeedLoading = true;
      g_devPytaniaFeedLoaded = false;
      
      loadFeedIntoContainer(
        'http://devpytania.pl/feeds',
        'http://devpytania.pl',
        g_FeedsEntriesPerSubitemCount,
        $('#devmedia-sidebar-devpytania-subitem .devmedia-sidebar-subitem-body'),
        function() {
          g_devPytaniaFeedLoading = false;
          g_devPytaniaFeedLoaded = true;
        },
        function () {
          g_devPytaniaFeedLoading = false;
          g_devPytaniaFeedLoaded = false;
        }
      )
    });
    
  $('#devmedia-sidebar-antylama-icon-container')
    .hover(function() {
      if (g_antylamaFeedLoading || g_antylamaFeedLoaded) {
        return;
      }
      
      g_antylamaFeedLoading = true;
      g_antylamaFeedLoaded = false;
      
      loadFeedIntoContainer(
        'http://antylama.pl/feeds',
        'http://antylama.pl',
        g_FeedsEntriesPerSubitemCount,
        $('#devmedia-sidebar-antylama-subitem .devmedia-sidebar-subitem-body'),
        function() {
          g_antylamaFeedLoading = false;
          g_antylamaFeedLoaded = true;
        },
        function () {
          g_antylamaFeedLoading = false;
          g_antylamaFeedLoaded = false;
        }
      )
    });

  $('#devmedia-sidebar-97rzeczy-icon-container')
    .hover(function() {
      if (g_97rzeczyFeedLoading || g_97rzeczyFeedLoaded) {
        return;
      }
      
      g_97rzeczyFeedLoading = true;
      g_97rzeczyFeedLoaded = false;
      
      loadFeedIntoContainer(
        'http://97rzeczy.devblogi.pl/rss/programisci',
        'http://97rzeczy.devblogi.pl',
        g_FeedsEntriesPerSubitemCount,
        $('#devmedia-sidebar-97rzeczy-subitem .devmedia-sidebar-subitem-body'),
        function() {
          g_97rzeczyFeedLoading = false;
          g_97rzeczyFeedLoaded = true;
        },
        function () {
          g_97rzeczyFeedLoading = false;
          g_97rzeczyFeedLoaded = false;
        }
      )
    });
}

function createTweetsHtml(tweets) {
  var result = '';
  
  $.each(tweets, function() {
    var tweet = $(this)[0];

    var tweetStatus =
      tweet.text
        .replace(
          /((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g,
          function(url) {
            return '<a href="'+url+'">'+url+'</a>';
          })
        .replace(
          /\B@([_a-z0-9]+)/ig,
          function(reply) {
            return reply.charAt(0) + '<a href="http://twitter.com/' + reply.substring(1) + '">' + reply.substring(1) + '</a>';
          })
        .replace(
          /\B#([_a-z0-9]+)/ig,
          function(reply) {
            return '<a href="http://twitter.com/search?q=%23' + reply.substring(1) + '">' + reply + '</a>';
          });

    result += '<div class="twitter-entry">';
    result += tweetStatus;
    result += '</div>';
  });
  
  return result;
}

function loadFeedIntoContainer(feedUrl, feedEntryBaseUrl, maxEntriesCount, containerElem, loadSuccessCallback, loadFailureCallback) {
  var feed = new google.feeds.Feed(feedUrl);
  
  feed.setNumEntries(maxEntriesCount);

  feed.load(function(result) {
    if (result.error) {
      loadFailureCallback();
      return;
    }
    
    loadSuccessCallback();

    var feedsHtml = '';

    $.each(result.feed.entries, function() {
      var feedEntry = $(this)[0];
      var feedEntryLink = feedEntry.link;
      
      if (feedEntryLink.match('^http://') != 'http://') {
      	feedEntryLink = feedEntryBaseUrl + feedEntryLink;
      }
      
      feedsHtml += '<div class="feed-entry">';
      feedsHtml += '  <span class="feed-entry-title">';
      feedsHtml += '    <a href="' + feedEntryLink + '">' + feedEntry.title + '</a>';
      feedsHtml += '  </span>';
      feedsHtml += '  <br />';
      feedsHtml += '  <span class="feed-entry-author">';
      feedsHtml +=      feedEntry.author;
      feedsHtml += '  </span>';
      feedsHtml += '</div>';
    });
    
    containerElem.html(feedsHtml);
  });
}

function appendDevMediaSideBar(leftOrRight) {
  if (leftOrRight != 'left' && leftOrRight != 'right') {
    alert('devmedia.js: Argument leftOrRight should be equal to either "left" or "right".');
  }
  
  var sidebarHtml =
    '<div id="devmedia-sidebar" class="devmedia-sidebar-' + leftOrRight + '">' +
    '  <ul class="vertical-icons-list navmenu-v">' +
    '    <li id="devmedia-sidebar-devmedia-icon-container">' +
    '      <a href="http://www.devmedia.pl" target="_blank" title="devMedia" class="dm-sidebar-icon">' +
    '        <img src="http://www.devmedia.pl/static/gfx/logos/ic_16x16_devMedia.png" alt="devMedia" />' +
    '      </a>' +
    '      <ul>' +
    '        <li>' +
    '          <div id="devmedia-sidebar-devmedia-subitem" class="devmedia-sidebar-subitem">' +
    '            <h4>Ostatnie wpisy na Twitterze <a href="https://twitter.com/devMedia_pl">devMedia_pl</a></h4>' +
    '            <div class="devmedia-sidebar-subitem-body">' +
    '              <div class="sidebar-loading-indicator">' +
    '                <img src="http://www.devmedia.pl/static/gfx/sidebar-loading-indicator.gif" alt="Wczytywanie danych ..." />' +
    '              </div>' +
    '            </div>' +
    '          </div>' +
    '        </li>' +
    '      </ul>' +
    '    </li>' +
    '    <li id="devmedia-sidebar-devblogi-icon-container">' +
    '      <a href="http://www.devblogi.pl" target="_blank" title="devBlogi" class="dm-sidebar-icon">' +
    '        <img src="http://www.devmedia.pl/static/gfx/logos/ic_16x16_devBlogi.png" alt="devBlogi" />' +
    '      </a>' +
    '      <ul>' +
    '        <li>' +
    '          <div id="devmedia-sidebar-devblogi-subitem" class="devmedia-sidebar-subitem">' +
    '            <h4>Najnowsze posty z serwisu <a href="http://www.devmedia.pl">devBlogi</a></h4>' +
    '            <div class="devmedia-sidebar-subitem-body">' +
    '              <div class="sidebar-loading-indicator">' +
    '                <img src="http://www.devmedia.pl/static/gfx/sidebar-loading-indicator.gif" alt="Wczytywanie danych ..." />' +
    '              </div>' +
    '            </div>' +
    '          </div>' +
    '        </li>' +
    '      </ul>' +
    '    </li>' +
    '    <li id="devmedia-sidebar-devpytania-icon-container">' +
    '      <a href="http://devpytania.pl" target="_blank" title="devPytania" class="dm-sidebar-icon">' +
    '        <img src="http://www.devmedia.pl/static/gfx/logos/ic_16x16_devPytania.png" alt="devPytania" />' +
    '      </a>' +
    '      <ul>' +
    '        <li>' +
    '          <div id="devmedia-sidebar-devpytania-subitem" class="devmedia-sidebar-subitem">' +
    '            <h4>Ciekawe <a href="http://devpytania.pl">devPytania</a></h4>' +
    '            <div class="devmedia-sidebar-subitem-body">' +
    '              <div class="sidebar-loading-indicator">' +
    '                <img src="http://www.devmedia.pl/static/gfx/sidebar-loading-indicator.gif" alt="Wczytywanie danych ..." />' +
    '              </div>' +
    '            </div>' +
    '          </div>' +
    '        </li>' +
    '      </ul>' +
    '    </li>' +
    '    <li id="devmedia-sidebar-antylama-icon-container">' +
    '      <a href="http://antylama.pl" target="_blank" title="antylama" class="dm-sidebar-icon">' +
    '        <img src="http://www.devmedia.pl/static/gfx/logos/ic_16x16_antylama.png" alt="antylama" />' +
    '      </a>' +
    '      <ul>' +
    '        <li>' +
    '          <div id="devmedia-sidebar-antylama-subitem" class="devmedia-sidebar-subitem">' +
    '            <h4>Ciekawe pytania z serwisu <a href="http://antylama.pl">antylama</a></h4>' +
    '            <div class="devmedia-sidebar-subitem-body">' +
    '              <div class="sidebar-loading-indicator">' +
    '                <img src="http://www.devmedia.pl/static/gfx/sidebar-loading-indicator.gif" alt="Wczytywanie danych ..." />' +
    '              </div>' +
    '            </div>' +
    '          </div>' +
    '        </li>' +
    '      </ul>' +
    '    </li>' +
    '    <li id="devmedia-sidebar-97rzeczy-icon-container">' +
    '      <a href="http://97rzeczy.devblogi.pl" target="_blank" title="97rzeczy" class="dm-sidebar-icon">' +
    '        <img src="http://www.devmedia.pl/static/gfx/logos/ic_16x16_97rzeczy.png" alt="97rzeczy" />' +
    '      </a>' +
    '      <ul>' +
    '        <li>' +
    '          <div id="devmedia-sidebar-97rzeczy-subitem" class="devmedia-sidebar-subitem">' +
    '            <h4>Najnowsze posty z serwisu <a href="http://97rzeczy.devblogi.pl">97rzeczy</a></h4>' +
    '            <div class="devmedia-sidebar-subitem-body">' +
    '              <div class="sidebar-loading-indicator">' +
    '                <img src="http://www.devmedia.pl/static/gfx/sidebar-loading-indicator.gif" alt="Wczytywanie danych ..." />' +
    '              </div>' +
    '            </div>' +
    '          </div>' +
    '        </li>' +
    '      </ul>' +
    '    </li>' +
    '  </ul>' +
    '</div>';
  
  $(sidebarHtml).prependTo('body');
  
  initializeSidebarEvents();
}

