

function RstColumnConnection(url, columnName, listener, initialValue) {
	this.listener = listener;
	this.url = url;
	this.columnName = columnName;
	var rc = this;
	this.rowListener = new RstRowListener(url,
										  function(v) {
											  if (rc.listener) {
												  rc.listener(v[rc.columnName]);
											  }}, initialValue != undefined);
	if (listener && (initialValue != undefined)) {
		setTimeout(function() { listener(initialValue); }, 0);
	}		
}

RstColumnConnection.prototype.submit = function(v, f) {
	var params = { }
	params[this.columnName] = v;
	var rc = this;
	postURL(this.url,
			params,
			function(theResponse) {
		if (theResponse[0] == '"') {
			theResponse = eval(theResponse);
		}
		if (theResponse.substring(0,4) == 'FAIL') {
			alert(theResponse.substring(6));
		}
		f ? f() : reobserve(rc.url);
	});
};



var RstRowListener = function(url, listener, nostartup) {
	this.url = url;
	this.obkey = observe(url, function(v) {
		listener(v);
	}, nostartup);
};

RstRowListener.prototype.unlisten = function() {
	unobserve(this.obkey);
};

RstRowListener.prototype.relisten = function() {
	reobserve(this.url);
};

