function getTabs()
{
	return $$('#tab_bar img').map(function(elt) {
		return mixinTabMethods(elt);
	});
}

function mixinTabMethods(elt) {
	if (elt == null || elt == undefined) return null;
	
	elt._rex_src = function() {
		rex = /(.+?\/tab_)([^_\.]+?)(?:_([^\.]*))?.gif/;
		return this.src.match(rex);
	}
	elt.tab_status = function() {
		src = this._rex_src();
		if (src[3] == undefined) return "";
		return src[3]+"";
	}
	elt.tab_name = function() {
		src = this._rex_src();
		return src[2]+"";
	}
	elt.tab_set_status = function(status) {
		this.src = this.tab_src_from_status(status);
	}
	elt.tab_src_from_status = function(status) {
		src = this._rex_src();
		return src[1] + src[2] + (status!=""?"_"+status:"") + ".gif";
	}
	elt.tab_clear_status = function() {
		this.tab_set_status("");
	}
	elt.tab_is_current = function() {
		return this.tab_status() == "current";
	}
	elt.tab_preload_status = function(status) {
		newsrc = elt.tab_src_from_status(status);
		i = new Image();
		i.src = newsrc;
	}
	return elt;	
}

function getTabByName(name)
{
	return mixinTabMethods($("tab_"+ name));
}

Event.observe(window, 'load', function() {
	getTabs().each(function(elt) {
		elt.observe("mouseover", function(e) {
			if (elt.tab_status() != "current") {
				elt.tab_set_status("over");
			}
		});
		elt.observe("mouseout", function(e) {
			if (elt.tab_status() != "current") {
				elt.tab_clear_status();
			}
		});
		elt.observe("click", function(e) {
			elt.tab_set_status("current");
		});
		
		elt.tab_preload_status("over");
		elt.tab_preload_status("current");
	});
});

