<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="Interesting Items For You"
             title_url="/history/items"
             category="tools"
             screenshot="/ig/modules/interesting_items.png"
             thumbnail="/ig/modules/interesting_items-thm.png"
             author="Google Engineering"
             author_email="beverlyy.feedback+interesting.items@gmail.com"
             author_affiliation="Google, Inc."
             author_location="Mountain View, CA"
             description="See interesting items recommended just for you, including searches, videos, gadgets and more.">
  <Require feature="setprefs"/>
  <Require feature="tabs"/>
</ModulePrefs>

<UserPref name="num" display_name="Maximum list size" datatype="enum" default_value="10">
  <EnumValue value="5" />
  <EnumValue value="10" />
  <EnumValue value="20" />
  <EnumValue value="30" />
</UserPref>

<!-- Required by UI tabs library to remember last tab selected -->
<UserPref name="selectedTab" datatype="hidden"/>

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

<!-- /////////////////////// HTML Content /////////////////////////// -->
<style>
  @import url(http://www.google.com/uds/css/gsearch.css);
  #popquery_search__MODULE_ID__ .gsc-control { width: 99%; }
  #popquery_search__MODULE_ID__ .gsc-search-box { display: none; }
  #popquery_search__MODULE_ID__ .gs-title { white-space: nowrap; }

  #smh_content__MODULE_ID__ {
    border-bottom: 1px solid rgb(103, 103, 103);
    padding: 1 8;
    overflow: hidden;
  }

  .smh_truncate__MODULE_ID__ { font-family: arial, sans-serif }
  .smh_truncate__MODULE_ID__ { table-layout: fixed; border-collapse: collapse; }
  .smh_truncate__MODULE_ID__ td { white-space: nowrap; vertical-align: top; }
  .smh_truncate__MODULE_ID__ div { overflow: hidden; text-overflow: ellipsis; }
  .smh_selection__MODULE_ID__ { overflow: hidden; text-align: right; margin-top: 6px }
  .smh_status__MODULE_ID__ { font-family: arial, sans-serif; color: #666666; font-style: italic }

  .tablib_selected__MODULE_ID__, .tablib_unselected__MODULE_ID__ { color:#000; width:20%; }
  .tablib_unselected__MODULE_ID__ { color:#0000cc; background:#f0f0f0 }
</style>

<div id="smh_container__MODULE_ID__" style="width: 100%; overflow: hidden">
  <div id="smh_content__MODULE_ID__">
    <div id="status__MODULE_ID__" style="margin-top: 10px; margin-bottom: 10px; width: 100%">
      <div id="status_msg__MODULE_ID__" class="smh_status__MODULE_ID__">Loading...</div>
    </div>

    <div id="popquery__MODULE_ID__" style="display: none; width: 100%">
      <div id="popquery_selection__MODULE_ID__" class="smh_selection__MODULE_ID__"></div>
      <div id="popquery_content_box__MODULE_ID__" style="margin-top:6px">
        <div style="overflow: hidden">Recent top queries related to your searches:</div>
        <div id="popquery_content__MODULE_ID__" style="margin-top:6px"></div>
      </div>
      <div id="popquery_search_content__MODULE_ID__" style="margin-top: 6px;display:none">
        <a href="javascript:GST__MODULE_ID__.undoGSearch()">&laquo; back to searches</a>
        <div id="popquery_search__MODULE_ID__" style="margin-top:6px"></div>
        <a href="javascript:GST__MODULE_ID__.undoGSearch()">&laquo; back to searches</a>
      </div>
    </div>

    <div id="urlprofile__MODULE_ID__" style="display: none; width: 100%">
      <div id="urlprofile_selection__MODULE_ID__" class="smh_selection__MODULE_ID__"></div>
      <div style="overflow: hidden; margin-top: 6px">Web pages related to your searches:</div>
      <div id="urlprofile_content__MODULE_ID__" style="margin-top: 6px"></div>
    </div>

    <div id="motd__MODULE_ID__" style="display: none; width: 100%">
      <div id="motd_selection__MODULE_ID__" class="smh_selection__MODULE_ID__"></div>
      <div id="motd_content__MODULE_ID__" style="margin-top: 2px"></div>
    </div>

    <div id="video__MODULE_ID__" style="display: none; width: 100%">
      <div id="video_selection__MODULE_ID__" class="smh_selection__MODULE_ID__"></div>
      <div id="video_content__MODULE_ID__" style="margin-top: 2px; text-align: center;"></div>
    </div>

    <div id="news__MODULE_ID__" style="display:none;width:100%">
      <div id="news_selection__MODULE_ID__" class="smh_selection__MODULE_ID__"></div>
      <div id="news_content__MODULE_ID__" style="margin-top:2px;margin-bottom:2px"></div>
    </div>
  </div>

<!-- /// Message if user is not signed in.  -->
<!-- IMPORTANT NOTE: If a user sees this gadget but is not signed in, it -->
<!-- means that the user has added this gadget as a cookie-based user. -->
<!-- Currently, cookie-based users will NOT have recommendations.  Rather -->
<!-- than telling users to sign in (at which point they will no longer have -->
<!-- this gadget on their personalized homepage), we tell users to add -->
<!-- this gadget again after signing in. -->

<div id="smh_not_signed_in__MODULE_ID__" class="smh_status__MODULE_ID__" style="display: none; margin-top: 1px; width: 100%">
  To see your Interesting Items, you must sign in before adding this gadget to your personalized homepage.
</div>

</div>

<!-- /////////////////////// JavaScript Content /////////////////////////// -->

<script src="http://www.google.com/uds/api?file=uds.js&amp;v=1.0" type="text/javascript"></script>
<script language="javascript" type="text/javascript">

var GST__MODULE_ID__ = {
prefs: new _IG_Prefs(__MODULE_ID__),
currentView: "popquery__MODULE_ID__",
tabs: null,
searchControl: null,

// The template string to generate each video entry
TPL:
  '<div id=GST__MODULE_ID__video style="height:%VIDEO_HEIGHT%;">' +
    '<div style="display:none"' +
      ' id="GST__MODULE_ID__swf">' +
      '<embed style="width:%VIDEO_WIDTH%;height:%VIDEO_HEIGHT%;"' +
        ' type="application/x-shockwave-flash"' +
        ' src="%FLASHPLAYER_URL%&autoplay=true" ' +
        ' quality="best" scale="noScale" wmode="window" bgcolor=black>' +
      '</embed>' +
    '</div>' +
    '<div onclick="GST__MODULE_ID__.switchFlash(\'%CT_URL_SMALL%\')" style="display:block" id="GST__MODULE_ID__thumb">' +
      '<img src="http://video.google.com/common/playoverlay.gif" width=23 height=23 style="position:absolute; margin-top:%ARROW_HEIGHT_OFFSET%; margin-left:5px;"/>' +
      '<img src="/ig/proxy?url=%THUMB_URL_ESC%&et=' + _et + '" height="%VIDEO_HEIGHT%" width="%VIDEO_WIDTH%"><br>' +
    '</div>' +
  '</div>' +
  '<table cellpadding=0 cellspacing=0 border=0 width=100%><tr>' +
    '<td>&nbsp;</td>' +
  '</tr><tr>' +
    '<td align=center>' +
      '<font size="-1" face="Arial,sans-serif">' +
        '<a href="%CT_URL_LARGE%" target="_blank">%VIDEO_TITLE%</a>' +
        '<div>' +
          '<font color=green>' +
            '%VIDEO_LENGTH%' +
          '</font>' +
        '</div>' +
      '</font>' +
    '</td>' +
  '</tr><tr>' +
    '<td align=right>' +
        '<font size=-1><a href="http://video.google.com/recommendations" target="_blank">more videos &raquo;</a></font>' +
    '</td>' +
  '</tr><tr>' +
    '<td>&nbsp;</td>' +
  '</tr></table>',

switchFlash : function(ct_url) {
  _gel("GST__MODULE_ID__thumb").style.display = "none";
  _gel("GST__MODULE_ID__swf").style.display = "block";
  _sendx(ct_url,function(resp){});
},

safeEval: function(expr) {
  if (!expr) return false;
  if (expr.substring(0, 9) == "while(1);") {
    return eval('(' + expr.substring(9, expr.length) + ')');
  } else {
    return eval('(' + expr + ')');
  }
},

setInnerHTML:function(id,ihtml){
  _gel("m___MODULE_ID__").style.display="none";
  _gel(id).innerHTML=ihtml;
  _gel("m___MODULE_ID__").style.display="";
},

switchView: function(view) {
  _gel("status__MODULE_ID__").style.display = "none";
  _gel(GST__MODULE_ID__.currentView).style.display = "none";

  _gel(view).style.display = "";
  GST__MODULE_ID__.currentView = view;
},

showError: function() {n
  GST__MODULE_ID__.setInnerHTML("status_msg__MODULE_ID__","There was an error fetching your Interesting Items data.  Make sure you have <a href='http://www.google.com/history'>Web History</a> enabled and please <a href='javascript:void(0)' onclick='window.location.reload()'>try again</a>.");
  GST__MODULE_ID__.switchView("status__MODULE_ID__");
},

showErrorMessage: function(msg) {
  GST__MODULE_ID__.setInnerHTML("status_msg__MODULE_ID__", msg);
  GST__MODULE_ID__.switchView("status__MODULE_ID__");
},

showNoGadgetRecommendation: function() {
  GST__MODULE_ID__.showErrorMessage("No gadget recommendations for today.");
},

showNoVideoRecommendation: function() {
  GST__MODULE_ID__.showErrorMessage("No video recommendations for today.");
},

showNoNewsRecommendation:function() {
  GST__MODULE_ID__.showErrorMessage("No news recommendations for today.");
},

showNotEnoughData:function(){
  GST__MODULE_ID__.showErrorMessage("There aren't enough searches for interesting items yet. Check back after searching for a couple days and be sure you're signed in when you search.");
},

showNotSignedIn:function(){
  _gel("smh_content__MODULE_ID__").style.display="none";
  _gel("smh_not_signed_in__MODULE_ID__").style.display="";
},

checkResponse:function(r, type){
  if (!r || !r.documentElement) {
    GST__MODULE_ID__.showError();
    return false;
  }

  if (r.getElementsByTagName("item").length == 0){
    if (type == "rec_ig") {
      GST__MODULE_ID__.showNoGadgetRecommendation();
    } else if (type == "rec_vi") {
      GST__MODULE_ID__.showNoVideoRecommendation();
    } else if (type == "rec_nw") {
      GST__MODULE_ID__.showNoNewsRecommendation();
    } else {
      GST__MODULE_ID__.showNotEnoughData();
    }
    return false;
  }

  return true;
},

addFeed: function(type, url, clickthrough_url) {
  _sendx(clickthrough_url, function(resp) {});
  if (type == "rss") {
    _add_f(url);
    if (navigator.appName == "Microsoft Internet Explorer") {
      window.location.reload(false);
    }
  } else {
    _add_remote_module(url, function() {
      if (navigator.appName == "Microsoft Internet Explorer") {
        setTimeout("window.location.reload(false)", 1500);
      }
    });
  }
},

gelstnNS : function(node, tagname, nsuri, nsprefix) {
  return node.getElementsByTagNameNS ?
   node.getElementsByTagNameNS(nsuri, tagname)
   : node.getElementsByTagName(nsprefix + ':' + tagname);
},

showVideo: function(id, video_id, ct_url) {
  var url = "http://video.google.com/videofeed?docid=" + video_id;

  _IG_FetchXmlContent(url, function(xmldoc) {
    if (typeof(xmldoc) != "object") {
      GST__MODULE_ID__.showNoVideoRecommendation();
      return;
    }

    var vid_items = xmldoc.getElementsByTagName("item");
    if (vid_items.length == 0) {
      GST__MODULE_ID__.showNoVideoRecommendation();
      return;
    }

    var nsuri = "http://search.yahoo.com/mrss/";
    var nsprefix = "media";

    var video = {
      title : GST__MODULE_ID__.nodeValue(vid_items[0], "title"),
      link : GST__MODULE_ID__.nodeValue(vid_items[0], "link"),
      thumburl : GST__MODULE_ID__.gelstnNS(vid_items[0], "thumbnail", nsuri, nsprefix)[0].getAttribute("url").replace(/&amp;/g, "&").replace(/&#38;/g, "&"),
      docid : video_id,
      length : ""
    };

    var formats = GST__MODULE_ID__.gelstnNS(vid_items[0], "content", nsuri, nsprefix);
    for (var j = 0; j < formats.length; j++) {
      var f = formats[j];
      if (f.getAttribute("type") == "video/x-flv") {
        var secs = f.getAttribute("duration");
        var mins = parseInt(secs/60);
        video.length = ((mins > 0) ? mins + " min " : "") + (secs%60) + " sec";
        break;
      }
    }

    var player = "";
    try {
      var playerElements = GST__MODULE_ID__.gelstnNS(vid_items[0], "content", nsuri, nsprefix);
      for (var i = 0; i < playerElements.length; ++i) {
        if (playerElements.item(i).attributes.getNamedItem("type").value
            == "application/x-shockwave-flash") {
          player = playerElements.item(i).attributes.getNamedItem("url").value
          break;
        }
      }
    } catch (err) {
      return;
    }

    // we have all the necesasry info to display
    var out = document.getElementById("video_content__MODULE_ID__");
    out.innerHTML = "";

    var tpl = GST__MODULE_ID__.TPL;
    tpl = tpl.replace(/\%VIDEO_TITLE\%/g, _hesc(video.title));
    tpl = tpl.replace(/\%VIDEO_ID\%/g, video.docid);
    tpl = tpl.replace(/\%VIDEO_LENGTH\%/g, _hesc(video.length));
    tpl = tpl.replace(/\%THUMB_URL_ESC\%/g, _esc(video.thumburl));
    tpl = tpl.replace(/\%FLASHPLAYER_URL\%/g, player);

    tpl = tpl.replace(/\%CT_URL_LARGE\%/g, ct_url);
    tpl = tpl.replace(/\%CT_URL_SMALL\%/g, ct_url);

    var width = out.offsetWidth * 0.75;
    var height = parseInt((width*0.75) + 0.5);
    tpl = tpl.replace(/\%VIDEO_HEIGHT\%/g, height+"px");
    tpl = tpl.replace(/\%VIDEO_WIDTH\%/g, width+"px");

    // calculate height of arrow
    var arrowheightoffset = height - 23 - 5;
    tpl = tpl.replace(/\%ARROW_HEIGHT_OFFSET\%/g, arrowheightoffset+"px");

    out.innerHTML = tpl;
  });
},

request: function(op) {
  var num = GST__MODULE_ID__.prefs.getInt("num");
  return ("/history/items?output=rss&zx=" + Math.random() +
          "&cd=rm&tc=1&op=" + op + "&start=0&num=" + num);
},

undoGSearch: function() {
  _gel('popquery_search_content__MODULE_ID__').style.display = 'none';
  _gel('popquery_content_box__MODULE_ID__').style.display = 'block';
  GST__MODULE_ID__.searchControl.clearAllResults();
},

gSearch: function(q, url) {
  _sendx(url, function(r){});
  GST__MODULE_ID__.searchControl.execute('"' + q + '"');
  _gel('popquery_content_box__MODULE_ID__').style.display = 'none';
  _gel('popquery_search_content__MODULE_ID__').style.display = 'block';
},

nodeValue: function(parent, nodeName) {
  return parent.getElementsByTagName(nodeName).item(0).firstChild.nodeValue;
},

nodeValueNS: function(parent, nodeName, nsuri, nsprefix) {
  var candidates = GST__MODULE_ID__.gelstnNS(parent, nodeName, nsuri, nsprefix);
  if (candidates == null || candidates.length == 0 ||
      candidates.item(0) == null || candidates.item(0).firstChild == null) {
    return "";
  }
  return candidates.item(0).firstChild.nodeValue;
},

renderPopQuery: function() {
  _sendx(GST__MODULE_ID__.request("rec_pq"), function(response) {
    GST__MODULE_ID__.switchView("popquery__MODULE_ID__");
    if (GST__MODULE_ID__.checkResponse(response, "rec_pq")) {
      var items = response.getElementsByTagName("item");
      var html = '<table class="smh_truncate__MODULE_ID__" cellpadding="0" cellspacing="0" width="100%" style="margin-bottom:6px">';
      var num = GST__MODULE_ID__.prefs.getInt("num");
      for (var i = 0; i < items.length && i < num; ++i) {
        var item = items.item(i);
        var title = _hesc(GST__MODULE_ID__.nodeValue(item, "title"));
        var link = _hesc(GST__MODULE_ID__.nodeValue(item, "link"));
        html += '<tr><td alight="right" width="20">' + (i + 1) + '.</td>';
        html += '<td width="99%"><div style="padding-bottom:3px">&nbsp;';
        html += '<a href="' + link + '" onclick="GST__MODULE_ID__.gSearch(\''+ title + '\',\''+ link +'\');return false" ';
        html += 'title="Search for \'' + title + '\'">' + title + '</a>&nbsp;&nbsp;';
        html += '<a href="' + link + '" title="Search for \'' + title + '\' in a new window" target="_blank">';
        html += '<img src="/ig/modules/interesting_items/open_new_window.png" border="0" width="10" height="10" alt="%raquo;" /></a>';
        html += '</div></td>';
        html += '</tr>';
      }
      html += "</table>";
      GST__MODULE_ID__.setInnerHTML("popquery_content__MODULE_ID__", html);
    }
  }, true);
},

renderUrlProfile: function() {
  _sendx(GST__MODULE_ID__.request("rec_up"), function(response) {
    GST__MODULE_ID__.switchView("urlprofile__MODULE_ID__");
    if(GST__MODULE_ID__.checkResponse(response, "rec_up")){
      var items = response.getElementsByTagName("item");
      var html = '<table class="smh_truncate__MODULE_ID__" cellpadding="0" cellspacing="0" width="100%" style="margin-bottom:6px">';
      var num = GST__MODULE_ID__.prefs.getInt("num");
      for (var i = 0; i < items.length && i < num; ++i) {
        var item = items.item(i);
        var title = GST__MODULE_ID__.nodeValue(item, "title");
        var link = GST__MODULE_ID__.nodeValue(item, "link");
        html += '<tr><td alight="right" width="20">' + (i + 1) + '.</td>';
        html += '<td width="99%"><div style="padding-bottom:3px">&nbsp;';
        html += '<a href="' + link + '" target="_blank">' + title + '</a>';
        html += '</div></td>';
        html += '</tr>';
      }
      html += "</table>";
      GST__MODULE_ID__.setInnerHTML("urlprofile_content__MODULE_ID__", html);
    }
  }, true);
},

renderMOTD: function() {
  _sendx(GST__MODULE_ID__.request("rec_ig"), function(response) {
    GST__MODULE_ID__.switchView("motd__MODULE_ID__");
    if (GST__MODULE_ID__.checkResponse(response, "rec_ig")) {
      var items = response.getElementsByTagName("item");
      var html = '<table class="smh_truncate__MODULE_ID__" cellpadding="1" cellspacing="0" width="100%" style="margin-bottom:6px">';
      for (var i = 0; i < items.length && i < 1; ++i) {
        var item = items.item(i);
        var title = GST__MODULE_ID__.nodeValue(item, "title");
        var link = GST__MODULE_ID__.nodeValue(item, "link");
        var desc = GST__MODULE_ID__.nodeValue(item, "description");
        if (desc.length > 80) {
          desc = desc.substr(0, 80) + "...";
        }
        var catkey = GST__MODULE_ID__.nodeValue(item, "guid");
        var type = catkey.substring(3, catkey.indexOf('/', 3));
        var feed = catkey.substr(catkey.indexOf('/', 3) + 1);
        html += '<tr><td alight="right" width="20"></td><td width="99%">';
        html += '<a href="' + link + '" target="_blank" style="font-size:12pt">' + title + '</a><br />';
        html += '<div style="margin-bottom:10px">' + desc + '</div>';
        html += '<p><a href="javascript:void(0)" onclick="GST__MODULE_ID__.addFeed(\'' + type + '\', \'' + feed + '\', \'' + link + '\')">';
        html += '<img src="/ig/images/add.gif" width="115" height="22" border="0" alt="Add to homepage" />';
        html += '</a></p>';
        html += '</td></tr>';
      }
      html += "</table>";
      GST__MODULE_ID__.setInnerHTML("motd_content__MODULE_ID__", html);
    }
  }, true);
},

renderVideo: function() {
  _sendx(GST__MODULE_ID__.request("rec_vi"), function(response) {
    GST__MODULE_ID__.switchView("video__MODULE_ID__");
    if (GST__MODULE_ID__.checkResponse(response, "rec_vi")) {
      var items = response.getElementsByTagName("item");
      for (var i = 0; i < items.length && i < 1; ++i) {
        var item = items.item(i);
        var link = GST__MODULE_ID__.nodeValue(item, "link");
        var catkey = GST__MODULE_ID__.nodeValue(item, "guid");
        var docid = catkey.substr(2);
        GST__MODULE_ID__.showVideo("video_content__MODULE_ID__", docid, link);
      }
    }
  }, true);
},

renderNews: function() {
  _sendx(GST__MODULE_ID__.request("rec_nw"), function(response) {
    GST__MODULE_ID__.switchView("news__MODULE_ID__");
    if (GST__MODULE_ID__.checkResponse(response, "rec_nw")) {
      var items = response.getElementsByTagName("item");
      var html = '';
      for (var i = 0; i < items.length && i < 1; ++i) {
        var item = items.item(i);
        var title = GST__MODULE_ID__.nodeValue(item, "title");
        var link = GST__MODULE_ID__.nodeValue(item, "link");
        var source = GST__MODULE_ID__.nodeValue(item, "category");
        var snippet = GST__MODULE_ID__.nodeValue(item, "description");
        var nsuri = "http://www.google.com/history/";
        var nsprefix = "smh";
        var imageUrl = GST__MODULE_ID__.nodeValueNS(item, "news_image_url", nsuri, nsprefix);
        var imageSource = GST__MODULE_ID__.nodeValueNS(item, "news_image_source", nsuri, nsprefix);
        var imageSourceUrl = GST__MODULE_ID__.nodeValueNS(item, "news_image_link", nsuri, nsprefix);
        html += '<a href="' + link + '" target="_blank" style="font-size:12pt">' + title + '</a>';
        html += '<div style="font-size:10pt;margin-bottom:10px">';
        html += '<span style="font-weight:bold;color:#888">' + source + '</span><br />';
        if (imageUrl.length > 0) {
          html += '<table alighn="right" cellpadding="5" cellspacing="0">';
          html += '<tr><td align="center"><a href="' + imageSourceUrl + '">';
          html += '<img src="' + imageUrl + '" style="border:1px solid #00f" /><br />';
          html += '<span style="font-size:8pt">' + imageSource + '</span></a>';
          html += '</td></tr>';
          html += '</table>';
        }
        html += snippet;
        html += '</div>';
      }
      GST__MODULE_ID__.setInnerHTML("news_content__MODULE_ID__", html);
    }
  }, true);
},

signedIn: function() {
  var sid = document.cookie;
  return sid.indexOf("SID=") >= 0;
},

main: function() {
  if (GST__MODULE_ID__.signedIn()) {
    GST__MODULE_ID__.tabs = new _IG_Tabs(__MODULE_ID__, "Searches");
    GST__MODULE_ID__.tabs.addDynamicTab("Searches", GST__MODULE_ID__.renderPopQuery);
    GST__MODULE_ID__.tabs.addDynamicTab("Pages", GST__MODULE_ID__.renderUrlProfile);
    GST__MODULE_ID__.tabs.addDynamicTab("Gadgets", GST__MODULE_ID__.renderMOTD);
    GST__MODULE_ID__.tabs.addDynamicTab("Videos", GST__MODULE_ID__.renderVideo);
    GST__MODULE_ID__.tabs.addDynamicTab("News", GST__MODULE_ID__.renderNews);

    // Initialize GSearchControl
    GST__MODULE_ID__.searchControl = new GSearchControl();
    GST__MODULE_ID__.searchControl.addSearcher(new GnewsSearch());
    GST__MODULE_ID__.searchControl.addSearcher(new GwebSearch());
    GST__MODULE_ID__.searchControl.draw(_gel('popquery_search__MODULE_ID__'));
  } else {
    GST__MODULE_ID__.showNotSignedIn();
  }
}

};  // end GST__MODULE_ID__

_IG_RegisterOnloadHandler(GST__MODULE_ID__.main);
</script>

]]></Content>
</Module>
