(function(b){function a(f,d){this.options=d;b(f).addClass("thumbs");this.cap_offset=-(this.options.caption_height+2*this.options.viewport_padding+2*this.options.caption_padding);this.cap_width=(this.options.viewport_width-2*this.options.viewport_padding-2*this.options.caption_padding);this.cap_height=(this.options.caption_height-2*this.options.viewport_padding-2*this.options.caption_padding);this.vp_width=(this.options.viewport_width-2*this.options.viewport_padding);this.vp_height=(this.options.viewport_height-2*this.options.viewport_padding);var e='<div class="slideshow" style="width:'+this.options.viewport_width+"px;padding:"+this.options.slideshow_padding+'px"/>';var c='<div class="viewport" style="width:'+this.vp_width+"px;height:"+this.vp_height+"px;padding:"+this.options.viewport_padding+'px"/>';this.slideshow=b(f).wrapAll(e).parent().prepend(c);this.viewport=this.slideshow.find("div.viewport");this.thumb_list=this.slideshow.find("ul.thumbs");this.thumb_links=this.thumb_list.find("a");this.thumb_imgs=this.thumb_list.find("img");this.projectorInit();this.loaderInit();this.supervisorInit();this.uiInit();this.showImage(0);this.uiStart();this.supervisorStart();if(this.options.auto_load_immediately){this.startAutoLoader()}}a.prototype.uiInit=function(){this.thumb_imgs.fadeTo(500,0.4);this.thumb_links.click(function(d){d.preventDefault()});if(!this.options.show_thumbs){this.thumb_list.hide()}this.nav=false;if(this.options.show_nav){var c='<div class="nav" style="display:none"><div><a href="#" class="prev"><img src="'+this.options.base_url+'img/prev.gif"/></a>';if(this.options.timeout>0){c+='<a href="#" class="play"><img src="'+this.options.base_url+'img/play.gif"/></a><a href="#" class="pause"><img src="'+this.options.base_url+'img/pause.gif"/></a>'}c+='<a href="#" class="next"><img src="'+this.options.base_url+'img/next.gif"/></a></div></div>';this.viewport.after(c);this.nav=this.slideshow.find("div.nav");this.pause_link=false;this.play_link=false}};a.prototype.uiStart=function(){if(this.nav){if(this.options.timeout>0){this.pause_link=this.nav.find("a.pause").click((function(c){return function(d){d.preventDefault();c.startAutoLoader();c.userRequestPause()}})(this));this.play_link=this.nav.find("a.play").click((function(c){return function(d){d.preventDefault();c.startAutoLoader();c.userRequestPlay()}})(this));if(this.options.paused){this.userRequestPause()}else{this.userRequestPlay()}}this.nav.find("a.next").click((function(c){return function(d){d.preventDefault();c.startAutoLoader();c.userRequestNextImage()}})(this));this.nav.find("a.prev").click((function(c){return function(d){d.preventDefault();c.startAutoLoader();c.userRequestPrevImage()}})(this));this.nav.show()}this.thumb_imgs.first().fadeTo(500,1).addClass("active")};a.prototype.loaderInit=function(){this.waiting=new Array();this.loading=new Array();this.num_images=0;this.loader_request=-1;this.loader_started=false;this.thumb_links.each(b.proxy(function(){this.waiting[this.num_images]=this.num_images;var c='<div style="visibility:hidden;width:'+this.options.viewport_width+"px;height:"+this.vp_height+'px"/>';this.viewport.append(c);this.num_images+=1},this));this.viewport_divs=this.viewport.find("div:not(.title)")};a.prototype.loadImage=function(d){var g=false;var f=b.inArray(d,this.waiting);if(f!=-1){this.loading.push(d);this.waiting.splice(f,1);var m=(function(n,i){return function(){n._loaderLoadDone(i)}})(this,d);var c=this.thumb_links.eq(d);var l=c.find("img");var j=l.attr("title");var h=l.attr("alt");var e=b('<img src="'+c.attr("href")+'" title="'+j+'" alt="'+h+'"/>').one("load",m);this.viewport_divs.eq(d).append(e);if(j.length>0){this.viewport_divs.eq(d).append('<div class="title" style="width:'+this.cap_width+"px;height:"+this.cap_height+"px;padding:"+this.options.caption_padding+"px;left:"+this.options.viewport_padding+"px;bottom:"+this.cap_offset+'px"><h3>'+j+"</h3><p>"+h+"</p></div>")}}else{if(b.inArray(d,this.loading)==-1){g=true}}return g};a.prototype._loaderLoadDone=function(e){var d=this.viewport_divs.eq(e).find("img");var h=d.height();var c=d.width();var g=Math.min(1,this.vp_height/h,this.vp_width/c);h=Math.floor(h*g);c=Math.floor(c*g);d.css({height:h,width:c,top:Math.floor((this.vp_height-h)/2)});this.viewport_divs.eq(e).find("div.title").css({opacity:this.options.caption_opacity});this.thumb_imgs.eq(e).fadeTo(500,1);var f=b.inArray(e,this.loading);if(f!=-1){this.loading.splice(f,1)}this.loadImageDone(e);if(this.loader_request==e){this.loader_request=-1;setTimeout(b.proxy(this.loadNextWaitingImage,this),250)}};a.prototype.loadNextWaitingImage=function(){if(this.waiting.length>0){this.loader_request=this.waiting[0];this.loadImage(this.loader_request)}};a.prototype.startAutoLoader=function(){if(!this.loader_started){this.loader_started=true;this.loadNextWaitingImage()}};a.prototype.projectorInit=function(c){this.cur_image=-1;this.next_image=-1;this.show_queue=new Array()};a.prototype.loadImageDone=function(c){if(this.next_image==c){this._transitionImage()}};a.prototype.showImage=function(c){if(this.next_image==-1){if(c!=this.cur_image){this.next_image=c;if(this.loadImage(c)){this._transitionImage()}}}else{if(c!=this.next_image){this.show_queue.push(c);this.loadImage(c)}}};a.prototype._transitionImage=function(){if(this.cur_image>=0){this.thumb_imgs.eq(this.cur_image).removeClass("active")}this.thumb_imgs.eq(this.next_image).addClass("active");var e=b.proxy(this._transitionPartComplete,this);if(this.cur_image>=0){var d=this.viewport_divs.eq(this.cur_image);this.transitions_parts_remaining=2;if(d.find("div.title").length){this.transitions_parts_remaining+=1;d.find("div.title").animate({bottom:this.cap_offset},this.options.transition_duration/2,"swing",e)}this.viewport_divs.eq(this.cur_image).css({"z-index":1}).fadeOut(this.options.transition_duration,e)}else{this.transitions_parts_remaining=1}var c=this.viewport_divs.eq(this.next_image);if(c.find("div.title").length){this.transitions_parts_remaining+=1;c.find("div.title").animate({bottom:0},this.options.transition_duration/2,"swing",e)}this.viewport_divs.eq(this.next_image).css({display:"none",visibility:"visible","z-index":2}).fadeIn(this.options.transition_duration,e)};a.prototype._transitionPartComplete=function(){this.transitions_parts_remaining-=1;if(this.transitions_parts_remaining<=0){this.cur_image=this.next_image;this.next_image=-1;if(this.show_queue.length>0){this.next_image=this.show_queue.pop();if(this.loadImage(this.cur_image)){this._transitionImage()}}else{this.showImageDone()}}};a.prototype.supervisorInit=function(){this.auto_advance=false;this.user_request=-1;this.show_pending=false};a.prototype.supervisorStart=function(){var c=0;var d=this;this.thumb_links.each(function(){var e=(function(g,f){return function(h){g.startAutoLoader();g.userRequestImage(f)}})(d,c);b(this).click(e);c+=1})};a.prototype.showImageDone=function(){this.user_request=-1;if(this.auto_advance){this._setTimer()}};a.prototype._setTimer=function(){this.timer=setTimeout(b.proxy(this._timerDone,this),this.options.timeout)};a.prototype._clearTimer=function(){clearTimeout(this.timer)};a.prototype._timerDone=function(){this.showImage((this.cur_image+1)%(this.num_images))};a.prototype.userRequestImage=function(c){if((this.user_request>-1)||(c==this.cur_image)){return}this._clearTimer();this.user_request=c;this.showImage(this.user_request)};a.prototype.userRequestNextImage=function(){this.userRequestImage((this.cur_image+1)%(this.num_images))};a.prototype.userRequestPrevImage=function(){this.userRequestImage(((this.cur_image-this.num_images)%this.num_images)+this.num_images-1)};a.prototype.userRequestPause=function(){this.pause_link.hide();this.play_link.show();this.auto_advance=false;this._clearTimer()};a.prototype.userRequestPlay=function(){this.play_link.hide();this.pause_link.show();this.auto_advance=true;if(this.user_request<0){this._setTimer()}};b.fn.simpleslideshow=function(c){var c=b.extend({},b.fn.simpleslideshow.defaults,c);return b(this).each(function(){var d=new a(this,c)})};b.fn.simpleslideshow.defaults={timeout:0,show_nav:true,show_thumbs:true,paused:false,transition_duration:800,viewport_width:240,viewport_height:300,viewport_padding:5,caption_height:80,caption_padding:5,slideshow_padding:8,auto_load_immediately:false,caption_opacity:0.7,base_url:""}})(jQuery);