function ButtonGroup(elements) {
	this.elements = elements;
	this.selectedIndex = null;
	this.initObjects();
}

ButtonGroup.prototype.toString = function() {
	return "ButtonGroup: " + this.buttonClass;
}

ButtonGroup.prototype.initObjects = function() {
	EventDispatcher.init(this);
	var len = this.elements.length;
	for (var i=0; i < len; i++) {
		var element = this.elements[i];
		//element.click(proxy(this.onBtnClick, this, i));
		Event.observe(element, "click", this.onBtnClick.bind(this, [i]));
	};
}


// ACTIONS =====================================================================================================================

ButtonGroup.prototype.selectButton = function(index) {
	if (this.selectedIndex != null) {
		var prevElement = this.elements[this.selectedIndex];
		if (prevElement.hasClassName("selected")) prevElement.removeClassName("selected");
	}
	this.selectedIndex = index;
	var element = this.elements[this.selectedIndex];
	if (!element.hasClassName("selected")) element.addClassName("selected");
}

ButtonGroup.prototype.triggerButton = function(index) {
	this.selectButton(index);
	this.dispatchEvent("click");
}

ButtonGroup.prototype.disableButton = function(index) {
	var element = this.elements[index];
	if (!element.hasClassName("disabled")) element.addClassName("disabled");
}

ButtonGroup.prototype.enableButton = function(index) {
	var element = this.elements[index];
	if (element.hasClassName("disabled")) element.removeClassName("disabled");
}

// disable all buttons:
ButtonGroup.prototype.disable = function() {
	var len = this.elements.length;
	for (var i=0; i < len; i++) {
		var element = this.elements[i];
		if (!element.hasClassName("disabled")) element.addClassName("disabled");
	};
}

// enable all buttons:
ButtonGroup.prototype.enable = function() {
	var len = this.elements.length;
	for (var i=0; i < len; i++) {
		var element = this.elements[i];
		if (element.hasClassName("disabled")) element.removeClassName("disabled");
	};
}

ButtonGroup.prototype.getButton = function(index) {
	return this.elements[index];
}


// EVENTS ======================================================================================================================

ButtonGroup.prototype.onBtnClick = function(index) {
	//console.log(this + " onBtnClick index: "+index);
	if (!index) index = 0; // this is for a bug in proxy
	if (index == this.selectedIndex) return;
	var element = this.elements[index];
	if (element.hasClassName("disabled")) return;
	this.selectButton(index);
	this.dispatchEvent("click");
}


