jQuery(document).ready(function(){

	var autoTabBrowseTimeoutId = new Array();
	var selected = new Array();
	var totalSize = new Array();
	var tab_elements = new Array();
	var tabs = new Array();
	var objContainer = jQuery('.dm_tabsContainer');
	var arrClassNames = '';
	var arrContainerGroups = new Array('dm_tabsContainer');
	jQuery.each(objContainer, function() {
		arrClassNames = this.className.split(/\s+/);
		jQuery.each(arrClassNames, function(i, val) {
			if (jQuery.inArray(val, arrContainerGroups) == -1 && val.substr(0, 16) == 'dm_tabsContainer') {
				renderTabs(val);
				arrContainerGroups = jQuery.merge(arrContainerGroups, new Array(val));
			}
		});
	});



	
	
	function renderTabs (group) {
		tab_elements[group] = jQuery("." + group);
		totalSize[group] = jQuery(tab_elements[group]).size();
		selected[group] = '';
		if (totalSize[group]) {
			build_tab_structure(group);
		}
	
		if(!document.getElementById(group + '_dmtabs_menu')) {
			return false;
		}
    
		//Animation, welche im Typoscript festgelegt werden kann
		if(typeof dmTabs_animation == "undefined") {
			dmTabs_animation = '';
		}
	
		if(typeof dmTabs_animation_speed == "undefined") {
			dmTabs_animation_speed = 'fast';
		}

		switch (dmTabs_animation) {
			//Funktioniert nichtmehr, wohl aufgrund der vielen aenderungen, die bei "fade" gemacht werden mussten, damit die tabs ineinander ueberfaden
			/*case "slide":
				tabs[group] = jQuery('#datamints_tabs').tabs({
					fx: {
						height: 'toggle',
						duration: dmTabs_animation_speed
					}
				});
				break;
			*/	
			case "fade":
				tabs[group] = jQuery('#datamints_tabs_' + group).tabs({
					fx: {
						opacity: 'toggle',
						duration: dmTabs_animation_speed
					}
				});
				break;
			default:
				tabs[group] = jQuery('#datamints_tabs_' + group).tabs();
				break;
		}


		if(typeof dmTabs_alwaysShowPrevNextButtons == "undefined") {
			//Wenn dmTabs_alwaysShowPrevNextButtons true, dann werden die Prev/Next Buttons immer angezeigt, auch wenn der erste oder letzte tab selected ist
			var dmTabs_alwaysShowPrevNextButtons = true; //TODO  var = FALSE
		}

		totalSize[group] = jQuery('.' + group + '_dmtabs_tab').size() - 1;
		selected[group] = tabs[group].tabs('option', 'selected');
		
	
		document.getElementById(group + '_dmtabs_menu').style.display = 'block'
		jQuery('#' + group + '_tab_0').css('display', 'block');
	
		//Wenn totalSize[group] 0 ist (d.h. es ist nur eine Tab-Seite vorhanden), werden die vor/zurueck Buttons der Tabs gar nicht erst eingeblendet
		if (totalSize[group] == 0) {
			document.getElementById(group + '_tab_prev_button').style.display = 'none'
			document.getElementById(group + '_tab_next_button').style.display = 'none'
		}
		else {
			if (!dmTabs_alwaysShowPrevNextButtons) {
				document.getElementById(group + '_tab_prev_button').style.visibility = 'hidden'
			}

			//startAutoTabBrowse();
			if (typeof dmTabs_autoBrowseTabs != 'undefined' && typeof dmTabs_autoBrowseTabsDelayNormal != 'undefined' && dmTabs_animation_tab == group) {
				if (typeof dmTabs_autoBrowseTabsDelayUserClick != 'undefined') {
					dmTabs_autoBrowseTabsDelayUserClick = parseInt(dmTabs_autoBrowseTabsDelayUserClick);
				}

				autoTabBrowseTimeoutId[group] = window.setTimeout(function() {startAutoTabBrowse(group);}, dmTabs_autoBrowseTabsDelayNormal);
			}
    
    
			jQuery('.' + group + '_dmtabs_tab').click(function() {
				if (typeof autoTabBrowseTimeoutId != 'undefined' && dmTabs_animation_tab == group) {
					window.clearTimeout(autoTabBrowseTimeoutId[group]);
					
					if (typeof dmTabs_autoBrowseDelayUserClick == 'undefined') {
						var dmTabs_autoBrowseDelayUserClick = dmTabs_autoBrowseTabsDelayNormal;
					}

					autoTabBrowseTimeoutId[group] = window.setTimeout(function() {startAutoTabBrowse(group);}, dmTabs_autoBrowseTabsDelayUserClick);
				}

				selected[group] = tabs[group].tabs('option', 'selected');

				if (!dmTabs_alwaysShowPrevNextButtons) {
					if (!selected[group]) {
						document.getElementById(group + '_tab_prev_button').style.visibility = 'hidden'
					}
					else {
						document.getElementById(group + '_tab_prev_button').style.visibility = 'visible'
					}
   
					if (selected[group] != totalSize[group]) {
						document.getElementById(group + '_tab_next_button').style.visibility = 'visible'
					}
					else {
						document.getElementById(group + '_tab_next_button').style.visibility = 'hidden'
					}
					return false;
				}
			})
  
			jQuery('.' + group + '_tab_next').click(function() {
				//tabs[group] = jQuery('#datamints_tabs').tabs();
				if (typeof autoTabBrowseTimeoutId[group] != 'undefined' && dmTabs_animation_tab == group) {
					window.clearTimeout(autoTabBrowseTimeoutId[group]);
					
					if (typeof dmTabs_autoBrowseDelayUserClick == 'undefined') {
						var dmTabs_autoBrowseDelayUserClick = dmTabs_autoBrowseTabsDelayNormal;
					}

					autoTabBrowseTimeoutId[group] = window.setTimeout(function() {startAutoTabBrowse(group);}, dmTabs_autoBrowseTabsDelayUserClick);
				}

				selected[group] = tabs[group].tabs('option', 'selected');
				//alert('#tab_' + selected[group] + ' sollte rausfaden');

				if (selected[group] == totalSize[group]) {
					tabs[group].tabs('select', 0);
				}
				else {
					tabs[group].tabs('select', selected[group] + 1);
				}

				if (!dmTabs_alwaysShowPrevNextButtons) {
					document.getElementById(group + '_tab_prev_button').style.visibility = 'visible'

					if (selected[group] != totalSize[group]-1) {
						document.getElementById(group + '_tab_next_button').style.visibility = 'visible'
					}
					else {
						document.getElementById(group + '_tab_next_button').style.visibility = 'hidden'
					}
				}
				return false;
			})

				jQuery('.' + group + '_tab_prev').click(function() {
					//tabs[group] = jQuery('#datamints_tabs').tabs();
					if (typeof autoTabBrowseTimeoutId != 'undefined' && dmTabs_animation_tab == group) {
						window.clearTimeout(autoTabBrowseTimeoutId[group]);
						
						if (typeof dmTabs_autoBrowseDelayUserClick == 'undefined') {
							var dmTabs_autoBrowseDelayUserClick = dmTabs_autoBrowseTabsDelayNormal;
						}

						autoTabBrowseTimeoutId[group] = window.setTimeout(function() {startAutoTabBrowse(group);}, dmTabs_autoBrowseTabsDelayUserClick);
					}

					selected[group] = tabs[group].tabs('option', 'selected');

					tabs[group].tabs('select', selected[group] - 1);

					if (!dmTabs_alwaysShowPrevNextButtons) {
						if (selected[group] == 1) {
							document.getElementById(group + '_tab_prev_button').style.visibility = 'hidden'
						}
						else {
							document.getElementById(group + '_tab_prev_button').style.visibility = 'visible'
						}
	   
						document.getElementById(group + '_tab_next_button').style.visibility = 'visible'
					}
					return false;
				})

				tabs[group].tabs({
					show: function(event, ui) {
						//Event wird ausgel�st, wenn ein Tab eingeblendet wird, wir fuer fade-in + fade out verwendet
						if (dmTabs_animation == 'fade' && !(jQuery.browser.msie && jQuery.browser.version == '8.0')) {
						// && navigator.userAgent != 'MSIE 8' <- Workaround, da die Fades NUR IE8 nicht funktionieren (in der Kompatibilitaetsansicht funktionieren diese schon)
							if (!(isNaN(parseInt(selected[group])))) {
								jQuery('#' + group + '_tab_' + selected[group]).fadeOut(dmTabs_animation_speed);
								//jQuery('#' + group + '_tab_' + selected[group]).css('filter', 'alpha(opacity=100)').animate({ opacity: 0 }, dmTabs_animation_speed).css('display', 'none');
							}
							selected[group] = tabs[group].tabs('option', 'selected');
							jQuery('#' + group + '_tab_' + selected[group]).fadeIn(dmTabs_animation_speed);
							//jQuery('#' + group + '_tab_' + selected[group]).css('filter', 'alpha(opacity=0)').css('display', 'block').animate({ opacity: 1 }, dmTabs_animation_speed);
						}
						else {
							if (!(isNaN(parseInt(selected[group])))) {
								jQuery('#' + group + '_tab_' + selected[group]).css('display', 'none');
							}
							selected[group] = tabs[group].tabs('option', 'selected');
							jQuery('#' + group + '_tab_' + selected[group]).css('display', 'block');
						}
					}
				})

			}
	}
	
	function build_tab_structure (group) {
		//Aufbauen der Tab-Struktur
		jQuery(tab_elements[group]).wrapAll("<div class='datamints_tabs' id='datamints_tabs_" + group + "' style='background-color: #fff;'></div>");
		jQuery(tab_elements[group]).css('display', 'block');

		x = 0;
		jQuery(tab_elements[group]).wrap(function() {
			tabWrap = '<div id="' + group + '_tab_' + x + '" style="display: none;" >';
			x = x + 1;
			return tabWrap;
		});

		jQuery("#datamints_tabs_" + group).prepend("<div id='" + group + "_dmtabs_menu' class='dmtabs_menu'><div id='" + group + "_tab_prev_button' class='tab_prev_button'><a class='" + group + "_tab_prev tab_prev' href='javascript: void(0);'>&#171;</a></div><ul id='" + group + "_tabs_ul' class='tabs_ul'></ul><div id='" + group + "_tab_next_button' class='tab_next_button'><a class='" + group + "_tab_next tab_next' href='javascript: void(0);'>&#187;</a></div></div>");
		/*for (i = 0; i < x; i++) {
			jQuery('#' + group + '_tabs_ul').append('<li><a class="' + group + '_dmtabs_tab dmtabs_tab" href="#' + group + '_tab_' + i + '">');
			if (jQuery('dm_tabs_tabtitle'))
			jQuery('#' + group + '_tabs_ul').append(i + 1);
			jQuery('#' + group + '_tabs_ul').append('</a></li>');
		}*/
		i = 0;
		jQuery(tab_elements[group]).each(function (index) {
			tabMenuItem = '';
			
			tabMenuItem += '<li><a class="' + group + '_dmtabs_tab dmtabs_tab" href="#' + group + '_tab_' + i + '">';
			if (jQuery('.dm_tabs_tabtitle', this).length) {
				tabMenuItem += jQuery('.dm_tabs_tabtitle', this).text();
				jQuery('.dm_tabs_tabtitle', this).remove();
			}
			else {
				tabMenuItem += (i + 1);
			}	
			tabMenuItem += '</a></li>';
			
			jQuery('#' + group + '_tabs_ul').append(tabMenuItem);
			i = i + 1; 
		});
		
	}

	function startAutoTabBrowse(group) {
		//tabs[group] = jQuery('#datamints_tabs').tabs();
		selected[group] = tabs[group].tabs('option', 'selected');
		//jQuery('#tab_' + selected).fadeOut('fast');

		if (selected[group] == totalSize[group]) {
			tabs[group].tabs('select', 0);
		}
		else {
			tabs[group].tabs('select', selected + 1);
		}

		if (!dmTabs_alwaysShowPrevNextButtons) {
			document.getElementById(group + '_tab_prev_button').style.visibility = 'visible'

			if (selected[group] != totalSize[group]-1) {
				document.getElementById(group + '_tab_next_button').style.visibility = 'visible'
			}
			else {
				document.getElementById(group + '_tab_next_button').style.visibility = 'hidden'
			}
		}

		autoTabBrowseTimeoutId[group] = window.setTimeout(function() {startAutoTabBrowse(group);}, 2222);
	}
});
