(function($) {

	$.fn.kbox = function($$options) {

		var $settings = $.extend({}, $.fn.kbox.defaults, $$options);

		function kbox_center(topPosition) {

			var contentWidth = $kbox_container.contents().find('body').outerWidth();
			var contentHeight = $kbox_container.contents().find('body').height();				
			var topOffset = ($(window).height() - contentHeight) / 2 - $(document).scrollTop();		

			if (contentHeight < $(window).height() ) {			
				if (typeof document.body.style.maxHeight == 'undefined') { // IE6
					$('#kbox_wrapper').css('position','absolute')									
				}				
				else {
					$('#kbox_wrapper').css('position','fixed')													
					topOffset = 0
				}
			}
			else {
				$('#kbox_wrapper').css('position','absolute')									
			}

			$('#kbox_wrapper').css({
				top: topPosition,
				left: '50%',				
				marginLeft: - ( contentWidth / 2 ),
				marginTop: - ( contentHeight / 2 + topOffset )				
			});			
			
		}

		function kbox_close() {
		
			$('#kbox_overlay').remove();
			$('#kbox_wrapper').remove();		
			
		}

		function kbox_show(iframeWidth, topPosition) {

			$('body').append('<div id="kbox_overlay">');
			$('#kbox_overlay').height($(document).height());			
			$('body').append('<div id="kbox_wrapper"><iframe id="kbox_container" frameborder="0" border="0" cellspacing="0" allowtransparency="true"></iframe></div>');
			$kbox_container = $('#kbox_container')
			$kbox_container.css('opacity','0')
			$kbox_container.css('width',iframeWidth)
			$('#kbox_wrapper').append('<div id="kbox_loader"></div>')

			$('#kbox_overlay').bind('click',function(){
				kbox_close();
				return false;									
			});		
				
			$(window).resize(function() {				
				kbox_center(topPosition);
			});							

			$kbox_container.load(function(){
	
				$kbox_container.contents().find('#kbox_close').bind('click',function(){
					kbox_close();
					return false;									
				});		

				$(document).keydown(function(event) {				
					// esc key closes
					if (event.which == 27) {
						kbox_close();					
					}
				});				
				
				var contentWidth = $kbox_container.contents().find('body').outerWidth();
				var contentHeight = $kbox_container.contents().find('body').height();				
				var topOffset = ($(window).height() - contentHeight) / 2 - $(document).scrollTop();		

				if (contentHeight < $(window).height() ) {			
					if (typeof document.body.style.maxHeight == 'undefined') { // IE6
						$('#kbox_wrapper').css('position','absolute')									
					}				
					else {
						$('#kbox_wrapper').css('position','fixed')													
						topOffset = 0
					}
				}
				else {
					$('#kbox_wrapper').css('position','absolute')									
				}
				
				$kbox_container.height(contentHeight);				
				$('#kbox_wrapper').animate({
					width: iframeWidth,
					height: contentHeight,
					left: '50%',
					top: topPosition,					
					marginLeft: - (contentWidth / 2 ),
					marginTop: - (contentHeight / 2 + topOffset)	
				}, 300, 'linear',function(){
					$("#kbox_container").stop().animate({'opacity': '1.0'}, 200, 'linear', function(){
						$('#kbox_loader').remove();
					});			
					if ($('#kbox_overlay').is(':hidden')) {
						kbox_close();
					}				
				});			
				
			});							

		}

		return this.each(function() {

			var options = $.meta ? $.extend({}, $settings, $this.data()) : $settings;
			var iframeSrc = options.href				
			var iframeWidth = options.width ? options.width : '980';
			var topPosition = options.topPosition;			

			if (iframeSrc == '') {
			
				$(this).bind('click',function(){

					kbox_show(iframeWidth, topPosition)

					iframeSrc = $(this).attr('rel');				
					$("#kbox_overlay").css('display','block');
					$("#kbox_overlay").stop().animate({'opacity': '0.5'}, 200, 'linear');					
					
					$kbox_container.attr('src', iframeSrc);
					return false;											

				});
			
			}			
			else {
			
				kbox_show(iframeWidth, topPosition)
				$("#kbox_overlay").css('display','block');
				$("#kbox_overlay").stop().animate({'opacity': '0.5'}, 200, 'linear');			
				$kbox_container.attr('src', iframeSrc);				
				return false;										
				
			}
			
		});
		
	};

	$.fn.kbox.defaults = {
		href: '',
		width: '',
		topPosition: '50%'
	};

})(jQuery);	
