// ==UserScript==
// @name          Del.icio.us - Graph a Tag Cloud 
// @namespace     http://cloudalicio.us/
// @include       http://del.icio.us/*
// @exclude       
// @description   Adds a "Graph this item's Tag Cloud" image link while viewing del.icio.us
// @version       3
// ==/UserScript==

(function(){

  function createCloudLink(){
    var aLinks = getLinks();
    if(aLinks)
      addCloudLink(aLinks);
  }

  //returns all elements with class="delLink"
  function getLinks(){
    var links = new Array();
    var dellinks = document.evaluate(
          "//h4[@class='desc']",
      document,
      null,
      XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
      null);
    
    if(dellinks.snapshotLength == 0){
      return null;
    }
    for(var i=0;i<dellinks.snapshotLength;i++){
      var link = getTheLink(dellinks.snapshotItem(i));
      links.push({"link":link,"node":dellinks.snapshotItem(i)});
    }
    return links;
  }

  function getTheLink(node){
    var theParent = node.parentNode;
    var cloudLink = theParent.getElementsByTagName("a")[0];
    return cloudLink.href;
  } 
    
  function addCloudLink(linkNodes){ 
    for(var i=0;i<linkNodes.length;i++){
      addLink(linkNodes[i].node, linkNodes[i].link);
    }
  }
  
  function addLink(node, url){
  
    var cloudSpacing = document.createTextNode(" ");
    node.appendChild(cloudSpacing);

    var cloudLink = document.createElement("a");
    cloudLink.setAttribute("class","desc");
    cloudLink.setAttribute("alt","Graph this item's Tag Cloud");
    cloudLink.setAttribute("title","Graph this item's Tag Cloud");
    cloudLink.href="http://cloudalicio.us/tagcloud.php?url="+escape(url);
    cloudLink.innerHTML="<img src=\"http://cloudalicio.us/images/cloudtiny.png\" border=\"0\"/>";
    node.appendChild(cloudLink);

  }

  window.addEventListener("load",createCloudLink,false); 
}
)();