(function($) {
	$.fn.easySlider = function(options){
		// default configuration properties
		var defaults = {
			prevId: 'prevBtn',				// id of the element to apply prev rules to
			nextId: 'nextBtn',				// id of the element to apply next rules to
			prevText: 'Previous',		   // text for autogenerated prev link
			nextText: 'Next',				 // text for autogenerated next link
			autogeneratePagination: true, // will automatically generate pagination links
			orientation: '',				  // 'vertical', or anything else will assume horizontal
			speed: 800,						 // duration of a transition
			autoplayDuration: 0,				// auto-play if non-zero, this is the time between transitions
			loop: false						 // loop around the content
		};

		var options = $.extend(defaults, options);
		return this.each(function(){
			// Setup Measurements and Options
			var obj = $(this);
			var totalSlides		= $("li", obj).length;
			var slideWidth		= obj.width();
			var slideHeight		= obj.height();
			var lastSlide		= totalSlides-1;
			var current			= 0;
			// States
			var vertical		= (options.orientation == 'vertical');
			var autogen			= options.autogeneratePagination;
			var loop			= options.loop;
			var speed			= options.speed;
			var autoplayDuration= Math.max(options.autoplayDuration,50)+speed;
			var autoplay		= (options.autoplayDuration > 0);
		
			
			
			// Important Elements
			var $ul   = $("ul", obj);
			var $next = $("#"+options.nextId);
			var $prev = $("#"+options.prevId);
		
			// Loop - Duplicate the First Slide onto the end
			if (loop) { $ul.append( $("li:first", obj).clone() ); totalSlides += 1; lastSlide += 1; }
		
			// Horizontal - Make them float left and set the width of the ul (for all slides)
			if (!vertical) {
		  		$("li", obj).css('float','left');
		  		$ul.css('width', totalSlides * slideWidth);
			}
		
			
			//$next.click(function(){ 
			$("."+options.nextId).click(function(){ 					   
				
				if ($($ul).is(":animated")) { 
				} else {
					animate2("next");  
				}
								 
			});
			
			//$prev.click(function(){ 
			$("."+options.prevId).click(function(){					   
				
				
				if ($($ul).is(":animated")) { 
				} else {
					animate2("prev"); 
				}
				
		    });

		
			// Enclosed Slide Animation
			function animate(dir){
				// Special Case for looping
				if ($($ul).is(":animated")) {
				} else {
				
					if ( loop ) {
						
						if (dir == "next"){
							if ( current == lastSlide ){ (vertical) ? $ul.css('marginTop',0) : $ul.css('marginLeft',0); current = 1; }
							else { current += 1; }
						}
						else {
							if ( current == 0 ){ (vertical) ? $ul.css('marginTop',(totalSlides-1)*slideHeight*-1) : $ul.css('marginLeft',(totalSlides-1)*slideWidth*-1); current = lastSlide-1; }
							else { current -= 1; }
						}
					
					}
	
					// Dispatch jQuery Animation
					
					if(!vertical) {	
						$ul.animate( { marginLeft: (current*slideWidth*-1) }, speed); 
					
					} else { 
						$ul.animate( { marginTop: (current*slideHeight*-1) }, speed); 
					}
				
				}
				
				
				
			};
			
			
			function animate2(dir){
				// Special Case for looping
				
				
				if ( loop ) {
					
					if (dir == "next"){
						if ( current == lastSlide ){ (vertical) ? $ul.css('marginTop',0) : $ul.css('marginLeft',0); current = 1; }
						else { current += 1; }
					}
					else {
						if ( current == 0 ){ (vertical) ? $ul.css('marginTop',(totalSlides-1)*slideHeight*-1) : $ul.css('marginLeft',(totalSlides-1)*slideWidth*-1); current = lastSlide-1; }
						else { current -= 1; }
					}
				
				}

				// Dispatch jQuery Animation
				
				if(!vertical) {
					$ul.animate( { marginLeft: (current*slideWidth*-1) }, speed, function(){
						
						
																						  
					}); 
				
				} else { 
					$ul.animate( { marginTop: (current*slideHeight*-1) }, speed); 
				}
				
				
			};
			
			// Autoplay
			
				
				if (autoplay){
				var interval = null;
				var auto = function() { animate('next'); if (!loop && current>=lastSlide){ clearInterval(interval); } } 
				setTimeout(function() { interval = setInterval(auto, autoplayDuration); }, autoplayDuration-speed);
				} else if (totalSlides>1) { $next.fadeIn(); if(loop) { $prev.fadeIn(); } }
				
			});
		};
	})
(jQuery);
