/**
* author Remy Sharp
* url http://remysharp.com/tag/marquee
*/

(function($){$.fn.marquee=function(e){var f=[],last=this.length;function getReset(a,b,c){var d=c.behavior,width=c.width,dir=c.dir;var r=0;if(d=='alternate'){r=a==1?b[c.widthAxis]-(width*2):width}else if(d=='slide'){if(a==-1){r=dir==-1?b[c.widthAxis]:width}else{r=dir==-1?b[c.widthAxis]-(width*2):0}}else{r=a==-1?b[c.widthAxis]:0}return r}function animateMarquee(){var i=f.length,marqueeRedux=null,$marqueeRedux=null,marqueeState={},newMarqueeList=[],hitedge=false;while(i--){marqueeRedux=f[i];$marqueeRedux=$(marqueeRedux);marqueeState=$marqueeRedux.data('marqueeState');if($marqueeRedux.data('paused')!==true){marqueeRedux[marqueeState.axis]+=(marqueeState.scrollamount*marqueeState.dir);hitedge=marqueeState.dir==-1?marqueeRedux[marqueeState.axis]<=getReset(marqueeState.dir*-1,marqueeRedux,marqueeState):marqueeRedux[marqueeState.axis]>=getReset(marqueeState.dir*-1,marqueeRedux,marqueeState);if((marqueeState.behavior=='scroll'&&marqueeState.last==marqueeRedux[marqueeState.axis])||(marqueeState.behavior=='alternate'&&hitedge&&marqueeState.last!=-1)||(marqueeState.behavior=='slide'&&hitedge&&marqueeState.last!=-1)){if(marqueeState.behavior=='alternate'){marqueeState.dir*=-1}marqueeState.last=-1;$marqueeRedux.trigger('stop');marqueeState.loops--;if(marqueeState.loops===0){if(marqueeState.behavior!='slide'){marqueeRedux[marqueeState.axis]=getReset(marqueeState.dir,marqueeRedux,marqueeState)}else{marqueeRedux[marqueeState.axis]=getReset(marqueeState.dir*-1,marqueeRedux,marqueeState)}$marqueeRedux.trigger('end')}else{newMarqueeList.push(marqueeRedux);$marqueeRedux.trigger('start');marqueeRedux[marqueeState.axis]=getReset(marqueeState.dir,marqueeRedux,marqueeState)}}else{newMarqueeList.push(marqueeRedux)}marqueeState.last=marqueeRedux[marqueeState.axis];$marqueeRedux.data('marqueeState',marqueeState)}else{newMarqueeList.push(marqueeRedux)}}f=newMarqueeList;if(f.length){setTimeout(animateMarquee,25)}}this.each(function(i){var a=$(this),width=a.attr('width')||a.width(),height=a.attr('height')||a.height(),$marqueeRedux=a.after('<div '+(e?'class="'+e+'" ':'')+'style="display: block-inline; width: '+width+'px; height: '+height+'px; overflow: hidden;"><div style="float: left; white-space: nowrap;">'+a.html()+'</div></div>').next(),marqueeRedux=$marqueeRedux.get(0),hitedge=0,direction=(a.attr('direction')||'left').toLowerCase(),marqueeState={dir:/down|right/.test(direction)?-1:1,axis:/left|right/.test(direction)?'scrollLeft':'scrollTop',widthAxis:/left|right/.test(direction)?'scrollWidth':'scrollHeight',last:-1,loops:a.attr('loop')||-1,scrollamount:a.attr('scrollamount')||this.scrollAmount||2,behavior:(a.attr('behavior')||'scroll').toLowerCase(),width:/left|right/.test(direction)?width:height};if(a.attr('loop')==-1&&marqueeState.behavior=='slide'){marqueeState.loops=1}a.remove();if(/left|right/.test(direction)){$marqueeRedux.find('> div').css('padding','0 '+width+'px')}else{$marqueeRedux.find('> div').css('padding',height+'px 0')}$marqueeRedux.bind('stop',function(){$marqueeRedux.data('paused',true)}).bind('pause',function(){$marqueeRedux.data('paused',true)}).bind('start',function(){$marqueeRedux.data('paused',false)}).bind('unpause',function(){$marqueeRedux.data('paused',false)}).data('marqueeState',marqueeState);f.push(marqueeRedux);marqueeRedux[marqueeState.axis]=getReset(marqueeState.dir,marqueeRedux,marqueeState);$marqueeRedux.trigger('start');if(i+1==last){animateMarquee()}});return $(f)}}(jQuery));