function TabHandler(tabContainer) {
	this.tabContainer = null;
	this.tabHolder = null;
	this.tabLinks = null;
	this.tabContents = null;
	this.activeTab = null;
	this.tabHooks = [];
	this.initialize = function(tabContainer) {
		var that = this;
		if (!tabContainer.tabHandler) {
			this.tabContainer = tabContainer;
			this.tabContainer.tabHandler = this;
			
			var tabContents = jQuery(this.tabContainer).find('.tabContent');
			this.tabContents = new Object();
			tabContents.each(function(index, element) {
				if (element.id != null) {
					element.tabHandler = that;
					that.tabContents[element.id] = element;
				}
			});
			
			var tabHolders = this.tabContainer.find('.tabHolder');
			if (tabHolders && tabHolders.length > 0) {
				this.tabHolder = jQuery(tabHolders[0]);
				this.tabLinks = this.tabHolder.find('a');
				this.tabLinks.each(function(index, link) {
					if (link.href && link.href.indexOf('#') != -1) {
						var targetName = link.href.substring(link.href.indexOf('#') + 1);
						if (targetName) {
							var contentElement = that.tabContents[targetName];
							if (contentElement) {
								contentElement.tabLink = link;
								contentElement.tabLink.tabHandler = that;
								contentElement.tabLink.tabName = targetName;
								contentElement.tabLink.onclick = that.tabLinkClick;
								if (!that.activeTab && jQuery(link).attr('active')) {
									that.activeTab = targetName;
								}
							} else {
								link.hide();
							}
						}
					}
				});
			}
			this.setTabs();
		}
	};
	
	this.setTabs = function() {
		var that = this;
		if (this.tabContents) {
			for (key in this.tabContents) {
				if (!that.activeTab) {
					that.activeTab = key;
				}
				var element = that.tabContents[key];
				if (key == that.activeTab) {
					jQuery(element).show();
					that.executeTabHooks(element);
					that.executeHooks(key, element);
					if (element.tabLink) {
						jQuery(element.tabLink).addClass('active');
					}
				} else {
					jQuery(element).hide();
					if (element.tabLink) {
						jQuery(element.tabLink).removeClass('active');
					}
				}
			}
		}		 
	};
	
	this.setTab = function(tabName) {
		var tab = this.tabContents.get(tabName);
		if (tab) {
			this.activeTab = tabName;
			this.setTabs();
		}
	};
	
	this.tabLinkClick = function() {     
		var that = this.tabHandler;
		if (that) {
			that.activeTab = this.tabName;
			that.setTabs();
			return false;
		} else {
			return true;
		}
	},
	
	this.registerTabHook = function(element, hook) {
		if (element) {
			var id = element.id;
			var tabContent = this.tabContents[id];
			if (tabContent) {
				var tabHandlerHooks = tabContent.tabHandlerHooks;
				if (!tabHandlerHooks) {
					tabHandlerHooks = new Array();
					tabContent.tabHandlerHooks = tabHandlerHooks;
				}
				tabHandlerHooks.push(hook);
				if (this.activeTab && this.activeTab == id) {
					hook();
				}
			}
		}
	};
	
	this.executeTabHooks = function(element) {
		if (element && element.tabHandlerHooks) {
			jQuery(element.tabHandlerHooks).each(
				jQuery.proxy(function(index, hook) {hook();}, this));
		}
	};
	
	this.registerHook = function(el, hook) {
		this.tabHooks.push({
			key: el.attr('href').substring(el.attr('href').indexOf('#') + 1), 
			fn:  hook
		});
	};
	
	this.executeHooks = function(key, element) {
		jQuery(this.tabHooks).each(
			jQuery.proxy(function(index, item) {
				if(item.key == key){
					item.fn();
				}
			}, this));
	};
}

function tabHandlerInit() {
	var tabContainer = jQuery('.tabContainer, .wndContent');
	if (tabContainer) {
		tabContainer.each(function(index, tbCtnr) {
			tbCtnr = jQuery(tbCtnr);
			var tb = new TabHandler(tbCtnr);
			tb.initialize(tbCtnr);
			var wt = tbCtnr.find('a[hook]');
			wt.each(function(index, el){
				el = jQuery(el);
				if(el.attr('hook')){
					tb.registerHook(el, webtrekkHooks[el.attr('hook')]);
				}
			});
		});	
	}
}

/*
 * Adjusts the height of the iBox and thus avoid scrollbars when possible
 * TODO needs modification when prototype lib is eliminated
 */
function setIBoxResizeHandler() {
	var tablinks = jQuery('#ibox_content .tabHolder a');
	iBox.checkBoxHeight();
	tablinks.each( function(index, tablink) {
		jQuery(tablink).click(function(ev) {
			iBox.checkBoxHeight();
		});
	});
}


jQuery(document).ready(function(){
	tabHandlerInit();
});

