(function(){var initializing=false,fnTest=/xyz/.test(function(){xyz})?/\b__super\b/:/.*/,Class=function(){},window=this;Class.extend=function(prop){var __super=this.prototype;initializing=true;var proto=new this();initializing=false;for(var name in prop){if(name){proto[name]=typeof prop[name]=="function"&&typeof __super[name]=="function"&&fnTest.test(prop[name])?(function(name,fn){return function(){var tmp=this.__super;this.__super=__super[name];var ret=fn.apply(this,arguments);this.__super=tmp;return ret}})(name,prop[name]):prop[name]}}function Class(){if(!initializing&&this.__constructor){this.__constructor.apply(this,arguments)}}Class.prototype=proto;Class.constructor=Class;Class.extend=arguments.callee;return Class};var Base=Class.extend({loop:function(elem,fn){var scope=this;if(typeof elem=='number'){elem=new Array(elem)}jQuery.each(elem,function(){fn.call(scope,arguments[1],arguments[0])});return elem},create:function(elem,className){elem=elem||'div';var el=document.createElement(elem);if(className){el.className=className}return el},getElements:function(selector){var elems={};this.loop(jQuery(selector),this.proxy(function(elem){this.push(elem,elems)}));return elems},setStyle:function(elem,css){jQuery(elem).css(css);return this},cssText:function(string){var style=document.createElement('style');this.getElements('head')[0].appendChild(style);if(style.styleSheet){style.styleSheet.cssText=string}else{var cssText=document.createTextNode(string);style.appendChild(cssText)}return this},cssFile:function(src){var link=document.createElement('link');link.media='all';link.rel='stylesheet';link.href=src;this.getElements('head')[0].appendChild(link)},moveOut:function(elem){return this.setStyle(elem,{position:'absolute',left:'-10000px'})},moveIn:function(elem){return this.setStyle(elem,{left:'0'})},reveal:function(elem){return jQuery(elem).show()},hide:function(elem){return jQuery(elem).hide()},mix:function(obj,ext){return jQuery.extend(obj,ext)},proxy:function(fn,scope){if(typeof fn!=='function'){return function(){}}scope=scope||this;return function(){return fn.apply(scope,Array.prototype.slice.call(arguments))}},listen:function(elem,type,fn){jQuery(elem).bind(type,fn)},forget:function(elem,type){jQuery(elem).unbind(type)},dispatch:function(elem,type){jQuery(elem).trigger(type)},clone:function(elem,keepEvents){keepEvents=keepEvents||false;return jQuery(elem).clone(keepEvents)[0]},removeAttr:function(elem,attributes){this.loop(attributes.split(' '),function(attr){jQuery(elem).removeAttr(attr)})},push:function(elem,obj){if(typeof obj.length=='undefined'){obj.length=0}Array.prototype.push.call(obj,elem);return elem},width:function(elem,outer){return this.meassure(elem,outer,'Width')},height:function(elem,outer){return this.meassure(elem,outer,'Height')},meassure:function(el,outer,meassure){var elem=jQuery(el);var ret=outer?elem['outer'+meassure](true):elem[meassure.toLowerCase()]();if(G.QUIRK){var which=meassure=="Width"?["left","right"]:["top","bottom"];this.loop(which,function(s){ret+=elem.css('border-'+s+'-width').replace(/[^\d]/g,'')*1;ret+=elem.css('padding-'+s).replace(/[^\d]/g,'')*1})}return ret},toggleClass:function(elem,className,arg){if(typeof arg!=='undefined'){var fn=arg?'addClass':'removeClass';jQuery(elem)[fn](className);return this}jQuery(elem).toggleClass(className);return this},hideAll:function(el){jQuery(el).find('*').hide()},animate:function(el,options){var elem=jQuery(el);if(!elem.length){return}if(options.from){elem.css(from)}elem.animate(options.to,{duration:options.duration||400,complete:options.complete||function(){}})},wait:function(fn,callback,max){fn=this.proxy(fn);callback=this.proxy(callback);var ts=new Date().getTime()+(max||3000);window.setTimeout(function(){if(fn()||new Date().getTime()>=ts){callback();return false}window.setTimeout(arguments.callee,1)},1);return this},getScript:function(url,callback){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=url;callback=this.proxy(callback);{var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;callback();script.onload=script.onreadystatechange=null}}}head.appendChild(script);return this}});var Picture=Base.extend({__constructor:function(order){this.image=null;this.elem=this.create('div','galleria-image');this.setStyle(this.elem,{overflow:'hidden',position:'relative'});this.order=order;this.orig={w:0,h:0,r:1}},cache:{},add:function(src){if(this.cache[src]){return this.cache[src]}var image=new Image();image.src=src;this.setStyle(image,{display:'block'});if(image.complete&&image.width){this.cache[src]=image;return image}image.onload=(function(scope){return function(){scope.cache[src]=image}})(this);return image},isCached:function(src){return this.cache[src]?this.cache[src].complete:false},make:function(src){var i=this.cache[src]||this.add(src);return this.clone(i)},load:function(src,callback){callback=this.proxy(callback);this.elem.innerHTML='';this.image=this.make(src);this.moveOut(this.image);this.elem.appendChild(this.image);this.wait(function(){return(this.image.complete&&this.image.width)},function(){this.orig={h:this.image.height,w:this.image.width};callback({target:this.image,scope:this})});return this},scale:function(w,h,crop,max,margin,complete){margin=margin||0;complete=complete||function(){};if(!this.image){return this}this.wait(function(){width=w||this.width(this.elem);height=h||this.height(this.elem);return width&&height},function(){var ratio=Math[(crop?'max':'min')](width/this.orig.w,height/this.orig.h);if(max){ratio=Math.min(max,ratio)}this.setStyle(this.elem,{width:width,height:height});this.image.width=Math.ceil(this.orig.w*ratio)-margin*2;this.image.height=Math.ceil(this.orig.h*ratio)-margin*2;this.setStyle(this.image,{position:'relative',top:Math.round(this.image.height*-1/2+(height/2))-margin,left:Math.round(this.image.width*-1/2+(width/2))-margin});complete.call(this)});return this}});var tID;var G=window.Galleria=Base.extend({__constructor:function(options){if(typeof options.target==='undefined'){throw Error('No target.');}this.playing=false;this.playtime=3000;this.active=null;this.queue={};this.data={};this.dom={};this.controls={active:0,swap:function(){this.active=this.active?0:1},getActive:function(){return this[this.active]},getNext:function(){return this[Math.abs(this.active-1)]}};this.thumbnails={};this.options=this.mix({preload:2,image_crop:false,thumb_crop:true,thumb_quality:'auto',image_margin:0,thumb_margin:0,transition:G.transitions.fade,transition_speed:400,carousel:true,carousel_speed:200,carousel_steps:'auto',carousel_follow:true,popup_links:false,max_scale_ratio:undefined,thumbnails:true,data_type:'auto',data_image_selector:'img',data_source:options.target,data_config:function(elem){return{}},queue:true,remove_original:true},options);this.target=this.dom.target=this.getElements(this.options.target)[0];if(!this.target){throw Error('Target not found.');}this.stageWidth=0;this.stageHeight=0;var elems='container stage images image-nav image-nav-left image-nav-right '+'info info-link info-text info-title info-description info-author info-close '+'thumbnails thumbnails-list thumbnails-container thumb-nav-left thumb-nav-right '+'loader counter';elems=elems.split(' ');this.loop(elems,function(blueprint){this.dom[blueprint]=this.create('div','galleria-'+blueprint)})},bind:function(type,fn){this.listen(this.get('container'),type,this.proxy(fn));return this},trigger:function(type){type=typeof type=='object'?this.mix(type,{scope:this}):{type:type,scope:this};this.dispatch(this.get('container'),type);return this},run:function(){var o=this.options;if(!this.data.length){throw Error('Data is empty.');}this.target.innerHTML='';this.loop(2,function(){var image=new Picture();this.setStyle(image.elem,{position:'absolute',top:0,left:0});this.setStyle(this.get('images'),{position:'relative',top:0,left:0,width:'100%',height:'100%'});this.get('images').appendChild(image.elem);this.push(image,this.controls)},this);for(var i=0;this.data[i];i++){var thumb;if(o.thumbnails){thumb=new Picture(i);var src=this.data[i].thumb||this.data[i].image;this.get('thumbnails').appendChild(thumb.elem);thumb.load(src,this.proxy(function(e){var orig=this.width(e.target);e.scope.scale(null,null,o.thumb_crop,o.max_scale_ratio,o.thumb_margin,this.proxy(function(){this.toggleQuality(e.target,o.thumb_quality===true||(o.thumb_quality=='auto'&&orig<e.target.width*3));this.trigger({type:G.THUMBNAIL,thumbTarget:e.target,thumbOrder:e.scope.order})}))}));if(o.preload=='all'){thumb.add(this.data[i].image)}}else{thumb={elem:this.create('div','galleria-image'),image:this.create('span','img')};thumb.elem.appendChild(thumb.image);this.get('thumbnails').appendChild(thumb.elem)}thumb.elem.rel=i;this.listen(thumb.elem,'click',this.proxy(function(e){var ind=e.currentTarget.rel;if(this.active!==ind){this.show(ind)}}));this.push(thumb,this.thumbnails)}this.build();this.target.appendChild(this.get('container'));this.wait(function(){this.stageWidth=this.width(this.get('stage'));this.stageHeight=this.height(this.get('stage'));return this.stageWidth&&this.stageHeight},function(){var thumbWidth=this.thumbnails[0]?this.width(this.thumbnails[0].elem,true):0;var thumbsWidth=thumbWidth*this.thumbnails.length;if(thumbsWidth<this.stageWidth){o.carousel=false}if(o.carousel){this.toggleClass(this.get('thumbnails-container'),'galleria-carousel');this.carousel={right:this.get('thumb-nav-right'),left:this.get('thumb-nav-left'),overflow:0,setOverflow:this.proxy(function(newWidth){newWidth=newWidth||this.width(this.get('thumbnails-list'));this.carousel.overflow=Math.ceil(((thumbsWidth-newWidth)/thumbWidth)+1)*-1}),pos:0,setClasses:this.proxy(function(){this.toggleClass(this.carousel.left,'disabled',this.carousel.pos===0);this.toggleClass(this.carousel.right,'disabled',this.carousel.pos==this.carousel.overflow+1)}),animate:this.proxy(function(){this.carousel.setClasses();this.animate(this.get('thumbnails'),{to:{left:thumbWidth*this.carousel.pos},duration:o.carousel_speed})})};this.carousel.setOverflow();this.setStyle(this.get('thumbnails-list'),{overflow:'hidden',position:'relative'});this.setStyle(this.get('thumbnails'),{width:thumbsWidth,position:'relative'});this.proxy(function(c,steps){steps=(typeof steps=='string'&&steps.toLowerCase()=='auto')?this.thumbnails.length+c.overflow:steps;c.setClasses();this.loop(['left','right'],this.proxy(function(dir){this.listen(c[dir],'click',function(e){if(c.pos===(dir=='right'?c.overflow:0)){return}c.pos=dir=='right'?Math.max(c.overflow+1,c.pos-steps):Math.min(0,c.pos+steps);c.animate()})}))})(this.carousel,o.carousel_steps)}this.listen(this.get('image-nav-right'),'click',this.proxy(function(){this.next()}));this.listen(this.get('image-nav-left'),'click',this.proxy(function(){this.prev()}));this.trigger(G.READY)},100)},addElement:function(){this.loop(arguments,function(b){this.dom[b]=this.create('div','galleria-'+b)});return this},getDimensions:function(i){return{w:i.width,h:i.height,cw:this.stageWidth,ch:this.stageHeight,top:(this.stageHeight-i.height)/2,left:(this.stageWidth-i.width)/2}},attachKeyboard:function(map){jQuery(document).bind('keydown',{map:map,scope:this},this.keyNav);return this},detachKeyboard:function(){jQuery(document).unbind('keydown',this.keyNav);return this},keyNav:function(e){var key=e.keyCode||e.which;var map=e.data.map;var scope=e.data.scope;var keymap={UP:38,DOWN:40,LEFT:37,RIGHT:39,RETURN:13,ESCAPE:27,BACKSPACE:8};for(var i in map){var k=i.toUpperCase();if(keymap[k]){map[keymap[k]]=map[i]}}if(typeof map[key]=='function'){map[key].call(scope,e)}},build:function(){this.append({'info-text':['info-title','info-description','info-author'],'info':['info-link','info-text','info-close'],'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']})},appendChild:function(parent,child){try{this.get(parent).appendChild(this.get(child))}catch(e){}},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},rescale:function(width,height){var check=this.proxy(function(){this.stageWidth=width||this.width(this.get('stage'));this.stageHeight=height||this.height(this.get('stage'));return this.stageWidth&&this.stageHeight});if(G.WEBKIT){this.wait(check)}else{check.call(this)}this.controls.getActive().scale(this.stageWidth,this.stageHeight,this.options.image_crop,this.options.max_scale_ratio,this.options.image_margin);if(this.carousel){this.carousel.setOverflow()}},show:function(index,rewind){if(!this.options.queue&&this.queue.stalled){return}rewind=typeof rewind!='undefined'?!!rewind:index<this.active;this.active=index;this.push([index,rewind],this.queue);if(!this.queue.stalled){this.showImage()}return this},showImage:function(){var o=this.options;var args=this.queue[0];var index=args[0];var rewind=!!args[1];if(o.carousel&&this.carousel&&o.carousel_follow){this.proxy(function(c){if(index<=Math.abs(c.pos)){c.pos=Math.max(0,(index-1))*-1;c.animate()}else if(index>=this.thumbnails.length+c.overflow+Math.abs(c.pos)){c.pos=this.thumbnails.length+c.overflow-index-1+(index==this.thumbnails.length-1?1:0);c.animate()}})(this.carousel)}var src=this.getData(index).image;var active=this.controls.getActive();var next=this.controls.getNext();var cached=next.isCached(src);if(active.image){this.toggleQuality(active.image,false)}var complete=this.proxy(function(){this.queue.stalled=false;this.toggleQuality(next.image,o.image_quality);this.setStyle(active.elem,{zIndex:0});this.setStyle(next.elem,{zIndex:1});this.moveOut(active.image);this.controls.swap();if(this.getData(index).link){this.setStyle(next.image,{cursor:'pointer'});this.listen(next.image,'click',this.proxy(function(){if(o.popup_links){var win=window.open(this.getData(index).link,'_blank')}else{window.location.href=this.getData(index).link}}))}Array.prototype.shift.call(this.queue);if(this.queue.length){this.showImage()}this.playCheck()});if(typeof o.preload=='number'&&o.preload>0){var p,n=this.getNext();try{for(var i=o.preload;i>0;i--){p=new Picture();p.add(this.getData(n).image);n=this.getNext(n)}}catch(e){}}this.trigger({type:G.LOADSTART,cached:cached,imageTarget:next.image,thumbTarget:this.thumbnails[index].image});next.load(src,this.proxy(function(e){next.scale(this.stageWidth,this.stageHeight,o.image_crop,o.max_scale_ratio,o.image_margin,this.proxy(function(e){this.toggleQuality(next.image,false);this.trigger({type:G.LOADFINISH,cached:cached,imageTarget:next.image,thumbTarget:this.thumbnails[index].image});this.queue.stalled=true;var transition=G.transitions[o.transition]||o.transition;if(typeof transition=='function'){transition.call(this,{prev:active.image,next:next.image,rewind:rewind,speed:o.transition_speed||400},complete)}else{complete()}}));this.setInfo(index);this.get('counter').innerHTML='<span class="current">'+(index+1)+'</span> / <span class="total">'+this.thumbnails.length+'</span>'}))},getNext:function(base){base=base||this.active;return base==this.data.length-1?0:base+1},getPrev:function(base){base=base||this.active;return base===0?this.data.length-1:base-1},next:function(){this.show(this.getNext(),false);return this},prev:function(){this.show(this.getPrev(),true);return this},get:function(elem){return this.dom[elem]||false},getData:function(index){return this.data[index]||this.data[this.active]},play:function(delay){this.playing=true;this.playtime=delay||this.playtime;this.playCheck();return this},pause:function(){this.playing=false;return this},playCheck:function(){if(this.playing){window.clearInterval(tID);tID=window.setTimeout(this.proxy(function(){if(this.playing){this.next()}}),this.playtime)}},setActive:function(val){this.active=val;return this},setInfo:function(index){var data=this.getData(index);var set=this.proxy(function(){this.loop(arguments,function(type){var elem=this.get('info-'+type);var fn=data[type].length?'reveal':'hide';this[fn](elem.innerHTML=data[type])})});set('title','description','author');return this},hasInfo:function(index){var d=this.getData(index);var l=d.title+d.description+d.author;return!!l.length},getDataObject:function(o){var obj={image:'',thumb:'',title:'',description:'',author:'',link:''};return o?this.mix(obj,o):obj},jQuery:function(str){var ret=[];this.loop(str.split(','),this.proxy(function(elem){elem=elem.replace(/^\s\s*/,"").replace(/\s\s*$/,"");if(this.get(elem)){ret.push(elem)}}));var jQ=jQuery(this.get(ret.shift()));this.loop(ret,this.proxy(function(elem){jQ=jQ.add(this.get(elem))}));return jQ},$:function(str){return this.jQuery(str)},toggleQuality:function(img,force){if(!G.IE7||typeof img=='undefined'||!img){return this}if(typeof force==='undefined'){force=img.style.msInterpolationMode=='nearest-neighbor'}img.style.msInterpolationMode=force?'bicubic':'nearest-neighbor';return this},load:function(){var loaded=0;var o=this.options;if((o.data_type=='auto'&&typeof o.data_source=='object'&&!(o.data_source instanceof jQuery)&&!o.data_source.tagName)||o.data_type=='json'||o.data_source.constructor=='Array'){this.data=o.data_source;this.trigger(G.DATA)}else{var images=jQuery(o.data_source).find(o.data_image_selector);var getData=this.proxy(function(elem){var i,j,anchor=elem.parentNode;if(anchor&&anchor.nodeName=='A'){if(anchor.href.match(/\.(png|gif|jpg)/)){i=anchor.href}else{j=anchor.href}}var obj=this.getDataObject({title:elem.title,thumb:elem.src,image:i||elem.src,description:elem.alt,link:j||elem.longdesc});return this.mix(obj,o.data_config(elem))});this.loop(images,function(elem){loaded++;this.push(getData(elem),this.data);if(o.remove_original){elem.parentNode.removeChild(elem)}if(loaded==images.length){this.trigger(G.DATA)}})}}});G.log=function(){try{console.log.apply(console,Array.prototype.slice.call(arguments))}catch(e){try{opera.postError.apply(opera,arguments)}catch(er){alert(Array.prototype.join.call(arguments," "))}}};G.DATA='data';G.READY='ready';G.THUMBNAIL='thumbnail';G.LOADSTART='loadstart';G.LOADFINISH='loadfinish';var nav=navigator.userAgent.toLowerCase();G.IE7=(window.XMLHttpRequest&&document.expando);G.IE6=(!window.XMLHttpRequest);G.IE=!!(G.IE6||G.IE7);G.WEBKIT=/webkit/.test(nav);G.SAFARI=/safari/.test(nav);G.CHROME=/chrome/.test(nav);G.QUIRK=(G.IE&&document.compatMode&&document.compatMode=="BackCompat");G.MAC=/mac/.test(navigator.platform.toLowerCase());var tempPath='';var tempName='';var tempLoading=false;G.themes={create:function(obj){var orig=['name','author','version','defaults','init'];var proto=G.prototype;proto.loop(orig,function(val){if(!obj[val]){throw Error(val+' not specified in theme.');}if(typeof G.themes[obj.name]=='undefined'){G.themes[obj.name]={}}if(val!='name'&&val!='init'){G.themes[obj.name][val]=obj[val]}});if(obj.css){obj.cssPath=tempPath+obj.css;tempPath=''}tempName=obj.name;G.themes[obj.name].init=function(o){if(obj.cssPath){var link=proto.getElements('#galleria-styles');if(link.length){link=link[0]}else{link=proto.create('link');link.id='galleria-styles';link.rel='stylesheet';link.media='screen';proto.getElements('head')[0].appendChild(link)}link.href=obj.cssPath}o=proto.mix(G.themes[obj.name].defaults,o);var gallery=new G(o);gallery.bind(G.DATA,function(){gallery.run()});gallery.bind(G.READY,function(){obj.init.call(gallery,o);if(typeof o.extend=='function'){o.extend.call(gallery,o)}});gallery.load();return gallery}}};G.themes.create({name:'default',author:'Galleria',version:'1.0',defaults:{},init:function(options){var css='.galleria-container{height:500px}'+'.galleria-stage{height:450px}'+'.galleria-thumbnails .galleria-image{width:50px;height:50px;float:left;cursor:pointer;}';this.cssText(css);this.show(0)}});G.loadTheme=function(src){tempLoading=true;tempPath=src.replace(/[^\/]*$/,"");Galleria.prototype.getScript(src,function(){tempLoading=false})};jQuery.easing.galleria=function(x,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};G.transitions={add:function(name,fn){if(name!=arguments.callee.name){this[name]=fn}},fade:function(params,complete){jQuery(params.next).show().css('opacity',0).animate({opacity:1},params.speed,complete);if(params.prev){jQuery(params.prev).css('opacity',1).animate({opacity:0},params.speed)}},flash:function(params,complete){jQuery(params.next).css('opacity',0);if(params.prev){jQuery(params.prev).animate({opacity:0},(params.speed/2),function(){jQuery(params.next).animate({opacity:1},params.speed,complete)})}else{jQuery(params.next).animate({opacity:1},params.speed,complete)}},slide:function(params,complete){var image=jQuery(params.next).parent();var images=this.$('images');var width=this.stageWidth;image.css({left:width*(params.rewind?-1:1)});images.animate({left:width*(params.rewind?1:-1)},{duration:params.speed,queue:false,easing:'galleria',complete:function(){images.css('left',0);image.css('left',0);complete()}})},fadeslide:function(params,complete){if(params.prev){jQuery(params.prev).css({opacity:1,left:0}).animate({opacity:0,left:50*(params.rewind?1:-1)},{duration:params.speed,queue:false,easing:'swing'})}jQuery(params.next).css({left:50*(params.rewind?-1:1),opacity:0}).animate({opacity:1,left:0},{duration:params.speed,complete:complete,queue:false,easing:'swing'})}};G.flickr={key:null,options:{max:30,use_original:false,data_config:function(){}},setOptions:function(o){this.options=Galleria.prototype.mix(this.options,o);return this},search:function(key,params,callback){this.key=key;var obj={};var proto=Galleria.prototype;params=proto.mix({method:'flickr.photos.search',extras:'o_dims, url_t, url_m, url_o',sort:'interestingness-desc'},params);this.load(key,params,function(data){var photos=data.photos.photo;var len=Math.min(this.options.max,photos.length);for(var i=0;i<len;i++){var item=proto.getDataObject({thumb:photos[i].url_t,image:(photos[i].url_o&&this.options.use_original)?photos[i].url_o:photos[i].url_m,title:photos[i].title});proto.push(proto.mix(item,this.options.data_config(photos[i])),obj)}callback(obj)});return this},load:function(key,params,callback){var url='http://api.flickr.com/services/rest/?';var scope=this;params=$.extend({format:'json',jsoncallback:'?',api_key:key||this.key},params);jQuery.each(params,function(key,value){url+='&'+key+'='+value});jQuery.getJSON(url,function(data){if(data.stat=='ok'){callback.call(scope,data)}else{throw Error('Flickr data failed. Check API Key.');}});return this}};jQuery.fn.galleria=function(){var selector=this.selector;var a=arguments;G.prototype.wait(function(){return!tempLoading},function(){var hasTheme=typeof a[0]=='string';var theme=hasTheme?a[0]:tempName;var options=hasTheme?a[1]||{}:a[0]||{};if(typeof G.themes[theme]=='undefined'){throw Error('Theme '+theme+' not found.');}options=G.prototype.mix(options,{target:selector});return G.themes[theme].init(options)})}})();
