function Heredoc(uri, callback, failed) {
	this.callback = callback;
	this.failed = failed;

	var self = this;
	var loaded = function(transport) {
		var src = transport.responseText;
		var res = new Object();
	
		var re = /(\w+)\s*=\s*<<\s*(\w+)\s*;?\s*/;
		var p = null;
		while ((p = re.exec(src)) != null) {
			var vname = p[1];
			var target= p[2];
			src = src.substring(p.index + p[0].length);
	
			var re2 = new RegExp('^' + target + '$', 'm');
			var p = re2.exec(src);
			if (p === null) {
				break;
			} else {
				var value = src.substring(0, p.index);
				src = src.substring(p.index + target.length);
				res[vname] = value;
			}
		}
		self.callback(res);
	}

	new Ajax.Request(uri, 
	  { method:'get',
		onSuccess: loaded,
	    onFailure: this.failed
	  } );
}
