function Tab(obj, owner) {
	var tab=$(obj);
	var owner=$(owner);
	var anchor=tab.getElementsBySelector('a')[0];

	var content=null;
	anchor.tab=this;


	anchor.onclick=function() {		
		this.tab.select();
		anchor.blur();
		return false;
	}

	this.loadContents=function(content) {
		if (content) {
			//ivw('ProfileLoadingTabContent'); 
			content.innerHTML = $('PreLoader').innerHTML;
			new Ajax.Request(anchor.href, {
				method:'post',
				parameters: {
					ak: window.ak
				},
				onSuccess: function(transport) {
					owner.setContentsHTML(transport.responseText);
					initPagerArrows(content);
				},
				onFailure: function(transport) {
					alert('Ajax-Call failed: ' + anchor.href + '?ak=' + window.ak);
				}
			});
		}
	}

	this.isSelected=function() {
		return tab.hasClassName('tabHeaderActive');
	}

	this.unselect=function() {
		tab.removeClassName('tabHeaderActive');
		content=owner.getContents();
	}

	this.select=function() {
		
		owner.selected(this);
		tab.addClassName('tabHeaderActive');
		
		/*
		if(content!=null && content[0].innerHTML != '') {
			alert(owner.container);
			owner.setContents(content);
		} else {
		
			this.loadContents(owner.container);
		}*/
		
		/* der Request muss leider immer ausgeführt werden, 
		weil wir immer speichern wollen, in welchem zustand 
		sich der tab gerade befindet. Optimalerweise (?) könnte 
		der Request auch ausgeführt werden, ohne dass das
		HTML neu ausgeliefert wird.  */
		this.loadContents(owner.container);
		ivw(anchor.name);
	}
}

function TabBar(obj) {
	var bar=$(obj);
	var header=bar.getElementsByClassName('tabHeader')[0];
	var content=bar.getElementsByClassName('tabContentInner')[0];
	var tabElements=header.getElementsBySelector('li');
	var i=0;
	var tabs=new Array();
	var current=null;
	this.container = content;

	for(i=0; i<tabElements.length; i++) {
		currTab=new Tab(tabElements[i], this);
		if(currTab.isSelected()) {
			current=currTab;
		}
		tabs.push(currTab);
	}

	current.loadContents(content);

	
	var removeContents=function() {
		content.innerHTML='';
	}

	this.selected=function(tab) {
		if(current!=null) {
			current.unselect();
		}
		current=tab;
	}

	this.getContents=function() {
		/* returning content.childNodes directly does not work for unknown
		 * reasons.
		 */
		result=new Array();
		for(i=0; i<content.childNodes.length; i++) {
			result.push(content.childNodes[i]);
		}
		return result;
	}

	this.setContents=function(newContents) {
		removeContents();
		for(i=0; i<newContents.length; i++) {
			content.appendChild(newContents[i]);
		}
	}

	this.setContentsHTML=function(html) {
		removeContents();
		content.innerHTML = html;
	}

}

function initAllTabs() {
	var tabs=$('Container').getElementsByClassName('tabs');
	for(i=0; i<tabs.length; i++) {
		new TabBar(tabs[i]);
	}
}
