function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

var objBookmarker = {
   // methods
   init : function(){
      // support
      if(!window.sidebar && !window.external) return;
      if(!document.getElementById || !document.getElementsByTagName || !document.createTextNode) return;

      // find container element, e.g.
      var container=document.getElementById("container");
      if(!container) return;

      // add link
      var aBookmark = document.createElement("a");
      aBookmark.appendChild(document.createTextNode("bookmark"));
      aBookmark.setAttribute("href","javascript:;");
      aBookmark.onclick = function(e){
         objBookmarker.doBookmark();
		
         // prevent default
         if(typeof e == "undefined") e = window.event;
         if (window.event) {
            window.event.cancelBubble = true;
            window.event.returnValue = false;
         }
         if (e && e.preventDefault && e.stopPropagation) {
            e.preventDefault();
            e.stopPropagation();
         }
      }
      if(aBookmark.captureEvents) aBookmark.captureEvents(Event.CLICK);
      container.appendChild(aBookmark);
   },

   doBookmark : function(){
      var title=document.getElementsByTagName("title")[0].text;
      if(window.sidebar) window.sidebar.addPanel(title,location.href,"");
      else if(window.external) window.external.AddFavorite(location.href,title);

      // optional, but won't fire due to support checks at start of object
      else alert("Please bookmark this site manually using your browser.");
   }
};

addLoadEvent(objBookmarker.init);