
function Options()
{this.setOptions=function(thisOptions,options){for(var option in options){thisOptions[option]=options[option];}}}
function toggleSlide(button,el,options)
{var element=$(el);this.options={buttonInClass:'link small-black',buttonOutClass:'link small-black arrow-down',labelIn:false,labelOut:false,duration:'fast'};if(options)new Options().setOptions(this.options,options);button.toggleClass(this.options.buttonInClass);button.toggleClass(this.options.buttonOutClass);element.slideToggle(this.options.duration);var expanded=false;if(button.hasClass(this.options.buttonOutClass))expanded=true;if(expanded&&this.options.labelOut!=false)button.text(this.options.labelOut);else if(this.options.labelIn!=false)button.text(this.options.labelIn);}
function scrollBy(el,x,y,options)
{this.options={checkBounds:true,duration:"def",grid:false}
if(options)new Options().setOptions(this.options,options);el=$(el);if(this.options.grid>0){x=x*this.options.grid;y=y*this.options.grid;}
var scroll={x:el.scrollLeft()+x,y:el.scrollTop()+y};el.animate({scrollLeft:scroll.x,scrollTop:scroll.y},this.options.duration);}
function scrollTo(el,x,y,options)
{this.options={duration:"def",stop:true}
if(options)new Options().setOptions(this.options,options);el=$(el);if(this.options.stop)el.stop();el.animate({scrollLeft:x,scrollTop:y},this.options.duration);}
function moveTo(el,x,y,options)
{this.options={duration:"def"}
if(options)new Options().setOptions(this.options,options);el=$(el);el.animate({left:x,top:y},this.options.duration);}
function widthFromContent(element)
{var width=0;element.children().each(function(i,child){child=$(child);width+=child.outerWidth()+parseFloat(child.css('margin-left'))+parseFloat(child.css('margin-right'));});element.css('width',width+'px');}
function gallery(options)
{this.options={image:'.gallery-image img',thumbsContainer:'.gallery-thumbs',thumbs:'.gallery-thumbs div.item',thumbWidth:99,handle:'.gallery-slider .handle',range:'.gallery-slider .range',images:[],duration:"def"}
if(options)new Options().setOptions(this.options,options);this.current=0;this.last=$(this.options.thumbs).length-3;this.thumbsContainer=$(this.options.thumbsContainer);this.image=$(this.options.image);this.thumbs=$(this.options.thumbs);this.handle=$(this.options.handle);this.range=$(this.options.range);this.handleStep=(this.range.width()-this.handle.width())/this.last;var _this=this;this.range.bind('click.gallery',function(e){_this.onRangeClick(e);});this.handle.bind('mousedown.gallery',function(e){_this.onHandleDown(e);});this.handle.bind('mouseup.gallery',function(e){_this.onHandleUp(e);});this.back=function()
{if(this.current>0)this.to(this.current-1);}
this.forward=function()
{if(this.current<this.last)this.to(this.current+1);}
this.to=function(i)
{if(i!=this.current&&i>=0&&i<=this.last){scrollTo(this.thumbsContainer,i*this.options.thumbWidth,0,{duration:this.options.duration});var mask;for(var ii=0;ii<this.thumbs.length;ii++){mask=$(this.thumbs[ii]).find('.mask');if((ii-1)==i){if(!mask.hasClass('active'))mask.addClass('active');}else if(mask.hasClass('active'))mask.removeClass('active');}
this.image.attr('src',this.options.images[i].src);this.image.attr('alt',this.options.images[i].alt);this.current=i;this.handle.stop();this.handle.animate({'left':this.handleStep*i},this.options.duration);}}
this.onRangeClick=function(e)
{var offset=this.range.offset();var mouseX=e.pageX-offset.left;var step=mouseX/this.handleStep;this.to(Math.round(step));}
this.onHandleDown=function(e)
{var _this=this;this.range.bind('mousemove.gallery',function(e){_this.onHandleMove(e);});$('body').bind('mouseup.gallery',function(e){_this.onHandleUp(e);});}
this.onHandleUp=function(e)
{this.range.unbind('mousemove.gallery');$('body').unbind('mouseup.gallery');}
this.onHandleMove=function(e)
{var offset=this.range.offset();var mouseX=e.pageX-offset.left;var step=mouseX/this.handleStep;this.to(Math.round(step));}}
function Lightbox(imgs,speed,offset){var self=this;this.speed=speed||500;this.offset=offset||20;this.offset_before=0;this.current=0;this.images=imgs;this.cache=new Image();this.prepare=function(){$('body').prepend('<div id="lightbox-viewport">&nbsp;</div><div id="lightbox-container" class="wrapper"><div id="lightbox-background-container">&nbsp;</div><div id="lightbox-image-container"><img src="" alt="#" /><div id="image-caption"></div></div><div id="lightbox-controls"><a href="#" id="lightbox-close">schlie&szlig;en</a><a href="#" id="lightbox-prev">zur&uuml;ck</a><a href="#" id="lightbox-next">vor</a></div></div>');self.el_viewport=$('#lightbox-viewport').hide();self.el_container=$('#lightbox-container').hide();self.el_background_container=this.el_container.find('#lightbox-background-container').addClass('lightbox-load');self.el_image_container=this.el_container.find('#lightbox-image-container');self.el_caption=self.el_image_container.find('#image-caption').hide();self.el_image=self.el_image_container.find('img').hide();self.el_controls=self.el_container.find('#lightbox-controls');self.el_close=self.el_controls.find('#lightbox-close');self.el_prev=self.el_controls.find('#lightbox-prev').hide();self.el_next=self.el_controls.find('#lightbox-next').hide();}
this.open=function(clbk){self.offset_before=$(document).scrollTop();self.el_viewport.show().css({'height':$('html, body').height(),'width':$('html, body').width()});if(self.offset_before==self.offset)
self.el_container.fadeIn(self.speed,clbk);else $('html, body').animate({'scrollTop':self.offset},self.speed,function(){self.el_container.fadeIn(self.speed,clbk);});}
this.close=function(clbk){self.el_viewport.hide();if(self.offset_before==self.offset)
self.el_container.fadeOut(self.speed,clbk);else self.el_container.fadeOut(self.speed,function(){$('html, body').animate({'scrollTop':self.offset_before},self.speed,clbk);});}
this.hide=function(clbk){self.el_background_container.addClass('lightbox-load');self.el_image.animate({'opacity':0},self.speed);self.el_caption.animate({'opacity':0},self.speed,clbk);}
this.show=function(clbk){if(self.el_container.is(':visible'))
self.el_container.animate({'height':((self.el_image_container.height()+40)<500?500:self.el_image_container.height()+40)+'px'},self.speed,function(){self.el_image.animate({'opacity':1},self.speed,function(){self.el_background_container.removeClass('lightbox-load');self.el_caption.animate({'opacity':1},self.speed,clbk);});});else self.open(function(){self.show(clbk);});}
this.update=function(){self.el_image.css('opacity',0).show().attr({'src':self.cache.src});self.el_caption.css('opacity',0).show().html(self.images.eq(self.current).attr('title'));self.show();}
this.load=function(clbk){self.cache=new Image();self.cache.onload=clbk;self.cache.src=self.images.eq(self.current).attr('href');}
this.prepare();this.el_close.click(function(ev){ev.preventDefault();self.close();});this.el_viewport.click(function(ev){ev.preventDefault();self.close();});this.images.click(function(ev){ev.preventDefault();self.current=self.images.index($(this));self.load(self.update);});if(this.images.size()>1){this.el_prev.show().click(function(ev){ev.preventDefault();self.current=self.images.eq(self.current-1).size()?self.current-1:self.images.size()-1;self.hide(function(){self.load(self.update);});});this.el_next.show().click(function(ev){ev.preventDefault();self.current=self.images.eq(self.current+1).size()?self.current+1:0;self.hide(function(){self.load(self.update);});});}}
$(document).ready(function(){var imgs=$('a[rel=lightbox]');if(imgs.size())
new Lightbox(imgs,400,325);});
