function loadGraph(node, options) {
  var options = options || {};
  document['ggg_node'] = node; // naughty, save for later
    
  var script = document.createElement("script");
  script.type = "text/javascript";
  script.src = "http://socialgraph.apis.google.com/lookup?q=" + node + "&edo=1&pretty=1&callback=onDataLoaded";
  document.body.appendChild(script);
  
  var canvas = document.createElement("canvas");
  canvas.id = "_ggg_myworld";
  canvas.width  = options['width']  || 1000;
  canvas.height = options['height'] || 800;
  var draw = (options['drawOn']) ? $(options['drawOn']) : document.body;
  draw.appendChild(canvas);
}

function onDataLoaded(json) {
  var g = new Graph();
  
  var me = document.createElement("div");
  me.id = '_ggg_me';
  me.innerHTML = "Me";
  document.body.appendChild(me);

  var mapping = json.canonical_mapping[document['ggg_node']];
  var nodes = json.nodes[mapping].nodes_referenced;

  var x = 0;
  for (var key in nodes) {
    var shortname = shortName(key);
    var id = "node" + x++;
    var el = document.createElement("div");
    el.id = id;
    el.innerHTML = '<a href="' + key + '">' + shortname + '</a>';
    document.body.appendChild(el);
    g.addEdge(me, el);
  }

  var layouter = new Graph.Layout.Spring(g);
  layouter.layout();
  
  var renderer = new Graph.Renderer.Basic($('_ggg_myworld'), g);
  renderer.draw();
  
}

function shortName(name) {
  var next = name.replace(/http(s?):\/\/(.*)\.(com|net|org|us)/, '$2');
  next = next.replace(/www\./, '');
  next = next.replace(/sgn:\/\//, '');
  next = next.replace(/\/$/, '');
  return next;
}
