/************************************************************************
 * 		Tabmanager für die Navigation und Kommunikation					*
 * 		C 2008 by René Lange & Thomas Müller & Steve Rohrlack @ mindbox	*
 ************************************************************************/
 
 var TabManager = new Class({
 	tabs: new Array(),
 	activeTab: '',
 	
 	initialize : function(tabArray,options) {
		this.pushTabs(tabArray);

 		var tabNavList = new Element('ul',{'id':'nav_'+ options.tabCon, 'class':options.tabList});
		var tabContent = new Element('div',{'id':options.tabCon});
				
 		var wrapper = $(options.wrapper);		
		tabContent.inject(wrapper,'top');
		new Clearer().inject(wrapper,'top');
		tabNavList.inject(wrapper,'top');

 		this.tabs.each(function(tab){
 			// TabDividerListe erstellen
 			var tabNavListEl = new Element('li')
				.setProperty('id',tab.selector)
				.adopt(new Element('h4')
				.adopt(new Element('a',{'id':tab.selector+'Title'})
				.set('text',tab.title)));
				
 			tabNavListEl.addEvent('click',function(ev){
				if(this.activeTab != tab.selector){
					this.switchTab(tabNavListEl,tab);
				}
 			}.pass(tab,this));

 			tabNavList.adopt(tabNavListEl);
 			
 			// Container für die Inhalte erstellen
 			var tabNavListElCon = new Element('div').setProperty('id',tab.selector+'Content');
 			tabNavListElCon.setStyle('display','none');
			tabContent.adopt(tabNavListElCon);
			tab.initTab(); 
 		}.bind(this));
 	},
 	
	// Events nur weiterleiten an die Untertabs
	sendMessage : function (target, todo, args) {
 		this.tabs.each(function(tab){
			tab.sendMessage(target, todo, args);
 		}.bind(this));
	},

	// Anzeigen und Handling der einzelnen Tabs 
	clear : function() {
		this.tabs.each(function(tab){
 			tab.clear();
 		}.bind(this));
	},

	// Inhalte erstellen
	buildContent : function(target) {
		this.tabs.each(function(tab){
 			if (tab.selector == target) {
				tab.initTab();
				tab.buildContent();
 			}
		}.bind(this));
	},

	// TabArray erstellen
 	pushTabs : function(tabArray) {
 		this.tabs = new Array();
 		tabArray.each(function(el) {
 		 	this.tabs.push(el);
 		 }.bind(this));
 	},
 	
	// Zum Aufrufen von Tabs über die Event Chain
	showTab : function (newTab) {
		var tmptab = '';
		this.tabs.each(function(tab){
 			if (tab.selector == newTab) {
				temptab = tab;
			}
 		}.bind(this));
		
		var el = $(newTab);		
		if ((temptab != '') && (el != null) && (this.activeTab != temptab.selector)) {
			this.switchTab(el,temptab);			
		}
	},

	// Tab wechseln
	switchTab : function(el,tab){
		// Mittelpunkt der GMap ermitteln
		var center = false;
		if(tab.mapOpts && TourPlanner.instance.map.tpMap){
			var center = TourPlanner.instance.map.getCenter();
		}
		// Aktiv setzen
		el.addClass('active');
		// Alten Tab inaktiv setzen
		
		var aTab = $(this.activeTab);
		
		if(aTab){
			aTab.removeClass('active');
			$(this.activeTab+'Content').setStyle('display', 'none');
		}
		this.activeTab = el.getProperty('id').toString();

		// Anzeige des Inhaltes
		if($(el.getProperty('id')+'Content')){
			
			// Muss der Tab neu geladen werden weil sich etwas geändert hat?
			tab.checkForRebuild();
			tab.checkForUpdate();
			
			// Leere Tabs laden
			var tmptab = $(el.getProperty('id')+'Content');
			if(tmptab.getChildren() == '') {
				tab.buildContent();
			}
			if(tab.mapOpts){
				TourPlanner.instance.map.switchMapContainer(tab.selector+'Content', tab.mapOpts);
			}
			if(center){
//				TourPlanner.instance.map.gmap.checkResize();
				TourPlanner.instance.map.panTo(center);
			}
			tmptab.setStyle('display','block');
		}
	}
 });