/*
 * Galleria v 1.2 prerelease 1.1 2010-11-23
 * http://galleria.aino.se
 *
 * Copyright (c) 2010, Aino
 * Licensed under the MIT license.
 */

(function($){var undef,window=this,doc=document,$doc=$(doc);var DEBUG=false,NAV=navigator.userAgent.toLowerCase(),HASH=window.location.hash.replace(/#\//,""),CLICK=function(){return Galleria.TOUCH?"touchstart":"click"},IE=function(){var v=3,div=doc.createElement("div");while(div.innerHTML="<\!--[if gt IE "+ ++v+"]><i></i><![endif]--\>",div.getElementsByTagName("i")[0]);return v>4?v:undef}(),DOM=function(){return{html:doc.documentElement,body:doc.body,head:doc.getElementsByTagName("head")[0],title:doc.title}},
_timeouts={trunk:{},add:function(id,fn,delay,loop){loop=loop||false;this.clear(id);if(loop){var old=fn;fn=function(){old();_timeouts.add(id,fn,delay)}}this.trunk[id]=window.setTimeout(fn,delay)},clear:function(id){var del=function(i){window.clearTimeout(this.trunk[i]);delete this.trunk[i]};if(!!id&&id in this.trunk)del.call(_timeouts,id);else if(typeof id=="undefined")for(var i in this.trunk)del.call(_timeouts,i)}},_galleries=[],_transitions={fade:function(params,complete){$(params.next).css("opacity",
0).show().animate({opacity:1},params.speed,complete);if(params.prev)$(params.prev).css("opacity",1).show().animate({opacity:0},params.speed)},flash:function(params,complete){$(params.next).css("opacity",0);if(params.prev)$(params.prev).animate({opacity:0},params.speed/2,function(){$(params.next).animate({opacity:1},params.speed,complete)});else $(params.next).animate({opacity:1},params.speed,complete)},pulse:function(params,complete){if(params.prev)$(params.prev).hide();$(params.next).css("opacity",
0).animate({opacity:1},params.speed,complete)},slide:function(params,complete){var image=$(params.next).parent(),images=this.$("images"),width=this._stageWidth,easing=this.getOptions("easing");image.css({left:width*(params.rewind?-1:1)});images.animate({left:width*(params.rewind?1:-1)},{duration:params.speed,queue:false,easing:easing,complete:function(){images.css("left",0);image.css("left",0);complete()}})},fadeslide:function(params,complete){var x=0,easing=this.getOptions("easing"),distance=this.getStageWidth();
if(params.prev){x=Utils.parseValue($(params.prev).css("left"));$(params.prev).css({opacity:1,left:x}).animate({opacity:0,left:x+distance*(params.rewind?1:-1)},{duration:params.speed,queue:false,easing:easing})}x=Utils.parseValue($(params.next).css("left"));$(params.next).css({left:x+distance*(params.rewind?-1:1),opacity:0}).animate({opacity:1,left:x},{duration:params.speed,complete:complete,queue:false,easing:easing})}},Utils=function(){return{array:function(obj){return Array.prototype.slice.call(obj)},
create:function(className,nodeName){nodeName=nodeName||"div";var elem=doc.createElement(nodeName);elem.className=className;return elem},forceStyles:function(elem,styles){elem=$(elem);if(elem.attr("style"))elem.data("styles",elem.attr("style")).removeAttr("style");elem.css(styles)},revertStyles:function(){$.each(Utils.array(arguments),function(i,elem){elem=$(elem).removeAttr("style");if(elem.data("styles"))elem.attr("style",elem.data("styles")).data("styles",null)})},moveOut:function(elem){Utils.forceStyles(elem,
{position:"absolute",left:-1E4})},moveIn:function(){Utils.revertStyles.apply(Utils,Utils.array(arguments))},hide:function(elem,speed,callback){elem=$(elem);if(!elem.data("opacity"))elem.data("opacity",elem.css("opacity"));var style={opacity:0};if(speed)elem.stop().animate(style,speed,callback);else elem.css(style)},show:function(elem,speed,callback){elem=$(elem);var saved=parseFloat(elem.data("opacity"))||1,style={opacity:saved};if(saved==1)elem.data("opacity",null);if(speed)elem.stop().animate(style,
speed,callback);else elem.css(style)},addTimer:function(){_timeouts.add.apply(_timeouts,Utils.array(arguments));return this},clearTimer:function(){_timeouts.clear.apply(_timeouts,Utils.array(arguments));return this},wait:function(options){options=$.extend({until:function(){return false},success:function(){},error:function(){Galleria.raise("Could not complete wait function.")},timeout:3E3},options);var start=Utils.timestamp(),elapsed,now;window.setTimeout(function(){now=Utils.timestamp();elapsed=now-
start;if(options.until(elapsed)){options.success();return false}if(now>=start+options.timeout){options.error();return false}window.setTimeout(arguments.callee,2)},2)},toggleQuality:function(img,force){if(!(IE==7||IE==8)||!!img===false)return;if(typeof force==="undefined")force=img.style.msInterpolationMode=="nearest-neighbor";img.style.msInterpolationMode=force?"bicubic":"nearest-neighbor"},insertStyleTag:function(styles){var style=doc.createElement("style");DOM().head.appendChild(style);if(style.styleSheet)style.styleSheet.cssText=
styles;else{var cssText=doc.createTextNode(styles);style.appendChild(cssText)}},loadScript:function(url,callback){var done=false,script=$("<scr"+"ipt>").attr({src:url,async:true}).get(0);script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;if(typeof callback=="function")callback.call(this,this);script.onload=script.onreadystatechange=null}};var s=doc.getElementsByTagName("script")[0];s.parentNode.insertBefore(script,
s)},parseValue:function(val){if(typeof val=="number")return val;else if(typeof val=="string"){var arr=val.match(/\-?\d/g);return arr&&arr.constructor==Array?arr.join("")*1:0}else return 0},timestamp:function(){return(new Date).getTime()},loadCSS:function(href,id,callback){var link,ready=false,length;$("link[rel=stylesheet]").each(function(){if((new RegExp(href)).test(this.href)){link=this;return false}});if(typeof id=="function"){callback=id;id=undef}callback=callback||function(){};if(link){callback.call(link,
link);return link}length=doc.styleSheets.length;if(DEBUG)href+="?"+Utils.timestamp();if($("#"+id).length){$("#"+id).attr("href",href);length--;ready=true}else{link=$("<link>").attr({rel:"stylesheet",href:href,id:id}).get(0);window.setTimeout(function(){var styles=$('link[rel="stylesheet"], style');if(styles.length)styles.get(0).parentNode.insertBefore(link,styles[0]);else DOM().head.appendChild(link);if(IE)link.attachEvent("onreadystatechange",function(e){if(link.readyState=="complete")ready=true});
else ready=true},10)}if(typeof callback=="function")Utils.wait({until:function(){return ready&&doc.styleSheets.length>length},success:function(){Utils.addTimer("css",function(){callback.call(link,link)},100)},error:function(){Galleria.raise("Theme CSS could not load")},timeout:1E3});return link}}}();Galleria=function(){var self=this;this._theme=undef;this._options={};this._playing=false;this._playtime=5E3;this._active=null;this._queue={length:0};this._data=[];this._dom={};this._thumbnails=[];this._initialized=
false;this._stageWidth=0;this._stageHeight=0;this._target=undef;this._id=Utils.timestamp();var divs="container stage images image-nav image-nav-left image-nav-right "+"info info-text info-title info-description info-author "+"thumbnails thumbnails-list thumbnails-container thumb-nav-left thumb-nav-right "+"loader counter tooltip",spans="current total";$.each(divs.split(" "),function(i,elemId){self._dom[elemId]=Utils.create("galleria-"+elemId)});$.each(spans.split(" "),function(i,elemId){self._dom[elemId]=
Utils.create("galleria-"+elemId,"span")});var keyboard=this._keyboard={keys:{"UP":38,"DOWN":40,"LEFT":37,"RIGHT":39,"RETURN":13,"ESCAPE":27,"BACKSPACE":8,"SPACE":32},map:{},bound:false,press:function(e){var key=e.keyCode||e.which;if(key in keyboard.map&&typeof keyboard.map[key]=="function")keyboard.map[key].call(self,e)},attach:function(map){for(var key in map){var up=key.toUpperCase();if(up in keyboard.keys)keyboard.map[keyboard.keys[up]]=map[key]}if(!keyboard.bound){keyboard.bound=true;$doc.bind("keydown",
keyboard.press)}},detach:function(){keyboard.bound=false;$doc.unbind("keydown",keyboard.press)}};var controls=this._controls={"0":undef,1:undef,active:0,swap:function(){controls.active=controls.active?0:1},getActive:function(){return controls[controls.active]},getNext:function(){return controls[1-controls.active]}};var carousel=this._carousel={next:self.$("thumb-nav-right"),prev:self.$("thumb-nav-left"),width:0,current:0,max:0,hooks:[],update:function(){var w=0,h=0,hooks=[0];$.each(self._thumbnails,
function(i,thumb){if(thumb.ready){w+=thumb.outerWidth||$(thumb.container).outerWidth(true);hooks[i+1]=w;h=Math.max(h,thumb.outerHeight||$(thumb.container).outerHeight(true))}});self.$("thumbnails").css({width:w,height:h});carousel.max=w;carousel.hooks=hooks;carousel.width=self.$("thumbnails-list").width();carousel.setClasses();self.$("thumbnails-container").toggleClass("galleria-carousel",w>carousel.width)},bindControls:function(){carousel.next.bind(CLICK(),function(e){e.preventDefault();if(self._options.carousel_steps==
"auto")for(var i=carousel.current;i<carousel.hooks.length;i++){if(carousel.hooks[i]-carousel.hooks[carousel.current]>carousel.width){carousel.set(i-2);break}}else carousel.set(carousel.current+self._options.carousel_steps)});carousel.prev.bind(CLICK(),function(e){e.preventDefault();if(self._options.carousel_steps=="auto")for(var i=carousel.current;i>=0;i--)if(carousel.hooks[carousel.current]-carousel.hooks[i]>carousel.width){carousel.set(i+2);break}else{if(i==0){carousel.set(0);break}}else carousel.set(carousel.current-
self._options.carousel_steps)})},set:function(i){i=Math.max(i,0);while(carousel.hooks[i-1]+carousel.width>carousel.max&&i>=0)i--;carousel.current=i;carousel.animate()},getLast:function(i){return(i||carousel.current)-1},follow:function(i){if(i==0||i==carousel.hooks.length-2){carousel.set(i);return}var last=carousel.current;while(carousel.hooks[last]-carousel.hooks[carousel.current]<carousel.width&&last<=carousel.hooks.length)last++;if(i-1<carousel.current)carousel.set(i-1);else if(i+2>last)carousel.set(i-
last+carousel.current+2)},setClasses:function(){carousel.prev.toggleClass("disabled",!carousel.current);carousel.next.toggleClass("disabled",carousel.hooks[carousel.current]+carousel.width>carousel.max)},animate:function(to){carousel.setClasses();var num=carousel.hooks[carousel.current]*-1;if(isNaN(num))return;self.$("thumbnails").animate({left:num},{duration:self._options.carousel_speed,easing:self._options.easing,queue:false})}};var tooltip=this._tooltip={initialized:false,open:false,init:function(){tooltip.initialized=
true;var css=".galleria-tooltip{padding:3px 8px;max-width:50%;background:#ffe;color:#000;z-index:3;position:absolute;font-size:11px;line-height:1.3"+"opacity:0;box-shadow:0 0 2px rgba(0,0,0,.4);-moz-box-shadow:0 0 2px rgba(0,0,0,.4);-webkit-box-shadow:0 0 2px rgba(0,0,0,.4);}";Utils.insertStyleTag(css);self.$("tooltip").css("opacity",0.8);Utils.hide(self.get("tooltip"))},move:function(e){var mouseX=self.getMousePosition(e).x,mouseY=self.getMousePosition(e).y,$elem=self.$("tooltip"),x=mouseX,y=mouseY,
height=$elem.outerHeight(true)+1,width=$elem.outerWidth(true),limitY=height+15;var maxX=self.$("container").width()-width-2,maxY=self.$("container").height()-height-2;if(!isNaN(x)&&!isNaN(y)){x+=10;y-=30;x=Math.max(0,Math.min(maxX,x));y=Math.max(0,Math.min(maxY,y));if(mouseY<limitY)y=limitY;$elem.css({left:x,top:y})}},bind:function(elem,value){if(!tooltip.initialized)tooltip.init();var hover=function(elem,value){tooltip.define(elem,value);$(elem).hover(function(){Utils.clearTimer("switch_tooltip");
self.$("container").unbind("mousemove",tooltip.move).bind("mousemove",tooltip.move).trigger("mousemove");tooltip.show(elem);Galleria.utils.addTimer("tooltip",function(){self.$("tooltip").stop();Utils.show(self.get("tooltip"),400);tooltip.open=true},tooltip.open?0:1E3)},function(){self.$("container").unbind("mousemove",tooltip.move);Utils.clearTimer("tooltip");self.$("tooltip").stop();Utils.hide(self.get("tooltip"),200,function(){Utils.addTimer("switch_tooltip",function(){tooltip.open=false},1E3)})})};
if(typeof value=="string")hover(elem in self._dom?self.get(elem):elem,value);else $.each(elem,function(elemID,val){hover(self.get(elemID),val)})},show:function(elem){elem=$(elem in self._dom?self.get(elem):elem);var text=elem.data("tt");if(!text)return;text=typeof text=="function"?text():text;self.$("tooltip").html(text.replace(/\s/,"&nbsp;"));elem.bind("mouseup",function(e){window.setTimeout(function(ev){return function(){tooltip.move(ev)}}(e),10);elem.unbind("mouseup",arguments.callee)})},define:function(elem,
value){if(typeof value!=="function"){var s=value;value=function(){return s}}elem=$(elem in self._dom?self.get(elem):elem).data("tt",value);tooltip.show(elem)}};var fullscreen=this._fullscreen={scrolled:0,enter:function(callback){Utils.hide(self.getActiveImage());self.$("container").addClass("fullscreen");fullscreen.scrolled=$(window).scrollTop();Utils.forceStyles(self.get("container"),{position:"fixed",top:0,left:0,width:"100%",height:"100%",zIndex:1E4});var htmlbody={height:"100%",overflow:"hidden",
margin:0,padding:0};Utils.forceStyles(DOM().html,htmlbody);Utils.forceStyles(DOM().body,htmlbody);self.attachKeyboard({escape:self.exitFullscreen,right:self.next,left:self.prev});self.rescale(function(){Utils.addTimer("fullscreen_enter",function(){Utils.show(self.getActiveImage());if(typeof callback=="function")callback.call(self)},100);self.trigger(Galleria.FULLSCREEN_ENTER)});$(window).resize(function(){fullscreen.scale()})},scale:function(){self.rescale()},exit:function(callback){Utils.hide(self.getActiveImage());
self.$("container").removeClass("fullscreen");Utils.revertStyles(self.get("container"),DOM().html,DOM().body);window.scrollTo(0,fullscreen.scrolled);self.detachKeyboard();self.rescale(function(){Utils.addTimer("fullscreen_exit",function(){Utils.show(self.getActiveImage());if(typeof callback=="function")callback.call(self)},50);self.trigger(Galleria.FULLSCREEN_EXIT)});$(window).unbind("resize",fullscreen.scale)}};var idle=this._idle={trunk:[],bound:false,add:function(elem,to){if(!elem)return;if(!idle.bound)idle.addEvent();
elem=$(elem);var from={};for(var style in to)from[style]=elem.css(style);elem.data("idle",{from:from,to:to,complete:true,busy:false});idle.addTimer();idle.trunk.push(elem)},remove:function(elem){elem=jQuery(elem);$.each(idle.trunk,function(i,el){if(el.length&&!el.not(elem).length){self._idle.show(elem);self._idle.trunk.splice(i,1)}});if(!idle.trunk.length){idle.removeEvent();Utils.clearTimer("idle")}},addEvent:function(){idle.bound=true;self.$("container").bind("mousemove click",idle.showAll)},removeEvent:function(){idle.bound=
false;self.$("container").unbind("mousemove click",idle.showAll)},addTimer:function(){Utils.addTimer("idle",function(){self._idle.hide()},self._options.idle_time)},hide:function(){self.trigger(Galleria.IDLE_ENTER);$.each(idle.trunk,function(i,elem){var data=elem.data("idle");if(!data)return;elem.data("idle").complete=false;elem.stop().animate(data.to,{duration:600,queue:false,easing:"swing"})})},showAll:function(){Utils.clearTimer("idle");$.each(self._idle.trunk,function(i,elem){self._idle.show(elem)})},
show:function(elem){var data=elem.data("idle");if(!data.busy&&!data.complete){data.busy=true;self.trigger(Galleria.IDLE_EXIT);Utils.clearTimer("idle");elem.stop().animate(data.from,{duration:300,queue:false,easing:"swing",complete:function(){$(this).data("idle").busy=false;$(this).data("idle").complete=true}})}idle.addTimer()}};var lightbox=this._lightbox={width:0,height:0,initialized:false,active:null,image:null,elems:{},init:function(){self.trigger(Galleria.LIGHTBOX_OPEN);if(lightbox.initialized)return;
lightbox.initialized=true;var elems="overlay box content shadow title info close prevholder prev nextholder next counter image",el={},op=self._options,css="",cssMap={overlay:"position:fixed;display:none;opacity:"+op.overlay_opacity+";top:0;left:0;width:100%;height:100%;background:"+op.overlay_background+";z-index:99990",box:"position:fixed;display:none;width:400px;height:400px;top:50%;left:50%;margin-top:-200px;margin-left:-200px;z-index:99991",shadow:"position:absolute;background:#000;width:100%;height:100%;",
content:"position:absolute;background-color:#fff;top:10px;left:10px;right:10px;bottom:10px;overflow:hidden",info:"position:absolute;bottom:10px;left:10px;right:10px;color:#444;font:11px/13px arial,sans-serif;height:13px",close:"position:absolute;top:10px;right:10px;height:20px;width:20px;background:#fff;text-align:center;cursor:pointer;color:#444;font:16px/22px arial,sans-serif;z-index:99999",image:"position:absolute;top:10px;left:10px;right:10px;bottom:30px;overflow:hidden",prevholder:"position:absolute;width:50%;height:100%;cursor:pointer",
nextholder:"position:absolute;width:50%;height:100%;right:0;cursor:pointer",prev:"position:absolute;top:50%;margin-top:-20px;height:40px;width:30px;background:#fff;left:20px;display:none;line-height:40px;text-align:center;color:#000",next:"position:absolute;top:50%;margin-top:-20px;height:40px;width:30px;background:#fff;right:20px;left:auto;display:none;line-height:40px;text-align:center;color:#000",title:"float:left",counter:"float:right;margin-left:8px"},hover=function(elem){return elem.hover(function(){$(this).css("color",
"#bbb")},function(){$(this).css("color","#444")})};$.each(cssMap,function(key,value){css+=".galleria-lightbox-"+key+"{"+value+"}"});Utils.insertStyleTag(css);$.each(elems.split(" "),function(i,elemId){self.addElement("lightbox-"+elemId);el[elemId]=lightbox.elems[elemId]=self.get("lightbox-"+elemId)});lightbox.image=new Galleria.Picture;self.append({"lightbox-box":["lightbox-shadow","lightbox-content","lightbox-close","lightbox-prevholder","lightbox-nextholder"],"lightbox-info":["lightbox-title","lightbox-counter"],
"lightbox-content":["lightbox-info","lightbox-image"],"lightbox-prevholder":"lightbox-prev","lightbox-nextholder":"lightbox-next"});$(el.image).append(lightbox.image.container);$(DOM().body).append(el.overlay,el.box);hover($(el.close).bind(CLICK(),lightbox.hide).html("&#215;"));$.each(["Prev","Next"],function(i,dir){var $d=$(el[dir.toLowerCase()]).html(/v/.test(dir)?"\u2039&nbsp;":"&nbsp;\u203a");$(el[dir.toLowerCase()+"holder"]).hover(function(){$d.show()},function(){$d.fadeOut(200)}).bind(CLICK(),
function(){lightbox["show"+dir]()})});$(el.overlay).bind(CLICK(),lightbox.hide)},rescale:function(event){var width=Math.min($(window).width()-40,lightbox.width),height=Math.min($(window).height()-60,lightbox.height),ratio=Math.min(width/lightbox.width,height/lightbox.height),destWidth=lightbox.width*ratio+40,destHeight=lightbox.height*ratio+60,to={width:destWidth,height:destHeight,marginTop:Math.ceil(destHeight/2)*-1,marginLeft:Math.ceil(destWidth/2)*-1};if(event)$(lightbox.elems.box).css(to);else $(lightbox.elems.box).animate(to,
self._options.lightbox_transition_speed,self._options.easing,function(){var image=lightbox.image,speed=self._options.lightbox_fade_speed;self.trigger({type:Galleria.LIGHTBOX_IMAGE,imageTarget:image.image});image.show();Utils.show(image.image,speed);Utils.show(lightbox.elems.info,speed)})},hide:function(){lightbox.image.image=null;$(window).unbind("resize",lightbox.rescale);$(lightbox.elems.box).hide();Utils.hide(lightbox.elems.info);Utils.hide(lightbox.elems.overlay,200,function(){$(this).hide().css("opacity",
self._options.overlay_opacity);self.trigger(Galleria.LIGHTBOX_CLOSE)})},showNext:function(){lightbox.show(self.getNext(lightbox.active))},showPrev:function(){lightbox.show(self.getPrev(lightbox.active))},show:function(index){lightbox.active=index=typeof index=="number"?index:self.getIndex();if(!lightbox.initialized)lightbox.init();$(window).unbind("resize",lightbox.rescale);var data=self.getData(index),total=self.getDataLength();Utils.hide(lightbox.elems.info);lightbox.image.load(data.image,function(image){lightbox.width=
image.original.width;lightbox.height=image.original.height;$(image.image).css({width:"100.5%",height:"100.5%",top:0,zIndex:99998,opacity:0});lightbox.elems.title.innerHTML=data.title;lightbox.elems.counter.innerHTML=index+1+" / "+total;$(window).resize(lightbox.rescale);lightbox.rescale()});$(lightbox.elems.overlay).show();$(lightbox.elems.box).show()}};return this};Galleria.prototype={constructor:Galleria,init:function(target,options){var self=this;_galleries.push(this);this._original={target:target,
options:options,data:null};this._target=this._dom.target=target.nodeName?target:$(target).get(0);if(!this._target){Galleria.raise("Target not found.");return}this._options={autoplay:false,carousel:true,carousel_follow:true,carousel_speed:400,carousel_steps:"auto",clicknext:false,data_config:function(elem){return{}},data_selector:"img",data_source:this._target,debug:undef,easing:"galleria",extend:function(options){},height:"auto",idle_time:3E3,image_crop:false,image_margin:0,image_pan:false,image_pan_smoothness:12,
image_position:"50%",keep_source:false,lightbox_fade_speed:200,lightbox_transition_speed:500,link_source_images:true,max_scale_ratio:undef,min_scale_ratio:undef,on_image:function(img,thumb){},overlay_opacity:0.85,overlay_background:"#0b0b0b",pause_on_interaction:true,popup_links:false,preload:2,queue:true,show:0,show_info:true,show_counter:true,show_imagenav:true,thumb_crop:true,thumb_event_type:CLICK(),thumb_fit:true,thumb_margin:0,thumb_quality:"auto",thumbnails:true,transition:"fade",transition_initial:undef,
transition_speed:400,width:"auto"};if(options&&options.debug===true)DEBUG=true;$(this._target).children().hide();if(Galleria.theme)this._init();else{Utils.addTimer("themeload",function(){Galleria.raise("No theme found.",true)},2E3);$doc.one(Galleria.THEMELOAD,function(){Utils.clearTimer("themeload");self._init.call(self)})}},_init:function(){var self=this;if(this._initialized){Galleria.raise("Init failed: Gallery instance already initialized.");return this}this._initialized=true;if(!Galleria.theme){Galleria.raise("Init failed: No theme found.");
return this}$.extend(true,this._options,Galleria.theme.defaults,this._original.options);this.bind(Galleria.DATA,function(){this._original.data=this._data;this.get("total").innerHTML=this.getDataLength();var $container=this.$("container");var num={width:0,height:0};var testElem=Utils.create("galleria-image");Utils.wait({until:function(){$.each(["width","height"],function(i,m){if(self._options[m]&&typeof self._options[m]=="number")num[m]=self._options[m];else num[m]=Utils.parseValue($container.css(m))||
Utils.parseValue(self.$("target").css(m))||$container[m]()||self.$("target")[m]()});var thumbHeight=function(){return true};if(self._options.thumbnails){self.$("thumbnails").append(testElem);thumbHeight=function(){return!!$(testElem).height()}}return thumbHeight()&&num.width&&num.height>50},success:function(){$(testElem).remove();$container.width(num.width);$container.height(num.height);if(Galleria.WEBKIT)window.setTimeout(function(){self._run()},1);else self._run()},error:function(){Galleria.raise("Width & Height not found.",
true)},timeout:2E3})});var one=false;this.bind(Galleria.READY,function(){Utils.show(this.get("counter"));if(this._options.clicknext){$.each(this._data,function(i,data){delete data.link});this.$("stage").css({cursor:"pointer"}).bind(CLICK(),function(e){self.next()})}if(this._options.carousel)this._carousel.bindControls();if(this._options.autoplay){this.pause();if(typeof this._options.autoplay=="number")this._playtime=this._options.autoplay;this.trigger(Galleria.PLAY);this._playing=true}if(one){if(typeof this._options.show==
"number")this.show(this._options.show);return}one=true;if(Galleria.History)Galleria.History.change(function(e){var val=parseInt(e.value.replace(/\//,""));if(isNaN(val))window.history.go(-1);else self.show(val,undef,true)});Galleria.theme.init.call(this,this._options);this._options.extend.call(this,this._options);if(/^[0-9]{1,4}$/.test(HASH)&&Galleria.History)this.show(HASH,undef,true);else this.show(this._options.show)});this.append({"info-text":["info-title","info-description","info-author"],"info":["info-text"],
"image-nav":["image-nav-right","image-nav-left"],"stage":["images","loader","counter","image-nav"],"thumbnails-list":["thumbnails"],"thumbnails-container":["thumb-nav-left","thumbnails-list","thumb-nav-right"],"container":["stage","thumbnails-container","info","tooltip"]});Utils.hide(this.$("counter").append(this.get("current")," / ",this.get("total")));this.setCounter("&#8211;");$.each(new Array(2),function(i){var image=new Galleria.Picture;$(image.container).css({position:"absolute",top:0,left:0});
self.$("images").append(image.container);self._controls[i]=image});this.$("images").css({position:"relative",top:0,left:0,width:"100%",height:"100%"});this.$("thumbnails, thumbnails-list").css({overflow:"hidden",position:"relative"});this.$("image-nav-right, image-nav-left").bind(CLICK(),function(e){if(self._options.clicknext)e.stopPropagation();if(self._options.pause_on_interaction)self.pause();var fn=/right/.test(this.className)?"next":"prev";self[fn]()});$.each(["info","counter","image-nav"],function(i,
el){if(self._options["show_"+el.replace(/-/,"")]===false)Utils.moveOut(self.get(el))});this.load();if(!this._options.keep_source&&!IE)this._target.innerHTML="";this.$("target").append(this.get("container"));if(this._options.carousel)this.bind(Galleria.THUMBNAIL,function(){this.updateCarousel()});this.bind(Galleria.IMAGE,function(e){this._options.on_image.call(this,e.imageTarget,e.thumbTarget)});return this},_run:function(){var self=this,o=this._options,width=0,height=0,optval=typeof o.thumbnails==
"string"?o.thumbnails.toLowerCase():null;for(var i=0;this._data[i];i++){var thumb,data=this._data[i],$container;if(o.thumbnails===true){thumb=new Galleria.Picture(i);var src=data.thumb||data.image;this.$("thumbnails").append(thumb.container);$container=$(thumb.container);var getStyle=function(prop){return doc.defaultView&&doc.defaultView.getComputedStyle?doc.defaultView.getComputedStyle(thumb.container,null)[prop]:$container.css(prop)};thumb.data={width:Utils.parseValue(getStyle("width")),height:Utils.parseValue(getStyle("height")),
order:i};$container.css(o.thumb_fit&&o.thumb_crop!==true?{width:0,height:0}:{width:thumb.data.width,height:thumb.data.height});thumb.load(src,function(thumb){thumb.scale({width:thumb.data.width,height:thumb.data.height,crop:o.thumb_crop,margin:o.thumb_margin,complete:function(thumb){var top=["left","top"];var arr=["Width","Height"];$.each(arr,function(i,meassure){var m=meassure.toLowerCase();if((o.thumb_crop!==true||o.thumb_crop==m)&&o.thumb_fit){var css={};css[m]=thumb[m];$(thumb.container).css(css);
css={};css[top[i]]=0;$(thumb.image).css(css)}thumb["outer"+meassure]=$(thumb.container)["outer"+meassure](true)});Utils.toggleQuality(thumb.image,o.thumb_quality===true||o.thumb_quality=="auto"&&thumb.original.width<thumb.width*3);self.trigger({type:Galleria.THUMBNAIL,thumbTarget:thumb.image,index:thumb.data.order})}})});if(o.preload=="all")thumb.add(data.image)}else if(optval=="empty"||optval=="numbers"){thumb={container:Utils.create("galleria-image"),image:Utils.create("img","span"),ready:true};
if(optval=="numbers")$(thumb.image).text(i+1);this.$("thumbnails").append(thumb.container);window.setTimeout(function(image,index,container){return function(){$(container).append(image);self.trigger({type:Galleria.THUMBNAIL,thumbTarget:image,index:index})}}(thumb.image,i,thumb.container),50+i*20)}else thumb={container:null,image:null};$(thumb.container).add(o.keep_source&&o.link_source_images?data.original:null).data("index",i).bind(o.thumb_event_type,function(e){if(o.pause_on_interaction)self.pause();
var index=$(e.currentTarget).data("index");if(self.getIndex()!==index)self.show(index);e.preventDefault()});this._thumbnails.push(thumb)}Utils.wait({until:function(){self._stageWidth=self.$("stage").width();self._stageHeight=self.$("stage").height();return self._stageWidth&&self._stageHeight>50},success:function(){self.trigger(Galleria.READY)},error:function(){Galleria.raise("stage meassures not found")}})},load:function(source,selector,config){var self=this;this._data=[];this._thumbnails=[];this.$("thumbnails").empty();
if(typeof selector=="function"){config=selector;selector=null}source=source||this._options.data_source;selector=selector||this._options.data_selector;config=config||this._options.data_config;if(source.constructor==Array){if(this.validate(source)){this._data=source;this.trigger(Galleria.DATA)}else Galleria.raise("Load failed: JSON Array not valid.");return this}$(source).find(selector).each(function(i,img){var data={},img=$(img),parent=img.parent(),href=parent.attr("href");if(/\.(png|gif|jpg|jpeg)$/i.test(href))data.image=
href;else if(href)data.link=href;self._data.push($.extend({title:img.attr("title"),thumb:img.attr("src"),image:img.attr("src"),description:img.attr("alt"),link:img.attr("longdesc"),original:img.get(0)},data,config(img)))});if(this.getDataLength())this.trigger(Galleria.DATA);else Galleria.raise("Load failed: no data found.");return this},_getActive:function(){return this._controls.getActive()},validate:function(data){return true},bind:function(type,fn){this.$("container").bind(type,this.proxy(fn));
return this},unbind:function(type){this.$("container").unbind(type);return this},trigger:function(type){type=typeof type=="object"?$.extend(type,{scope:this}):{type:type,scope:this};this.$("container").trigger(type);return this},addIdleState:function(elem,styles){this._idle.add.apply(this._idle,Utils.array(arguments));return this},removeIdleState:function(elem){this._idle.remove.apply(this._idle,Utils.array(arguments));return this},enterIdleMode:function(){this._idle.hide();return this},exitIdleMode:function(){this.idle._show();
return this},enterFullscreen:function(callback){this._fullscreen.enter.apply(this,Utils.array(arguments));return this},exitFullscreen:function(callback){this._fullscreen.exit.apply(this,Utils.array(arguments));return this},bindTooltip:function(elem,value){this._tooltip.bind.apply(this._tooltip,Utils.array(arguments));return this},defineTooltip:function(elem,value){this._tooltip.define.apply(this._tooltip,Utils.array(arguments));return this},refreshTooltip:function(){this._tooltip.show.apply(this._tooltip,
Utils.array(arguments));return this},openLightbox:function(){this._lightbox.show.apply(this._lightbox,Utils.array(arguments));return this},closeLightbox:function(){this._lightbox.hide.apply(this._lightbox,Utils.array(arguments));return this},getActiveImage:function(){return this._getActive().image||undef},getActiveThumb:function(){return this._thumbnails[this._active].image||undef},getMousePosition:function(e){return{x:e.pageX-this.$("container").offset().left,y:e.pageY-this.$("container").offset().top}},
addPan:function(img){if(this._options.image_crop===false)return;img=$(img||this.getActiveImage());var self=this,x=img.width()/2,y=img.height()/2,curX=destX=parseInt(img.css("left"))||0,curY=destY=parseInt(img.css("top"))||0,distX=0,distY=0,active=false,ts=Utils.timestamp(),cache=0,move=0,position=function(dist,cur,pos){if(dist>0){move=Math.round(Math.max(dist*-1,Math.min(0,cur)));if(cache!=move){cache=move;if(IE==8)img.parent()["scroll"+pos](move*-1);else{var css={};css[pos.toLowerCase()]=move;img.css(css)}}}},
calculate=function(e){if(Utils.timestamp()-ts<50)return;active=true;x=self.getMousePosition(e).x;y=self.getMousePosition(e).y},loop=function(e){if(!active)return;distX=img.width()-self._stageWidth;distY=img.height()-self._stageHeight;destX=x/self._stageWidth*distX*-1;destY=y/self._stageHeight*distY*-1;curX+=(destX-curX)/self._options.image_pan_smoothness;curY+=(destY-curY)/self._options.image_pan_smoothness;position(distY,curY,"Top");position(distX,curX,"Left")};if(IE==8){img.parent().scrollTop(curY*
-1).scrollLeft(curX*-1);img.css({top:0,left:0})}this.$("stage").unbind("mousemove",calculate).bind("mousemove",calculate);Utils.addTimer("pan",loop,50,true);return this},proxy:function(fn,scope){if(typeof fn!=="function")return function(){};scope=scope||this;return function(){return fn.apply(scope,Utils.array(arguments))}},removePan:function(){if(IE==8);this.$("stage").unbind("mousemove");Utils.clearTimer("pan");return this},addElement:function(id){var dom=this._dom;$.each(Utils.array(arguments),
function(i,blueprint){dom[blueprint]=Utils.create("galleria-"+blueprint)});return this},attachKeyboard:function(map){this._keyboard.attach.apply(this._keyboard,Utils.array(arguments));return this},detachKeyboard:function(){this._keyboard.detach.apply(this._keyboard,Utils.array(arguments));return this},appendChild:function(parentID,childID){this.$(parentID).append(this.get(childID)||childID);return this},prependChild:function(parentID,childID){this.$(parentID).prepend(this.get(childID)||childID);return this},
remove:function(elemID){this.$(Utils.array(arguments).join(",")).remove();return this},append:function(data){for(var i in data)if(data[i].constructor==Array)for(var j=0;data[i][j];j++)this.appendChild(i,data[i][j]);else this.appendChild(i,data[i]);return this},_scaleImage:function(image,options){options=$.extend({width:this._stageWidth,height:this._stageHeight,crop:this._options.image_crop,max:this._options.max_scale_ratio,min:this._options.min_scale_ratio,margin:this._options.image_margin,position:this._options.image_position},
options);(image||this._controls.getActive()).scale(options);return this},updateCarousel:function(){this._carousel.update();return this},rescale:function(width,height,complete){var self=this;if(typeof width=="function"){complete=width;width=undef}var scale=function(){var o=self._options;self._stageWidth=width||self.$("stage").width();self._stageHeight=height||self.$("stage").height();self._scaleImage();if(self._options.carousel)self.updateCarousel();self.trigger(Galleria.RESCALE);if(typeof complete==
"function")complete.call(self)};if(Galleria.WEBKIT&&!width&&!height)Utils.addTimer("scale",scale,5);else scale.call(self);return this},refreshImage:function(){this._scaleImage();if(this._options.image_pan)this.addPan();return this},show:function(index,rewind,_history){if(index===false||!this._options.queue&&this._queue.stalled)return;index=Math.max(0,Math.min(parseInt(index),this.getDataLength()-1));rewind=typeof rewind!="undefined"?!!rewind:index<this.getIndex();_history=_history||false;if(!_history&&
Galleria.History){Galleria.History.value(index.toString());return}this._active=index;Array.prototype.push.call(this._queue,{index:index,rewind:rewind});if(!this._queue.stalled)this._show();return this},_show:function(){var self=this,queue=this._queue[0],data=this.getData(queue.index);if(!data)return;var src=data.image,active=this._controls.getActive(),next=this._controls.getNext(),cached=next.isCached(src),thumb=this._thumbnails[queue.index];var complete=function(){self._queue.stalled=false;Utils.toggleQuality(next.image,
self._options.image_quality);$(active.container).css({zIndex:0,opacity:0});$(next.container).css({zIndex:1,opacity:1});self._controls.swap();if(self._options.image_pan)self.addPan(next.image);if(data.link)$(next.image).css({cursor:"pointer"}).bind(CLICK(),function(){if(self._options.popup_links)var win=window.open(data.link,"_blank");else window.location.href=data.link});Array.prototype.shift.call(self._queue);if(self._queue.length)self._show();self._playCheck();self.trigger({type:Galleria.IMAGE,
index:queue.index,imageTarget:next.image,thumbTarget:thumb.image})};if(this._options.carousel&&this._options.carousel_follow)this._carousel.follow(queue.index);if(this._options.preload){var p,n=this.getNext();try{for(var i=this._options.preload;i>0;i--){p=new Galleria.Picture;p.add(self.getData(n).image);n=self.getNext(n)}}catch(e){}}Utils.show(next.container);$(self._thumbnails[queue.index].container).addClass("active").siblings(".active").removeClass("active");self.trigger({type:Galleria.LOADSTART,
cached:cached,index:queue.index,imageTarget:next.image,thumbTarget:thumb.image});next.load(src,function(next){self._scaleImage(next,{complete:function(next){Utils.show(next.container);if("image"in active)Utils.toggleQuality(active.image,false);Utils.toggleQuality(next.image,false);self._queue.stalled=true;self.removePan();self.setInfo(queue.index);self.setCounter(queue.index);self.trigger({type:Galleria.LOADFINISH,cached:cached,index:queue.index,imageTarget:next.image,thumbTarget:self._thumbnails[queue.index].image});
var transition=active.image===null&&self._options.transition_initial?self._options.transition_initial:self._options.transition;if(transition in _transitions===false)complete();else{var params={prev:active.image,next:next.image,rewind:queue.rewind,speed:self._options.transition_speed||400};_transitions[transition].call(self,params,complete)}}})})},getNext:function(base){base=typeof base=="number"?base:this.getIndex();return base==this.getDataLength()-1?0:base+1},getPrev:function(base){base=typeof base==
"number"?base:this.getIndex();return base===0?this.getDataLength()-1:base-1},next:function(){if(this.getDataLength()>1)this.show(this.getNext(),false);return this},prev:function(){if(this.getDataLength()>1)this.show(this.getPrev(),true);return this},get:function(elemId){return elemId in this._dom?this._dom[elemId]:null},getData:function(index){return index in this._data?this._data[index]:this._data[this._active]},getDataLength:function(){return this._data.length},getIndex:function(){return typeof this._active===
"number"?this._active:false},getStageHeight:function(){return this._stageHeight},getStageWidth:function(){return this._stageWidth},getOptions:function(key){return typeof key=="undefined"?this._options:this._options[key]},setOptions:function(key,value){if(typeof key=="object")$.extend(this._options,key);else this._options[key]=value;return this},play:function(delay){this._playing=true;this._playtime=delay||this._playtime;this._playCheck();this.trigger(Galleria.PLAY);return this},pause:function(){this._playing=
false;this.trigger(Galleria.PAUSE);return this},playToggle:function(delay){return this._playing?this.pause():this.play(delay)},isPlaying:function(){return this._playing},_playCheck:function(){var self=this,played=0,interval=20,now=Utils.timestamp();if(this._playing){Utils.clearTimer("play");var fn=function(){played=Utils.timestamp()-now;if(played>=self._playtime&&self._playing){Utils.clearTimer("play");self.next();return}if(self._playing){self.trigger({type:Galleria.PROGRESS,percent:Math.ceil(played/
self._playtime*100),seconds:Math.floor(played/1E3),milliseconds:played});Utils.addTimer("play",fn,interval)}};Utils.addTimer("play",fn,interval)}},setIndex:function(val){this._active=val;return this},setCounter:function(index){if(typeof index=="number")index++;else if(typeof index=="undefined")index=this.getIndex()+1;this.get("current").innerHTML=index;if(IE==8){var opacity=this.$("counter").css("opacity");this.$("counter").css("opacity",opacity)}return this},setInfo:function(index){var self=this,
data=this.getData(index);$.each(["title","description","author"],function(i,type){var elem=self.$("info-"+type);if(!!data[type])elem[data[type].length?"show":"hide"]().html(data[type]);else elem.empty().hide()});return this},hasInfo:function(index){var d=this.getData(index);var check="title description".split(" ");for(var i=0;check[i];i++)if(!!this.getData(index)[check[i]])return true;return false},jQuery:function(str){var self=this,ret=[];$.each(str.split(","),function(i,elemId){elemId=$.trim(elemId);
if(self.get(elemId))ret.push(elemId)});var jQ=$(self.get(ret.shift()));$.each(ret,function(i,elemId){jQ=jQ.add(self.get(elemId))});return jQ},$:function(){return this.jQuery.apply(this,Utils.array(arguments))}};$.extend(Galleria,{DATA:"g_data",READY:"g_ready",THUMBNAIL:"g_thumbnail",LOADSTART:"g_loadstart",LOADFINISH:"g_loadfinish",IMAGE:"g_image",THEMELOAD:"g_themeload",PLAY:"g_play",PAUSE:"g_pause",PROGRESS:"g_progress",FULLSCREEN_ENTER:"g_fullscreen_enter",FULLSCREEN_EXIT:"g_fullscreen_exit",IDLE_ENTER:"g_idle_enter",
IDLE_EXIT:"g_idle_exit",RESCALE:"g_rescale",LIGHTBOX_OPEN:"g_lightbox_open",LIGHTBOX_CLOSE:"g_lightbox_close",LIGHTBOX_IMAGE:"g_lightbox_image",IE9:IE==9,IE8:IE==8,IE7:IE==7,IE6:IE==6,IE:!!IE,WEBKIT:/webkit/.test(NAV),SAFARI:/safari/.test(NAV),CHROME:/chrome/.test(NAV),QUIRK:IE&&doc.compatMode&&doc.compatMode=="BackCompat",MAC:/mac/.test(navigator.platform.toLowerCase()),OPERA:!!window.opera,IPHONE:/iphone/.test(NAV),IPAD:/ipad/.test(NAV),ANDROID:/android/.test(NAV),TOUCH:!!(/iphone/.test(NAV)||/ipad/.test(NAV)||
/android/.test(NAV))});Galleria.addTheme=function(theme){if(!!theme["name"]===false)Galleria.raise("No theme name specified");if(typeof theme.defaults!="object")theme.defaults={};if(typeof theme.css=="string"){var css;$("script").each(function(i,script){var reg=new RegExp("galleria\\."+theme.name.toLowerCase()+"\\.");if(reg.test(script.src)){css=script.src.replace(/[^\/]*$/,"")+theme.css;Utils.addTimer("css",function(){Utils.loadCSS(css,"galleria-theme",function(){Galleria.theme=theme;$doc.trigger(Galleria.THEMELOAD)})},
1)}});if(!css)Galleria.raise("No theme CSS loaded")}else{Galleria.theme=theme;$doc.trigger(Galleria.THEMELOAD)}return theme};Galleria.loadTheme=function(src,options){var loaded=false,length=_galleries.length;Galleria.theme=undef;Utils.loadScript(src,function(){loaded=true});Utils.wait({until:function(){return loaded},error:function(){Galleria.raise("Theme at "+src+" could not load, check theme path.",true)},success:function(){if(length){var refreshed=[];$.each(Galleria.get(),function(i,instance){var op=
$.extend(instance._original.options,{data_source:instance._data},options);instance.$("container").remove();var g=new Galleria;g._id=instance._id;g.init(instance._original.target,op);refreshed.push(g)});_galleries=refreshed}},timeout:2E3})};Galleria.get=function(index){if(!!_galleries[index])return _galleries[index];else if(typeof index!=="number")return _galleries;else Galleria.raise("Gallery index "+index+" not found")};Galleria.addTransition=function(name,fn){_transitions[name]=fn};Galleria.utils=
Utils;Galleria.log=function(){try{window.console.log.apply(window.console,Utils.array(arguments))}catch(e){try{opera.postError.apply(opera,arguments)}catch(er){alert(Utils.array(arguments).split(", "))}}};Galleria.raise=function(msg,fatal){if(DEBUG||fatal){var type=fatal?"Fatal error":"Error";throw new Error(type+": "+msg);}};Galleria.Picture=function(id){this.id=id||null;this.image=null;this.container=Utils.create("galleria-image");$(this.container).css({overflow:"hidden",position:"relative"});this.original=
{width:0,height:0};this.ready=false;this.loaded=false};Galleria.Picture.prototype={cache:{},add:function(src){var self=this;var image=new Image;$(image).css("display","block");if(self.cache[src]){image.src=src;self.loaded=true;self.original={height:image.height,width:image.width};return image}image.onload=function(){self.original={height:this.height,width:this.width};self.cache[src]=src;self.loaded=true};image.src=src;return image},show:function(){Utils.show(this.image)},hide:function(){Utils.moveOut(this.image)},
clear:function(){this.image=null},isCached:function(src){return!!this.cache[src]},load:function(src,callback){var self=this;$(this.container).empty(true);this.image=this.add(src);Utils.hide(this.image);$(this.container).append(this.image);Utils.wait({until:function(){return self.loaded&&self.image.complete&&self.image.width},success:function(){window.setTimeout(function(){callback.call(self,self)},50)},error:function(){window.setTimeout(function(){callback.call(self,self)},50);Galleria.raise("image not loaded in 10 seconds: "+
src)},timeout:1E4});return this.container},scale:function(options){options=$.extend({width:0,height:0,min:undef,max:undef,margin:0,complete:function(){},position:"center",crop:false},options);if(!this.image)return this.container;var width,height,self=this,$container=$(self.container);Utils.wait({until:function(){width=options.width||$container.width()||Utils.parseValue($container.css("width"));height=options.height||$container.height()||Utils.parseValue($container.css("height"));return width&&height},
success:function(){var newWidth=(width-options.margin*2)/self.original.width,newHeight=(height-options.margin*2)/self.original.height,cropMap={"true":Math.max(newWidth,newHeight),"width":newWidth,"height":newHeight,"false":Math.min(newWidth,newHeight)},ratio=cropMap[options.crop.toString()];if(options.max)ratio=Math.min(options.max,ratio);if(options.min)ratio=Math.max(options.min,ratio);$(self.container).width(width).height(height);$.each(["width","height"],function(i,m){$(self.image)[m](self[m]=
Math.ceil(self.original[m]*ratio))});var pos={},mix={},getPosition=function(value,meassure,margin){var result=0;if(/\%/.test(value)){var flt=parseInt(value)/100;result=Math.ceil($(self.image)[meassure]()*-1*flt+margin*flt)}else result=Utils.parseValue(value);return result},positionMap={"top":{top:0},"left":{left:0},"right":{left:"100%"},"bottom":{top:"100%"}};$.each(options.position.toLowerCase().split(" "),function(i,value){if(value=="center")value="50%";pos[i?"top":"left"]=value});$.each(pos,function(i,
value){if(positionMap.hasOwnProperty(value))$.extend(mix,positionMap[value])});pos=pos.top?$.extend(pos,mix):mix;pos=$.extend({top:"50%",left:"50%"},pos);$(self.image).css({position:"relative",top:getPosition(pos.top,"height",height)-options.margin,left:getPosition(pos.left,"width",width)-options.margin});self.show();self.ready=true;options.complete.call(self,self)},error:function(){Galleria.raise("Could not scale image: "+self.image.src)},timeout:1E3});return this}};$.extend($.easing,{galleria:function(_,
t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t+b;return-c/2*((t-=2)*t*t*t-2)+b},galleriaIn:function(_,t,b,c,d){return c*(t/=d)*t*t*t+b},galleriaOut:function(_,t,b,c,d){return-c*((t=t/d-1)*t*t*t-1)+b}});$.fn.galleria=function(options){return this.each(function(){var gallery=new Galleria;gallery.init(this,options)})};window.Galleria=Galleria})(jQuery);
