// jQuery billboard v0.3
// 2011-11-22, jens scherbl, webninjas.net
// http://creativecommons.org/licenses/by-sa/3.0/

(function($){var methods={init:function(options){return this.each(function(){var container=$(this);var items=container.children();var nav=$(options?options.nav:null);var settings={effect:'show',auto:true,random:false,speed:400,delay:2000};if(options){$.extend(settings,options);}
container.data('billboard',settings);settings.index=settings.random?Math.floor(Math.random()*items.length):0;if(items.length>1){items.hide();nav.children().removeClass('active');items.eq(settings.index).show();nav.children().eq(settings.index).addClass('active');if(settings.auto){container.mouseenter(function(){clearTimeout(settings.timeout);settings.timeout=null;});container.mouseleave(function(){settings.timeout=setTimeout(function(){container.billboard('next');},settings.delay);});nav.mouseenter(function(){clearTimeout(settings.timeout);settings.timeout=null;});settings.timeout=setTimeout(function(){container.billboard('next');},settings.delay);}}});},next:function(){return this.each(function(){var container=$(this);var items=container.children();var settings=container.data('billboard');var nav=$(settings.nav).children();var current=settings.index;var next;clearTimeout(settings.timeout);if(items.length>1){if(settings.random){do{next=Math.floor(Math.random()*items.length);}while(next==current);}else{next=current+1<items.length?current+1:0;}
settings.index=next;nav.removeClass('active');nav.eq(next).addClass('active');container.billboard(settings.effect,current,next,function(){if(settings.auto&&settings.timeout){settings.timeout=setTimeout(function(){container.billboard('next');},settings.delay);}});}});},prev:function(){return this.each(function(){var container=$(this);var items=container.children();var settings=container.data('billboard');var nav=$(settings.nav).children();var current=settings.index;var effect;var next;clearTimeout(settings.timeout);if(items.length>1){next=current-1>=0?current-1:items.length-1;settings.index=next;nav.removeClass('active');nav.eq(next).addClass('active');switch(settings.effect){case'up':effect='down';break;case'down':effect='up';break;case'left':effect='right';break;case'right':effect='left';break;default:effect=settings.effect;break;}
container.billboard(effect,current,next,function(){if(settings.auto&&settings.timeout){settings.timeout=setTimeout(function(){container.billboard('next');},settings.delay);}});}});},stop:function(next){return this.each(function(){var container=$(this);var items=container.children();var settings=container.data('billboard');var nav=$(settings.nav).children();var current=settings.index;next=next-1;clearTimeout(settings.timeout);if(items.length>1&&next<items.length&&next!=current){settings.index=next;if(nav){nav.each(function(){$(this).removeClass('active');});nav.eq(next).addClass('active');}
container.billboard(settings.effect,current,next);}});},show:function(current,next,callback){return this.each(function(){var container=$(this);var items=container.children();items.eq(current).hide();items.eq(next).show();if(callback){callback();}});},fade:function(current,next,callback){return this.each(function(){var container=$(this);var items=container.children();var settings=container.data('billboard');items.eq(current).fadeOut(settings.speed);items.eq(next).fadeIn(settings.speed,callback);});},up:function(current,next,callback){return this.each(function(){var container=$(this);var items=container.children();var settings=container.data('billboard');var height=container.height();items.eq(current).stop().css({top:'0px'}).animate({top:'-'+height+'px'},settings.speed);items.eq(next).stop().css({top:height+'px'}).show().animate({top:'0px'},settings.speed,callback);});},down:function(current,next,callback){return this.each(function(){var container=$(this);var items=container.children();var settings=container.data('billboard');var height=container.height();items.eq(current).stop().css({top:'0px'}).animate({top:height+'px'},settings.speed);items.eq(next).stop().css({top:'-'+height+'px'}).show().animate({top:'0px'},settings.speed,callback);});},left:function(current,next,callback){return this.each(function(){var container=$(this);var items=container.children();var settings=container.data('billboard');var width=container.width();items.eq(current).stop().css({left:'0px'}).animate({left:'-'+width+'px'},settings.speed);items.eq(next).stop().css({left:width+'px'}).show().animate({left:'0px'},settings.speed,callback);});},right:function(current,next,callback){return this.each(function(){var container=$(this);var items=container.children();var settings=container.data('billboard');var width=container.width();items.eq(current).stop().css({left:'0px'}).animate({left:width+'px'},settings.speed);items.eq(next).stop().css({left:'-'+width+'px'}).show().animate({left:'0px'},settings.speed,callback);});}};$.fn.billboard=function(method){if(methods[method]){return methods[method].apply(this,Array.prototype.slice.call(arguments,1));}else if(typeof method==='object'||!method){return methods.init.apply(this,arguments);}else{$.error('Method '+method+' does not exist on jQuery.billboard');}};})(jQuery);
