excludeFromSuggestions=true
fullpage=true
page.title=Google I/O 13
@jd:body
    
<style>
#ioplayer-frame {
  z-index:10;
  width:703px;
  height:396px;
  margin:0;
  position:relative;
}

#noplayer-message {
  position:absolute;
  top:50%;left:0;
  width:100%;
  z-index:-1;
  text-align:center;
  display:none;
}

h1 {
  font-weight:100;
  font-size:40px;
  line-height:30px;
  margin:30px 0 10px 0px;
  color:#000;
}

h2 {
  font-weight:100;
  font-size:30px;
  line-height:30px;
  margin:12px 0 10px 0px;
  color:#000;
  float:left;
  display:block;
}

.col-4 h2 {
  margin-top:40px;
}

ul.videos {
  list-style:none;
  margin:0;
  width:auto;
}
ul.videos li {
  display:block;
  float:left;
  position:relative;
  margin:0 2px 2px 0;
  background-repeat:no-repeat !important;
  background-size:320px auto;
  background-position:10% 50%;
  z-index:1; /* IE: the description is 2 */
}
ul.videos li a {
  color:#fff !important;
  display:block;
  margin:0;
  padding:8px 12px;
  width:209px;
  height:134px;
  box-shadow:inset 500px 500px 999px rgba(000, 000, 000, 0.2);
  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, rgba(0,0,0,0.8)), color-stop(1, transparent));
  background-image: -webkit-linear-gradient(top, rgba(0,0,0,0.8), transparent);
  background-image: -moz-linear-gradient(top, rgba(0,0,0,0.8), transparent);
  background-image: -o-linear-gradient(top, rgba(0,0,0,0.8), transparent);
  background-image: linear-gradient(to bottom, rgba(0,0,0,0.8), transparent);
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cc000000', endColorstr='#00ffffff',GradientType=0 ); /* IE6-9 */
}
ul.videos.featured li {
  margin:0 0 2px;
}
ul.videos.featured li a {
  margin:0;
  height:115px;
}
ul.videos li a:hover {
  box-shadow:inset 500px 500px 999px rgba(255,255,255, 0.6);
}
ul.videos li h4 {
  text-shadow:1px 1px 0 rgba(0,0,0,0.8);
  font-size:18px;
  line-height:22px;
  color:#fff;
  margin:0;
  height:100%; /* IE: to fill clickable area */
}

ul.videos li .description-frame {
  display:none;
  z-index:2; /* IE: the li is 1 */
}
ul.videos li a:hover .description-frame {
  display:block;
  position:absolute;
  top:80px;
  left:8px;
  z-index:99;
}
ul.videos .description {
  background:#fff;
  width:200px;
  padding:8px;
  -webkit-border-radius:1px;
  -moz-border-radius:1px;
  border-radius:1px;
  -moz-box-shadow: 0 2px 3px 2px rgba(000,000,000, 0.4);
  -webkit-box-shadow: 0 2px 3px 2px rgba(000,000,000, 0.4);
  box-shadow: 0 2px 3px 2px rgba(000,000,000, 0.4);
  font-size:11px;
  line-height:12px;
  color:#000;
  overflow:hidden;
}
ul.videos .arrow-up {
  position:absolute;
  left:15px;
  top:-11px;
  width:0;
  height:0;
  border-bottom:12px solid #fff;
  border-left:12px solid transparent;
  border-right:12px solid transparent;
}
ul.videos .arrow-down {
  position:absolute;
  left:15px;
  bottom:-11px;
  width:0;
  height:0;
  border-top:12px solid #fff;
  border-left:12px solid transparent;
  border-right:12px solid transparent;
}

ul.videos span.tag {
  font-size:.9em;
  font-weight:normal;
  display: block;
  position: absolute;
  bottom: 0;
  color: #fff;
  left: 0;
  padding: 4px;
  border-top-right-radius:4px;
  text-transform:uppercase;
  text-shadow: none;
}
ul.videos span.tag.design {
  background-color:rgba(51, 181, 229, .7);
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cc33b5e5', endColorstr='#cc33b5e5',GradientType=0 ); /* IE6-9 */
}
ul.videos span.tag.develop {
  background-color:rgba(255, 136, 0, .7);
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ccff8800', endColorstr='#ccff8800',GradientType=0 ); /* IE6-9 */
}
ul.videos span.tag.distribute {
  background-color:rgba(153, 204, 0, .7);
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cc99cc00', endColorstr='#cc99cc00',GradientType=0 ); /* IE6-9 */
}

</style>







<div class="wrap">

  <div class="col-12" style="width:704px;margin:0">
    <h1>Android @ Google I/O 13</h1>
    <div id="ioplayer-frame">
      <div id="noplayer-message">
        <!-- busted flash player message -->
        Your video is supposed to appear here.<br/>
        Make sure you have the <a href="//get.adobe.com/flashplayer/" target="_blank">Flash&reg; Player</a>.
      </div>
      <div id="player"><!-- Youtube embeds here... actually replaces this div --></div>
    </div>
  </div>

  <div class="col-4" style="margin:0;width:234px;padding:0 0 0 2px">
    <h2 class="norule">Most Popular</h2>
    <ul class="videos featured" id="playlist2">
    </ul>
  </div>
</div>

<div class="wrap">

    <div style="position:absolute;width:940px;text-align:right">
      <a href="//www.youtube.com/AndroidDevelopers" target="_blank">
      More on YouTube
        <img src="//www.youtube.com/favicon.ico" style="border:0;width:16px;height:16px;vertical-align:middle;margin:0 2px 3px 2px">
      </a>
    </div>
  <div style="width:944px;overflow:hidden;padding:0 0 20px">
    <h2 class="norule">All Videos</h2>
    <ul class="videos" id="playlist1" style="clear:left">
      <span id="videos-design"></span>
      <span id="videos-develop"></span>
      <span id="videos-distribute"></span>
    </ul>
  </div>

</div>

<br class="clearfix"/>

      
      
      
      
      
      
      
      
      

<script src="//swfobject.googlecode.com/svn/trunk/swfobject/swfobject.js" type="text/javascript"></script>
<script type="text/javascript">

/* Load a video into the player box.
 * @param id        The YouTube video ID
 * @param title     The video title to display in the player box (character escaped)
 * @param autoplay  Whether to automatically play the video
 */
function loadVideo(id, title, autoplay) {
  var url = '//www.youtube.com/v/' + id + '&rel=1&border=0&fs=1' + (autoplay?'&autoplay=1':'');
  swfobject.embedSWF(url, 'player', '704', '397', '9.0.0', false, false, {allowfullscreen: 'true'});
  $('body,html').animate({ scrollTop: 0 }, "slow");
  setTimeout(function(){$('#noplayer-message').show()}, 2000);
}


function buildPlaylistDesign(data) {
  buildPlaylist(data, $('ul#playlist1 #videos-design'), "design");
}

function buildPlaylistDevelop(data) {
  buildPlaylist(data, $('ul#playlist1 #videos-develop'), "develop");
}

function buildPlaylistDistribute(data) {
  buildPlaylist(data, $('ul#playlist1 #videos-distribute'), "distribute");
}

function buildPlaylist2(data) {
  buildPlaylist(data, $('ul#playlist2'));
}

function buildPlaylist(data, ul, tag) {

  var MAX_DESC_LENGTH = 200; // the length at which we will trim the description
  var feed = data.feed;
  var entries = feed.entry || [];
  var playlistId = feed.yt$playlistId.$t;

  // Loop through each entry (each video) and add it to the '#DevelopersLive' list
  for (var i = 0; i < entries.length; i++) {
    var entry = entries[i];
    var title = entry.title.$t;
    var id = entry.media$group.yt$videoid.$t;
    // get 180x320 thumbnail
    var thumbs = entry.media$group.media$thumbnail;
    var thumbUrl;
    for (var j = 0; j < thumbs.length; j++) {
      if (thumbs[j].yt$name == "hqdefault") {
        thumbUrl = thumbs[j].url;
      }
    }

    // chop out the google io title
    title = title.substr(title.indexOf("-") + 1, title.length);

    var fullDescription = entry.media$group.media$description.$t;
    var playerUrl = entry.media$group.media$content[0].url;
    var shortDescription = fullDescription.substr(0, MAX_DESC_LENGTH);
    // further shorten description if there's a url (remove it)
    var httpindex = shortDescription.indexOf("http://");
    if (httpindex != -1) {
      shortDescription = shortDescription.substring(0,httpindex);
    }
    shortDescription += shortDescription.length == MAX_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description

    var a = $('<a href="#" id="' + id + '" '
          + 'onclick="loadVideo(\'' + id + '\',\'' + escape(title) + '\',true); return false;" />');
    var pShortDescription = $('<div class="description-frame"><div class="arrow-up"></div>'
          + '<div class="description">' + shortDescription + '</div></div>');
    var h4Title = "<h4>" + title + "</h4>";
    var li = $('<li style="background-image:url(\'' + thumbUrl +'\')" />');

    li.append(a);
    a.append(h4Title).append(pShortDescription);

    if (tag !== undefined) {
      var $tag = $('<span class="tag ' + tag + '">' + tag + '</span>');
      a.append($tag);
    }

    ul.append(li);


    // put the first video in the player 
    if ((tag == "design") && (i == 0)) {
      loadVideo(id, escape(title), false);
    }
  }
}


/* Request the playlist feeds from YouTube */
function showDevelopersLivePlaylist() {
  var playlistId = "PLWz5rJ2EKKc-qVhMuAprIFYFbCotdgJKq"; /* IO 13 - Design */
  $.getScript("//gdata.youtube.com/feeds/api/playlists/"
          + playlistId +
          "?v=2&alt=json-in-script&max-results=50&callback=buildPlaylistDesign&orderby=position");

  playlistId = "PLWz5rJ2EKKc9rkwO9yBosRvkQBJd5utmR"; /* IO 13 - Develop */
  $.getScript("//gdata.youtube.com/feeds/api/playlists/"
          + playlistId +
          "?v=2&alt=json-in-script&max-results=50&callback=buildPlaylistDevelop&orderby=position");

  playlistId = "PLWz5rJ2EKKc-1WjgQqL0B4OQtbLfhMlB2"; /* IO 13 - Distribute */
  $.getScript("//gdata.youtube.com/feeds/api/playlists/"
          + playlistId +
          "?v=2&alt=json-in-script&max-results=50&callback=buildPlaylistDistribute&orderby=position");


  playlistId = "PLWz5rJ2EKKc9WGUwq2gQ-coU3fSyexgOx"; /* IO 13 - The Android Sessions */
  $.getScript("//gdata.youtube.com/feeds/api/playlists/"
          + playlistId +
          "?v=2&alt=json-in-script&max-results=3&callback=buildPlaylist2&orderby=viewCount");
}

showDevelopersLivePlaylist();


</script>