var Tabbing = Class.create({

	outerElement: null,
	containerSelector: null,
	headingSelector: null,
	tabs: 0,
	tabHeadings: {},
		
	initialize: function(outerElement, containerSelector, headingSelector) {
		//alert('init');
		this.outerElement = outerElement,
		this.containerSelector = containerSelector;
		this.headingSelector = headingSelector;

		if(this.outerElement == null) alert('OuterElement ist Null');

		this.tabs = this.outerElement.getElementsBySelector(this.containerSelector).size();
		//alert('Tabs: '+this.tabs);
		
		this.outerElement.getElementsBySelector(this.containerSelector).each(function(el, index) {
			var tabCount = index+1;
			var tabHeading;
			el.store('tab', tabCount);
			el.addClassName('tabbed');

			// Ueberschrift holen und speichern
			if(el.getElementsBySelector(this.headingSelector).size() > 0) {
				tabHeading = el.getElementsBySelector(this.headingSelector)[0].innerHTML;
				el.getElementsBySelector(this.headingSelector)[0].remove();
			} else {
				tabHeading = 'Tab '+tabCount;
			}
			this.tabHeadings[tabCount] = tabHeading;

			// Element verstecken
			el.hide();
		}.bind(this));

		// Tab-Ueberschriften zur Liste bauen
		var list = new Element('ul', {className: 'tabs'});
		Object.values(this.tabHeadings).each(function(head, index) {
			list.appendChild(
					new Element('li').update(head).store('tab', index+1).observe('click', this.showTab.curry(index+1).bind(this))
			);
		}.bind(this));
		this.outerElement.insert({top: list});

		//alert(Object.toJSON(this.tabHeadings));
		this.showTab(1);
	},

	showTab: function(index) {
		if(index < 1) index = 1;
		else if(index > this.tabs) index = this.tabs;

		this.outerElement.getElementsBySelector(this.containerSelector).each(function(el) {
			if(el.retrieve('tab') == index) {
				el.show();
			} else {
				el.hide();
			}
		});
		this.outerElement.down('ul').getElementsBySelector('li').each(function(el) {
			if(el.retrieve('tab') == index) {
				el.addClassName('current');
			} else {
				el.removeClassName('current');
			}
		});
		//alert('Show Tab '+index);
	}
});
