(function($) {
	$.fn.easySlider = function(options){
		var defaults = {			
            prevId: 		'prevBtn',
            prevText: 		'&laquo;',
            nextId: 		'nextBtn',	
            nextText: 		'&raquo;',
            controlsShow:	true,
            controlsBefore:	'',
            controlsAfter:	'',	
            controlsFade:	false,
            firstId: 		'firstBtn',
            firstText: 		'First',
            firstShow:		false,
            lastId: 		'lastBtn',	
            lastText: 		'Last',
            lastShow:		false,				
            speed: 			300,
            auto:			true,
            pause:			4000,
            continuous:		true, 
            numeric: 		false,
            numericId: 		'controls'
		}; 
		
		var options = $.extend(defaults, options);  
		
		this.each(function() {  
			var obj = $(this); 				
			var s = $('li', obj).length;
			var w = $('li', obj).width() + 20; 
			var h = $('li', obj).height() + 20;
			var clickable = true;
			var ts = parseInt(s/1) - 1;
			var t = 0;
			obj.width(w + 'px');
			obj.height(h + 'px'); 
			$('ul', obj).width((s*w)  + 'px');	
			if(options.continuous) {
				//$('ul', obj).prepend($('ul li:last-child', obj).clone().css('margin-left','-' + w + 'px'));
				//$('ul', obj).append($('ul li:nth-child(2)', obj).clone());
				//$('ul', obj).css('width', (s+2)*w);
				//$('ul', obj).prepend($('ul li:last-child', obj).clone().css('margin-left','-' + w + 'px'));
				$('ul', obj).append($('ul li', obj).clone());
				$('ul', obj).css('width', s*w*2);
			};				
			
			if(options.controlsShow){
				$(obj).before('<div class="'+ options.prevId +'"><a href=\"javascript:void(0);\">'+ options.prevText +'</a></div>');
				$(obj).after('<div class="'+ options.nextId +'"><a href=\"javascript:void(0);\">'+ options.nextText +'</a></div>');
			};
			$("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 adjust() {
				if(t>ts) t=0;		
				if(t<0) t=ts;	
				$("ul",obj).css("margin-left",(t*w*1*-1));
				clickable = true;
			};
			
			function animate(dir,clicked){
				if (clickable){
					clickable = false;
					var ot = t;				
					switch(dir){
					case "next":
						t = (ot>=ts) ? (options.continuous ? t+1 : ts) : t+1;						
						break; 
					case "prev":
						t = (t<=0) ? (options.continuous ? t-1 : 0) : t-1;
						break; 
					case "first":
						t = 0;
						break; 
					case "last":
						t = ts;
						break; 
					default:
						t = dir;
						break; 
					};	
					var diff = Math.abs(ot-t);
					var speed = diff*options.speed;						
					if(!options.vertical) {
						p = (t*w*1*-1);
						$("ul", obj).animate(
						{ marginLeft: p }, 
						{ queue: false, duration:speed, complete:adjust }
						);				
					} ;
					
					
					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);
			};		
			
			obj.mousewheel(
				function(event, delta) {
					if(delta> 0) {
						animate("prev",true);
					} else {
						animate("next",true);
					}
					return false;
				}
			);
			
			$('div#slider, div#spec').hover(
			function () {
				//alert(123);
				clearTimeout(timeout);
				options.speed = 10;
			},
			function () {
				options.speed = 300;
				timeout = setTimeout(function(){
					animate("next",false);
				},options.pause);
			}
			);
		});
	};
})(jQuery);

