/*

 * Moonbox: The jQuery Lightbox that rocks all night long.

 *

 * Copyright (c) 2007 Woody Gilk, http://moonbox.googlecode.com

 * Licensed under the new BSD license (see LICENSE.txt)

 *

 * $Date: 2007-08-29 18:25:25 -0500 (Wed, 29 Aug 2007) $

 * $Rev: 81 $

 */

(function($){

// Moonbox object

$.Moonbox = {

	loaded:   false, // i haz loaded?

	visible:  false, // i are hiding?

	settings: {},    // Moonbox settings

	box: { // Box object caches

		overlay: false,

		wrapper: false,

		image:   false,

		bottom:  false,

		caption: false

	},

	preload: { // Preload objects

		open: false,

		next: false,

		prev: false

	},

	anchors: {}, // Triggering anchors

	images:  [], // Current image set

	current: 0,  // Current image index

	step:    -1, // Effects step

	init: function(options){

		if ($.Moonbox.loaded == false){

			// Make sure that we have valid anchors

			if (($.Moonbox.anchors = $('a[@rel^=lightbox]')).length < 1) return false;

			// Extend defaults with user options

			$.Moonbox.settings = $.extend({

				initialWidth:   300,

				initialHeight:  150,

				resizeDuration: 400,

				resizeEasing:   'linear',

				animateCaption: true,

				showCounter:    true

			}, options || {});

			// Add lightbox overlay and wrapper into the DOM

			$('body').append(

				'<div id="moonBox_overlay"></div>' +

				'<div id="moonBox_wrapper">' +

					'<div id="moonBox_loading"></div>' +

					'<div id="moonBox_image">' +

						'<a id="moonBox_prev" href="#mbPrev">Prev</a>' +

						'<a id="moonBox_next" href="#mbNext">Next</a>' +

					'</div>' +

					'<div id="moonBox_bottom">' +

						'<a id="moonBox_close" href="#mbClose">Close</a>' +

						'<div id="moonBox_caption"></div>' +

						'<div id="moonBox_number"></div>' +

						'<div class="moonBox_clear"></div>' +

					'</div>' +

				'</div>'

			);

			// Cache our two main objects so that we don't have to keep querying for them

			$.Moonbox.box.wrapper   = $('#moonBox_wrapper');

			$.Moonbox.box.overlay   = $('#moonBox_overlay');

			$.Moonbox.box.loading   = $('#moonBox_loading', $.Moonbox.box.wrapper);

			$.Moonbox.box.image     = $('#moonBox_image',   $.Moonbox.box.wrapper);

			$.Moonbox.box.bottom    = $('#moonBox_bottom',  $.Moonbox.box.wrapper);

			$.Moonbox.box.caption   = $('#moonBox_caption', $.Moonbox.box.bottom);

			$.Moonbox.box.number    = $('#moonBox_number',  $.Moonbox.box.bottom);

			$.Moonbox.box.closelink = $('#moonBox_close',   $.Moonbox.box.bottom);

			$.Moonbox.box.prevlink  = $('#moonBox_prev',    $.Moonbox.box.image);

			$.Moonbox.box.nextlink  = $('#moonBox_next',    $.Moonbox.box.image);

			// Set the default width and height on the wrapper

			$.Moonbox.box.wrapper.width($.Moonbox.settings.initialWidth);

			$.Moonbox.box.image.height($.Moonbox.settings.initialHeight);

			// Setup preloading images

			$.Moonbox.preload.open = $('<img>').css({position: 'absolute', top: '-2000em'}).appendTo('body');

			$.Moonbox.preload.next = $.Moonbox.preload.open.clone();

			$.Moonbox.preload.prev = $.Moonbox.preload.open.clone();

			// Bind window resizing and scrolling

			$(window).resize($.Moonbox.position).scroll($.Moonbox.position);

			// Set wrapper position

			$.Moonbox.box.wrapper.css('margin-left', -($.Moonbox.settings.initialWidth/2));

			// Make sure that IE will properly clear the things it needs to

			if ($.browser.msie) $('#moonBox_clear', $.Moonbox.box.bottom).css('zoom', 1);

			// Close Moonbox when clicking on overlay

			$.Moonbox.box.overlay.click($.Moonbox.close);

			// Bind previous, next, and close links

			$.Moonbox.box.nextlink.click($.Moonbox.next);

			$.Moonbox.box.prevlink.click($.Moonbox.prev)

			$.Moonbox.box.closelink.click($.Moonbox.close);

			// Bind hovering to previous and next links

			/*
			$('#moonBox_prev, #moonBox_next').css('opacity', 0).hover(function(){

				$(this).css('opacity', 1);

			}, function(){

				$(this).css('opacity', 0);

			});
			*/

			// Find all lightbox links and bind

			$.Moonbox.anchors.each(function(){

				$(this).click($.Moonbox.click);

			});

			// i iz loaded!

			$.Moonbox.loaded = true;

		}

	},

	show: function(url, title){

		// Display the given image

		$.Moonbox.images  = [[url, title]];

		$.Moonbox.current = 0;

		return $.Moonbox.open();

	},

	click: function(){

		if (!$.Moonbox.loaded) return false;

		// Not part of a set, just show the image

		if (this.rel.length == 8) return $.Moonbox.show(this.href, this.title);

		// The source of clicked link

		var clicked = this.href;

		// Prepare the image set

		$.Moonbox.images = [];

		$.Moonbox.anchors.filter('a[@rel="'+ this.rel +'"]').each(function(index){

			$.Moonbox.images.push([this.href, this.title]);

			if (clicked == this.href) $.Moonbox.current = index;

		});

		// Open that image!

		return $.Moonbox.open();

	},

	open: function(){

		// Make sure we have a valid set

		if ($.Moonbox.images.length < 1 || $.Moonbox.current > $.Moonbox.images.length) return false;

		// Prepare Moonbox

		$.Moonbox.position();

		$.Moonbox.setup(true);

		// Display that image!

		return $.Moonbox.change();

	},

	change: function(){

		$.Moonbox.step = 1;

		// Hide the current image

		$.Moonbox.box.image.css('opacity', 0);

		$.Moonbox.box.nextlink.css('display', 'none');
		$.Moonbox.box.prevlink.css('display', 'none');

		$.Moonbox.box.bottom.hide();

		// Show loading

		$.Moonbox.box.loading.show();

		// Setup preloading image

		$.Moonbox.preload.open.remove();

		$.Moonbox.preload.open = $('<img>').css({position: 'absolute', top: '-2000em'}).appendTo('body').load($.Moonbox.effects);

		// Start preloading

		$.Moonbox.preload.open.attr('src', $.Moonbox.images[$.Moonbox.current][0]);

		return false;

	},

	effects: function(){

		switch($.Moonbox.step){

			case 1:

				// Hide loading

				$.Moonbox.box.loading.hide();

				// Hide the image while showing it

				$.Moonbox.box.image.css('background-image', 'url('+ $.Moonbox.images[$.Moonbox.current][0] +')');

				// Animate width

				$.Moonbox.box.wrapper.animate({

					width: $.Moonbox.preload.open.width(),

					marginLeft: -($.Moonbox.preload.open.width()/2)

				}, $.Moonbox.settings.resizeDuration, $.Moonbox.settings.resizeEasing, $.Moonbox.effects);

				// Next step

				$.Moonbox.step++;

				// Set caption

				$.Moonbox.box.caption.html($.Moonbox.images[$.Moonbox.current][1] || '');

				$.Moonbox.box.number.html(($.Moonbox.settings.showCounter && ($.Moonbox.images.length > 1) ? 'Zdjęcie '+ ($.Moonbox.current+1) +' z '+ $.Moonbox.images.length : ''));

				// Start next/prev preloading

				$.Moonbox.preload.next.src = (($.Moonbox.images.length - 1) != $.Moonbox.current)

					? $.Moonbox.images[$.Moonbox.current + 1] : '';

				$.Moonbox.preload.prev.src = ($.Moonbox.current)

					? $.Moonbox.images[$.Moonbox.current - 1] : '';

			break;

			case 2:

				// Animate height

				$.Moonbox.box.image.css('width', $.Moonbox.preload.open.width()).animate({

					height: $.Moonbox.preload.open.height()

				}, $.Moonbox.settings.resizeDuration, $.Moonbox.settings.resizeEasing, $.Moonbox.effects);

				// Next step

				$.Moonbox.step++;

			break;

			case 3:

				// Display the image

				$.Moonbox.box.image.animate({

					opacity: 1

				}, $.Moonbox.settings.resizeDuration, $.Moonbox.settings.resizeEasing, $.Moonbox.effects);

				// Next step

				$.Moonbox.step++;

				// Reset next/prev link heights

				$.Moonbox.box.nextlink.css('height', $.Moonbox.preload.open.height());

				$.Moonbox.box.prevlink.css('height', $.Moonbox.preload.open.height());

				// Show the bottom

				if ($.Moonbox.settings.animateCaption) $.Moonbox.box.bottom.slideDown($.Moonbox.settings.resizeDuration)

				else $.Moonbox.box.bottom.show();					
			break;

			case 4:

				// Show prev/next buttons

				if ($.Moonbox.preload.next.src) $.Moonbox.box.nextlink.css('display', 'block');
				if ($.Moonbox.preload.prev.src) $.Moonbox.box.prevlink.css('display', 'block');

			break;

		}

	},

	next: function(){

		$.Moonbox.current++;

		return $.Moonbox.change();

	},

	prev: function(){

		$.Moonbox.current--;

		return $.Moonbox.change();

	},

	close: function(){

		if ($.Moonbox.loaded && $.Moonbox.step > -1){

			// Hide wrapper, then overlay

			$.Moonbox.box.wrapper.hide();

			$.Moonbox.box.overlay.fadeTo(500, 0, function(){

				$.Moonbox.box.overlay.css('display', 'none');

			});

			$.Moonbox.step = -1;

		}

		return false;

	},

	setup: function(open){

		// Hide objects that could cause improper rendering

		($.browser.msie ? $('object, select') : $('object, embed')).each(function(){

			var object = $(this)

			if (open) object.moon_visbility = object.css('visibility');

			object.css('visibility', (open ? 'hidden' : object.moon_visibility));

		});

		// Set the top of the wrapper

		$.Moonbox.box.wrapper.css('top', $(window).scrollTop() + ($(window).height() / 15));

		// Show Moonbox

		if ($.Moonbox.step == -1){

			// Show overlay, then wrapper

			$.Moonbox.box.overlay.css({'opacity': 0, 'display': 'block'}).fadeTo(500, 0.9, function(){

				$.Moonbox.box.wrapper.show();

			});

		}

		$.Moonbox.step = 0;

	},

	position: function(){

		// Reset the position of the overlay

		$.Moonbox.box.overlay.css({

			top:    $(window).scrollTop(),

			height: $(window).height(),

			width:  $(window).width()

		});

	}

};

// Initialize Moonbox!

$(document).ready($.Moonbox.init);

})(jQuery);

