var carouselInterval = 0;

(function($) {

	$.fn.artifica = function(argType, argOptions){

		var artifica = this;
		var element = $(this);
		var settings = jQuery.extend({
			width: 100,
			height: 100,
			slider: 'slider',
			elemBySlide: 1,
			clearEvery: 0,
			direction : 'horizontal'
		}, argOptions||{});
		
		var container = '';
		var numli = 0;
		var posSlider = 0;
		var pos = 0;
		var width = settings.width;
		var widthMax = 0;
		var nbNext = 0;
		
		var timeout = 0;
		var timeoutCount = 0;
		
		$.extend(this, {
			empty: function(){
				var temp = element.attr('value');
				element.focus(function(){
					if($(this).attr('value') == temp) $(this).attr('value', '');
				});
				element.blur(function(){
					if($(this).attr('value') == '') $(this).attr('value', temp);
				});
			},
			scrolls: function(){

				container = element.find('.' + settings.slider);
				var moving = container.find('ul');

				numli = moving.find('li').length;
				
				if(numli)
				{
					moving.hide();
					moving.wrap('<div class="slider-wrap"></div>');
					moving.show();
				
					if(settings.elemBySlide > 1)
					{
						moving.addClass('old-moving');
						moving.after('<div class="slider-moving"></div>');

						count = 0;
						moving.find('li').each(function(i){
							if(count == settings.elemBySlide) count = 0;
							if(count == 0) container.find('.slider-moving').append('<ul></ul>');
							
							if(settings.clearEvery > 0 && count == settings.clearEvery) $(this).css({'clear':'left'});
							
							container.find('.slider-moving').find('ul:last-child').append($(this));
							count++;
						});
						
						moving = container.find('.slider-moving');
						container.find('.old-moving').remove();
						moving.find('ul').css({'float':'left', 'width':width + 'px'}); 
					}
					
					widthMax = (Math.ceil(numli/settings.elemBySlide)*width);
					moving.css('width', widthMax + 'px');
				
					container.find('.slider-wrap').css('overflow', 'hidden');
					container.find('.slider-wrap').css('width', (width + 'px'));
					moving.css('position', 'relative');
					
					element.find('a.next').click(function() {
						
						posSlider -= width;
						nbNext++;

						moving.animate({'left': posSlider}, 200);
						
						if(posSlider < 0) element.find('a.previous').css('visibility', 'visible');
						if((widthMax - width) == (nbNext*width)) $(this).css('visibility', 'hidden');
				
					}).attr('href', 'javascript:void(0);');	
					
					element.find('a.previous').click(function() {
						
						posSlider += width;
						
						if(nbNext > 0) nbNext--;
						
						moving.animate({'left': posSlider}, 200);

						if(posSlider >= 0) $(this).css('visibility', 'hidden');
						if((nbNext*width) < widthMax) element.find('a.next').css('visibility', 'visible');
				
					}).attr('href', 'javascript:void(0);').css('visibility', 'hidden');
					
					if(numli <= settings.elemBySlide)
					{
						element.find('a.next').css('visibility', 'hidden');
					}
				}
			},
			carousel: function(){
			
				element.find('li').hide();
				
				if(element.find('.controls').length == 0)
				{
					element.find('ul').after('<div class="controls"></div>');	
				}
				
				if(element.find('.controls').length > 0)
				{
					element.find('li').each(function(i) {
						element.find('.controls').append('<a href="#">' + (i + 1) + '</a>');
					
						element.find('.controls a:last').hover(
							function() {
								clearInterval(carouselInterval);
								artifica.carouselSwitch(i);
								
							},
							function() {
								clearInterval(carouselInterval);
								carouselInterval = setInterval(function(){
									artifica.carouselSwitch();	
								}, 4000);
							}
						);
					});	
				}
				
				artifica.carouselSwitch(0);
				
				carouselInterval = setInterval(function(){
					artifica.carouselSwitch();
				}, 4000);

			},
			carouselSwitch: function(argIndex){	

				var active = element.find('.active');
				
				var next =  active.next();
				
				if(next.length == 0) next = element.find('li:first');
				
				var index = element.find('li').index(next);
				
				active.css('display', 'none');
				
				if(argIndex != undefined)
				{
					active.removeClass('active');
					element.find('.controls a').removeClass('on');
					var next = element.find('li:eq('+ argIndex + ')');
					next.addClass('active');
					element.find('.controls a:eq('+ argIndex + ')').addClass('on');
					next.show();
				}
				else
				{
					element.find('.controls a').removeClass('on');
					element.find('.controls a:eq(' + index + ')').addClass('on');
					
					next.fadeIn('slow', function(){
						active.removeClass('active');
						next.addClass('active');
					});
				}
			},
			tabs: function(){
				
				settings = jQuery.extend({
					header: '.tab-header',
					content: '.tab-content'
				}, argOptions||{});					
				
				element.find(settings.header).each(function(i) {
					artifica.switchTabs('init', i);
					$(this).find('a').click(function() {
						artifica.switchTabs('load', i);
					}).attr('href', 'javascript:void(0);');
				});
			},
			slider : function(){

				element.find('ul').addClass('slider-content');
				
				element.find('ul').after('<div class="controls"><a class="next" href="#" title="Suivant">&gt;</a><a class="previous" href="#" title="Pr&eacute;c&eacute;dent">&lt;</a><ul></ul></div>');

				element.find('ul').find('li').each(function(i) {
					
					$(this).attr('index', i);
					
					var htmlCode = $(this).find('.thumbmask').html();
					
					$(this).find('.thumbmask').remove();
					
					element.find('.controls ul').append('<li index="' + i + '"><a href="#">' + htmlCode + '</a></li>');
					
					element.find('.controls ul').find('li:last-child a').click(function() {
						var index = $(this).parents('li').attr('index');
						artifica.carouselSwitch(index);
					}).attr('href', 'javascript:void(0);');
					
				});
				
				settings.slider = 'controls';
				element.find('ul').show();

				this.scrolls();
				artifica.carouselSwitch(0);
			},
			switchTabs: function(argAction, argIndex){
				
				if(argAction == 'init')
				{		
					element.find(settings.header).eq(argIndex).addClass('off');
					element.find(settings.content).eq(argIndex).hide();
					if(argIndex == 0) argAction = 'load';
				}
				
				if(argAction == 'load')
				{
					element.find('.actif').hide();
					element.find('.actif').removeClass('actif');
					
					element.find('.on').addClass('off');
					element.find('.on').removeClass('on');
					
					element.find(settings.header).eq(argIndex).removeClass('off');
					element.find(settings.header).eq(argIndex).addClass('on');
					
					element.find(settings.content).eq(argIndex).addClass('actif');
					element.find(settings.content).eq(argIndex).show();
				}
				
				return false;
			}
		});
		
		
		switch(argType)
		{
			case 'empty' :
			
				this.empty();
			
				break;		
			
			case 'scrolls' :
			
				this.scrolls();
			
				break;
				
			case 'carousel' :
			
				this.carousel();
			
				break;
				
			case 'tabs' :
			
				this.tabs();
			
				break;
				
			case 'slider' :
			
				this.slider();
			
				break;
		}
	}

})(jQuery);
