;(function($){
	DSG.fn.initCollections = function(visibleTabs, params){
		
		var params = $.extend({
			loaderOpacity: 1
		},params);
		 
		// After collections ready
		var $collections = $("#collections");
		var nbVisibleTabs = visibleTabs;
		var $loader = $('<div class="loader"></div>');
		var $loadingTab;
		var aTokenTitle = document.title.split(' - ');
		// Add : Set init beginned
		var bInit = true;
		
		// Each Category
		$collections.each(function(){
			
			// Category elements
			var $elts = { wrap: $(this) };
			$elts.navWrap = $elts.wrap.find("#collections-nav");
			$elts.nav = $elts.navWrap.find("ul");
			$elts.tabs = $elts.nav.find("li");
			
			$elts.wrapTable = $elts.wrap.find("#collection-content");
			
			// Nav slider
			$elts.wrap.bind("show", function(){
				$collections.hide();
				$elts.wrap.show();
				if (!$elts.wrap.data("init")) initCategory($elts);
			});
			
			// Tabs events
			$elts.tabs.find("a").click(function(e){
				e.preventDefault();
				var $this = $(this);
				var ajaxUrl = $this.attr("rel").slice(8);
				loadTab($elts, $this, ajaxUrl);
			});
			
			
		}).hide().slice(0,1).trigger("show");
		
		// Add : Find the current tab index		
		var iCurrentIndex = 0;
		$collections.find("#collections-nav li").each(function(i){
			var jThis = $j(this);
			if(jThis.hasClass('active')){
				iCurrentIndex = i+1;
				return true;
			}
		
		});
		// Add : If current tab isn't visible, click on next button while it is visible
		if( iCurrentIndex > visibleTabs){
			for( i=0; i< (iCurrentIndex-visibleTabs); i++) {
				$j('#collections-nav').find('a.next').click();
			}
		}
		// Add : Active current tab
		$j('#collections-nav li.active a').click();
		// Add : Set inition finished
		bInit = false;
		
		// Init category (next / prev buttons, ...)
		function initCategory($catElts){
			
			// Nav width (same width for each tab)
			var tabWidth = $catElts.nav.find("li:eq(1)").width();
		
			// Nav width = default tab width + active tab width
			$catElts.nav.width( ((tabWidth * ($catElts.tabs.length-1)) + $catElts.nav.find("li:eq(0)").width())+50 );
			
			if($catElts.tabs.length > 4) {
				// Next / Prev buttons
				$catElts.prevBtn = $('<a class="carousel-control previous carousel-previous" role="button" tabindex="0">Previous</a>').insertBefore($catElts.nav)
					.data("tabIncrement", -1)
					.data("disableClass", "previous-disabled disabled")
					.data("offClass", "prev-off");
				
				$catElts.nextBtn = $('<a class="carousel-control next carousel-next" role="button" tabindex="0">Next</a>').insertAfter($catElts.nav)
					.data("tabIncrement", 1)
					.data("disableClass", "next-disabled disabled")
					.data("offClass", "next-off");
				
				// Next / Prev buttons events
				var firstVisibleTab = 0;
				$catElts.prevBtn.add($catElts.nextBtn)
					.click(function(){
						
						if ($(this).data("enabled")){
							firstVisibleTab += $(this).data("tabIncrement") - 0;
							
							$catElts.nav.animate({
								left: - ((tabWidth) * firstVisibleTab) + 'px'
							}, 300, function(){});
							
							updateButtonsState($catElts, firstVisibleTab);
						}
					})
					.bind("disable", disableButton)
					.bind("enable", enableButton)
					.bind("off", offButton)
					.bind("clearClasses", function(){
						var $btn = $(this);
						$btn.removeClass($btn.data("disableClass") + " " + $btn.data("offClass"))
					});
				updateButtonsState($catElts, firstVisibleTab);
			
			}
			// Init loader
			initLoader($catElts);
			
			
			// Init = true
			$catElts.wrap.data("init", true);
			
		};
		
		
		// Disable/Enable "next" and "prev" buttons
		function updateButtonsState($catElts, firstVisibleTab){
			
			// Num tabs < visible tabs ?
			if ($catElts.nav.children().length < nbVisibleTabs+1) {
				$catElts.prevBtn.add($catElts.nextBtn).trigger("off");
			}
			
			else {
				// Disable prev button
				if (firstVisibleTab == 0) {
					$catElts.prevBtn.trigger("disable");
				}
				// Enable prev button
				else {
					$catElts.prevBtn.trigger("enable");
				}
				
				// Disable next button
				if (firstVisibleTab + nbVisibleTabs == $catElts.tabs.length) {
					$catElts.nextBtn.trigger("disable");
				}
				// Enable next button
				else {
					$catElts.nextBtn.trigger("enable");
				}
			
				// Update visibleTabs object
				$catElts.visibleTabs = $catElts.tabs.slice(firstVisibleTab, firstVisibleTab + nbVisibleTabs);

				//Active first tab if active tab is not visible
				// Add : During initialisation we don't click on nav
				if (!$catElts.visibleTabs.is(".active") && !bInit){
					$catElts.visibleTabs.slice(0,1).find("a").click();
				}
			}
		};
		
		
		// Init loader
		function initLoader($catElts){
		
			$loader.css({
				width: $catElts.wrap.width(),
				height: $catElts.wrap.height() - $catElts.nav.height(),
				opacity: 0
			}).insertAfter("#collection-content").hide();
			
		};
		
		$j("#collections div.collection-image").simplelabel();
		
		// Load a tab
		function loadTab($catElts, $tab, ajaxUrl){
			//var collectionIndex = ajaxUrl.slice(-1);
			$catElts.tabs.removeClass("active");
			$tab.parents("li").addClass("active");
			
			$loader.show().css("height", $catElts.wrapTable.height()).fadeTo(300, params.loaderOpacity);
			
			// Currently loaded tab = current tab
			$loadingTab = $tab;
			
			$.get(ajaxUrl, function(data){
							
				// If loaded tab is last clicked tab
				if ($tab == $loadingTab){
					$loader.fadeTo(300,0, function(){ $loader.hide() });
					$catElts.wrapTable.html($j(data).find("#collection-content"));
					$j("#collections div.collection-image").simplelabel();
				}
				
				var sNewTitle = $tab.text();	
				
				if( aTokenTitle.length === 3) {
					var sGetTitleStart = aTokenTitle[0];
					var sGetTitleEnd = aTokenTitle[2];					
				}
				else {
					var sGetTitleStart = aTokenTitle[0];
					var sGetTitleEnd = aTokenTitle[1];
				}
				document.title = sGetTitleStart + ' - ' + params.aTrad.collection + sNewTitle + ' - '+ sGetTitleEnd;
			});
		};
		
		// Disable button event
		function disableButton(e){
			var $btn = $(this);
			$btn
				.trigger("clearClasses")
				.addClass($btn.data("disableClass"))
				.data("enabled", false);
		};
		
		// Enable button event
		function enableButton(e){
			$(this)
				.trigger("clearClasses")
				.data("enabled", true);
		};
		
		// Completely disable button
		function offButton(e){
			var $btn = $(this);
			$btn
				.trigger("clearClasses")
				.addClass($btn.data("offClass"))
				.data("enabled", false);
		};		
	};
})(jQuery);
