/*
 * jQueryCarouselGallery - Gallery-Plugin
 *   (http://joernroeder.de/jquery/carouselgallery/)
 *
 * Created for klassegoetz.de
 * --------------------------
 *
 * Copyright (c) 2010 Jörn Röder <kontakt@joernroeder.de>
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 * 
 * $Version: 19/03/2010 +r5
 */
 
 
jQuery.fn.carouselGallery = function() {
	this.each(function(){
	
	//	Variables
		var $gallerySlider = jQuery(this);
		var containerHtml = '<div class="imgContainer"><div class="title">Test Titel</div></div><div class="imgTxt"><h2></h2><div class="content"><p></p></div></div><div class="loader"></div>';
		
		var imgsPerPanel = $gallerySlider.find('.panel:first .galleryThumb').length;
		var panels = $gallerySlider.find('.panel').length;
		
		$gallerySlider.parent('.coda-slider-wrapper').prepend(jQuery('<div class="coda-largeContainer">' + containerHtml + '</div>').hide());
		
		var $largeContainer = $gallerySlider.siblings('.coda-largeContainer');
		$largeContainer
			.data( 'minHeight', $gallerySlider.height() )
			.css({
				'min-height'	: $gallerySlider.height()
			});
			
	// Title Hover
		jQuery('div.galleryThumb', $gallerySlider).hover(
			 function()
			 {
				jQuery(this).find('span.title').stop(true, true).fadeIn('normal');
			 }
			,function()
			 {
				jQuery(this).find('span.title').stop(true, true).fadeOut('fast');
			}
		)
	// Open Large Version	
		.click(function()
		{	
			var img = new Image();
			var link = this;
				
		// Loader + Title
			if( $largeContainer.is(':visible') )
			{
				$largeContainer.children('.loader').fadeIn(300);
			}
			else
			{
				jQuery(this).children('.loader').fadeIn(300);
				jQuery(this).find('span.title').stop(true, true).fadeOut('fast');
			}
			
		//	Image
			jQuery(img).load(function ()
			{
				showLarge( this, jQuery('.galleryThumb', $gallerySlider).index(link) );

			}).error(function () {
			            // notify the user that the image could not be loaded
			}).attr('src', jQuery(this).find('a.thumb')[0].href);
	
			return false;
		}).find('img').attr('title', '');
		
		
		/*
		 * Show large Image
		 */
		function showLarge(img, index)
		{				
			if( $largeContainer.is(':visible') )
			{
				$largeContainer.removeAttr('rel').children('div.imgContainer')
					.css({
						'min-height'	: $largeContainer.data('minHeight')
					})
					.children('img')
						.css({
							 'position'	: 'absolute'
						});
				
				$largeContainer.find('img')
						.fadeOut('fast',function()
						{
							jQuery(this).remove();
						});
				$largeContainer.children('.loader').fadeOut(200);
				jQuery(img)
					.css({
						'vilibillity'	: 'hidden'
					})
					.appendTo( $largeContainer.attr('rel', index).children('div.imgContainer') );
				jQuery(img).css('margin-left', (jQuery(img).width() / 2) * (-1) );
				
				setTxt(index);
				setTxtPos();				
				resizeGallerySlider();

				jQuery(img).hide().fadeIn('normal');
			}
			else
			{
				if( !$gallerySlider.data('oHeight') )
					$gallerySlider.data('oHeight', $gallerySlider.height());

				$largeContainer.attr('rel', index).children('div.imgContainer')
					.css({
						'min-height' : $largeContainer.data('minHeight')
					})
					.append(img);
			}
			
		//	Show
			$gallerySlider.siblings('.coda-nav-left, .coda-nav-right').children().fadeIn('normal');	
			
			if( !$largeContainer.is(':visible') )
			{
				$largeContainer.fadeIn('normal', function()
				{
					onLargeShow(img, index);
				});
				$largeContainer.find('div.imgContainer img').css({
					'margin-left'	: ($largeContainer.find('div.imgContainer img').width() / 2) * (-1) 
				});
				setTxt(index);
				setTxtPos();

			}
			else
			{
				onLargeShow(img, index);
			}
			resizeGallerySlider();
		}
		
		function setTxt( index )
		{
			var $imgTxt = $largeContainer.find('.imgTxt');
			var $ue = $imgTxt.find('h2');
			var $singleTitle = $largeContainer.find('.imgContainer .title');
			var $txt = $imgTxt.find('p');
			
			var desc = jQuery('.galleryThumb', $gallerySlider).eq(index).find('.desc').text();
			var title = jQuery('.galleryThumb', $gallerySlider).eq(index).find('.title').text();
			
			if( desc )
			{
				$imgTxt.hide().removeClass('empty');
				
				$ue.text( title );
				$txt.text( desc );
				$singleTitle.text('').hide();
			}
			else
			{
				$imgTxt.addClass('empty').hide();

				$ue.text('');
				$singleTitle.text( title ).hide();
				$txt.text('');
			}
			
			Cufon.refresh();
			
			$largeContainer.find('.imgContainer img, .imgContainer .title')
				.bind('mouseenter', function()
				{
					if( !$imgTxt.hasClass('empty') )
						$imgTxt.stop(true, true).fadeIn('fast');
					else
						$singleTitle.stop(true, true).fadeIn('normal');	
				})
				.bind('mouseout',function()
				{
					$imgTxt.stop(true, true).fadeOut('fast');
					$singleTitle.stop(true, true).fadeOut('normal');
				});
			
		}
		
		function setTxtPos()
		{
			var $img = $largeContainer.find('div.imgContainer img:last');
			var $imgTxt = $largeContainer.find('.imgTxt');
			var $singleTitle = $largeContainer.find('.imgContainer .title');
			
			var offset = 10;
			var maxWidth = 940;
			var imgWidth = $img.position().left + ( $img.width() / 2 );
			
			$imgTxt.css({
				 'left'			: parseInt(imgWidth + offset)
				,'max-width'	: maxWidth - parseInt(imgWidth + offset) - ($imgTxt.innerWidth() - $imgTxt.width())
				,'min-height'	: $img.height()
			});
			
			$singleTitle.css('margin-left', ($img.width() / 2) * (-1) + 10 );
		}
		
		function onLargeShow(img, index)
		{
		//	Hide thumb-Loader
			jQuery('.galleryThumb', $gallerySlider).eq(index).children('.loader').fadeOut(300);

		// slide to image-Panel
			if( panels > 1 && index % imgsPerPanel == 0 )
			{
// TO-DO Slide Panel				
			}

		// Hide
			$largeContainer.children('.imgContainer').click(function(){
				$largeContainer.fadeOut('fast', function(){
					jQuery(this).html(containerHtml).hide();
				});
					
				if( $gallerySlider.hasClass('noArrows') )
				{
					$gallerySlider.siblings('.coda-nav-left, .coda-nav-right').children().fadeOut('fast');
				}
					
			//	Slider Height-Change
				if( $gallerySlider.data('oHeight') )
				{
					$gallerySlider.animate({
						'height' : $gallerySlider.data('oHeight')
					},'normal').removeData('oHeight');
				}
			});		
		}

		
		function setLargeHeight()
		{
			var $img = $largeContainer.find('img:last');
			var largeHeight = $img.height();
			
			if( largeHeight < $gallerySlider.height() )
				largeHeight = $gallerySlider.height();

			$largeContainer.children('div.imgContainer').height( largeHeight );
			$img.css('position', 'absolute');
		}
		
		function resizeGallerySlider()
		{
			$gallerySlider.animate({
				'height' : $largeContainer.children('div.imgContainer').outerHeight(true)
			},'fast');
		}

	});
	return false;
}