(function($) {
	$.fn.iBox = function(settings) {
		settings = jQuery.extend({
			// Overlay config
			layoutOverlay:	{
				bgColor:	'#fff',
				bgOpacity:	0.8
			},
			// Loading config
			imageLoading:	{
				src:	'/html/default/images/lib/jquery/jquery.ibox.loading.gif',
				alt:	'Loading',
				width:	208,
				height:	13
			},
			// Caption config
			Caption:		{
				txtClose:	'close'
			},
			// Private variables
			_image_array:		[],
			_image_active:		0,
			_html_overflow:		$('html').css('overflow')
		}, settings);
		
		var jQueryMatchedObj = this;

		var objImagePreloader = new Image();
		objImagePreloader.onload = function(){};
		objImagePreloader.src = settings.imageLoading.src;
		
		function _initialize() {
			_start(this, jQueryMatchedObj);
			return false;
		};
		function _start(objClicked,jQueryMatchedObj) {
			_set_interface();
			settings._image_array.length = 0;
			settings._image_active = 0;
			for ( var i = 0; i < jQueryMatchedObj.length; i++ ) {
				settings._image_array.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title')));
			}
			while ( settings._image_array[settings._image_active][0] != objClicked.getAttribute('href') ) {
				settings._image_active++;
			}
			_set_image();
		};
		function _finish() {
			$('#jquery-ibox-loading').remove();
			$('#jquery-ibox-container').remove();
			$('#jquery-ibox-overlay').remove();
			$('html').css('overflow', settings._html_overflow);
			$('embed, object, select').css({'visibility': 'visible'});
		};
		function _set_interface() {
			$('body','html').css({height: '100%', width: '100%'});
			$('html').css('overflow','hidden');
			$('embed, object, select').css({'visibility': 'hidden'});
			$('body').append(
				 '<div id="jquery-ibox-overlay"></div>'
				+'<div id="jquery-ibox-loading">'
				+	'<img src="' + settings.imageLoading.src + '" width="' + settings.imageLoading.width + '" height="' + settings.imageLoading.height + '" alt="' + settings.imageLoading.alt + '" />'
				+'</div>'
				+'<div id="jquery-ibox-container">'
				+	'<div id="jquery-ibox-image-box"></div>'
				+'</div>'
			);
			$('#jquery-ibox-overlay').css({
				opacity:			settings.layoutOverlay.bgOpacity,
				backgroundColor:	settings.layoutOverlay.bgColor,
				top:				$('html')[0].scrollTop
			}).show();
			$('#jquery-ibox-overlay,#jquery-ibox-container,#jquery-ibox-image-box').click(function() {
				_finish();									
			});
		};
		function _set_image() {
			$('#jquery-ibox-loading').show();
			$('#jquery-ibox-container').hide();
			var objImagePreloader = new Image();
			objImagePreloader.onload = function() {
				$('#jquery-ibox-loading').hide();
				$('#jquery-ibox-image-box').css({
					width:	objImagePreloader.width + 30
				});
				$('#jquery-ibox-image-box').append(
					'<img src="' + settings._image_array[settings._image_active][0] + '" width="' + objImagePreloader.width + '" height="' + objImagePreloader.height + '" alt="' + settings._image_array[settings._image_active][1] + '" />'
				);
				_set_caption();
				$('#jquery-ibox-container').show();
				objImagePreloader.onload = function(){};
			}
			objImagePreloader.src = settings._image_array[settings._image_active][0];
		};
		function _set_caption() {
			$('#jquery-ibox-image-box').append(
				'<div id="jquery-ibox-image-caption"><a href="#" title="' + settings.Caption.txtClose + '">' + settings.Caption.txtClose + '</a><span>' + settings._image_array[settings._image_active][1] + '</span></div>'
			);
		};
		return this.unbind('click').click(_initialize);
	};
})(jQuery);