$(function() {
  var loadimagecache = {};

  $.extend({
    request : function(get) {
      var re = new RegExp('[\\?&]'+get+'=([^&]*)(?:&|$)');
      var ret = re.exec(location.href);
      if (ret) {
        return unescape(ret[1]);
      } else {
        return false;
      }
    },
    coordinate : function(events, func) {
      var triggered = 0;

      return function() {
        if (++triggered == events) {
          func();
        }
      };
    },
    loadImage : function(src, func) {
      if (typeof(loadimagecache[src]) != "undefined") {
        func.apply(loadimagecache[src]);
        return loadimagecache[src];
      }
  
      var img = new Image();
      $(img).bind("load", function() {
        loadimagecache[src] = img;
        func.apply(img);
      });
      img.src = src;
      return img;
    },
    remotePost : function(url, data, success, dataType) {
      return $.post($._+"relay.php?url="+escape(url), data, success, dataType);
    }
  });
});