//____________________________________________________________________
function DerivedProperty(rootProperty,label_str,getter_func){

	var self				= this;

	var broadcaster			= new Broadcaster(this);
	broadcaster.createEventType('valueChange');
	
	rootProperty.addEventListener('valueChange',function(){broadcaster.triggerEvent('valueChange');});

	this.__defineGetter__('value',getter_func);
	this.__defineGetter__('label',function(){return label_str;});
	
	//----------------------------------------------------------------
	//________________________________________________________________
	this.bindValueToAttribute = function(element_h,attribute_str){
		
		var refreshAttribute = function(){element_h.setAttribute(attribute_str,self.value);};
		refreshAttribute();
		this.addEventListener('valueChange',refreshAttribute);
	};
	//________________________________________________________________
	this.bindValueToInnerHTML = function(element_h){
		
		// define a function to update element_h upon change in Property.value
		// replace line breaks with <br /> tags
		var refreshElement	= function(){element_h.innerHTML = self.value.replace(/\n/g,'<br />');};//'
		refreshElement();
		
		// execute function on value change
		this.addEventListener('valueChange',refreshElement);
	};
};	//________________________________________________________________
//____________________________________________________________________