// v 0.1
(function($) {
	var opts = {};
	
	$.fn.popup = function(settings) {
		opts.settings = $.extend({}, $.fn.popup.defaults, settings);

		return this.each(function() {
			var $this = $(this);

			$this.unbind('click').click(function() {
				$.fn.popup.start(this); return false;
			});
		});
	};
	
	$.fn.popup.start = function(elm) {
		$('body').append('<div id="popup-wrapper"><div id="popup-overlay"></div><div id="popup-container"><div id="popup-content"></div><div id="popup-header"></div><div id="popup-footer"></div><div id="popup-loader"></div></div></div>');							
		$("#popup-wrapper").css({ 'width' : $(document).width(), 'height' : $(document).height() });
		$("#popup-overlay").css({ 'width' : $(document).width(), 'height' : $(document).height() });
		$("#popup-overlay").click(function() { $.fn.popup.close(opts.settings.fadeOut); } );
		
		if (opts.settings.closeButton && (opts.settings.closeButton == true)) {
			$('#popup-container').append('<div id="popup-close"></div>');
			$("#popup-close").click(function() { $.fn.popup.close(opts.settings.fadeOut); } );
		}
		
		//$(elm).css('display', 'block');
		//$(elm).wrap('<div id="popup-elm"></div>');
		//var elmHeight = $(elm).height();
		//$('#popup-elm').replaceWith(elm);
		//$(elm).css('display', '');
		$('#popup-content').css({ 'width' : opts.settings.width+'px', 'height' : opts.settings.height+'px' });
		$('#popup-loader').css({ 'margin-top' : opts.settings.height/2 + 'px' }).show();
		$('#popup-footer').show();
		$('#popup-header').hide();
		
		var elmHeight = $(elm).is(":has(img)") ? $(elm).find("img").height() : $(elm).height();
		var fromTop = 1;
		var position = $(elm).is(":has(img)") ? $(elm).find("img").offset() : $(elm).offset();
		var scroll = $.fn.popup.getPageScroll();
		var top = position.top-$('#popup-container').height();
		var left = ((position.left+($(elm).width()/2))-(opts.settings.width/2));
		
		if ((scroll[1] > (position.top-$('#popup-container').height())) && ((scroll[1]+$(window).height()) >= (position.top+elmHeight+$('#popup-container').height()))) { 
			$('#popup-footer').hide();
			$('#popup-header').show();
			$('#popup-header').css( { 'position' : 'relative' , 'top' : (-1*$('#popup-container').height()) + 'px' } );
			top = (position.top+elmHeight+parseInt($('#popup-header').css('height')));
			fromTop = -1;
		}
		
		if ((position.left+($(elm).width()/2)+(opts.settings.width/2)) > (scroll[0]+$(window).width())) {
			left = left - (10 + (position.left+($(elm).width()/2)+(opts.settings.width/2)) - (scroll[0]+$(window).width()));
			$('#popup-footer, #popup-header').css('backgroundPosition', (position.left-left)+($(elm).width()/2));
		} else if ((position.left-(opts.settings.width/2)) < scroll[0]) {
			left = scroll[0] + 10;
			$('#popup-footer, #popup-header').css('backgroundPosition', position.left-left-($(elm).width()/2));
		}
		
		$('#popup-container').css({ 'top' : top-(fromTop*opts.settings.slideDistance)+'px', 'left' : left+'px', 'opacity' : 0, 'display' : 'block' });
		$('#popup-container').animate({ 'top' : top , 'opacity' : 1 }, opts.settings.fadeIn);
		
		if (opts.settings.iframe && (opts.settings.iframe == false)) {
			$('#popup-content').css({ 'overflow' : 'auto' }).load($(elm).attr('href'), {}, $.fn.popup.hideLoader);
		} else {
			$('#popup-content').css({ 'overflow' : 'hide' }).html('<iframe src="' + $(elm).attr('href') + '" frameborder="0" hspace="0" onload="$.fn.popup.hideLoader();"></iframe>');
		}
	}
	
	$.fn.popup.close = function(fadeOut) {
		$('#popup-wrapper').fadeOut(fadeOut, function() { 
			$(this).remove(); 
		});
	}
	
	$.fn.popup.getPageScroll = function() {
		var xScroll, yScroll;

		if (self.pageYOffset) {
			yScroll = self.pageYOffset;
			xScroll = self.pageXOffset;
		} else if (document.documentElement && document.documentElement.scrollTop) {
			yScroll = document.documentElement.scrollTop;
			xScroll = document.documentElement.scrollLeft;
		} else if (document.body) {
			yScroll = document.body.scrollTop;
			xScroll = document.body.scrollLeft;	
		}

		return [xScroll, yScroll]; 
	}
	
	$.fn.popup.hideLoader = function() {
		$('#popup-loader').hide();
	}
	
	$.fn.popup.defaults = {
		fadeIn		:	'fast',
		fadeOut		: 	'fast',
		slideDistance : 	40,
		width		:	450,
		height		: 	350,
		iframe 		: 	true,
		closeButton : 	false
	};
	
})(jQuery);

