var Tabs = Class.create({
	initialize: function(hash)
	{
		this.tabContainer = (hash.tabContainer ? hash.tabContainer : '');
		this.tabClass = (hash.tabClass ? hash.tabClass : '');
		this.targetDiv = (hash.targetDiv ? hash.targetDiv : '');
		this.autoSelect = (hash.autoSelect ? hash.autoSelect : true);
		this.selectedClass = (hash.selectedClass ? hash.selectedClass : 'selected');
		this.selectedDivClass = (hash.selectedDivClass ? hash.selectedDivClass : '');
		
		var tagid = '#' + this.tabContainer + ' .' + this.tabClass; 
		var d = this.handleTabClick.bind(this);
		var z = this.selectTab.bind(this);
		$$(tagid).each(function(item){
			item.observe('click', d);
			item.immediateDescendants().each(function(x){
				if (x.match('a'))
				{
					x.observe('click', function(e) {
						Event.stop(e);
						var q = e.element().up();
						z(q);
					});
				}
			})
		});
		if (this.autoSelect)
		{
			var first = $$(tagid).first();
			this.selectTab(first);
		}
	},
	handleTabClick: function(e)
	{
		this.selectTab(e.element());
	},
	selectTab: function(el)
	{	
		var link = '';
		// this finds an a tag with an href, if any, in the immediate descendants only
		el.immediateDescendants().each(function(item) {
			if (item.match('a'))
			{
				link = item.readAttribute('href');
			}
		}, this);
		
		var url = el.readAttribute('data-url');
		var div = el.readAttribute('data-div');
		if (link != '')
		{
			window.location.href = link;
		}
		else
		{
			if (this.selectedClass != '')
			{
				var tabs = $(this.tabContainer).select('.' + this.tabClass).each(function(item) {
					item.removeClassName(this.selectedClass);
				}, this);
				el.addClassName(this.selectedClass);
			}
			if (url)
			{
				new Ajax.Updater(this.targetDiv, url, { evalScripts:true });
			}
			if (div)
			{
				if (this.selectedDivClass)
				{
					$(this.targetDiv).childElements().each(function(item) {
						if(item.hasClassName(this.selectedDivClass))
						{
							item.removeClassName(this.selectedDivClass);
						}
					}, this);
					$(div).addClassName(this.selectedDivClass);
				}
				else
				{
					$(this.targetDiv).childElements().each(function(item) {
						item.hide();
					});
					$(div).show();
				}				
			}
		}
	}
});
