// ==UserScript==
// @name           Replace star icon anywhere for Hatena Star
// @namespace      http://www.trashsuite.org/
// @include        http://*
// @include        https://*
// @see            http://d.hatena.ne.jp/trashsuite/20081125/1227637917
// @see            http://d.hatena.ne.jp/os0x/20080730/1217393400
// @version        1.0.6
// ==/UserScript==
location.href = 'javascript:(' + (function() {
  var COLOR = false, count = 0;
  var t = setInterval(function(){
    if(window.Hatena && Hatena.Star && Hatena.Star.Entry) {
      clearInterval(t);
      var stars = document.getElementsByClassName('hatena-star-star');
      var i = stars.length,s,c;
      while(i --> 0) {
        if(/^[a-zA-Z][-\w]{1,30}[a-zA-Z\d]$/.test((s=stars[i]).alt)) {
          if (COLOR && (c = (/star-(\w+)\.gif/.exec(s.src)||[])[1]))
            s.style.border = '2px solid ' + c;
          s.src = Hatena.User.getProfileIcon(s.alt).src;
        }
      }
      var show_name = Hatena.Star.Star.prototype.showName;
      var pushStars = Hatena.Star.Entry.prototype.pushStars;
      Hatena.Star.Star.prototype.showName = function(e) {
        this.screen_name = this.name;
        show_name.call(this, e);
      };
      Hatena.Star.Entry.prototype.pushStars = function(stars, color) {
        stars = stars.map(function(star) {
          var image = Hatena.User.getProfileIcon(star.name);
          image.alt = star.name;
          if (COLOR && color) image.style.outline = '2px solid ' + color;
          star.img  = image;
          return star;
        });
        pushStars.call(this, stars, color);
      };
    }
    if(++count == 10) clearInterval(t);
  }, 30);
}).toString() + ')()';
