/**
 * Copyright (c) 2010 Anders Ekdahl (http://coffeescripter.com/)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Version: 1.2.4
 *
 * Demo and documentation: http://coffeescripter.com/code/ad-gallery/
 */
(function(a){function h(a,b){this.init(a,b)}function g(a,b){this.init(a,b)}function f(a,b,c){a.css("opacity",0);return{old_image:{opacity:0},new_image:{opacity:1},speed:0}}function e(a,b,c){a.css("opacity",0);return{old_image:{opacity:0},new_image:{opacity:1}}}function d(a,b,c){var d=a.width(),e=a.height(),f=parseInt(a.css("left"),10),g=parseInt(a.css("top"),10);a.css({width:0,height:0,top:this.image_wrapper_height/2,left:this.image_wrapper_width/2});return{old_image:{width:0,height:0,top:this.image_wrapper_height/2,left:this.image_wrapper_width/2},new_image:{width:d,height:e,top:g,left:f}}}function c(a,b,c){var d=parseInt(a.css("left"),10);if(b=="left"){var e="-"+this.image_wrapper_width+"px";a.css("left",this.image_wrapper_width+"px")}else{var e=this.image_wrapper_width+"px";a.css("left","-"+this.image_wrapper_width+"px")}c&&(c.css("bottom","-"+c[0].offsetHeight+"px"),c.animate({bottom:0},this.settings.animation_speed*2)),this.current_description&&this.current_description.animate({bottom:"-"+this.current_description[0].offsetHeight+"px"},this.settings.animation_speed*2);return{old_image:{left:e},new_image:{left:d}}}function b(a,b,c){var d=parseInt(a.css("top"),10);if(b=="left"){var e="-"+this.image_wrapper_height+"px";a.css("top",this.image_wrapper_height+"px")}else{var e=this.image_wrapper_height+"px";a.css("top","-"+this.image_wrapper_height+"px")}c&&(c.css("bottom","-"+c[0].offsetHeight+"px"),c.animate({bottom:0},this.settings.animation_speed*2)),this.current_description&&this.current_description.animate({bottom:"-"+this.current_description[0].offsetHeight+"px"},this.settings.animation_speed*2);return{old_image:{top:e},new_image:{top:d}}}a.fn.adGallery=function(b){var c={loader_image:"/assets/ad-gallery/loader.gif",start_at_index:0,description_wrapper:!1,thumb_opacity:.7,animate_first_image:!1,animation_speed:400,width:!1,height:!1,display_next_and_prev:!0,display_back_and_forward:!0,scroll_jump:0,slideshow:{enable:!0,autostart:!1,speed:5e3,start_label:"Start",stop_label:"Stop",stop_on_scroll:!0,countdown_prefix:"(",countdown_sufix:")",onStart:!1,onStop:!1},effect:"slide-hori",enable_keyboard_move:!0,cycle:!0,callbacks:{init:!1,afterImageVisible:!1,beforeImageVisible:!1}},d=a.extend(!1,c,b);b&&b.slideshow&&(d.slideshow=a.extend(!1,c.slideshow,b.slideshow)),d.slideshow.enable||(d.slideshow.autostart=!1);var e=[];a(this).each(function(){var a=new g(this,d);e[e.length]=a});return e},g.prototype={wrapper:!1,image_wrapper:!1,gallery_info:!1,nav:!1,loader:!1,preloads:!1,thumbs_wrapper:!1,scroll_back:!1,scroll_forward:!1,next_link:!1,prev_link:!1,slideshow:!1,image_wrapper_width:0,image_wrapper_height:0,current_index:0,current_image:!1,current_description:!1,nav_display_width:0,settings:!1,images:!1,in_transition:!1,animations:!1,init:function(b,c){var d=this;this.wrapper=a(b),this.settings=c,this.setupElements(),this.setupAnimations(),this.settings.width?(this.image_wrapper_width=this.settings.width,this.image_wrapper.width(this.settings.width),this.wrapper.width(this.settings.width)):this.image_wrapper_width=this.image_wrapper.width(),this.settings.height?(this.image_wrapper_height=this.settings.height,this.image_wrapper.height(this.settings.height)):this.image_wrapper_height=this.image_wrapper.height(),this.nav_display_width=this.nav.width(),this.current_index=0,this.current_image=!1,this.current_description=!1,this.in_transition=!1,this.findImages(),this.settings.display_next_and_prev&&this.initNextAndPrev();var e=function(a){return d.nextImage(a)};this.slideshow=new h(e,this.settings.slideshow),this.controls.append(this.slideshow.create()),this.settings.slideshow.enable?this.slideshow.enable():this.slideshow.disable(),this.settings.display_back_and_forward&&this.initBackAndForward(),this.settings.enable_keyboard_move&&this.initKeyEvents();var f=parseInt(this.settings.start_at_index,10);window.location.hash&&window.location.hash.indexOf("#ad-image")===0&&(f=window.location.hash.replace(/[^0-9]+/g,""),f*1!=f&&(f=this.settings.start_at_index)),this.loading(!0),this.showImage(f,function(){d.settings.slideshow.autostart&&(d.preloadImage(f+1),d.slideshow.start())}),this.fireCallback(this.settings.callbacks.init)},setupAnimations:function(){this.animations={"slide-vert":b,"slide-hori":c,resize:d,fade:e,none:f}},setupElements:function(){this.controls=this.wrapper.find(".ad-controls"),this.gallery_info=a('<p class="ad-info"></p>'),this.controls.append(this.gallery_info),this.image_wrapper=this.wrapper.find(".ad-image-wrapper"),this.image_wrapper.empty(),this.nav=this.wrapper.find(".ad-nav"),this.thumbs_wrapper=this.nav.find(".ad-thumbs"),this.preloads=a('<div class="ad-preloads"></div>'),this.loader=a('<img class="ad-loader" src="'+this.settings.loader_image+'">'),this.image_wrapper.append(this.loader),this.loader.hide(),a(document.body).append(this.preloads)},loading:function(a){a?this.loader.show():this.loader.hide()},addAnimation:function(b,c){a.isFunction(c)&&(this.animations[b]=c)},findImages:function(){var b=this;this.images=[];var c=0,d=0,e=this.thumbs_wrapper.find("a"),f=e.length;this.settings.thumb_opacity<1&&e.find("img").css("opacity",this.settings.thumb_opacity),e.each(function(e){var f=a(this),g=f.attr("href"),h=f.find("img");b.isImageLoaded(h[0])?(c+=h[0].parentNode.parentNode.offsetWidth,d++):h.load(function(){c+=this.parentNode.parentNode.offsetWidth,d++}),f.addClass("ad-thumb"+e),f.click(function(){b.showImage(e),b.slideshow.stop();return!1}).hover(function(){!a(this).is(".ad-active")&&b.settings.thumb_opacity<1&&a(this).find("img").fadeTo(300,1),b.preloadImage(e)},function(){!a(this).is(".ad-active")&&b.settings.thumb_opacity<1&&a(this).find("img").fadeTo(300,b.settings.thumb_opacity)});var f=!1;h.data("ad-link")?f=h.data("ad-link"):h.attr("longdesc")&&h.attr("longdesc").length&&(f=h.attr("longdesc"));var i=!1;h.data("ad-desc")?i=h.data("ad-desc"):h.attr("alt")&&h.attr("alt").length&&(i=h.attr("alt"));var j=!1;h.data("ad-title")?j=h.data("ad-title"):h.attr("title")&&h.attr("title").length&&(j=h.attr("title")),b.images[e]={thumb:h.attr("src"),image:g,error:!1,preloaded:!1,desc:i,title:j,size:!1,link:f}});var g=setInterval(function(){if(f==d){c-=100;var a=b.nav.find(".ad-thumb-list");a.css("width",c+"px");var e=1,h=a.height();while(e<201){a.css("width",c+e+"px");if(h!=a.height())break;h=a.height(),e++}clearInterval(g)}},100)},initKeyEvents:function(){var b=this;a(document).keydown(function(a){a.keyCode==39?(b.nextImage(),b.slideshow.stop()):a.keyCode==37&&(b.prevImage(),b.slideshow.stop())})},initNextAndPrev:function(){this.next_link=a('<div class="ad-next"><div class="ad-next-image"></div></div>'),this.prev_link=a('<div class="ad-prev"><div class="ad-prev-image"></div></div>'),this.image_wrapper.append(this.next_link),this.image_wrapper.append(this.prev_link);var b=this;this.prev_link.add(this.next_link).mouseover(function(c){a(this).css("height",b.image_wrapper_height),a(this).find("div").show()}).mouseout(function(b){a(this).find("div").hide()}).click(function(){a(this).is(".ad-next")?(b.nextImage(),b.slideshow.stop()):(b.prevImage(),b.slideshow.stop())}).find("div").css("opacity",.7)},initBackAndForward:function(){var b=this;this.scroll_forward=a('<div class="ad-forward"></div>'),this.scroll_back=a('<div class="ad-back"></div>'),this.nav.append(this.scroll_forward),this.nav.prepend(this.scroll_back);var c=0,d=!1;a(this.scroll_back).add(this.scroll_forward).click(function(){var c=b.nav_display_width-50;if(b.settings.scroll_jump>0)var c=b.settings.scroll_jump;if(a(this).is(".ad-forward"))var d=b.thumbs_wrapper.scrollLeft()+c;else var d=b.thumbs_wrapper.scrollLeft()-c;b.settings.slideshow.stop_on_scroll&&b.slideshow.stop(),b.thumbs_wrapper.animate({scrollLeft:d+"px"});return!1}).css("opacity",.6).hover(function(){var e="left";a(this).is(".ad-forward")&&(e="right"),d=setInterval(function(){c++,c>30&&b.settings.slideshow.stop_on_scroll&&b.slideshow.stop();var a=b.thumbs_wrapper.scrollLeft()+1;e=="left"&&(a=b.thumbs_wrapper.scrollLeft()-1),b.thumbs_wrapper.scrollLeft(a)},10),a(this).css("opacity",1)},function(){c=0,clearInterval(d),a(this).css("opacity",.6)})},_afterShow:function(){this.gallery_info.html(this.current_index+1+" / "+this.images.length),this.settings.cycle||(this.prev_link.show().css("height",this.image_wrapper_height),this.next_link.show().css("height",this.image_wrapper_height),this.current_index==this.images.length-1&&this.next_link.hide(),this.current_index==0&&this.prev_link.hide()),this.fireCallback(this.settings.callbacks.afterImageVisible)},_getContainedImageSize:function(a,b){if(b>this.image_wrapper_height){var c=a/b;b=this.image_wrapper_height,a=this.image_wrapper_height*c}if(a>this.image_wrapper_width){var c=b/a;a=this.image_wrapper_width,b=this.image_wrapper_width*c}return{width:a,height:b}},_centerImage:function(a,b,c){a.css("top","0px");if(c<this.image_wrapper_height){var d=this.image_wrapper_height-c;a.css("top",d/2+"px")}a.css("left","0px");if(b<this.image_wrapper_width){var d=this.image_wrapper_width-b;a.css("left",d/2+"px")}},_getDescription:function(b){var c=!1;if(b.desc.length||b.title.length){var d="";b.title.length&&(d='<strong class="ad-description-title">'+b.title+"</strong>");var c="";b.desc.length&&(c="<span>"+b.desc+"</span>"),c=a('<p class="ad-image-description">'+d+c+"</p>")}return c},showImage:function(a,b){if(this.images[a]&&!this.in_transition){var c=this,d=this.images[a];this.in_transition=!0,d.preloaded?this._showWhenLoaded(a,b):(this.loading(!0),this.preloadImage(a,function(){c.loading(!1),c._showWhenLoaded(a,b)}))}},_showWhenLoaded:function(b,c){if(this.images[b]){var d=this,e=this.images[b],f=a(document.createElement("div")).addClass("ad-image"),g=a(new Image).attr("src",e.image);if(e.link){var h=a('<a href="'+e.link+'"></a>');h.append(g),f.append(h)}else f.append(g);this.image_wrapper.prepend(f);var i=this._getContainedImageSize(e.size.width,e.size.height);g.attr("width",i.width),g.attr("height",i.height),f.css({width:i.width+"px",height:i.height+"px"}),this._centerImage(f,i.width,i.height);var j=this._getDescription(e,f);if(j)if(!this.settings.description_wrapper){f.append(j);var k=i.width-parseInt(j.css("padding-left"),10)-parseInt(j.css("padding-right"),10);j.css("width",k+"px")}else this.settings.description_wrapper.append(j);this.highLightThumb(this.nav.find(".ad-thumb"+b));var l="right";this.current_index<b&&(l="left"),this.fireCallback(this.settings.callbacks.beforeImageVisible);if(this.current_image||this.settings.animate_first_image){var m=this.settings.animation_speed,n="swing",o=this.animations[this.settings.effect].call(this,f,l,j);typeof o.speed!="undefined"&&(m=o.speed),typeof o.easing!="undefined"&&(n=o.easing);if(this.current_image){var p=this.current_image,q=this.current_description;p.animate(o.old_image,m,n,function(){p.remove(),q&&q.remove()})}f.animate(o.new_image,m,n,function(){d.current_index=b,d.current_image=f,d.current_description=j,d.in_transition=!1,d._afterShow(),d.fireCallback(c)})}else this.current_index=b,this.current_image=f,d.current_description=j,this.in_transition=!1,d._afterShow(),this.fireCallback(c)}},nextIndex:function(){if(this.current_index==this.images.length-1){if(!this.settings.cycle)return!1;var a=0}else var a=this.current_index+1;return a},nextImage:function(a){var b=this.nextIndex();if(b===!1)return!1;this.preloadImage(b+1),this.showImage(b,a);return!0},prevIndex:function(){if(this.current_index==0){if(!this.settings.cycle)return!1;var a=this.images.length-1}else var a=this.current_index-1;return a},prevImage:function(a){var b=this.prevIndex();if(b===!1)return!1;this.preloadImage(b-1),this.showImage(b,a);return!0},preloadAll:function(){function c(){b<a.images.length&&(b++,a.preloadImage(b,c))}var a=this,b=0;a.preloadImage(b,c)},preloadImage:function(b,c){if(this.images[b]){var d=this.images[b];if(!this.images[b].preloaded){var e=a(new Image);e.attr("src",d.image);if(!this.isImageLoaded(e[0])){this.preloads.append(e);var f=this;e.load(function(){d.preloaded=!0,d.size={width:this.width,height:this.height},f.fireCallback(c)}).error(function(){d.error=!0,d.preloaded=!1,d.size=!1})}else d.preloaded=!0,d.size={width:e[0].width,height:e[0].height},this.fireCallback(c)}else this.fireCallback(c)}},isImageLoaded:function(a){if(typeof a.complete!="undefined"&&!a.complete)return!1;if(typeof a.naturalWidth!="undefined"&&a.naturalWidth==0)return!1;return!0},highLightThumb:function(a){this.thumbs_wrapper.find(".ad-active").removeClass("ad-active"),a.addClass("ad-active"),this.settings.thumb_opacity<1&&(this.thumbs_wrapper.find("a:not(.ad-active) img").fadeTo(300,this.settings.thumb_opacity),a.find("img").fadeTo(300,1));var b=a[0].parentNode.offsetLeft;b-=this.nav_display_width/2-a[0].offsetWidth/2,this.thumbs_wrapper.animate({scrollLeft:b+"px"})},fireCallback:function(b){a.isFunction(b)&&b.call(this)}},h.prototype={start_link:!1,stop_link:!1,countdown:!1,controls:!1,settings:!1,nextimage_callback:!1,enabled:!1,running:!1,countdown_interval:!1,init:function(a,b){var c=this;this.nextimage_callback=a,this.settings=b},create:function(){this.start_link=a('<span class="ad-slideshow-start">'+this.settings.start_label+"</span>"),this.stop_link=a('<span class="ad-slideshow-stop">'+this.settings.stop_label+"</span>"),this.countdown=a('<span class="ad-slideshow-countdown"></span>'),this.controls=a('<div class="ad-slideshow-controls"></div>'),this.controls.append(this.start_link).append(this.stop_link).append(this.countdown),this.countdown.hide();var b=this;this.start_link.click(function(){b.start()}),this.stop_link.click(function(){b.stop()}),a(document).keydown(function(a){a.keyCode==83&&(b.running?b.stop():b.start())});return this.controls},disable:function(){this.enabled=!1,this.stop(),this.controls.hide()},enable:function(){this.enabled=!0,this.controls.show()},toggle:function(){this.enabled?this.disable():this.enable()},start:function(){if(this.running||!this.enabled)return!1;var a=this;this.running=!0,this.controls.addClass("ad-slideshow-running"),this._next(),this.fireCallback(this.settings.onStart);return!0},stop:function(){if(!this.running)return!1;this.running=!1,this.countdown.hide(),this.controls.removeClass("ad-slideshow-running"),clearInterval(this.countdown_interval),this.fireCallback(this.settings.onStop);return!0},_next:function(){var a=this,b=this.settings.countdown_prefix,c=this.settings.countdown_sufix;clearInterval(a.countdown_interval),this.countdown.show().html(b+this.settings.speed/1e3+c);var d=0;this.countdown_interval=setInterval(function(){d+=1e3;if(d>=a.settings.speed){var e=function(){a.running&&a._next(),d=0};a.nextimage_callback(e)||a.stop(),d=0}var f=parseInt(a.countdown.text().replace(/[^0-9]/g,""),10);f--,f>0&&a.countdown.html(b+f+c)},1e3)},fireCallback:function(b){a.isFunction(b)&&b.call(this)}}})(jQuery)
