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