//
//
//
var FatboxGallery = {

	//
	//
	//
	cache: {},

	//
	//
	//
	buildInterface: function(parameter, event, notify)
	{
		var $galleryInterface = FatboxGallery.getCachedInterface(parameter.caller);
		$('#fatbox-content').append($galleryInterface);

		$galleryInterface.find('div.gallery-thumbnails li.current').removeClass('current');

		$items = $galleryInterface.find('div.gallery-thumbnails li a');
		$items.each(
			function(index)
			{
				var $this = $(this);
				if ($this.attr('href').indexOf(parameter.caller.attr('href')) != -1)
				{
					$this.parents('li').addClass('current');
					$this.find('img').css('opacity', 1);
				}
			}
		);

		$galleryInterface.find('div.gallery-imagetext').html(
			$galleryInterface.find('div.gallery-thumbnails li.current div').html()
		);

		var imageAlreadyExists = false;
		$galleryInterface.find('div.gallery-image img')
			.each(
				function(index)
				{
					var $this = $(this);
					if ($this.attr('src').indexOf(parameter.caller.attr('href')) != -1)
					{
						imageAlreadyExists = true;
						$this.show();
					}
				}
			);

		if (!imageAlreadyExists)
		{
			$galleryInterface.find('div.gallery-image').append('<img alt="src" src="" />');
			var imageSource = $galleryInterface
				.find('div.gallery-thumbnails li.current a')
				.attr('href');
			var image = new Image();
			image.onload = function()
			{
				image.onload = function() {};
				var $image = $galleryInterface.find('div.gallery-image img:last');
				$image.attr('src', imageSource);
				$galleryInterface.find('div.gallery-image img').show();
				parameter = jQuery.extend(
					parameter,
					{
						width: 728,
						height: 518
					}
				);
	
				notify(event, parameter);
			}
			image.src = imageSource;
		}
		else
		{
			parameter = jQuery.extend(
					parameter,
					{
						width: 728,
						height: 518
					}
				);
			notify(event, parameter);
		}
	},

	//
	//
	//
	getCachedInterface: function($caller)
	{
		var $thumbnails = $caller.parents('ul');
		var identifier = $caller.parents('div.gallery').attr('id');
		if (FatboxGallery.cache[identifier] == undefined)
		{
			$('body').append(
				'<div class="gallery gallery-hidden" id="' +identifier+ '-gallery">' +
					'<h2 class="gallery-title"></h2>' +
					'<div class="gallery-navigation">' +
						'<div class="gallery-thumbnails">' +
							'<ul>' +
								'<li class="gallery-clear-left"></li>' +
							'</ul>' +
						'</div>' +
						'<div class="gallery-pages">' +
							'<ul>' +
							'</ul>' +
						'</div>' +
					'</div>' +
					'<div class="gallery-image">' +
						'<a class="gallery-previous" href=""></a>' +
						'<a class="gallery-next" href=""></a>' +
					'</div>' +
					'<div class="gallery-imagetext"></div>' +
					'<div class="gallery-clear-both"></div>' +
				'</div>'
			);
			
			var $gallery = $('#' +identifier+ '-gallery').hide();
			$gallery.find('h2').html(
				$caller.parents('div.photogallery').find('h2').html()
			);

			$gallery.find('div.gallery-thumbnails ul').html($thumbnails.html());
			var $items = $gallery.find('div.gallery-thumbnails li');
			
			$items.removeClass('current').removeClass('sweep');

			if ($items.length > 10)
			{
				var $pages = $gallery.find('div.gallery-pages ul'); 
				for (var i=0 ; i<Math.ceil($items.length / 10) ; i++)
				{
					var page = i * 10 + 1;
					$pages.append(
						'<li' +(i==0 ? ' class="current"' : '')+ '> ' +
							'<a href="?' +page+ '">' +(i+1)+ '</a> ' +
						'</li>'
					);
				}
			}

			$gallery.gallery();
			FatboxGallery.cache[identifier] = $gallery;
		}
		return FatboxGallery.cache[identifier];
	},

	//
	//
	//
	fadeIn: function(parameter, event, notify)
	{
		$('#fatbox-content div.gallery').fadeIn(
			500,
			function()
			{
				notify(event, parameter);
			}
		);
	},

	//
	//
	//
	moveInterface: function(parameter, event, notify)
	{
		var $gallery = $('#fatbox-content div.gallery');
		$gallery.hide();
		$gallery.find('div.gallery-image img').hide();
		$('body').append($gallery);
		notify(event, parameter);
	},

	//
	//
	//
	doNothing: function(mediaType, $caller, callback, parameter)
	{
		callback(parameter);
	}
};
