/**
 * jQuery auto slider
 * 
 * @version 0.1
 * @category visual
 * @package jquery
 * @subpakage autoslider
 * @author Fabien Antoine
**/
jQuery.fn.autoslider = function(options){
	var settings = {
		contentClass: ".autoslider_content",
		delay: 3000,
		duration: 500,
		easing: "linear", // or swing
		vertical: true,
		items: "table",
		step: 1,
		tabSize: null,
		loop: true
	};
	
	/* Get settings */
	settings = jQuery.extend(settings, options || {});
	
	/* Execute autoslider on all selected items */
	return this.each(function() {
		var that = jQuery(this);
		var contentDiv = that.find(settings.contentClass + ":first");
		
		/* Set variables */
		var size = (settings.tabSize == null ? (settings.vertical ? that.outerHeight() : that.outerWidth()) : settings.tabSize);
		var count = that.find(settings.items).length;
		var step = settings.step;
		var item = 1;
		
		if(count <= 1 || step == 0) return null;
		
		/* Duplicate the first item to create the loop */
		if(settings.loop) {
			contentDiv.append(contentDiv.find(":first").clone());
			count++;
		}
		
		var action = function() {
			if(!settings.loop) {
				if((step > 0 && item + step > count) || (step < 0 && item + step < 1)) {
					step *= -1;
				}
				item += step;
			} else {
				item += step;
			}
			
			var posval = (-(size * (item - 1)))+"px";
			var cback = function() {
				setTimeout(action, settings.delay);
				
				if(item == count) {
					if(settings.vertical) {
						contentDiv.css('top', 0);
					} else {
						contentDiv.css('left', 0);
					}
					item = 1;
				}
			};
			
			contentDiv.animate((settings.vertical?{top:posval}:{left:posval}), {duration:settings.duration, complete:cback});
		};
		
		/* Launch the first delay */
		setTimeout(action, settings.delay);
	});
};