// ==UserScript==
// @name          Script Finder
// @namespace     http://hacks.atrus.org/greasemonkey/
// @description	  Lists user scripts for you to install in the tools menu. Optionally, it sticks a monkey next to user script links
// @include       http://*
// @include       https://*
// ==/UserScript==

(function() {
// add menu items for each script?
var menu = true;
// make links bold?
var bold = true;
// flag script links with a monkey?
var monkey = true;
// need to change this ...
var monkeyURL = "data:image/gif;base64,R0lGODlhEAAQAOYAAM6KjNaanO+yte+6vffDxr2anGtZWq2qraWipXt5e4SChHt9e5SWlISGhK2uraWmpb1RALVNAK1JAKVJAJRBAMZdEL1ZEIxJGIxdOb1NAKVFAJxBAJQ8AM5dELVVEJxNGJRRIYxNIb1pMaVlOa1tQq1JCKVNGJRJGKVVIZxRIZRNIYxVMbV5UoxpUoxtWpQ8CJxNIbVhMZxZMZRVMaV1Wr1hMZRdQr1pQs55UqVhQsZ1UtZ9Ws59Wr1xUs55WrVtUsZ1Wq1pUpRdSsaCa5SOjM6Ca855Y8Z9a86Gc86Cc715a96ajNaOhN6WjNaSjIx1c4RlY9aOjN6enM6mpd62teempf/Hxv/PzgAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFkALAAAAAAQABAAQAewgFmCg4SFgi8eAVdYWIuNARUaGA2CQQNXV1U3VZgDOTSDSVYGjKWMBlZIQgiEGxqvEhIaM4QiEEeYmAS5V0MRGgpZUbzEmE4jD4IhFjxNAs9NOx0nT4ZZIBwcFCnWgj9LTDESNUxLPS6DLBJKvAC8ShMXWSQaQJiMjpg+Gh+UHkWcilUx0mGFgywCqGApQGwKlikCVBzIIkOHlGJXpOCAAYVQCxQaIkTIUMKEDSKDAgEAOw==";

var scheme = new RegExp( "^([^/]*)://", "");
var endsWith = ".user.js";

var xpath = "//a[contains(@href, '" + endsWith + "')]";
var els = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
var el, i=0;
var label;
var protoImg = document.createElement( "img" );
protoImg.style.setProperty( "border-width", "0px", "" );

while( i < els.snapshotLength ) {
  el = els.snapshotItem( i );
  if( el.href.substr( el.href.length - endsWith.length ) == endsWith ) {

    if( menu ) {
      label = "Script: " + el.href.substr( el.href.lastIndexOf( "/" )+1 );
      //using eval lets us escape variable binding problems with el.href
      eval( "GM_registerMenuCommand( label, function(){ window.location = \"" +
            el.href +"\"; } );" );
    }
    
    if( bold ) {
     el.style.setProperty( "font-weight", "bold", "" );
    }
    
    if( monkey ) {
      var img = protoImg.cloneNode( false );
      img.src = monkeyURL;
      el.insertBefore( img, el.firstChild );
    }
  }
  i++;
}

})();
