/*

 * 	Easy Slider 1.5 - jQuery plugin

 *	written by Alen Grakalic	

 *	http://cssglobe.com/post/4004/easy-slider-15-the-easiest-jquery-plugin-for-sliding

 *

 *	Copyright (c) 2009 Alen Grakalic (http://cssglobe.com)

 *	Dual licensed under the MIT (MIT-LICENSE.txt)

 *	and GPL (GPL-LICENSE.txt) licenses.

 *

 *	Built for jQuery library

 *	http://jquery.com

 *

 */

 

/*

 *	markup example for $("#slider").easySlider();

 *	

 * 	<div id="slider">

 *		<ul>

 *			<li><img src="images/01.jpg" alt="" /></li>

 *			<li><img src="images/02.jpg" alt="" /></li>

 *			<li><img src="images/03.jpg" alt="" /></li>

 *			<li><img src="images/04.jpg" alt="" /></li>

 *			<li><img src="images/05.jpg" alt="" /></li>

 *		</ul>

 *	</div>

 *

 */



(function($) {



	$.fn.easySlider = function(options){

	  

		// default configuration properties

		var defaults = {			

			prevId: 		'prevBtn',

			prevText: 		'Previous',

			nextId: 		'nextBtn',	

			nextText: 		'Next',

			controlsShow:	true,

			controlsBefore:	'',

			controlsAfter:	'',	

			controlsFade:	true,

			firstId: 		'firstBtn',

			firstText: 		'First',

			firstShow:		false,

			lastId: 		'lastBtn',	

			lastText: 		'Last',

			lastShow:		false,				

			vertical:		false,

			speed: 			250,

			auto:			false,

			pause:			2000,

			continuous:		true

		}; 

		

		var options = $.extend(defaults, options);  

				

		this.each(function() {  

			var obj = $(this); 				

			var s = $("li", obj).length;

			var w = $("li", obj).width();

			var h = $("li", obj).height();

			obj.width(w);

			obj.height(h);

			obj.css("overflow","hidden");

			var ts = s-1;

			var t = 0;

			$("ul", obj).css('width',s*w);			

			if(!options.vertical) $("li", obj).css('float','left');

			

			if(options.controlsShow){

				var html = options.controlsBefore;

				if(options.firstShow) html += '<span id="'+ options.firstId +'"><a href=\"javascript:void(0);\">'+ options.firstText +'</a></span>';

				html += '<span class="prevButtons" id="'+ options.prevId +'"><a href=\"javascript:void(0);\">'+ '<img src="images/slider-leftbtn_hover.png"/>' +'</a></span>';

				html += '<span class="nextButtons" id="'+ options.nextId +'"><a href=\"javascript:void(0);\">'+ '<img src="images/slider-rightbtn_hover.png"/>' +'</a></span>';

				if(options.lastShow) html += '<span id="'+ options.lastId +'"><a href=\"javascript:void(0);\">'+ options.lastText +'</a></span>';

				html += options.controlsAfter;						

				$(obj).after(html);										

			};

	

			$("a","#"+options.nextId).click(function(){		

				animate("next",true);

			});

			$("a","#"+options.prevId).click(function(){		

				animate("prev",true);				

			});	

			$("a","#"+options.firstId).click(function(){		

				animate("first",true);

			});				

			$("a","#"+options.lastId).click(function(){		

				animate("last",true);				

			});		

			

			function animate(dir,clicked){

				var ot = t;	

				switch(dir){

					case "next":

						t = (ot>=ts) ? (options.continuous ? 0 : ts) : t+1;						

						break; 

					case "prev":

						t = (t<=0) ? (options.continuous ? ts : 0) : t-1;

						break; 

					case "first":

						t = 0;

						break; 

					case "last":

						t = ts;

						break; 

					default:

						break; 

				};	

				

				var diff = Math.abs(ot-t);

				var speed = diff*options.speed;						

				if(!options.vertical) {

					p = (t*w*-1);

					$("ul",obj).animate(

						{ marginLeft: p }, 

						speed

					);				

				} else {

					p = (t*h*-1);

					$("ul",obj).animate(

						{ marginTop: p }, 

						speed

					);					

				};

				

				if(!options.continuous && options.controlsFade){					

					if(t==ts){

						$("a","#"+options.nextId).hide();

						$("a","#"+options.lastId).hide();

					} else {

						$("a","#"+options.nextId).show();

						$("a","#"+options.lastId).show();					

					};

					if(t==0){

						$("a","#"+options.prevId).hide();

						$("a","#"+options.firstId).hide();

					} else {

						$("a","#"+options.prevId).show();

						$("a","#"+options.firstId).show();

					};					

				};				

				

				if(clicked) clearTimeout(timeout);

				if(options.auto && dir=="next" && !clicked){;

					timeout = setTimeout(function(){

						animate("next",false);

					},diff*options.speed+options.pause);

				};

				

			};

			// init

			var timeout;

			if(options.auto){;

				timeout = setTimeout(function(){

					animate("next",false);

				},options.pause);

			};		

		

			if(!options.continuous && options.controlsFade){					

				$("a","#"+options.prevId).hide();

				$("a","#"+options.firstId).hide();				

			};				

			

		});

	  

	};



})(jQuery);








