diff --git a/docs/html/resources/index.jd b/docs/html/resources/index.jd
index 1668721..699952a 100644
--- a/docs/html/resources/index.jd
+++ b/docs/html/resources/index.jd
@@ -29,6 +29,10 @@
 <dd>Links to the Android discussion groups and information about other ways to
 collaborate with other developers. </dd>
 
+<dt><b>Webinars</b></dt>
+<dd>Online training videos on wide range of Android topics
+coupled with live IRC chat sessions for discussions. </dd>
+
 <dt><b>More</b></dt>
 <dd>Quick development tips, troubleshooting information, and frequently asked
 questions (FAQs). </dd>
diff --git a/docs/html/resources/resources_toc.cs b/docs/html/resources/resources_toc.cs
index ed23c7c..0e17188 100644
--- a/docs/html/resources/resources_toc.cs
+++ b/docs/html/resources/resources_toc.cs
@@ -270,8 +270,18 @@
       </li>
     </ul>
   </li>
-
-
+  <!-- Webinar section -->
+  <li>
+    <h2><span class="en">Webinars</span></h2>
+    <ul>
+      <li><a href="<?cs var:toroot ?>resources/webinars/webinar-watch.html">
+            <span class="en">Watch a Webinar</span>
+          </a></li>     
+      <li><a href="<?cs var:toroot ?>resources/webinars/webinar-upcoming.html">
+            <span class="en">Upcoming Schedule</span>
+          </a></li>
+    </ul>
+  </li>
 
   <li>
     <h2><span class="en">More</span>
diff --git a/docs/html/resources/webinars/date.js b/docs/html/resources/webinars/date.js
new file mode 100644
index 0000000..97abf4b
--- /dev/null
+++ b/docs/html/resources/webinars/date.js
@@ -0,0 +1,100 @@
+// Copyright 2009 Google Inc. All Rights Reserved.
+
+/**
+ * @fileoverview Utility functions for formating date.
+ */
+
+/**
+ * Formats start date and end date in JSON format to string of format:
+   "09/09/2010 20:00 PM to 22:00 PM PST"
+ * @param {object} start date in JSON format.
+ * @param {object} end date in JSON format.
+ * @param {string} formatted date string.
+ */
+function formatDate(start,end) {
+  var s_ampm = null;
+  var e_ampm = null;
+
+  var toStr = function (num) {
+    if (num <= 12) {
+      return "" + num;
+    } else {
+      return "" + (num - 12);
+    }
+  };
+
+  var getMonthName = function (num) {
+    switch(num) {
+      case 1:
+        return 'January';
+      case 2:
+        return 'February';
+      case 3:
+        return 'March';
+      case 4:
+        return 'April';
+      case 5:
+        return 'May';
+      case 6:
+        return 'June';
+      case 7:
+        return 'July';
+      case 8:
+        return 'August';
+      case 9:
+        return 'September';
+      case 10:
+        return 'October';
+      case 11:
+        return 'November';
+      case 12:
+        return 'December';
+     }
+  }
+
+  var regex =  /(^\d{4})-(\d{2})-(\d{2})\s{1}(\d{2}):(\d{2}):(\d{2}$)/;
+  var s_match = regex.exec(start.toString());
+
+  if( s_match == null) {
+   return '';
+  }
+  var yy = s_match[1];
+
+  var mm = parseInt(s_match[2], 10 /** base 10 **/);
+  var dd = s_match[3];
+
+  var s_hh = parseInt(s_match[4], 10 /** base 10 **/);
+ 
+  if (s_hh > 12) {
+    s_ampm = "PM";
+  } else {
+    s_ampm = "AM";
+  }
+  s_hh = toStr(s_hh);
+  var s_mi = s_match[5];
+
+
+  var str =  getMonthName(mm) + " " +  dd + ", " + yy ;
+  str += " " + s_hh + ":" + s_mi;
+  str += " " + s_ampm;
+
+  regex =  /(^\d{4})-(\d{2})-(\d{2})\s{1}(\d{2}):(\d{2}):(\d{2}$)/;
+  var e_match = regex.exec(end.toString());
+  if( e_match == null) {
+   return str + ' PST';
+  }
+  var e_hh = parseInt(e_match[4], 10 /** base 10 **/);
+  if (e_hh > 12) {
+    e_ampm = "PM";
+  } else {
+    e_ampm = "AM";
+  }
+  e_hh = toStr(e_hh);
+  var e_mi = e_match[5];
+
+  str += " to " + e_hh + ":" + e_mi;
+  str += " " + e_ampm;
+  str += " PST";
+  return str;
+
+}
diff --git a/docs/html/resources/webinars/webinar-upcoming.jd b/docs/html/resources/webinars/webinar-upcoming.jd
new file mode 100644
index 0000000..b9602f4
--- /dev/null
+++ b/docs/html/resources/webinars/webinar-upcoming.jd
@@ -0,0 +1,53 @@
+page.title=Upcoming Schedule
+@jd:body
+
+<script type="text/javascript">
+
+/**
+/* Draw all webinars from feed into a 'webinars' div
+ * @param data  The feed data returned from the webinars request
+ */
+function renderWebinar(data) {
+
+  var entries = data.webinars || [];
+
+  var resultsDiv = $('#resource-browser-results');
+  var code = [];
+
+  // Loop through each entry (each webinar) and add it to the 'webinars' list
+  for (var i = 0; i < entries.length; i++) {
+    var entry = entries[i];
+
+    var title = entry.title;
+    var description = entry.description;
+    var url = entry.url;
+    var start = entry.start;
+    var end = entry.end;
+
+    code.push('<div>');
+    code.push('<h3>' + title + '</h3>');
+    code.push('<p ><i>' + formatDate(start, end) + '</i>');
+    code.push('<p>' + description);
+    code.push('</div>');
+  }
+
+  var html = code.join('\n');
+  resultsDiv.html(html);
+}
+
+/* Request the webinar feeds from webinarhosting server */
+function showWebinars() {
+  var script = "<script type='text/javascript' src='/resources/webinars/date.js'><\/script>";
+  $("body").append(script);
+  $.getJSON(
+  'http://android-webinars.appspot.com/feeds/api/upcomingwebinars?callback=?',
+  function(json){renderWebinar(json);});
+}
+// Initialization actions
+showWebinars();           // load webinars
+
+</script>
+
+
+<div id="resource-browser-results">
+  </div>
diff --git a/docs/html/resources/webinars/webinar-watch.jd b/docs/html/resources/webinars/webinar-watch.jd
new file mode 100644
index 0000000..5301b3f
--- /dev/null
+++ b/docs/html/resources/webinars/webinar-watch.jd
@@ -0,0 +1,106 @@
+page.title=Watch A Webinar
+@jd:body
+
+<script type="text/javascript">
+
+/**
+ * Draw all webinars from feed into a 'live_webinar' div
+ * @param data  The feed data returned from the live webinars request
+ */
+function renderLiveWebinar(data) {
+
+  var entries = data.webinars || [];
+
+  var resultsDiv = $('#live_webinar');
+  var code = [];
+
+  // Loop through each entry (each webinar) and add it to the 'webinars' list
+  for (var i = 0; i < entries.length; i++) {
+    var entry = entries[i];
+
+    var title = entry.title;
+    var description = entry.description;
+    var url = entry.url;
+    var start = entry.start;
+    var end = entry.end;
+    code.push('<div >');
+    code.push('<h3><b>Live!</b><a href="' + url + '"  target="_blank" onClick=_gaq.push(["_trackEvent", "Live Webinar", "' + title + '"]);>' + title + '</a></h3>');
+    code.push('<p ><i>' + formatDate(start, end) + '</i>');
+    code.push('<p>' + description);
+    code.push('</div>');
+  }
+  if (entries.length == 0) {
+    code.push('<div >');
+    code.push('<p>There is currently no live webinar. Watch one of the previous webinars from the list below and check the schedule for <a href="/resources/webinars/webinar-upcoming.html">Upcoming Webinars</a>.');
+    code.push('</div>');
+  }
+  var html = code.join('\n');
+  resultsDiv.html(html);
+}
+
+/* Request the webinar feeds from webinarhosting server */
+function showLiveWebinars() {
+  var script = "<script type='text/javascript' src='/resources/webinars/date.js'><\/script>";
+  $("body").append(script);
+  $.getJSON(
+  'http://android-webinars.appspot.com/feeds/api/livewebinar?callback=?',
+  function(json){renderLiveWebinar(json);});
+}
+// Initialization actions
+showLiveWebinars();      // load webinars
+
+/**
+ * Draw all past webinars from feed into a 'webinars' div
+ * @param data  The feed data returned from the webinars request
+ */
+function renderPastWebinar(data) {
+
+  var entries = data.webinars || [];
+
+  var resultsDiv = $('#past_webinars');
+  var code = [];
+  code.push('<h2> Past Webinars </h2>');
+    
+  // Loop through each entry (each webinar) and add it to the 'webinars' list
+  for (var i = 0; i < entries.length; i++) {
+    var entry = entries[i];
+
+    var title = entry.title;
+    var description = entry.description;
+    var url = entry.url;
+    var start = entry.start;
+    var end = entry.end;
+    code.push('<div >');
+    code.push('<h3><a href="' + url + '"  target="_blank" onClick=_gaq.push(["_trackEvent", "Past Webinars", "' + title + '"]);>' + title + '</a></h3>');
+    code.push('<p ><i>' + formatDate(start, end) + '</i>');
+    code.push('<p>' + description);
+    code.push('</div>');
+  }
+   if (entries.length == 0) {
+    code.push('<div >');
+    code.push('<p>There are no past webinars.');
+    code.push('</div>');
+  }
+  var html = code.join('\n');
+  resultsDiv.html(html);
+}
+
+/* Request the past webinar feeds from webinarhosting server */
+function showPastWebinars() {
+  var script = "<script type='text/javascript' src='/resources/webinars/date.js'><\/script>";
+  $("body").append(script);
+  $.getJSON(
+  'http://android-webinars.appspot.com/feeds/api/pastwebinars?callback=?',
+  function(json){renderPastWebinar(json);});
+}
+// Initialization actions
+showPastWebinars();      // load webinars
+
+</script>
+
+
+
+<div id="live_webinar">
+  </div>
+<div id="past_webinars">
+  </div>
