/**
 * This is a feature rotator for a set of elements.  The rotator will
 * transition between all elements with class 'rotatorpane' that are
 * contained in the element.  No style is given to the individual elements
 * or the container element.
 *
 * @example
 *    jQuery( '#myrotator' ).jfeaturerotator( );
 *
 *    <div id="myrotator">
 *      <div class="rotatorpane">content 1</div>
 *      <div class="rotatorpane">content 2</div>
 *    </div>
 *
 * @param pConfig A set of key/value pairs to set as configuration properties.
 * @cat Plugins/jFeatureRotator
 *
 * @author jhodge
 */


(function($){$.fn.jfeaturerotator=function(pConfig){return this.each(function(){new $.jfeaturerotator(this,pConfig);});};var mDefaults={initialPane:1,fadeTime:2000,fadeInterval:6000,playControl:null,pauseControl:null,nextControl:null,prevControl:null,autoStart:true,callbacks:{play:null,pause:null,next:null,prev:null}};$.jfeaturerotator=function(pContainer,pConfig){this.mOptions=$.extend({},mDefaults,pConfig||{});this.mContainer=pContainer;this.mInterval=null;this.mPanes=$('.rotatorpane',this.mContainer);if(this.mPanes.length==0){alert('No elements of class \'rotatorpane\' found.');return;}
if(this.mOptions.initialPane<1){this.mOptions.initialPane=1;}
if(this.mOptions.initialPane>this.mPanes.length){this.mOptions.initialPane=this.mPanes.length;}
this.mCurrentIndex=this.mOptions.initialPane-1;this.mPanes.eq(this.mCurrentIndex).show();if(this.mPanes.length<=1){jQuery(this.mOptions.pauseControl).hide();jQuery(this.mOptions.playControl).hide();jQuery(this.mOptions.nextControl).hide();jQuery(this.mOptions.prevControl).hide();}
else{if(this.mOptions.pauseControl){jQuery(this.mOptions.pauseControl).bind('click',this,this.pause);}
if(this.mOptions.playControl){jQuery(this.mOptions.playControl).bind('click',this,this.play);}
if(this.mOptions.nextControl){jQuery(this.mOptions.nextControl).bind('click',this,this.next);}
if(this.mOptions.prevControl){jQuery(this.mOptions.prevControl).bind('click',this,this.prev);}
if(this.mOptions.autoStart){this.play({data:this});}}};var $fr=$.jfeaturerotator;$fr.fn=$fr.prototype={jfeaturerotator:'1.0'};$fr.fn.extend=$fr.extend=$.extend;$fr.fn.extend({pause:function(pEvent){var dataObj=pEvent.data;if(dataObj.mInterval!=null){clearInterval(dataObj.mInterval);dataObj.mInterval=null;}
if(dataObj.mOptions.callbacks.play){dataObj.mOptions.callbacks.pause(pEvent.data);}
return false;},play:function(pEvent){var dataObj=pEvent.data;if(dataObj.mInterval==null){dataObj.mInterval=setInterval(function(){dataObj.rotate();},dataObj.mOptions.fadeInterval);}
if(dataObj.mOptions.callbacks.play){dataObj.mOptions.callbacks.play(pEvent.data);}
return false;},next:function(pEvent){var dataObj=pEvent.data;var wasPlaying=dataObj.mInterval!=null;dataObj.pause(pEvent);dataObj.rotate();if(wasPlaying){dataObj.play(pEvent);}
return false;},prev:function(pEvent){var dataObj=pEvent.data;var wasPlaying=dataObj.mInterval!=null;dataObj.pause(pEvent);dataObj.rotate(true);if(wasPlaying){dataObj.play(pEvent);}
return false;},rotate:function(pBackward){var nextIndex=(this.mCurrentIndex+1)%this.mPanes.length;if(pBackward){nextIndex=(this.mCurrentIndex+this.mPanes.length-1)%this.mPanes.length;}
this.mPanes.eq(this.mCurrentIndex).fadeOut(this.mOptions.fadeTime);this.mPanes.eq(nextIndex).fadeIn(this.mOptions.fadeTime);this.mCurrentIndex=nextIndex;}});})(jQuery);