function Button(name, aInitialModes) {
	
	//this.aInitialModes = aInitialModes;
	this.aModes = aInitialModes;
	this.iMode = 0;
	this.anchor;
	this.image;
	this.bHover;
	this.bActive;
	this.name = name;
	
	if (typeof Button._initialized == "undefined") {
		
		Button.prototype.initialize = function(test) {
			this.builtNodes();
			this.update();
			//observers
			var oTempThis = this; 
			Event.observe(this.anchor, 'mouseover', function() { oTempThis.onMouseOver.call(oTempThis) }, false);
			Event.observe(this.anchor, 'mouseout', function() { oTempThis.onMouseOut.call(oTempThis) }, false);
			Event.observe(this.anchor, 'click', function() { oTempThis.onClick.call(oTempThis) }, false);
			//initialized
			Button._initialized = true;
		}
		
		Button.prototype.update = function() {
			this.image.setAttribute("src", (this.bHover|| this.bActive) ? this.aModes[this.iMode].overImage : this.aModes[this.iMode].defaultImage);
			this.image.setAttribute("border", 0);
			this.image.setAttribute("width", this.aModes[this.iMode].width);
			this.image.setAttribute("height", this.aModes[this.iMode].height);
			this.anchor.setAttribute("href", (this.aModes[this.iMode].href == undefined) ? '#' : this.aModes[this.iMode].href);
		}
		
		Button.prototype.builtNodes = function() {
			this.image = document.createElement("img");
			this.anchor = document.createElement("a");
			this.anchor.appendChild(this.image);
		}
		
		Button.prototype.getNode = function() {
			return this.anchor;
		}

		Button.prototype.onMouseOver = function() {
			this.bHover = true; 
			this.update();
		}
		
		Button.prototype.onMouseOut = function() {
			this.bHover = false; 
			this.update();
		}

		Button.prototype.onClick = function() {}
		
		Button.prototype.setMode = function(iMode) {
			this.iMode = iMode;
			this.update();
		}
		
		Button.prototype.setActive = function(bActive) {
			this.bActive = bActive;
			this.update();
		}	
		
	}
	
	this.initialize(arguments);	
	return this;
}



