try {
  Microformats;
} catch (ex) {
   promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
                             .getService(Components.interfaces.nsIPromptService);
   promptService.alert(window, "", "Microformats are not available. Microformats.js must be included before hResume.js");
}

Microformats.hResume = {
  microformat: true,
  className:   "hresume",
  description: "Resume(s)",
  
  icon: "chrome://operator/content/other.png",

  handlers: [],
  defaultHandler: "google",

  getDisplayName: function(item)
  {
    vcards = Microformats.getElementsByClassName(item, "vcard");
    if (vcards.length > 0)
      return Microformats.getValue(vcards[0], "fn");
  },
  getError: function(item)
  {
    vcards = Microformats.getElementsByClassName(item, "vcard");
    if (vcards.length == 0)
      return "No vcard specified";
  },
  create: function(indoc, innode)
  {
    return new function(doc, node)
    {
      vcards = Microformats.getElementsByClassName(node, "vcard");
      if (vcards.length > 0) {
        this.vcard = Microformats.hCard.create(doc, vcards[0]);
      }
      affiliations = Microformats.getElementsByClassName(node, "affiliation");
      for (var i=0;i<affiliations.length;i++) {
        if (!this.affiliation) {
          this.affiliation = new Array();
        }
        this.affiliation[i] = Microformats.hCard.create(doc, affiliations[i]); 
      }
      experiences = Microformats.getElementsByClassName(node, "experience");
      for (var i=0;i<experiences.length;i++) {
        if (!this.experience) {
          this.experience = new Array();
        }
        this.experience[i] = Microformats.hCalendar.create(doc, experiences[i]); 
      }
      var temp;
      if (temp = Microformats.getValue(node, "summary")) {
        this.summary = temp; 
      }
    }(indoc, innode);
  }
};

Microformats.hResume.handlers['bookmark'] = {
  description: "Add Bookmark",

  icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAslJREFUOE81kmtIU2EYgGeQQvkjCsIyjIrIfhT+6ZeRZBJChGeXMjVtmgkRZGX6w8hwuulcIlReSItA3cpLZjqcZuZMPW5SU7e5zc3dL2c7bvO4uati72KDl8Nz4Hne7/vxxXm9roVlI1+o8rrtLiJIbOJpF87G708gkUjnTifF7YsDSD2TdPBAQsrxI4mJh0kVzJ6SynbW63efeng3yseSC6azmuXp1TMncgaOZXO5QzPcbzPt3ePUMg6OW/b29kjUB5yGNv71/JpKZjcp/TtPu9OlDrepw8Dns6o7uT8gEK6sU0qblEppJAAi/LsTErM/tAvSG2koa9BTveAHnpiVfx4VwUaxykQpYctkkv9BCRuCEbHBF9wBiSHyX/1CPPy1Dax3bONEkHK/SW6wUeiNsYDe6PbtDsxqvYFI8HTKc7nHmTvsBpZoNx2bAUoxW2OxU+7FAnJRg8u70zulJnyRe9NHXJc6rZnvDcB/1C7MHQBVb8PJhQ3RE8h3WRue8AfBqtsbAgnhYalsVRpHCSxW4lanDzbqrA5yASsW5DMdRLh1WIoTAZCudOhTXkpO1UiA52V2E74NG6U6GzmPGQvymJg71NwnwVw+kC42KQ7RhUcrUGDhklWPecj5zDm5AcmtjwZAVmeQ1S024V6QkksjavzNMfhOLho1FgK5Uy8QrSK362LBrTrTRqCma05n2wKJ9kLYK5CfpEWCsXmdwuAGtX9SjNAYsYDKMNj9Va3TKqO7mbc0u2wWyTEBqs54NDmxoFvRbCC0uuIqdmb282iQQ659/OzjNQqDyRlgtwzxvqK8QbRvWPwTXRMuaoViLUJlZFDLRvnj0aeBon/5/KmOzv6WFi5Mzauu8idvYQqL2DlILayDmUN/q9VyDDNGnobH47TbTfBjMeuNhnW9Xq1dV2o0q2trMoViBa4hlUkUSqndYd7yOCH4B1Sf7o9s7DrKAAAAAElFTkSuQmCC",

  action: function(doc, item)
  {
    Microformats.bookmark(doc, item, "hResume");
  }
}

Microformats.hResume.handlers['yahoo'] = {
  description: "Search Yahoo!",

  icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAJUExURQAAAP8AAP///2cZZB4AAAADdFJOU///ANfKDUEAAABFSURBVHjanI/BCgAwCEKt///ooSZsuwzmKV8Whb6ENyhrSxABPY3iiAOsB4ioVHaIfUBnFn0AuuzwmhwGyQYfv9xgCTAA3MIBpbOXRRMAAAAASUVORK5CYII=",

  action: function(doc, item)
  {
    hresume = Microformats.hResume.create(doc,item);
    url = "http://search.yahoo.com/search?p=" + hresume.vcard.fn;
    Microformats.loadUrl(url);
  }
}

Microformats.hResume.handlers['google'] = {
  description: "Search Google!",

  icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJhUExURf3/6f7/9Pj////3//7/+Pf///v//+3///b9///9+v/8/f79/2WF2PL///v//vn//8rT8v/7/yJuuRoyxuX2/fn7//v6/wQ2sU2zRRUqqv/6/h1CtBMsoE+tVSUzttslGky0O/j/4QsWpBlf280qABte0c4mAM4UGRVc9vX/6y9b2BVr0hUfgFWzOdEfHd0YEiZbyyM1mRVjz//9/RxasU21UhMzukO4UIaP0O7/9nqk1vD/9/T////6+NDl///4//r+7+r5/93r///9+P/x+dfy/yAuxdYfDUJu2+Dm/K/S+vn9/8H1///4+gATVvfx///09Pf/+3yPx8LO/g8Sn/z//36e6f/42c3c82+s7/z/8/f/7ej/9snX///45iJg2Rw4jAdj6OT29rzX/wAilhc7k+j////y///z//j9///9/+7////2//T/6uT2//b6/f/1+v/29v/1/9IkGfX7/xxJsCBcyvf/84GZ3ykwdPj79B9W90i2ORw4tfH//xY/vyFY6B1o51por//58/T/8xMxxVdzvNEQB0Z0yuf5/0e5SssUDvDw+O//84mP2fb66/z/9vv19+f4/6Opzf7////07S23QOn//+3/9v/5+//8+vj/5g4qy8rq+TE3sccjAPP//ydT1v/w9uv//hRh4fD///X/8dwaAP/6/Pz992KEqeHf7NPZ+W+a6dIoD02xQVa2SvL8/e///9Ln/1C4PSQ6scrS1NYgLygmi/7/9qq2wholj8Tb4zFguO7//QAlvff/8Tdb1r/e8Pv/4P/6/+7u/8wuIv/8//7/4zy1RP///26vOnsAAAESSURBVHjaYkjcUCMrYa673vTkli6FaSdPMmj1n5p4YjFb3mreHu8cW5djDBpMTNmuYU1bhcX3Rh5qiVNjMGKZ4dNh5jQ9NC02ofJoRjtD2QkmHkPHEw5cmccjtpU3r2NoLKlIXcM621rxALPY8WUMKgwNrGtri2YxSi2tC2BjjF7RzbBwn5AJg/MR5uPHC7gn5M7UZ1jCblDqu4hxIzMLJ18WQ/h2BtUFHilVxv6nbGL2zN0swDCfIV7Tan+QJb/gzuB5knIWK4sZqk9NcgtJDpwy9bionc7kE+oMyoyHPXco9XVG9bJ7+e064c6gvYmDQ6Rtt0xr/RzpVUmn9BgOpp84BQX5x+0L5RlOooLlAAEGAEsObhUPuqbcAAAAAElFTkSuQmCC",

  action: function(doc, item)
  {
    hresume = Microformats.hResume.create(doc,item);
    url = "http://www.google.com/search?q=" + hresume.vcard.fn;
    Microformats.loadUrl(url);
  }
}

