(function(w){var E=w(window),u,g,F=-1,o,x,D,v,y,L,s,n=!window.XMLHttpRequest,e=window.opera&&(document.compatMode=="CSS1Compat")&&(w.browser.version>=9.3),m=document.documentElement,l={},t=new Image(),J=new Image(),H,a,h,q,I,d,G,c,A,K;w(function(){w("body").append(w([H=w('<div id="lbOverlay" />')[0],a=w('<div id="lbCenter" />')[0],G=w('<div id="lbBottomContainer" />')[0]]).css("display","none"));h=w('<div id="lbImage" />').appendTo(a).append(q=w('<div style="position: relative;" />').append([I=w('<a id="lbPrevLink" href="#" />').click(B)[0],d=w('<a id="lbNextLink" href="#" />').click(f)[0]])[0])[0];c=w('<div id="lbBottom" />').appendTo(G).append([w('<a id="lbCloseLink" href="#" />').add(H).click(C)[0],A=w('<div id="lbCaption" />')[0],K=w('<div id="lbNumber" />')[0],w('<div style="clear: both;" />')[0]])[0]});w.slimbox=function(O,N,M){u=w.extend({loop:false,overlayOpacity:0.8,overlayFadeDuration:400,resizeDuration:400,resizeEasing:"swing",initialWidth:250,initialHeight:250,imageFadeDuration:400,captionAnimationDuration:400,counterText:"Zdjęcie {x} z {y}",closeKeys:[27,88,67],previousKeys:[37,80],nextKeys:[39,78]},M);if(typeof O=="string"){O=[[O,N]];N=0}y=E.scrollTop()+((e?m.clientHeight:E.height())/2);L=u.initialWidth;s=u.initialHeight;w(a).css({top:Math.max(0,y-(s/2)),width:L,height:s,marginLeft:-L/2}).show();v=n||(H.currentStyle&&(H.currentStyle.position!="fixed"));if(v){H.style.position="absolute"}w(H).css("opacity",u.overlayOpacity).fadeIn(u.overlayFadeDuration);z();k(1);g=O;u.loop=u.loop&&(g.length>1);return b(N)};w.fn.slimbox=function(M,P,O){P=P||function(Q){return[Q.href,Q.title]};O=O||function(){return true};var N=this;return N.unbind("click").click(function(){var S=this,U=0,T,Q=0,R;T=w.grep(N,function(W,V){return O.call(S,W,V)});for(R=T.length;Q<R;++Q){if(T[Q]==S){U=Q}T[Q]=P(T[Q],Q)}return w.slimbox(T,U,M)})};function z(){var N=E.scrollLeft(),M=e?m.clientWidth:E.width();w([a,G]).css("left",N+(M/2));if(v){w(H).css({left:N,top:E.scrollTop(),width:M,height:E.height()})}}function k(M){w("object").add(n?"select":"embed").each(function(O,P){if(M){w.data(P,"slimbox",P.style.visibility)}P.style.visibility=M?"hidden":w.data(P,"slimbox")});var N=M?"bind":"unbind";E[N]("scroll resize",z);w(document)[N]("keydown",p)}function p(O){var N=O.keyCode,M=w.inArray;return(M(N,u.closeKeys)>=0)?C():(M(N,u.nextKeys)>=0)?f():(M(N,u.previousKeys)>=0)?B():false}function B(){return b(x)}function f(){return b(D)}function b(M){if(M>=0){F=M;o=g[F][0];x=(F||(u.loop?g.length:0))-1;D=((F+1)%g.length)||(u.loop?0:-1);r();a.className="lbLoading";l=new Image();l.onload=j;l.src=o}return false}function j(){a.className="";w(h).css({backgroundImage:"url("+o+")",visibility:"hidden",display:""});w(q).width(l.width);w([q,I,d]).height(l.height);w(A).html(g[F][1]||"");w(K).html((((g.length>1)&&u.counterText)||"").replace(/{x}/,F+1).replace(/{y}/,g.length));if(x>=0){t.src=g[x][0]}if(D>=0){J.src=g[D][0]}L=h.offsetWidth;s=h.offsetHeight;var M=Math.max(0,y-(s/2));if(a.offsetHeight!=s){w(a).animate({height:s,top:M},u.resizeDuration,u.resizeEasing)}if(a.offsetWidth!=L){w(a).animate({width:L,marginLeft:-L/2},u.resizeDuration,u.resizeEasing)}w(a).queue(function(){w(G).css({width:L,top:M+s,marginLeft:-L/2,visibility:"hidden",display:""});w(h).css({display:"none",visibility:"",opacity:""}).fadeIn(u.imageFadeDuration,i)})}function i(){if(x>=0){w(I).show()}if(D>=0){w(d).show()}w(c).css("marginTop",-c.offsetHeight).animate({marginTop:0},u.captionAnimationDuration);G.style.visibility=""}function r(){l.onload=null;l.src=t.src=J.src=o;w([a,h,c]).stop(true);w([I,d,h,G]).hide()}function C(){if(F>=0){r();F=x=D=-1;w(a).hide();w(H).stop().fadeOut(u.overlayFadeDuration,k)}return false}})(jQuery);
jQuery(function($) { $("a[rel^='lightbox']").slimbox({/* Put custom options here */}, null, function(el) { return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel)); }); });

/*
---

name: Zoomer
description: Class to show zoomed image inside original. MooTools Zoomer port
license: MIT-Style License (http://mifjs.net/license.txt)
copyright: Anton Samoylov (http://mifjs.net)
authors: Anton Samoylov (http://mifjs.net)
requires: jQuery1.4
provides: Zoomer

...
*/

var Zoomer = function(element, options){
	this.initialize.apply(this, arguments);
	return this;
};


Zoomer.prototype = {

	version: '1.8.2',

	initialize: function(element, options){
		var dflt = {
			smooth: 6
		};
		this.options = $.extend(dflt, options || {});
		this.small = $(element);
		var self = this;
		if(!this.small[0].complete){
			this.small.bind('load', function(){
				self.prepareSmall();
			});
		}else{
			this.prepareSmall();
		}
		var src = this.options.big || this.small.attr('big');
		var img = new Image();
		img.src = src;
		this.big = $(img).css({
			position: 'absolute',
			top: 0,
			left: 0,
			cursor: 'crosshair'
		}).hide();
		if(!this.big[0].complete){
			this.big.bind('load', function(){
				self.prepareBig();
			});
		}else{
			this.prepareBig();
		}
	},

	prepareSmall: function(){
		this.small.wrap('<div class="zoomer-wrapper"></div>');
		this.wrapper = this.small.parent();
		var self = this;
		function getComputedStyle(element, property){
			if (element.currentStyle) return element.currentStyle[property];
			var computed = document.defaultView.getComputedStyle(element, null);
			return (computed) ? computed.getPropertyValue(property) : null;
		};
		$.each(['margin', 'left', 'top', 'bottom', 'right', 'float', 'clear', 'border', 'padding'], function(i, p){
			var style;
			if($.inArray(p, ['left', 'top', 'bottom', 'right']) != -1){
				style = getComputedStyle(self.small[0], p);
			}else{
				style = self.small.css(p);
			}
			if(p == 'margin' && style == 'auto') return;
			var dflt = 'auto';
			if($.inArray(p, ['float', 'clear', 'border']) != -1) dflt = 'none';
			if(p == 'padding') dflt = '0';
			try{
				self.small.css(p, dflt);
				self.wrapper.css(p, style);
			}catch(e){};
		});
		this.wrapper.css({
			width: this.small[0].offsetWidth,
			height: this.small[0].offsetHeight,
			position: 'relative',
			overflow: 'hidden'
		});
		this.smallSize = {
			width: this.small[0].width,
			height: this.small[0].height
		};
		if(this.bigPrepared){
			this.ready();
		}else{
			this.smallPrepared = true;
		}
	},

	prepareBig: function(){
		this.bigSize = {
			width: this.big[0].width,
			height: this.big[0].height
		};
		if(this.smallPrepared){
			this.ready();
		}else{
			this.bigPrepared = true;
		}
	},

	ready: function(){
		this.big.appendTo(this.wrapper);
		this.big.wrap('<div class="zoomer-wrapper-big"></div>');
		this.bigWrapper = this.big.parent();
		this.bigWrapper.css({
			position: 'absolute',
			overflow: 'hidden',
			top: this.small.offset().top - this.wrapper.offset().top - parseInt(this.wrapper.css('border-top-width'), 10) || 0,
			left: this.small.offset().left - this.wrapper.offset().left - parseInt(this.wrapper.css('border-left-width'), 10) || 0,
			width: this.small[0].offsetWidth,
			height: this.small[0].offsetHeight,
			background: 'url("' + this.small.attr('src') + '")'
		}).mouseenter($.proxy(this.startZoom, this))
		.mouseleave($.proxy(this.stopZoom, this))
		.mousemove($.proxy(this.move, this));
	},

	move: function(event){
		this.dstPos = {x: event.pageX, y: event.pageY};
	},

	startZoom: function(){
		this.position = this.small.offset();

		/** precalculations **/
		this.ratio = {
			x: 1 - this.bigSize.width / this.smallSize.width,
			y: 1 - this.bigSize.height / this.smallSize.height
		};
		this.current = {
			left: parseInt(this.big.css('left'), 10),
			top: parseInt(this.big.css('top'), 10)
		};

		this.timer = setInterval($.proxy(this.zoom, this), 10);
		this.big.fadeIn();
	},

	stopZoom: function(){
		clearInterval(this.timer);
		this.big.fadeOut();
	},

	zoom: function(){
		if(!this.dstPos) return;
		var steps = this.options.smooth;
		var dst = {
			left: parseInt((this.dstPos.x - this.position.left) * this.ratio.x, 10),
			top: parseInt((this.dstPos.y - this.position.top) * this.ratio.y, 10)
		};
		this.current.left -= (this.current.left - dst.left) / steps;
		this.current.top -= (this.current.top - dst.top) / steps;

		this.big.css(this.current);
	}

};

$.fn.zoomer = function(options){
	for(var i = 0, l = this.length; i < l; i++){
		new Zoomer(this[i], options);
	}
};

