// ==UserScript==
// @name          Google mixi
// @namespace     http://blog.fkoji.com/
// @description	  When you search "site:mixi.jp", this scripts appends mixi user's photoes to results.
// @include       http://*.google.*/*q=*
// ==/UserScript==

(function() {
  var links = document.evaluate('//a[@class="l"]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
  if (!links.snapshotLength) return;
  for (var i = 0; i < links.snapshotLength; ++i) {
    var link = links.snapshotItem(i);
    var pattern = /http:\/\/mixi\.jp\/show_friend\.pl/;
    if (pattern.exec(link.href)) {
      callXmlHttpRequest(link, "show_friend");
    }
    pattern = /http:\/\/mixi\.jp\/view_community\.pl/;
    if (pattern.exec(link.href)) {
      callXmlHttpRequest(link, "view_community");
    }
  }
  function setMixiPicture(link, imgurl, name) {
    var a = document.createElement("a");
    a.setAttribute("href", link);
    var img = document.createElement("img");
    img.setAttribute("src", imgurl);
    img.setAttribute("border", 0);
    a.appendChild(img);
    link.parentNode.insertBefore(a, link.nextSibling);
    link.parentNode.insertBefore(document.createTextNode(" " + name + " "), link.nextSibling);
  }
  function callXmlHttpRequest(link, type) {
    function onload(response) {
      var res = response.responseText;
      var pattern;
      if (type == "show_friend") {
        pattern = /http:\/\/img[0-9]*?\.mixi\.jp\/photo\/member\/\d+?\/\d+?\/\d+?_\d+?\.(jpg|gif|png)/;
      }
      else if (type == "view_community") {
        pattern = /http:\/\/img[0-9]*?\.mixi\.jp\/photo\/comm\/\d+?\/\d+?\/\d+?_\d+?\.(jpg|gif|png)/;
      }
      var imgurl = pattern.exec(res);
      var pattern2 = /<td WIDTH=345>(.+?)<\/td><\/tr>/;
      var name = pattern2.exec(res);
      if (imgurl) {
        setMixiPicture(link, imgurl[0], name[1]);
      }
    }
    GM_xmlhttpRequest({method: "GET", url: link.href, onload: onload});
  }
})();

