/**
 * jquery lightbox plugin
 * (c) 2008 Timo Besenreuther, EZdesign.de
 */

(function($) {
	
	$(document).ready(function() {
		$('a.link_lightbox, a.link_lightbox_hidden').debeosLightBox();
	});
	
	jQuery.fn.debeosLightBox = function(settings) {
		
		settings = jQuery.extend({
			loading: 'images/lightbox-ico-loading.gif',
			images: [],
			currImage: false,
			controlsHeight: 16,
			minTotalHeight: 546,
			flashWidth: 798,
			flashHeight: 599,
			flvWidth: 560,
			flvHeight: 410
		}, settings);
		
		matchedLinks = this;
		
		$(this).each(function() {
			settings.images.push($(this).attr('href'));
		});
		
		
		/**
		 * click event on links
		 */
		
		$(matchedLinks).click(function() {
			image = $(this).attr('href');
			_openLightbox(function() {
				// find out current index
				settings.currImage = settings.images.indexOf(image);
				_displayCurrentImage();
			});
			return false;
		});
		
		
		/**
		 * open lightbox
		 */
		
		function _openLightbox(callback) {
			// initialize
			if ($('#debeos_lightbox').length == 0) {
				$('#container').prepend('<div id="debeos_lightbox_controls"><div id="lightbox_status"></div><a id="debeos_lightbox_prev" href="javascript://">&laquo;</a><a id="debeos_lightbox_next" href="javascript://">&raquo;</a><a id="debeos_lightbox_close" href="javascript://"></a></div><div id="debeos_lightbox"><div id="debeos_lightbox_image"></div></div>');
				if (settings.images.length == 1) {
					$('#debeos_lightbox_prev').hide();
					$('#debeos_lightbox_next').hide();
				}
				$('#debeos_lightbox_close').click(function() {
					_closeLightbox();
				});
				$('#debeos_lightbox_next').click(function() {
					this.blur();
					if (settings.currImage < (settings.images.length-1)) {
						settings.currImage++;
					} else {
						settings.currImage = 0;
					}
					_displayCurrentImage();
				});
				$('#debeos_lightbox_prev').click(function() {
					this.blur();
					if (settings.currImage > 0) {
						settings.currImage--;
					} else {
						settings.currImage = settings.images.length - 1;
					}
					_displayCurrentImage();
				});
			}
			// show
			$('#debeos_lightbox_controls').hide();
			$('#debeos_lightbox_image').html('');
			$('#debeos_lightbox').css({marginTop: '85px', height: '426px'}).fadeIn('fast', function() {
				$(this).animate({
					marginTop: 0,
					height: $('#container').height()
				}, 'fast', function() {
					$('#debeos_lightbox_controls').fadeIn('fast');
					$('#debeos_lightbox_image').html('<div id="debeos_lightbox_loading">Es wird geladen...</div>');
					callback();
				});
			});
		}
		
		
		/**
		 * close lightbox
		 */
		
		function _closeLightbox() {
			$('#debeos_lightbox_controls').hide();
			$('#debeos_lightbox').fadeOut('fast', function() { $('#debeos_lightbox_image').html(''); });
		}
		
		
		/**
		 * display current image
		 */
		
		function _displayCurrentImage() {
			// hide old img & show loading text
			$('#debeos_lightbox_image').html('<div id="debeos_lightbox_loading">Es wird geladen...</div>');
			
			var fileType = settings.images[settings.currImage].substr(settings.images[settings.currImage].length-3, 3);
			if (fileType != 'swf' && fileType != 'flv') {
				// insert image when loaded
				var img = new Image();
				var show = function() {
					var img = this;
					var showImage = function() {
						// show image
						$('#debeos_lightbox_image').html('<img id="debeos_lightbox_imagetag" src="'+img.src+'" style="display:none;width:'+img.width+'px;height:'+img.height+'px" />');
						$('#debeos_lightbox_imagetag').fadeIn('normal');
						_showStatus();
					};
					_resizeContainer(img.height, showImage);
					_preload();
				}
				img.onload = show;
				img.src = settings.images[settings.currImage];
			} else if (fileType == 'swf' || fileType == 'flv') {
				if (fileType == 'swf') {
					// insert flash
					var swf = new SWFObject(settings.images[settings.currImage], 'animation', settings.flashWidth, settings.flashHeight, 6, '#292929');
					var divId = 'debeos_lightbox_flash';
				} else {
					// insert flash video
					var swf = new SWFObject('includes/videoplayer.swf', 'flashvideo', settings.flvWidth, settings.flvHeight, '6');
					swf.addVariable('file', settings.images[settings.currImage]);
					var divId = 'debeos_lightbox_flv';
				}
				swf.addParam('quality', 'high');
				swf.addParam('wmode', 'transparent');
				swf.addParam('play', 'true');
				swf.addParam('loop', 'false');
				var showFlash = function() {
					$('#debeos_lightbox_image').html('<div id="'+divId+'"></div>');
					swf.write(divId);
					_showStatus();
					_preload();
				};
				_resizeContainer(fileType == 'swf' ? settings.flashHeight : settings.flvHeight, showFlash);
			}
		}
		
		
		/**
		 * preload, show / hide controls
		 */
		
		function _preload() {
			if (settings.images.length > 1 && settings.currImage < (settings.images.length-1)) {
				// preload next, if img
				if (settings.images[settings.currImage+1].substr(-3) != 'swf' && settings.images[settings.currImage+1].substr(-3) != 'flv') {
					var preloadNext = new Image();
					preloadNext.src = settings.images[settings.currImage+1];
				}
				$('#debeos_lightbox_next:hidden').show();
			}
			if (settings.currImage > 0) {
				// preload prev, if img
				if (settings.images[settings.currImage-1].substr(-3) != 'swf' && settings.images[settings.currImage-1].substr(-3) != 'flv') {
					var preloadNext = new Image();
					preloadNext.src = settings.images[settings.currImage-1];
				}
				$('#debeos_lightbox_prev:hidden').show();
			}
		}
		
		
		/**
		 * resize container
		 */
		
		function _resizeContainer(imgHeight, callback) {
			if (imgHeight > (settings.minTotalHeight - settings.controlsHeight)) {
				$('#debeos_lightbox').animate({
					height: imgHeight + settings.controlsHeight
				}, 'fast', callback);
			} else if ($('#debeos_lightbox').height() > settings.minTotalHeight) {
				$('#debeos_lightbox').animate({
					height: settings.minTotalHeight + 'px'
				}, 'fast', callback);
			} else {
				callback();
			}
		}
		
		
		/**
		 * show status
		 */
		
		function _showStatus() {
			$('#lightbox_status').html((settings.currImage+1)+' von '+settings.images.length);
		}
		
		return $(this);
	};

})(jQuery);

jQuery.noConflict();


/**
 * find value in array
 * @param	mixed		search string
 * @return	mixed		index or false
 */

Array.prototype.indexOf = function(searchStr) {
	for (i = 0; i < this.length; i++) {
		if (this[i] === searchStr) {
			return i;
		}
	}
	return false;
}
