/**
#       Copyright 2008 Fabien Di Tore
#		this file is part of IceFramework
**/
(function($) {

     

	// Prototype Methods
	
	$.fn.extend({
		akCarousel: function(settings) {
			var defaults = {
				itemListSelector: 'ul:first li',
				projectorSelector: 'ul:first',
				projectorClass: 'projector',
				projectorHeight: 280,
				projectorWidth : 498,
				itemWidth : 0,
				itemHeight : 0,
				itemPerPage: 1,
				windowWidth : 486,
				speed: 1000,
				swapDelay: 2000,
				autoSlide: false,
				onSlide : '',
				step: 0,
				loop:true,
				infiniteEffect: true,
				autoStopAtEnd:false,
				effect: 'left',
				effectObject: null,
				effectCallback: null,
				effectObjectReverse:null,
				effectCallbackReverse: null,
				effectInitialized:true,
				effectReverseInitialized:false,
				beingAnimated:false,
				debug: false
			};
			
			settings = $.extend({}, defaults, settings);
			
			return this.each(function() {
			//
				var $this = $(this);
				var o = $.meta ? $.extend({}, settings, $this.data()) : settings; //merging settings with default config
				
				$(this).akCarousel.properties =settings;
				
				var el = $this.find(o.itemListSelector);  
				o.numItems = el.size();
				
				//retrieving projector in DOM
				$.fn.akCarousel.properties.proj = $this.find(o.projectorSelector);
				
				var projector = $.fn.akCarousel.properties.proj;
				if(o.debug){
					projector.wrap('<div class="'+o.projectorClass+'" style="overflow:visible;"></div>');
				}else{		
					projector.wrap('<div class="'+o.projectorClass+'" style="overflow:hidden;"></div>');
					
				}
				var par = projector.parent();

				par.css('width',o.windowWidth);
				par.css('height',o.projectorHeight);
				par.css('position','relative');
				if(o.debug){
					par.css('overflow','visible');
				}else{		
					par.css('overflow','hidden');
						
				}
				//par.css('border','1px solid #FF0000');
			//	par.css('float','left');
				projector.css('width',parseInt(o.projectorWidth*(o.numItems / o.itemPerPage)));
				projector.css('height',o.projectorHeight);
				projector.css('position','relative');
				
				o.itemWidth = o.projectorWidth /o.itemPerPage;
				
				var elems = new Array();
				el.each(function(){
					$(this).css('width',o.itemWidth);
					$(this).css('float','left');
				});
				$this.css('height',o.projectorHeight);
				
				
				
				
				if(o.autoSlide && o.numItems>1){
					if(o.autoStopAtEnd){
						projector.everyTime(o.swapDelay,'akCarousel',$.fn.akCarousel.gotoNextStep,o.numItems-1);
					}else{
						projector.everyTime(o.swapDelay,'akCarousel',$.fn.akCarousel.gotoNextStep);
					}
				}
				
				
				switch(o.effect){
					case 'left':
					
						o.effectObject = { left: -o.projectorWidth };
						
						
						o.effectCallback =function(){
							var o = $.fn.akCarousel.properties;
							for (var i = 0; i < o.itemPerPage;i++){
								var first = o.proj.find('li:first').html();
								//alert(first);
								
								o.proj.find('li:first').remove();
								o.proj.css('left',0);
								o.proj.append("<li style=\"width:"+o.itemWidth+"px; float:left;\">"+first+"</li>");
							}
							o.beingAnimated = false;
						}
						o.effectObjectReverse={ left:0};
						o.effectCallbackReverse= function(){
							//	alert('pouet');
								for (var i = 0; i < o.itemPerPage;i++){
									var first = o.proj.find('li:last').html();
									//alert(first);
									o.proj.find('li:last').remove();
									o.proj.css('left',-o.projectorWidth);
									o.proj.prepend("<li style=\"width:"+o.itemWidth+"px; float:left;\">"+first+"</li>");
								}
								o.beingAnimated = false;
							}
							
					break;
					
				}
				
				
			});
		
		}
/*,
		test: function (){
		//	alert($(this).akCarousel.properties.projectorClass);
		}
*/
		

	});

	$.fn.akCarousel.properties = {
		
	};

	$.fn.akCarousel.gotoStep= function(index){
			var o = $.fn.akCarousel.properties;
			if(index < o.numItems){
				o.step = index;
				o.proj.animate( { left: parseInt(-o.projectorWidth*o.step) }, o.speed );
			}
	}

	$.fn.akCarousel.gotoNextStep= function(){
		var o = $.fn.akCarousel.properties;
		if(!o.beingAnimated){
			o.beingAnimated = true;
			
			/*effectInitialized:true,
				effectReverseInitialized:false,*/
			o.effectReverseInitialized=false;
			if(!o.effectInitialized){
				o.effectCallback();
				o.effectInitialized=true;
			}
			
			if((o.step+1) < o.numItems){
				o.step++;
			}else{
				o.step=0;
			}
			/*
			o.proj.animate( { left: -o.projectorWidth*o.step }, { queue:false, duration:o.speed} ,null,function(){
				alert('pouet');
				
			});*/
			
			
			if(o.infiniteEffect){
				o.proj.animate( o.effectObject,o.speed,o.effectCallback);
			}else{
				o.proj.animate({ left: -o.projectorWidth* o.step }, { queue:false, duration:o.speed} );
				
			}
		}
	}
	
	$.fn.akCarousel.gotoPreviousStep= function(){
			var o = $.fn.akCarousel.properties;
		if(!o.beingAnimated){
			o.beingAnimated = true;
			o.effectInitialized=false;
			if(!o.effectReverseInitialized){
				o.effectCallbackReverse();
				o.effectReverseInitialized=true;
			}
			
			if(o.infiniteEffect){
				o.proj.animate( o.effectObjectReverse,o.speed,o.effectCallbackReverse);
			}else{
				o.proj.animate({ left: -o.projectorWidth* o.step }, { queue:false, duration:o.speed} );
				
			}
		}
	}

})(jQuery);