(function($) {
	
	var defaults = {
			next: 0
	};

	$.fn.slider = function(options) {
		
		/**
		 * set options function
		 */
    function _setOptions(element) {
      options = $.extend({}, defaults, element.data("slider:options"), options);
      element.data("slider:options", options);
    };
    
    /**
     * main create method
     */
    function _create(element) {
    	element.css({
    		"position": "relative",
  			"overflow": "hidden"
    	});
    	var first = true;
    	var index = 0;
    	$.each(options.slides, function() {
    		var container = $("<div>").css("position", "absolute").appendTo(element);
    		var link = $("<a>", {
    			href: this.href,
    			css: {"border": "none"}
    		}).appendTo(container);
    		var image = $("<img>", {
    			src: this.src,
    			css: {"border": "none"}
    		}).appendTo(link);
    		if (!first) {
    			container.hide();
    		} else {
    			container.attr("rel", "current");
    		}
    		container.attr("id", index);
    		index++;
    		first = false;
    	});
    }
    
    function _animate(element) {
    	var div = $("div[rel='current']", element);
    	div.animate({
    		left: 0
    	}, 5000, function() {
    		div.fadeOut("slow");
    		var next = false;
    		var selected = false;
    		$.each($("div", element), function() {
    			var each = $(this);
    			if (next) {
    				selected = true;
    				each.attr("rel", "current").fadeIn("fast");
    				return false;
    			} else {
    				if (each.attr("rel") == "current") {
    					each.attr("rel", ""); 
    					next = true;
    				}
    			}
    		});
    		if (!selected) {
    			$("div:first", element).attr("rel", "current").fadeIn("fast");
    		}
    		_animate(element);
    	});
    }
    
    /**
     * main trigger code
     */
    this.each(function(element) {
			element = $(this);
			_setOptions(element);
			_create(element);
			_animate(element);
    });
		
		return this;
	};

})(jQuery);
