/*
 * Tabs Plus v. 1.0
 *
 * Parameter
 */
(function($){
	$.fn.extend({
		tabsplus: function(config){			
			var defaults ={
				delimiter: 'h2',
				Position: 'bottom', // also can be : top
				TabClass: 'TabulationBottom',
				TabSelectClass: 'selected',
				TabWrapperClass: 'tabWrapper'
			};
			this.options = $.extend(defaults, config);
			var o = this;
			
			CntTab = 0;
			return this.each(function(){
			var TabifyZone = this;
						
			$(this).parent().css('width', '98.5%');
			// Count How many Delimiter was found
			NbDelimiterFound = 0;
			$(o.options.delimiter, this).each(function(){
				NbDelimiterFound++;
			});
			if(NbDelimiterFound == 0){
				return;
			}
			// Wrap the subContent for each delimiter
			var CurrentHeader = $(o.options.delimiter + ':first', TabifyZone);

			GroupTabid = 'Tab'+ o.options.delimiter + CntTab + new Date().getTime()
			CntTab++;
			var DivWrapper = $('<div><\/div>').addClass(o.options.TabWrapperClass).attr('id',GroupTabid);
			$(CurrentHeader).nextAll().each(function(){
				var sibling = $(this);
				if(sibling.get(0).nodeName.toLowerCase() != o.options.delimiter){
					// Add to the div
					DivWrapper.append(sibling);
					//alert($(this).get(0).nodeName);
				} else {
					$(CurrentHeader).after(DivWrapper);
					CurrentHeader = sibling;
					GroupTabid = 'Tab'+ o.options.delimiter + CntTab + new Date().getTime()
					CntTab++;
					DivWrapper = $('<div><\/div>').addClass(o.options.TabWrapperClass).attr('id',GroupTabid);
				}
			});
			$(CurrentHeader).after(DivWrapper);
			
			// Create a list with the header and a identical list also
			var headerList = '';
			var NbHeader = 0;
			var HeaderListContainer = $("<ul></ul>");
			$(HeaderListContainer).addClass(o.options.TabClass);
			$(TabifyZone).find(o.options.delimiter).each(function(i){
				NbHeader++;
				
				// Copier les class CSS attribuer
				var cssClass = '';
				if($(this).attr('class')) {
					cssClass = $(this).attr('class');
				}
				// Copier le contenu du header
				var CtnHeader = $(this).html();
				
				// Obtenir un Identifiant Unique
				var id = 'Tab'+ o.options.delimiter + i + new Date().getTime()
				
				
				var HeaderListItm = $("<li></li>");
				HeaderListItm.attr('id', 'Tab'+ o.options.delimiter + 'l' + new Date().getTime());
				// Creation de la list item
				headerList += '<li';  // TO BE REMOVED
				if(cssClass != ''){
					headerList += ' class="' + cssClass + '"';  // TO BE REMOVED
					$(HeaderListItm).addClass(cssClass);
				}

				var HeaderListItmLink = $('<a>' + $(this).html() + '</a>');
				
				// Creer un href avec l'identifiant unique
				$(HeaderListItmLink).attr('href', '#' + id);
				headerList += '><a href="#' + id + '">' + CtnHeader + '</a></li>'; // TO BE REMOVED
				
				// Creer un Event Handler pour le lien
				$(HeaderListItmLink).click(function(event){
					event.preventDefault();
					$(TabifyZone).find('ul>li[id^=Tab'+ o.options.delimiter + '].'+o.options.TabSelectClass).removeClass(o.options.TabSelectClass);
					$(this).blur(); // IE fix
					
					$(TabifyZone).find(o.options.delimiter + '+div[id^=Tab'+ o.options.delimiter + ']:visible').hide(); // Hide the current Tab
					$(TabifyZone).find(o.options.delimiter + '+div[id^=Tab'+ o.options.delimiter + ']').eq(i).show(); // Show the Selected Tab
					
					$(this).parent().addClass(o.options.TabSelectClass);
				});
				
				// Ajouter l'item a la liste
				$(HeaderListItm).append($(HeaderListItmLink));
				$(HeaderListContainer).append($(HeaderListItm));

				// Attribuer l'identifiant unique à l'élément suivant le header ex.(<h2>) [Habituellement un div wrapper]
				$('+ div', this).attr('id', id);
				$('+ div', this).addClass(cssClass);
				//panels = panels.add()
				$(this).hide();
			});
			if(NbHeader != 0){
				if(o.options.Position == "bottom"){
					$(TabifyZone).append($(HeaderListContainer));
					//$(TabifyZone).append('<ul class="' + o.options.TabClass + '">'+headerList+'</ul>');
				} else {
					$(TabifyZone).prepend($(HeaderListContainer));
					//$(TabifyZone).prepend('<ul class="' + o.options.TabClass + '">'+headerList+'</ul>');
				}
			} 
			
			// Navigation
			$(TabifyZone).find(o.options.delimiter + '+div').hide();
			$(TabifyZone).find(o.options.delimiter + '+div:first').show();
			
			// Syncronisation des Entete
			$('ul.' + o.options.TabClass + '>li[id^=Tab'+ o.options.delimiter + ']>a').syncHeight();
			
			/*
			$(TabifyZone).find('ul>li>a[href^=#Tab'+ o.options.delimiter + ']').each(function(i){
				GroupTabid = 'Tab'+ o.options.delimiter + CntTab + new Date().getTime()
				CntTab++;
				$(this).parent().attr('id', GroupTabid);
				$(this).click(function(event){
						
				//$("ul>li", TabifyZone).click(function(event){
					event.preventDefault();
					$(TabifyZone).find('ul>li[id^=Tab'+ o.options.delimiter + '].'+o.options.TabSelectClass).removeClass(o.options.TabSelectClass);
					$(this).blur(); // IE fix
					
					$(TabifyZone).find(o.options.delimiter + '+div[id^=Tab'+ o.options.delimiter + ']:visible').hide(); // Hide the current Tab
					$(TabifyZone).find(o.options.delimiter + '+div[id^=Tab'+ o.options.delimiter + ']').eq(i).show(); // Show the Selected Tab
					
					$(this).parent().addClass(o.options.TabSelectClass);
				});
			});*/
			
			// Select the first tab
			$("ul>li:first", TabifyZone).addClass(o.options.TabSelectClass);
			
			});
		}	
	});
})(jQuery);
