(function($){$.fn.crossFadeCarousel=function(options){var defaults={slides:[],autoplay:true,autotime:7000,loop:true,maxRevolutions:3,currentRevolution:0,intime:600,outtime:400,transition:'swing',navlinks:true,navigation:{id:'carouselnav',parenttag:'ul',childtags:'li',activeclass:'on',leftclass:'endl',rightclass:'endr',injectlocation:'before',pausethenreplay:false},fixtransparentpngs:{set:false,bgcolor:null,bgcss:null},fadebody:{set:false,cssInfo:[]}};var opts=$.extend(true,defaults,options);return this.each(function(){var $self=$(this);$self.position=0;if(opts.slides[0]==undefined){console.log('crossFadeCarousel plugin: no slide elements defined');return;}
if(opts.fadebody.set!=false){if(opts.fadebody.cssInfo.length==0){console.log('crossFadeCarousel plugin: fadebody is set to true, so you need to supply a list of colors to fade the body (one for each slide)');return;}}
if(opts.slides.length>1){$self.slidenum=opts.slides.length-1;if(opts.navlinks)var navstring='<'+opts.navigation.parenttag+'>',controller=$('<div id="'+opts.navigation.id+'"></div>'),navlinks=[];opts.slides.each(function(i,v){if(i!=0)$(v).hide();if(opts.navlinks){if(i==0){navstring+='<'+opts.navigation.childtags+' class="'+opts.navigation.leftclass+'"><a href="#">'+(i+1)+'</a></'+opts.navigation.childtags+'>';}else if(i==$self.slidenum){navstring+='<'+opts.navigation.childtags+' class="'+opts.navigation.rightclass+'"><a href="#">'+(i+1)+'</a></'+opts.navigation.childtags+'>';}else{navstring+='<'+opts.navigation.childtags+'><a href="#">'+(i+1)+'</a></'+opts.navigation.childtags+'>';}}});if(opts.navlinks){navstring+='</'+opts.navigation.parenttag+'>';controller.html(navstring);switch(opts.navigation.injectlocation){case'before':$self.before(controller);break;case'append':$self.append(controller);break;case'prepend':$self.prepend(controller);break;default:$self.after(controller);}
navlinks=$('#'+opts.navigation.id+' a');$(navlinks[0]).addClass(opts.navigation.activeclass);$(navlinks).click(function(){if(opts.autoplay){$self.pause();if(opts.navigation.pausethenreplay){$self.playthrough();}}
$self.to($(this).text());return false;});}
$self.transition=function(stack,from,to){var fromethis=$(stack[from]),tothis=$(stack[to]),flag=0;if(from!=to){fromethis.animate({'opacity':'toggle'},{duration:opts.outtime,easing:opts.transition});tothis.animate({'opacity':'toggle'},{duration:opts.intime,easing:opts.transition,step:function(now,fx){if(fx.prop=='opacity'){if(flag!=1&&now>0){if(opts.fadebody.set!=false&&opts.fadebody.cssInfo.length>0){$('body').animate({'backgroundColor':opts.fadebody.cssInfo[to]},{duration:opts.outtime*0.9,easing:opts.transition});}
flag=1;}}}});}};$self.next=function(){var next=$self.position+1>$self.slidenum?0:$self.position+1;if(opts.loop!=true&&next==$self.slidenum)$self.pause();if(next==0){opts.currentRevolution++;}
if(opts.currentRevolution>=opts.maxRevolutions)$self.pause();$self.transition(opts.slides,$self.position,$self.position=next);$self.changenavstate($self.position);};$self.prev=function(){var prev=$self.position-1<0?$self.slidenum:$self.position-1;$self.transition(opts.slides,$self.position,$self.position=prev);$self.changenavstate($self.position);};$self.to=function(n){$self.transition(opts.slides,$self.position,$self.position=(n-1));$self.changenavstate(n-1);};$self.playthrough=function(){$self.interval=window.setInterval(function(){$self.next();},opts.autotime);};$self.pause=function(){$self.interval=window.clearInterval($self.interval);$self.changenavstate($self.position);};$self.fixpngs=function(){if(opts.fixtransparentpngs.set!=false){if(window.XMLHttpRequest&&document.all){$self.pngs=$(opts.slides).find('img[src$=.png]').toArray();if(opts.fixtransparentpngs.bgcss!=null){$self.pngs=$self.pngs.concat($(opts.fixtransparentpngs.bgcss).toArray());}
if(opts.fixtransparentpngs.bgcolor!=null){$.each($self.pngs,function(i,p){$(p).css('backgroundColor',opts.fixtransparentpngs.bgcolor);})}else{$.each($self.pngs,function(i,p){if($(p).attr('src')!=undefined){$(p).css('filter','progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+$(p).attr('src')+'\')');}});}}}};$self.changenavstate=function(n){if(opts.navlinks){$(navlinks).removeClass(opts.navigation.activeclass);$(navlinks[n]).addClass(opts.navigation.activeclass);}};if(opts.autoplay!=false)$self.playthrough();$self.fixpngs();}});};})(jQuery)
