(function($) {
$.fn.easySlider = function(options){var defaults = {nextId: 'nextBtn',prevId: 'prevBtn',prevText: '<span>Previous</span>',nextText: '<span>Next</span>',orientation: '',speed: 600,autoplayDuration: 8000,restartDuration: 8000,hoverPause: 0,pauseable: false,pauseButtons: false,beforeTransition: null,afterTransition: null,loop: true, autogeneratePagination: true, hover: false, easing: 'linear'};
var options = $.extend(defaults, options);
return this.each(function() {var obj = $(this),totalSlides = $("li", obj).length,slideWidth = obj.width(),slideHeight = obj.height(),lastSlide = totalSlides-1,current = 0;var vertical = (options.orientation == 'vertical'),fade = (options.orientation == 'fade'),horizontal = (!vertical && !fade),autogen = options.autogeneratePagination, pauseable = options.pauseable,loop = options.loop,speed = options.speed,easing = options.easing,hover = options.hover,hoverPause = options.hoverPause,buttonsPause = options.pauseButtons,restartDuration = options.restartDuration,autoplayDuration = Math.max(options.autoplayDuration,25)+speed,autoplay = (options.autoplayDuration > 0),beforeTransition = options.beforeTransition,afterTransition = options.afterTransition; interval = null, restart = null;      
if (autogen) {$(obj).after( '<span id="'+options.prevId+'"><a href=\"javascript:void(0);\">'+options.prevText+'</a></span> '+'<span id="'+options.nextId+'"><a href=\"javascript:void(0);\">'+options.nextText+'</a></span>');}
var $ul   = $("ul", obj),$next = $("#"+options.nextId),$prev = $("#"+options.prevId);
if (loop) {$ul.append( $("li:first", obj).clone() );totalSlides += 1;lastSlide += 1;}
if (horizontal) {$("li", obj).css('float','left');$ul.css('width', totalSlides * slideWidth);}
if (fade) {$ul.find("li:not(:first)").hide();}
var pauseFunc = function() {clearInterval(interval);clearTimeout(restart);}
var restartFunc = function() {restart = setTimeout(function() {interval = setInterval(auto, autoplayDuration);}, restartDuration);};
if ( pauseable && autoplay ) {$(obj).hover(pauseFunc, restartFunc);if ( buttonsPause ) {$next.hover(pauseFunc, restartFunc);$prev.hover(pauseFunc, restartFunc);}}
if ( !hover ) {$next.click(function(){if (autoplay) {pauseFunc();if ( !buttonsPause ) {restartFunc();}};animate("next");});$prev.click(function(){if (autoplay) {pauseFunc();if ( !buttonsPause ) {restartFunc();}};animate("prev");});} 
else {var hoverNext = false,hoverPrev = false,isAnimating = false;$next.hover(function() {var tfunc = arguments.callee;hoverNext = true;if ( !isAnimating ) {isAnimating = true;animate("next", function() {isAnimating = false;if ( hoverNext ) { tfunc(); }});}},function() {hoverNext = false;});$prev.hover(function() {var tfunc = arguments.callee;hoverPrev = true;if ( !isAnimating ) {isAnimating = true;animate("prev", function() {isAnimating = false;if ( hoverPrev ) { tfunc(); }});}},function() {hoverPrev = false;});}
function animate(dir, cb) {if ( beforeTransition ) {beforeTransition( current, $ul.find('li:eq('+current+')'), $ul );}
var newcb = function() {if ( cb != null ) {( hoverPause == 0 ) ? cb() : setTimeout(cb, hoverPause);}if ( afterTransition ) {afterTransition( current, $ul.find('li:eq('+current+')'), $ul );}}
var cur = current;if ( loop ) {if ( dir == 'next' ) {current = (current==lastSlide) ? 1 : current+1;} else {current = (current==0) ? lastSlide-1 : current-1;}} else {if (dir == "next") {current = (current>=lastSlide) ? lastSlide : current+1;} else {current = (current<=0) ? 0 : current-1;}}
var nex = current;
if ( loop ) {if ( (dir == "next") && (cur == lastSlide) ) {(vertical) ? $ul.animate({marginTop:0}, -1) : $ul.animate({marginLeft:0}, -1);} else if ( (dir == "prev") && (cur == 0) ) {(vertical) ? $ul.animate({marginTop:(totalSlides-1)*slideHeight*-1}, -1) : $ul.animate({marginLeft:(totalSlides-1)*slideWidth*-1}, -1);}}
if ( horizontal ) { $ul.animate( { marginLeft: (nex*slideWidth*-1)  }, speed, easing, newcb );} else if ( vertical ) { $ul.animate( { marginTop:  (nex*slideHeight*-1) }, speed, easing, newcb );} else {var curli = 'li:eq(' + cur + ')'; var nexli = 'li:eq(' + nex + ')'; $ul.find(curli).fadeOut("slow", function() { $ul.find(nexli).fadeIn("slow", newcb); }); }
if ( !loop ) { if ( nex <= 0 ) {$prev.fadeOut();} else if ( nex >= lastSlide ) {$next.fadeOut();} else {$next.fadeIn();$prev.fadeIn();}}};
if ( autoplay ) { var auto = function() { animate('next'); if ( !loop && current>=lastSlide ) { clearInterval(interval); } } 
restart = setTimeout(function() { auto(); interval = setInterval(auto, autoplayDuration); }, autoplayDuration-speed);} $next.hide(); $prev.hide(); if (totalSlides>1) {$next.fadeIn();if(loop) { $prev.fadeIn(); }}});};})(jQuery);
