/*
 *  Enhanced Easy Slider
 *
 *  Built off of the Easy Slider - jQuery plugin
 *  written by Alen Grakalic
 *  http://cssglobe.com/post/3783/jquery-plugin-easy-image-or-content-slider
 *
 *  enhancements by Joseph Pecoraro
 *  email: joepeck02@gmail.com
 *  http://blog.bogojoker.com
 *
 *  The Easy Slider Copyrights:
 *  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
 *
 */

/*
 *  Quick Documentation of New Features
 *
 *    * Non-Autogenerated Pagination - set the autogeneratePagination
 *      option to false in the easySlide options and be sure to provide
 *      id's in the prevId and nextId options.  Those provided ids will
 *      unobtrusively get the easySlide actions applied to them.
 *
 *    * Looping - just set the loop option to true in the easySlide
 *      options and you will be able to navigate forward/backward around
 *      the ends smoothly.
 *
 *    * Autoplay - just set the autoplayDuration to a non-zero value
 *      in the easySlide options and the content will slide on its own.
 *      The value you provide will only be the value between animations,
 *      so you don't have to compensate for the speed of transitions,
 *      that is handled automatically.  Autoplaying works fine with
 *      looping.
 *
 *      If you have pagination buttons, when the user clicks a button
 *      the autoplay will suspend for a little while.  The restartDuration
 *      value specifies the amount of time since the last user
 *      interruption to wait before restarting the autoplay.
 *
 *    * Hovering - just set hover to true and pagination will trigger
 *      when hovering instead of clicking.  The slides will continue to
 *      transition as long as you hover over the pagination element.
 *      Hovering works fine with looping.
 *
 *      If you want a pause between slides you can set the hoverPause
 *      value to an integer greater than 0.  That specifies the time
 *      to wait between transitions.
 *
 *    * Linear or Swing easing - jQuery offers two different styles
 *      of animations.  Just set the easing option to 'linear' or
 *      'swing' (default)and it will use that easing style.
 *
 *    * Pauseable - Pause autoplay by hovering over an image.  Likewise
 *      you can extend this to pause when hovering the buttons as well.
 *
 *    * Fade Orientation - Not Vertical or Horizontal Slideing, but Fading!
 *      Just provide orientation: 'fade' for fading to happen.
 *
 *    * Callbacks - You are allowed to provide your own functions for
 *      events triggered by the slider.  You can provide a function
 *      for 'beforeTransition' and 'afterTransition'.  Their signature
 *      is as follows:
 *
 *          function callback( slideNumber, jQuery_li, jQuery_ul )
 *                                 ^            ^         ^
 *                                 |            |         |
 *     int of the slide number -----            |         |
 *     jQuery wrapper for the now showing <li> --         |
 *     jQuery wrapper for the entire <ul> of all slides ---
 *
 *       For example, to get the explicit DOM <li> Node you could do
 *
 *          function after(num, $li, $ul) {
 *            dom_li = $li[0];
 *            console.log(dom_li);
 *          }
 *
 */
(function($){$.fn.easySlider=function(options){var defaults={prevId:'prevBtn',nextId:'nextBtn',prevText:'',nextText:'',autogeneratePagination:false,orientation:'',speed:800,autoplayDuration:0,restartDuration:2500,loop:false,hoverPause:0,hover:false,easing:null,pauseable:false,pauseButtons:false,beforeTransition:null,afterTransition:null};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);